diff options
author | Arun Raghavan <arun@centricular.com> | 2015-01-22 10:50:23 +0530 |
---|---|---|
committer | Arun Raghavan <git@arunraghavan.net> | 2015-01-22 11:07:50 +0530 |
commit | 825239b45063e41f68771917ca047a25c852fbd3 (patch) | |
tree | dae19ec8553826d7a529924acebcd270234819eb /gst/inter | |
parent | ec7f05dd9cbff173d4898c242be12a5b47a27eda (diff) | |
download | gstreamer-plugins-bad-825239b45063e41f68771917ca047a25c852fbd3.tar.gz |
intervideosrc: Fix GAP flag setting on black frames correctly
This did not actually work since the video_buffer was set to NULL after
the first black frame.
Reported by: Patrik Oldsberg <patrik.oldsberg@ericsson.com>
Diffstat (limited to 'gst/inter')
-rw-r--r-- | gst/inter/gstintervideosrc.c | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/gst/inter/gstintervideosrc.c b/gst/inter/gstintervideosrc.c index 3c49c10a4..b13656e00 100644 --- a/gst/inter/gstintervideosrc.c +++ b/gst/inter/gstintervideosrc.c @@ -326,6 +326,7 @@ gst_inter_video_src_create (GstBaseSrc * src, guint64 offset, guint size, GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src); GstCaps *caps; GstBuffer *buffer; + guint64 frames; gboolean is_gap = FALSE; GST_DEBUG_OBJECT (intervideosrc, "create"); @@ -333,6 +334,10 @@ gst_inter_video_src_create (GstBaseSrc * src, guint64 offset, guint size, caps = NULL; buffer = NULL; + frames = gst_util_uint64_scale_ceil (intervideosrc->timeout, + GST_VIDEO_INFO_FPS_N (&intervideosrc->info), + GST_VIDEO_INFO_FPS_D (&intervideosrc->info) * GST_SECOND); + g_mutex_lock (&intervideosrc->surface->mutex); if (intervideosrc->surface->video_info.finfo) { GstVideoInfo tmp_info = intervideosrc->surface->video_info; @@ -354,29 +359,25 @@ gst_inter_video_src_create (GstBaseSrc * src, guint64 offset, guint size, intervideosrc->n_frames = 0; } } - if (intervideosrc->surface->video_buffer) { - guint64 frames = gst_util_uint64_scale_ceil (intervideosrc->timeout, - GST_VIDEO_INFO_FPS_N (&intervideosrc->info), - GST_VIDEO_INFO_FPS_D (&intervideosrc->info) * GST_SECOND); + if (intervideosrc->surface->video_buffer) { + /* We have a buffer to push */ buffer = gst_buffer_ref (intervideosrc->surface->video_buffer); - - /* Repeated buffer? */ - if (intervideosrc->surface->video_buffer_count > 0) - is_gap = TRUE; - intervideosrc->surface->video_buffer_count++; - if (intervideosrc->timeout > 0 - && intervideosrc->surface->video_buffer_count >= frames) { - /* The first black buffer is not a GAP anymore but - * the following are */ - if (intervideosrc->surface->video_buffer_count == frames) - is_gap = FALSE; + /* Can only be true if timeout > 0 */ + if (intervideosrc->surface->video_buffer_count >= frames) { gst_buffer_unref (intervideosrc->surface->video_buffer); intervideosrc->surface->video_buffer = NULL; } + } else if (intervideosrc->surface->video_buffer_count == frames) { + /* This will be our first black frame */ + intervideosrc->surface->video_buffer_count++; + } else if (intervideosrc->surface->video_buffer_count > frames) { + /* The first black buffer is not a GAP, but the following ones are */ + is_gap = TRUE; } + g_mutex_unlock (&intervideosrc->surface->mutex); if (caps) { |