summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua M. Doe <oss@nvl.army.mil>2018-08-16 11:30:08 -0400
committerTim-Philipp Müller <tim@centricular.com>2019-05-02 09:18:10 +0100
commit238e9cabee3277f475a8ac3573f0f205c1a582c8 (patch)
treea5f7222b7a633bf2574444d5fe051b4135abd0ff
parente87fb02c151aaf6da0a3a97928c531240e8800a5 (diff)
downloadgstreamer-plugins-bad-238e9cabee3277f475a8ac3573f0f205c1a582c8.tar.gz
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
-rw-r--r--sys/decklink/gstdecklink.cpp10
-rw-r--r--sys/decklink/gstdecklinkvideosrc.cpp1
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);