From: Edward Hervey Date: Wed, 29 Jun 2016 16:36:56 +0000 (+0200) Subject: h264parse: Drop filler data X-Git-Tag: 1.10.4~530 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c19d1b46c36ee0e8f8cfcb03b026e8997d70c1c4;p=platform%2Fupstream%2Fgst-plugins-bad.git h264parse: Drop filler data When skipping data, check if they are filler bytes. If so, drop the data instead of skipping. We don't want to output filler bytes, but they shouldn't cause a discontinuity. https://bugzilla.gnome.org/show_bug.cgi?id=768125 --- diff --git a/gst/videoparsers/gsth264parse.c b/gst/videoparsers/gsth264parse.c index c7098d0..e09fd99 100644 --- a/gst/videoparsers/gsth264parse.c +++ b/gst/videoparsers/gsth264parse.c @@ -1053,6 +1053,7 @@ gst_h264_parse_handle_frame (GstBaseParse * parse, GstH264NalUnit nalu; GstH264ParserResult pres; gint framesize; + GstFlowReturn ret; if (G_UNLIKELY (GST_BUFFER_FLAG_IS_SET (frame->buffer, GST_BUFFER_FLAG_DISCONT))) { @@ -1105,6 +1106,22 @@ gst_h264_parse_handle_frame (GstBaseParse * parse, switch (pres) { case GST_H264_PARSER_OK: if (nalu.sc_offset > 0) { + int i; + gboolean is_filler_data = TRUE; + /* Handle filler data */ + for (i = 0; i < nalu.sc_offset; i++) { + if (data[i] != 0x00) { + is_filler_data = FALSE; + break; + } + } + if (is_filler_data) { + GST_DEBUG_OBJECT (parse, "Dropping filler data %d", nalu.sc_offset); + frame->flags |= GST_BASE_PARSE_FRAME_FLAG_DROP; + gst_buffer_unmap (buffer, &map); + ret = gst_base_parse_finish_frame (parse, frame, nalu.sc_offset); + goto drop; + } *skipsize = nalu.sc_offset; goto skip; } @@ -1240,6 +1257,10 @@ out: gst_buffer_unmap (buffer, &map); return GST_FLOW_OK; +drop: + GST_DEBUG_OBJECT (h264parse, "Dropped data"); + return ret; + skip: GST_DEBUG_OBJECT (h264parse, "skipping %d", *skipsize); /* If we are collecting access units, we need to preserve the initial