From cf6654185069e799c2f5b19edb3cb331126c56b1 Mon Sep 17 00:00:00 2001 From: Josep Torra Date: Wed, 22 Apr 2015 17:08:09 +0200 Subject: [PATCH] decklinkvideosrc: fix mode autodetection The autodetection mode was broken because a race condition in the input mode setting. The mode could be reverted back when it was replaced in the streaming thread by the old mode in the middle of mode changed callback. --- sys/decklink/gstdecklinkvideosrc.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/sys/decklink/gstdecklinkvideosrc.cpp b/sys/decklink/gstdecklinkvideosrc.cpp index 0432e8c..4e8bcee 100644 --- a/sys/decklink/gstdecklinkvideosrc.cpp +++ b/sys/decklink/gstdecklinkvideosrc.cpp @@ -265,9 +265,13 @@ gst_decklink_video_src_set_caps (GstBaseSrc * bsrc, GstCaps * caps) GST_DEBUG_OBJECT (self, "Pad already has caps %" GST_PTR_FORMAT, caps); if (!gst_caps_is_equal (caps, current_caps)) { - GST_ERROR_OBJECT (self, "New caps are not equal to old caps"); + GST_DEBUG_OBJECT (self, "New caps, reconfiguring"); gst_caps_unref (current_caps); - return FALSE; + if (self->mode == GST_DECKLINK_MODE_AUTO) { + return TRUE; + } else { + return FALSE; + } } else { gst_caps_unref (current_caps); return TRUE; @@ -514,9 +518,6 @@ gst_decklink_video_src_create (GstPushSrc * bsrc, GstBuffer ** buffer) f->mode); self->caps_mode = f->mode; g_mutex_unlock (&self->lock); - g_mutex_lock (&self->input->lock); - self->input->mode = gst_decklink_get_mode (f->mode); - g_mutex_unlock (&self->input->lock); caps = gst_decklink_mode_get_caps (f->mode); gst_video_info_from_caps (&self->info, caps); gst_base_src_set_caps (GST_BASE_SRC_CAST (bsrc), caps); -- 2.7.4