From 238e9cabee3277f475a8ac3573f0f205c1a582c8 Mon Sep 17 00:00:00 2001 From: "Joshua M. Doe" Date: Thu, 16 Aug 2018 11:30:08 -0400 Subject: decklinkvideosrc: respect pixel format property even if mode is set to auto Before this patch, if mode=auto and video-format!=auto, video-format would always be ignored, and get set to 8bit-yuv, or if detected to be RGB444, then it would be set to 8bit-argb. This change respects video-format if it is set to 10bit-yuv (v210) or 8bit-bgra, even when mode=auto. Closes #772 --- sys/decklink/gstdecklink.cpp | 10 ++++++++-- sys/decklink/gstdecklinkvideosrc.cpp | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/sys/decklink/gstdecklink.cpp b/sys/decklink/gstdecklink.cpp index fb7276a8c..168f2ab9e 100644 --- a/sys/decklink/gstdecklink.cpp +++ b/sys/decklink/gstdecklink.cpp @@ -777,12 +777,18 @@ public: VideoInputFormatChanged (BMDVideoInputFormatChangedEvents, IDeckLinkDisplayMode * mode, BMDDetectedVideoInputFormatFlags formatFlags) { - BMDPixelFormat pixelFormat = bmdFormat8BitYUV; + BMDPixelFormat pixelFormat; GST_INFO ("Video input format changed"); - if (formatFlags & bmdDetectedVideoInputRGB444) + if ((formatFlags & bmdDetectedVideoInputRGB444) + && m_input->format == bmdFormat8BitYUV) { + /* user-set format was auto or 8BitYUV, change to RGB */ pixelFormat = bmdFormat8BitARGB; + } else { + /* use the user-set format, defaulting to 8BitYUV */ + pixelFormat = m_input->format; + } g_mutex_lock (&m_input->lock); m_input->input->PauseStreams (); diff --git a/sys/decklink/gstdecklinkvideosrc.cpp b/sys/decklink/gstdecklinkvideosrc.cpp index 5e97ac176..0b00d3f95 100644 --- a/sys/decklink/gstdecklinkvideosrc.cpp +++ b/sys/decklink/gstdecklinkvideosrc.cpp @@ -1008,6 +1008,7 @@ gst_decklink_video_src_open (GstDecklinkVideoSrc * self) g_assert (mode != NULL); g_mutex_lock (&self->input->lock); self->input->mode = mode; + self->input->format = self->caps_format; self->input->got_video_frame = gst_decklink_video_src_got_frame; self->input->start_streams = gst_decklink_video_src_start_streams; g_mutex_unlock (&self->input->lock); -- cgit v1.2.1