From 576fb1b4cbea8941f279958883706cb0cc9899b0 Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Sun, 27 Mar 2011 16:36:57 +0200 Subject: [PATCH] basevideoencoder: pass along buffer discont flag --- gst-libs/gst/video/gstbasevideocodec.h | 1 + gst-libs/gst/video/gstbasevideoencoder.c | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/gst-libs/gst/video/gstbasevideocodec.h b/gst-libs/gst/video/gstbasevideocodec.h index 526026a..53204e5 100644 --- a/gst-libs/gst/video/gstbasevideocodec.h +++ b/gst-libs/gst/video/gstbasevideocodec.h @@ -149,6 +149,7 @@ struct _GstBaseVideoCodec gdouble proportion; GstClockTime earliest_time; + gboolean discont; /* FIXME before moving to base */ void *padding[GST_PADDING_LARGE]; diff --git a/gst-libs/gst/video/gstbasevideoencoder.c b/gst-libs/gst/video/gstbasevideoencoder.c index 5f3c171..3514ccd 100644 --- a/gst-libs/gst/video/gstbasevideoencoder.c +++ b/gst-libs/gst/video/gstbasevideoencoder.c @@ -624,6 +624,11 @@ gst_base_video_encoder_chain (GstPad * pad, GstBuffer * buf) } } + if (G_UNLIKELY (GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DISCONT))) { + GST_LOG_OBJECT (base_video_encoder, "marked discont"); + GST_BASE_VIDEO_CODEC (base_video_encoder)->discont = TRUE; + } + frame = gst_base_video_codec_new_frame (GST_BASE_VIDEO_CODEC (base_video_encoder)); @@ -743,6 +748,12 @@ gst_base_video_encoder_finish_frame (GstBaseVideoEncoder * base_video_encoder, GST_BUFFER_DURATION (frame->src_buffer) = frame->presentation_duration; GST_BUFFER_OFFSET (frame->src_buffer) = frame->decode_timestamp; + if (G_UNLIKELY (GST_BASE_VIDEO_CODEC (base_video_encoder)->discont)) { + GST_LOG_OBJECT (base_video_encoder, "marking discont"); + GST_BUFFER_FLAG_SET (frame->src_buffer, GST_BUFFER_FLAG_DISCONT); + GST_BASE_VIDEO_CODEC (base_video_encoder)->discont = FALSE; + } + GST_BASE_VIDEO_CODEC (base_video_encoder)->frames = g_list_remove (GST_BASE_VIDEO_CODEC (base_video_encoder)->frames, frame); -- 2.7.4