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:27:36 +0000 (15:27 +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 9e1d3c9eef3954587ec79993c20e33c76dd5da6e..4e1b618815e39272466a67c9edc736679e042369 100644 (file)
@@ -715,12 +715,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;
     }