h264parse: Fix splitting of multiple NALU per buffer
authorSebastian Dröge <sebastian@centricular.com>
Thu, 28 Nov 2013 14:10:16 +0000 (15:10 +0100)
committerSebastian Dröge <sebastian@centricular.com>
Thu, 28 Nov 2013 14:10:16 +0000 (15:10 +0100)
Conversion to byte-stream/nal crashes without that because the
baseparse frame of all NALUs is finished for the first NALU, then
used again for parsing the second NALU. Just that now the buffer
of the frame is already gone. Instead we create temporary frames
for every NALU.

gst/videoparsers/gsth264parse.c

index 6122484..8eb301b 100644 (file)
@@ -714,12 +714,21 @@ gst_h264_parse_handle_frame_packetized (GstBaseParse * parse,
 
     /* dispatch per NALU if needed */
     if (h264parse->split_packetized) {
+      GstBaseParseFrame tmp_frame;
+
+      gst_base_parse_frame_init (&tmp_frame);
+      tmp_frame.flags |= frame->flags;
+      tmp_frame.offset = frame->offset;
+      tmp_frame.overhead = frame->overhead;
+      tmp_frame.buffer = gst_buffer_copy_region (buffer, GST_BUFFER_COPY_ALL,
+          nalu.offset, nalu.size);
+
       /* note we don't need to come up with a sub-buffer, since
        * subsequent code only considers input buffer's metadata.
        * Real data is either taken from input by baseclass or
        * a replacement output buffer is provided anyway. */
-      gst_h264_parse_parse_frame (parse, frame);
-      ret = gst_base_parse_finish_frame (parse, frame, nl + nalu.size);
+      gst_h264_parse_parse_frame (parse, &tmp_frame);
+      ret = gst_base_parse_finish_frame (parse, &tmp_frame, nl + nalu.size);
       left -= nl + nalu.size;
     }