+ return AVERROR_INVALIDDATA;
+ }
+
+ if (first_fragment && last_fragment) {
+ av_log(ctx, AV_LOG_ERROR, "Illegal combination of S and E bit in RTP/HEVC packet\n");
+ return AVERROR_INVALIDDATA;
+ }
+
+ new_nal_header[0] = (rtp_pl[0] & 0x81) | (fu_type << 1);
+ new_nal_header[1] = rtp_pl[1];
+
+ /* start fragment vs. subsequent fragments */
+ if (first_fragment) {
+ /* create A/V packet which is big enough */
+ if ((res = av_new_packet(pkt, sizeof(start_sequence) + sizeof(new_nal_header) + len)) < 0)
+ return res;
+ /* A/V packet: copy start sequence */
+ memcpy(pkt->data, start_sequence, sizeof(start_sequence));
+ /* A/V packet: copy new NAL header */
+ memcpy(pkt->data + sizeof(start_sequence), new_nal_header, sizeof(new_nal_header));
+ /* A/V packet: copy NAL unit data */
+ memcpy(pkt->data + sizeof(start_sequence) + sizeof(new_nal_header), buf, len);
+ } else {
+ /* create A/V packet */
+ if ((res = av_new_packet(pkt, len)) < 0)
+ return res;
+ /* A/V packet: copy NAL unit data */
+ memcpy(pkt->data, buf, len);