Commit graph

205 commits

Author SHA1 Message Date
Sebastian Dröge
d4575e759b decklinkvideosink: Actually include the change mentioned in the last commit 2015-02-10 14:53:55 +01:00
Sebastian Dröge
e8167dd118 decklinkvideo{src,sink}: Sample the internal clock immediately after starting the device
Otherwise we might stay at 0.0s for too long because we will take the first
timestamp we ever see as 0.0... which will be after we started the device.
2015-02-10 14:48:09 +01:00
Sebastian Dröge
b739cf8b7f decklink: Fix compiler warning with gcc
gstdecklink.cpp: In member function 'virtual HRESULT GStreamerDecklinkInputCallback::VideoInputFrameArrived(IDeckLinkVideoInputFrame*, IDeckLinkAudioInputPacket*)':
gstdecklink.cpp:498:22: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]
     if (capture_time > m_input->clock_start_time)
                      ^
gstdecklink.cpp:503:22: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]
     if (capture_time > m_input->clock_offset)
                      ^
2015-02-09 21:04:17 +01:00
Sebastian Dröge
f0e85023c2 decklink{audio,video}src: Implement clock slaving if the pipeline clock is not the decklink clock 2015-02-09 17:17:37 +01:00
Sebastian Dröge
408f0870a6 decklinkaudio{src,sink}: Only start streams / scheduled playback if there is a videosrc at this point 2015-02-09 17:15:21 +01:00
Sebastian Dröge
349113d15a decklinkaudiosrc: Don't provide a clock
The audio source only works together with the video source, and the video
source is already providing a clock.
2015-02-09 17:04:27 +01:00
Sebastian Dröge
4de7fdfa3a decklinkaudiosink: Throttle reading from the ringbuffer
The driver has an internal buffer of unspecified and unconfigurable size, and
it will pull data from our ring buffer as fast as it can until that is full.
Unfortunately that means that we pull silence from the ringbuffer unless its
size is by conincidence larger than the driver's internal ringbuffer.

The good news is that it's not required to completely fill the buffer for
proper playback. So we now throttle reading from the ringbuffer whenever
the driver has buffered more than half of our ringbuffer size by waiting
on the clock for the amount of time until it has buffered less than that
again.
2015-02-09 16:22:39 +01:00
Sebastian Dröge
a6bcd09b6c decklinkaudiosink: Start scheduled playback when going to PLAYING
The ringbuffer's acquire() is too early, and ringbuffer's start() will only be
called after the clock has advanced a bit... which it won't unless we start
scheduled playback.
2015-02-09 16:22:39 +01:00
Sebastian Dröge
22b0a4dad5 decklink{audio,video}src: Take the capture times from the pipeline clock
Not from the decklink clock. Both will return exactly the same time once the
decklink clock got slaved to the pipeline clock and received the first
observation, but until then it will return bogus values. But as both return
exactly the same values, we can as well use the pipeline clock directly.
2015-02-08 21:56:04 +01:00
Sebastian Dröge
e9b49018ed decklinkvideosink: Always lock the mutex before starting the streams 2015-01-28 17:02:59 +01:00
Sebastian Dröge
837eee7085 decklinkvideosink: Fix deadlock 2015-01-28 16:59:30 +01:00
Sebastian Dröge
4eb5cd9156 decklink{audio,video}sink: Only start scheduled playback once both sources are ready and we are in PLAYING
Otherwise we might start the scheduled playback before the audio or video streams are
actually enabled, and then error out later because they are enabled to late.

We enable the streams when getting the caps, which might be *after* we were
set to PLAYING state.
2015-01-28 16:13:16 +01:00
Sebastian Dröge
e2ff5587fe decklink{audio,video}src: Only start the streams once both sources are ready and we are in PLAYING
Otherwise we might start the streams before the audio or video streams are
actually enabled, and then error out later because they are enabled to late.

We enable the streams when getting the caps, which might be *after* we were
set to PLAYING state.
2015-01-28 16:13:16 +01:00
Sebastian Dröge
00176a1ddf decklink: Make sure our clock never returns NONE, always advances and does not jump when going from PAUSED to PLAYING
It basically behaves the same as the audio clocks.
2015-01-28 16:13:16 +01:00
Sebastian Dröge
b3a4772834 decklinkvideosink: Handle the clock returning GST_CLOCK_TIME_NONE properly 2015-01-28 16:13:16 +01:00
Sebastian Dröge
8a5d2c561c decklinkvideo{sink,src}: Make elements more similar to the audio elements by enabling the video input/output only when getting the actual caps
This will also make it easier later to support caps changes and support
selecting the mode based on the caps if that should ever be implemented.
2015-01-28 16:13:16 +01:00
Sebastian Dröge
f3ae93e504 decklinkvideosrc: Properly report caps if mode!=auto and handle caps changes properly for mode=auto 2015-01-28 16:13:16 +01:00
Sebastian Dröge
7fb57938c1 decklinkaudiosrc: Don't release input device twice on errors in set_caps() 2015-01-28 16:13:16 +01:00
Sebastian Dröge
c6d5c4c2e1 decklinkaudiosrc: Release the audio input on errors, not the video input 2015-01-26 15:33:45 +01:00
Sebastian Dröge
e734c3cf13 decklinkvideosink: Also consider max-lateness property value before dropping late frames 2015-01-15 12:49:46 +01:00
Sebastian Dröge
5a12b2670e decklinkvideosink: Stop scheduled playback shortly in PAUSED->PLAYING if it was running already
This fixes handling of flushing seeks, where we will get a PAUSED->PLAYING
state transition after the previous one without actually going to PAUSED
first.
2015-01-14 16:33:53 +01:00
Sebastian Dröge
92fa187d11 decklinkvideosink: Don't schedule too late frames in prepare()
Otherwise we will overflow the internal buffer of the hardware
with useless frames and run into an error. This is necessary until
this bug in basesink is fixed:
https://bugzilla.gnome.org/show_bug.cgi?id=742916
2015-01-14 16:02:57 +01:00
Sebastian Dröge
7b979703f8 decklinkvideosink: Keep track of the time when we went to PLAYING for the external clock too
Otherwise we're adding an offset of the time the pipeline was in PLAYING
already to the running time when converting it to our internal clock.
2015-01-14 16:00:54 +01:00
Sebastian Dröge
aed66838f3 decklinkvideosink: Enable QoS and set max-lateness to 20ms 2015-01-14 13:33:15 +01:00
Sebastian Dröge
ab9ee34aba decklink: Use BT2020 colorspace for UltraHD resolutions 2015-01-13 19:56:45 +01:00
Sebastian Dröge
65119ae8b4 decklink: Fix indention once again 2015-01-13 19:56:45 +01:00
Sebastian Dröge
d2e309d341 decklinkvideosink: Get our own "start time" instead of the one of the pipeline
decklinkvideosink might be added later to the pipeline, or its state might
be handled separately from the pipeline. In which case the running time when
we (last) went into PLAYING state will be different from the pipeline's.

However we need our own start time to tell the Decklink API, which running
time should be displayed at the moment we go to PLAYING and start scheduled
rendering.
2015-01-13 17:44:17 +01:00
Sebastian Dröge
b79ece392c decklink: Initialize refcount of our C++ classes in the constructor
CID 1262288
CID 1262287
CID 1262289
2015-01-12 15:58:38 +01:00
Sebastian Dröge
4531a341a8 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.
2015-01-08 18:16:12 +01:00
Sebastian Dröge
beede3f27d decklinkvideosrc: Fix compiler warning 2015-01-08 18:16:12 +01:00
Florian Langlois
9480d91ad4 decklinkvideosrc: Add automatic mode detection
https://bugzilla.gnome.org/show_bug.cgi?id=739284
2015-01-08 18:16:12 +01:00
Sebastian Dröge
7e7cabb422 decklink: Add a dummy value to the video connection mapping table for auto 2015-01-08 12:55:51 +01:00
Sebastian Dröge
ed0d4cc653 decklinkaudiosrc: Add property to select the audio input connection 2015-01-08 12:48:22 +01:00
Sebastian Dröge
34de6ad73b decklink: Add XLR and RCA audio connection enums 2015-01-08 12:23:53 +01:00
Sebastian Dröge
a35d5ae9b9 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.
2015-01-08 12:23:09 +01:00
Sebastian Dröge
478deb4805 decklink: Fix indention once again 2015-01-08 12:13:03 +01:00
Florian Langlois
81c1ef190d decklink: Add property for configuring the input connection of the video sources 2015-01-08 12:12:50 +01:00
Florian Langlois
e7c6eb6326 decklink: Fix latency values for sources 2015-01-07 16:42:57 +01:00
Sebastian Dröge
196d9c4829 decklink: Add support for 4K / UHD modes 2014-12-29 17:58:37 +01:00
Sebastian Dröge
0122a9d1b6 decklink: Fix indention 2014-12-29 17:58:37 +01:00
Sebastian Dröge
d632a48d6c decklink: Fix various compiler warnings with gcc 2014-12-19 15:05:58 +01:00
Sebastian Dröge
5e7782ca39 decklink: Re-add the COM initialization code for Windows
Untested, and we will never deinitialize COM again.
2014-12-19 14:50:25 +01:00
Sebastian Dröge
f9d16c5913 decklink: Remove in-same-pipeline detection code for audio/video elements of the same device
This causes deadlocks sometimes for some reason.
2014-12-19 14:40:40 +01:00
Sebastian Dröge
9c2e09cf39 decklinkvideosink: Implement clock slaving 2014-12-19 14:40:40 +01:00
Sebastian Dröge
b9e17c5605 decklinkvideosink: Add some more debug output for when frames are scheduled 2014-12-19 14:40:40 +01:00
Sebastian Dröge
ec90bbb6f3 decklink: Add property for configuring the buffer size of the sources 2014-12-19 14:40:40 +01:00
Sebastian Dröge
112fdd266a decklinkaudiosrc: Implement timestamp jitter and discont handling 2014-12-19 14:40:40 +01:00
Sebastian Dröge
7c0fb92f1b decklink: Our capture time is the end timestamp of the buffer, subtract the duration 2014-12-19 14:40:40 +01:00
Sebastian Dröge
4ef676f109 decklink: Allow for a maximum of 5 packets to be queued up
In case downstream is a bit slow with consuming packets at times.
2014-12-19 14:40:40 +01:00
Sebastian Dröge
aac0027ed2 decklink: Implement latency query in sources and remember selected mode 2014-12-19 14:40:40 +01:00
Sebastian Dröge
23d6eaaa10 decklink: Remove obsolete files 2014-12-19 14:40:39 +01:00
Sebastian Dröge
6d931a0c0e decklink: Add initial version of audio and video sources 2014-12-19 14:40:39 +01:00
Sebastian Dröge
57d46fe9e1 decklink: Initial version of the audio/video sink rewrite 2014-12-19 14:40:39 +01:00
Sebastian Dröge
2d25f2e0b8 decklink: Fix make distcheck
And properly dist all headers and source files.
2014-12-04 15:43:20 +01:00
Sebastian Dröge
d0892984bc decklink: Fix compiler warnings with gcc in the dispatcher 2014-12-03 16:01:32 +01:00
Sebastian Dröge
9aa8bf1705 decklink: Update Windows SDK headers to 10.3.1
No idea where the DecklinkAPIDispatch.cpp comes from on Windows,
but this should still work. Will just become a problem once we
use other parts of the API.
2014-12-03 15:16:18 +01:00
Sebastian Dröge
9a8a944d2f decklink: Update OS X SDK headers to 10.3.1 2014-12-03 14:42:43 +01:00
Sebastian Dröge
5d74b4ba42 decklink: Update Linux SDK headers to 10.3.1 2014-12-03 14:39:13 +01:00
Sebastian Dröge
55721c62e6 decklinksink: Drop too late frames and start scheduled playback at the correct time 2014-11-28 17:32:29 +01:00
Sebastian Dröge
c180012d02 decklinksrc: For the source, unsetting the callback already deletes it 2014-11-28 15:06:42 +01:00
Sebastian Dröge
820894a871 decklinksink: Wait for the pipeline clock instead of the decklink clock
Otherwise we're going to starve other elements if the decklink clock
is slower than the pipeline clock, or starts much later.

Of course this will still cause problems if the decklink clock and ours are
completely out of sync, or running at a very different rate. But this at least
works better now.
2014-11-28 14:58:41 +01:00
Sebastian Dröge
d191fb4476 decklinksink: Schedule video frames according to their timestamps, not according to a frame counter 2014-11-28 14:58:41 +01:00
Sebastian Dröge
b4695f60e5 decklinksink: Add some FIXME comments about synchronization 2014-11-28 14:58:41 +01:00
Sebastian Dröge
50c4ea54f6 decklinksrc: Sample the pipeline clock for the timestamps instead of coming up with our own
If we just count the frames and calculate timestamps from that, all frames
will arrive late in the sink as we have a live source here. Instead take
the pipeline clock at capture time as reference.
2014-11-28 14:56:19 +01:00
Sebastian Dröge
ee8766b342 decklinksrc: Handle callback/delegate object the same way as in the sink
Potentially fixes crashes.
2014-11-28 14:51:53 +01:00
Sebastian Dröge
2a0123d79a decklinksink: Don't crash when going to READY another time
We have to handle the callback object a bit different:
a) it needs a virtual destructor
b) we need to set the callback to NULL when we're done with the output
c) create a new one every time

https://bugzilla.gnome.org/show_bug.cgi?id=740616
2014-11-28 14:51:52 +01:00
Sebastian Dröge
11485e32ab decklink: Add support for 2k modes 2014-11-24 14:11:04 +01:00
Sebastian Dröge
104f39dfe8 decklink: HD1080i50 is 50 frames per second 2014-11-24 13:56:56 +01:00
Sebastian Dröge
bdfac8a6d4 decklink: Fix indention 2014-11-14 10:41:59 +01:00
Sebastian Dröge
e47dbaed07 decklinksink: Check the correct variable for failure
If we can't get an output, we would otherwise just use it later and crash.
2014-11-11 12:00:30 +01:00
Sebastian Dröge
a680867761 decklinksink: Initialize pixel format to bmdFormat8BitYUV
https://bugzilla.gnome.org/show_bug.cgi?id=725871
2014-08-01 18:02:10 +02:00
Sebastian Dröge
fd793e9498 decklinksink: Catch errors during data flow and error out properly
Otherwise we will just deadlock the thread if e.g. scheduling a video
frame fails for whatever reason.
2014-08-01 16:59:42 +02:00
Sebastian Dröge
a8f94fe1e1 decklink: 59.94fps is 60000/1001, not 30000/1001
And also change 30/1 to 60/1 for one 60fps mode.
2014-08-01 12:39:47 +02:00
Nicolas Dufresne
4e9036690c decklink: Don't fail if HW does not have all interfaces
This patch completes 1c1cc73a3b. These
changes where accidentally pushed as a separate patch with wrong commit
message.

https://bugzilla.gnome.org/show_bug.cgi?id=7273
2014-04-27 09:34:39 -04:00
Tim-Philipp Müller
d5a0ace347 Revert "y4mdec: check for VIDEO meta instead of CROP meta"
This reverts commit 68309bd215.

Commit message and files changed do not match.
2014-04-27 13:11:03 +01:00
Nicolas Dufresne
1c1cc73a3b decklink: Fix support for HW without output
Devices suitable for decklinksrc may not have any output, hence querying
the input returns NULL. Add support for all cases where
input/output/config may be missing.

https://bugzilla.gnome.org/show_bug.cgi?id=727306
2014-04-23 12:42:44 -04:00
Nicolas Dufresne
68309bd215 y4mdec: check for VIDEO meta instead of CROP meta
This element only need stride support, but checks for CROP_META, which
is a bit too much, even though this works as CROP imply having VIDEO
meta.

https://bugzilla.gnome.org/show_bug.cgi?id=726255
2014-04-23 12:42:44 -04:00
Vincent Penquerc'h
c78edf5afc decklink: initialize priv to NULL
While the code that creates the object sets priv to some existing
pointer after new, this ensures any future new not doing this will
hit the various priv!=NULL asserts in the code.

Coverity 1139935
2014-04-09 11:43:23 +01:00
Sebastian Dröge
46b62c72d8 decklinksink: Give preference to the order of the filter caps when querying caps 2013-12-17 10:23:15 +01:00
Sebastian Dröge
007807d149 decklinksink: Only intersect with the filter caps if there actually is a filter 2013-12-17 10:21:26 +01:00
Todd Agulnick
44b9429516 decklinksrc: Process EOS even when there are no incoming video frames.
https://bugzilla.gnome.org/show_bug.cgi?id=680700
2013-12-15 10:15:31 +01:00
Sebastian Dröge
234f3c73dc decklinksrc: Set GST_ELEMENT_FLAG_SOURCE on the source
As it does not inherit from basesrc, this flag is not automatically set
and e.g. gst_bin_iterate_sources() and other code does not consider this
element a source.

https://bugzilla.gnome.org/show_bug.cgi?id=680700
2013-12-14 18:43:03 +01:00
Tim-Philipp Müller
fb9fbc8fba decklinksrc: send caps event before segment 2013-09-05 19:10:31 +01:00
Sebastian Dröge
60c2c123be decklink: Add support for group-id in the stream-start event 2013-07-23 10:33:31 +02:00
Youri Westerman
136aa4614e decklink: actually enable decklinksink
https://bugzilla.gnome.org/show_bug.cgi?id=704505
2013-07-22 14:29:35 +01:00
Youri Westerman
f9898e42f6 decklink: add "device-number" to select from multiple devices
https://bugzilla.gnome.org/show_bug.cgi?id=704505
2013-07-22 14:19:25 +01:00
Sebastian Dröge
e51cd4fe2f gst: Add better support for static plugins 2013-04-15 15:59:22 +02:00
Tim-Philipp Müller
d84ef611f0 decklinksink: fix some compiler warnings 2013-03-20 10:49:04 +00:00
Mark Nauwelaerts
52908193b0 decklinksink: obtain class from object 2013-03-18 21:19:15 +01:00
Tim-Philipp Müller
a2f446fabc decklinksrc: set discont flag on first audio buffer too 2013-03-16 23:32:12 +00:00
Tim-Philipp Müller
929b0bc3e2 decklinksrc: aggregate audio and video flow returns
And pause task in some more cases where we should
pause the task.
2013-03-16 23:30:24 +00:00
Tim-Philipp Müller
5dfc7c4bce decklinksrc: add send_event handler so application can inject EOS event
This is needed to shut down a recording pipeline cleanly.

https://bugzilla.gnome.org/show_bug.cgi?id=680700
2013-03-16 23:17:24 +00:00
Tim-Philipp Müller
5eb8188e55 decklinksrc: pause streaming thread and send EOS event on error
Instead of just posting an EOS message and continuing,
actually pause the thread.
2013-03-16 21:34:57 +00:00
Tim-Philipp Müller
74ca4aeefd decklinksink: port to 1.0
Compiles, not tested yet.
2013-02-28 18:54:15 +00:00
Tim-Philipp Müller
c16224a220 decklinksrc: add layout=interleaved to audio caps 2013-02-28 18:53:54 +00:00
Tim-Philipp Müller
126df5a0c2 decklinksrc: port to 1.0
Compiles, not tested yet. A great number of superfluous custom
pad functions may have been harmed in the making of this port.
2013-02-27 23:34:34 +00:00
Youness Alaoui
57160c2be7 decklink: remove useless and uninitialized list causing a crash in the device probe 2012-12-26 13:11:50 -05:00
Tim-Philipp Müller
9e1b75fda3 Fix FSF address
https://bugzilla.gnome.org/show_bug.cgi?id=687520
2012-11-04 00:09:59 +00:00
Tim-Philipp Müller
32ba17cd0f Use gst_element_class_set_static_metadata()
where possible. Avoids some string copies. Also re-indent
some stuff. Also some indent fixes here and there.
2012-10-17 17:46:34 +01:00
David Schleef
65a1f79bcb decklink: change device instance lifecycle
The decklink driver eventually crashes after repeated creation/deletion
of device, input, output, and configuration objects.  Change to create
these at the outset and keep them around forever.
2012-09-23 21:27:36 +01:00