diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c index b6d91bfac6..84d60eb203 100644 --- a/gst-libs/gst/video/gstvideodecoder.c +++ b/gst-libs/gst/video/gstvideodecoder.c @@ -3171,6 +3171,14 @@ gst_video_decoder_finish_frame (GstVideoDecoder * decoder, GST_BUFFER_FLAG_SET (output_buffer, GST_BUFFER_FLAG_DISCONT); } + if (GST_VIDEO_CODEC_FRAME_FLAG_IS_SET (frame, + GST_VIDEO_CODEC_FRAME_FLAG_CORRUPTED)) { + GST_DEBUG_OBJECT (decoder, + "marking frame %" GST_TIME_FORMAT " as corrupted", + GST_TIME_ARGS (frame->pts)); + GST_BUFFER_FLAG_SET (output_buffer, GST_BUFFER_FLAG_CORRUPTED); + } + if (decoder_class->transform_meta) { if (G_LIKELY (frame->input_buffer)) { CopyMetaData data; @@ -3487,6 +3495,12 @@ gst_video_decoder_have_frame (GstVideoDecoder * decoder) GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT (priv->current_frame); } + if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_CORRUPTED)) { + GST_LOG_OBJECT (decoder, "Marking as corrupted"); + GST_VIDEO_CODEC_FRAME_FLAG_SET (priv->current_frame, + GST_VIDEO_CODEC_FRAME_FLAG_CORRUPTED); + } + /* In reverse playback, just capture and queue frames for later processing */ if (decoder->input_segment.rate < 0.0) { priv->parse_gather = diff --git a/gst-libs/gst/video/gstvideoutils.h b/gst-libs/gst/video/gstvideoutils.h index f49a089748..b89267de67 100644 --- a/gst-libs/gst/video/gstvideoutils.h +++ b/gst-libs/gst/video/gstvideoutils.h @@ -82,6 +82,7 @@ struct _GstVideoCodecState * @GST_VIDEO_CODEC_FRAME_FLAG_SYNC_POINT: is the frame a synchronization point (keyframe) * @GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME: should the output frame be made a keyframe * @GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME_HEADERS: should the encoder output stream headers + * @GST_VIDEO_CODEC_FRAME_FLAG_CORRUPTED: the buffer data is corrupted (Since: 1.20) * * Flags for #GstVideoCodecFrame */ @@ -90,7 +91,15 @@ typedef enum GST_VIDEO_CODEC_FRAME_FLAG_DECODE_ONLY = (1<<0), GST_VIDEO_CODEC_FRAME_FLAG_SYNC_POINT = (1<<1), GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME = (1<<2), - GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME_HEADERS = (1<<3) + GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME_HEADERS = (1<<3), + /** + * GST_VIDEO_CODEC_FRAME_FLAG_CORRUPTED: + * + * The buffer data is corrupted. + * + * Since: 1.20 + */ + GST_VIDEO_CODEC_FRAME_FLAG_CORRUPTED = (1<<4), } GstVideoCodecFrameFlags; /**