GNOME Bugzilla – Bug 739284
decklinksrc: add automatic mode detection and timeout property
Last modified: 2015-01-08 17:16:56 UTC
Add automatic mode detection when available Timeout property to emit EOS https://gitorious.org/gstreamer-chamois94/gst-plugins-bad
Would be good to split these patches a bit into functionally independent things (like the EOS handling and the mode detection separately), and then attach them here for review.
I'm implementing something like this mode detection in my decklink rewrite. No need to update this patch for now :)
Actually not because I can't test the mode detection code here as it doesn't seem to work. Would be great if you could update your patch to latest GIT master, and attach the patches here.
Created attachment 293952 [details] [review] input connection property
Created attachment 293953 [details] [review] automatic mode detection Sorry for the late answer. I updated my work to the latest GIT and added input connection property. Why did you remove this one ? Thanks for review
You can also use my gitorious : https://gitorious.org/gstreamer-chamois94/gst-plugins-bad
Comment on attachment 293952 [details] [review] input connection property commit ed0d4cc65378f5f64d05fdce2af679f62c6aace5 Author: Sebastian Dröge <sebastian@centricular.com> Date: Thu Jan 8 12:48:22 2015 +0100 decklinkaudiosrc: Add property to select the audio input connection commit 34de6ad73b6f725ff818b1845d8faa7adcf143db Author: Sebastian Dröge <sebastian@centricular.com> Date: Thu Jan 8 12:23:53 2015 +0100 decklink: Add XLR and RCA audio connection enums commit a35d5ae9b965c0aa98c021d0fdf32746f1d1f938 Author: Sebastian Dröge <sebastian@centricular.com> Date: Thu Jan 8 12:17:45 2015 +0100 decklinkvideosrc: Add auto value for the connection property This will use the default/auto connection for video capturing, and can be set via the Decklink configuration tools. commit 478deb48058b226de53ab555db5187f9680a9020 Author: Sebastian Dröge <sebastian@centricular.com> Date: Thu Jan 8 12:13:03 2015 +0100 decklink: Fix indention once again commit 81c1ef190d1abc5ac122ecfa1063f4af4747190e Author: Florian Langlois <florian.langlois@fr.thalesgroup.com> Date: Tue Jan 6 14:02:38 2015 +0100 decklink: Add property for configuring the input connection of the video sources
Review of attachment 293953 [details] [review]: ::: sys/decklink/gstdecklink.cpp @@ +193,3 @@ + switch(mode) { + case bmdModeNTSC: + displayMode = GST_DECKLINK_MODE_NTSC; This could also become a table like for the connections: { bmdModeNTSC, GST_DECKLINK_MODE_NTSC }, { bmdModePAL, GST_DECKLINK_MODE_PAL }, etc @@ +283,3 @@ + break; + default: + break; default case should do a g_assert_not_reached() @@ +452,3 @@ + g_mutex_lock (&m_input->lock); + + src = GST_DECKLINK_VIDEO_SRC_CAST(m_input->videosrc); This should be done via a callback that is defined in gstdecklinkvideosrc.cpp @@ +457,3 @@ + m_input->input->FlushStreams(); + + m_input->input->EnableVideoInput (mode->GetDisplayMode(), Isn't it necessary to first DisableVideoInput()? @@ +463,3 @@ + gst_video_info_from_caps (&src->info, caps); + gst_base_src_set_caps(GST_BASE_SRC_CAST(m_input->videosrc), caps); + gst_caps_unref (caps); To make this work in a threadsafe way you would need to store the caps together with the buffers and their timestamps inside the queue, and then inside create() set new caps if they have changed Otherwise the queue might still contain buffers with old caps after you set the new caps. And you must only set the caps from the streaming thread (i.e. from create()). ::: sys/decklink/gstdecklink.h @@ +84,3 @@ + GST_DECKLINK_MODE_3184p60, + + GST_DECKLINK_MODE_UNKNOWN Why is UNKNOWN needed? Ideally you would give it the value -1 or something like that so we can easily extend this enum here later ::: sys/decklink/gstdecklinkvideosrc.cpp @@ +448,3 @@ + flags = bmdVideoInputFlagDefault; + if (self->mode == GST_DECKLINK_MODE_AUTO || self->mode == GST_DECKLINK_MODE_UNKNOWN) { When would it ever be UNKNOWN?
Hello, thanks for reviewing. Some answers. And fixes into my git : https://gitorious.org/gstreamer-chamois94/gst-plugins-bad/commits/99fb046bad6c06e7d5de6b89480bf99a170074e4 1/ Seems difficult to construct a table because bmd enums are not monotonic. Am I wrong ? 2/ Added g_assert_not_reached in default case 3/ Changed the way I set the caps. Should be threadsafe now. 4/ Following the SDK the good way is to Pause, Flush, EnableVideo then Start. So seems good. And works for me. 5/ Removed useless GST_DECKLINK_MODE_UNKNOWN Maybe now it can be pushed.
Merged, thanks! :) Some minor changes on top of it though. Let me know if there's anything else that is not optimal yet commit 4531a341a8490f8e5277c1dac1e2e5cf98c71b64 Author: Sebastian Dröge <sebastian@centricular.com> Date: Thu Jan 8 18:15:27 2015 +0100 decklinkvideosrc: Post LATENCY message when the mode changes Different modes have different framerates, and thus different latencies. We might need to reconfigure the latency of the pipeline. commit beede3f27de5d9810b9c87a6f1ea69feabac63a9 Author: Sebastian Dröge <sebastian@centricular.com> Date: Thu Jan 8 18:14:38 2015 +0100 decklinkvideosrc: Fix compiler warning commit 9480d91ad41bdeb836a45a415e911fb870dc0955 Author: Florian Langlois <florian.langlois@fr.thalesgroup.com> Date: Thu Jan 8 16:42:31 2015 +0100 decklinkvideosrc: Add automatic mode detection https://bugzilla.gnome.org/show_bug.cgi?id=739284