From: Nicolas Dufresne Date: Wed, 3 Oct 2018 20:35:39 +0000 (-0400) Subject: h265parse: Propagate MARKER flag X-Git-Tag: 1.19.3~507^2~2038 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ceb68c4cf83a8b9c2136941be9fc69c6af18f793;p=platform%2Fupstream%2Fgstreamer.git h265parse: Propagate MARKER flag --- diff --git a/gst/videoparsers/gsth265parse.c b/gst/videoparsers/gsth265parse.c index c7989ce..0aa3663 100644 --- a/gst/videoparsers/gsth265parse.c +++ b/gst/videoparsers/gsth265parse.c @@ -260,6 +260,7 @@ gst_h265_parse_reset (GstH265Parse * h265parse) h265parse->discont = FALSE; h265parse->discard_bidirectional = FALSE; + h265parse->marker = FALSE; gst_h265_parse_reset_stream_info (h265parse); } @@ -1071,6 +1072,12 @@ gst_h265_parse_handle_frame_packetized (GstBaseParse * parse, tmp_frame.buffer = gst_buffer_copy_region (buffer, GST_BUFFER_COPY_ALL, nalu.offset, nalu.size); + /* Set marker on last packet */ + if (nl + nalu.size == left) { + if (GST_BUFFER_FLAG_IS_SET (frame->buffer, GST_BUFFER_FLAG_MARKER)) + h265parse->marker = TRUE; + } + /* 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 @@ -1087,6 +1094,7 @@ gst_h265_parse_handle_frame_packetized (GstBaseParse * parse, gst_buffer_unmap (buffer, &map); if (!h265parse->split_packetized) { + h265parse->marker = TRUE; gst_h265_parse_parse_frame (parse, frame); ret = gst_base_parse_finish_frame (parse, frame, map.size); } else { @@ -1287,6 +1295,7 @@ gst_h265_parse_handle_frame (GstBaseParse * parse, if (current_off > 0) { nalu.size = 0; nalu.offset = nalu.sc_offset; + h265parse->marker = TRUE; break; } } @@ -1303,6 +1312,7 @@ gst_h265_parse_handle_frame (GstBaseParse * parse, /* If there is a marker flag, or input is AU, we know this is complete */ if (GST_BUFFER_FLAG_IS_SET (frame->buffer, GST_BUFFER_FLAG_MARKER) || h265parse->in_align == GST_H265_PARSE_ALIGN_AU) { + h265parse->marker = TRUE; break; } @@ -2332,6 +2342,13 @@ gst_h265_parse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame) h265parse->discont = FALSE; } + if (h265parse->marker) { + GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_MARKER); + h265parse->marker = FALSE; + } else { + GST_BUFFER_FLAG_UNSET (buffer, GST_BUFFER_FLAG_MARKER); + } + /* replace with transformed HEVC output if applicable */ av = gst_adapter_available (h265parse->frame_out); if (av) { diff --git a/gst/videoparsers/gsth265parse.h b/gst/videoparsers/gsth265parse.h index 940fe6d..d3f588c 100644 --- a/gst/videoparsers/gsth265parse.h +++ b/gst/videoparsers/gsth265parse.h @@ -100,6 +100,7 @@ struct _GstH265Parse GstH265TimeCode time_code; gboolean discont; + gboolean marker; /* frame parsing */ gint idr_pos, sei_pos;