From 5b1bc0f19fab62f4574ab7c45a01ee4073ff0951 Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Tue, 21 May 2024 17:22:47 -0400 Subject: [PATCH] av1parse: Only place a marker on the last frame of a TU Markers are meant to indicate the buffer that ends a frame, which imply something can be displayed. The dependent decode only frames should not have markers. This should also fix last subframe detection. Part-of: --- .../gst/videoparsers/gstav1parse.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/subprojects/gst-plugins-bad/gst/videoparsers/gstav1parse.c b/subprojects/gst-plugins-bad/gst/videoparsers/gstav1parse.c index 631dec80da..52d63542a8 100644 --- a/subprojects/gst-plugins-bad/gst/videoparsers/gstav1parse.c +++ b/subprojects/gst-plugins-bad/gst/videoparsers/gstav1parse.c @@ -1117,20 +1117,25 @@ gst_av1_parse_push_data (GstAV1Parse * self, GstBaseParseFrame * frame, GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT); } - if (frame_finished) { - GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_MARKER); - } else { - GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_MARKER); - } - - if (self->align == GST_AV1_PARSE_ALIGN_FRAME) { + if (self->align == GST_AV1_PARSE_ALIGN_FRAME + || self->align == GST_AV1_PARSE_ALIGN_OBU) { if (!self->show_frame) { GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DECODE_ONLY); } else { GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_DECODE_ONLY); + if (frame_finished) { + GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_MARKER); + } else { + GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_MARKER); + } } } else { GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_DECODE_ONLY); + if (frame_finished) { + GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_MARKER); + } else { + GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_MARKER); + } } gst_buffer_replace (&frame->out_buffer, buf);