| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
| |
This causes avwait to go back into "dropping" mode until audio and video
are synced again, which is unnecessary when the segment didn't actually
change.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2121>
|
|
|
|
| |
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2063>
|
| |
|
| |
|
|
|
|
| |
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1249>
|
| |
|
|
|
|
|
|
|
|
|
| |
The approach is quite simple and doesn't take all use cases into account,
it only implements support when we are using the internal timecode we
create ourself.
Also the way we compute the sought frame count is naive, but it works
for simple cases.
|
|
|
|
|
|
|
| |
waiting for LTC timecodes
Default to 150ms instead of 8 frames, which seems to work in the
majority of cases.
|
| |
|
| |
|
|
|
|
|
|
| |
We might have some old timecodes that are in the future now and have to
drop those to make sure that our queue is correctly ordered and we don't
have multiple timecodes for the same running time.
|
|
|
|
| |
input
|
|
|
|
|
|
|
|
| |
Directly read them out of the decoder as soon as we passed audio and
then store them in a queue that we handle internally together with their
timestamps. This cleans up memory management and gives us proper control
over the queue instead of guessing how the queue inside the LTC decoder
actually works and when it overflows.
|
|
|
|
|
| |
And don't introduce any latency at all if not LTC audio pad was
requested.
|
|
|
|
|
|
| |
And also introduce 6 instead of 2 frames of latency compared to the LTC
audio input as that seems to be an upper bound for how much the LTC
library is lagging behind.
|
|
|
|
|
|
|
| |
one we retrieved
Otherwise we don't interpolate between LTC timecodes but only ever put
an LTC timecode on buffers once we actually received one.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If one of the inputs is live, add a latency of 2 frames to the video
stream and wait on the clock for that much time to pass to allow for the
LTC audio to be ahead.
In case of live LTC, don't do any waiting but only ensure that we don't
overflow the LTC queue.
Also in non-live LTC audio mode, flush too old items from the LTC queue
if the video is actually ahead instead of potentially waiting forever.
This could've happened if there was a bigger gap in the video stream.
|
|
|
|
|
|
| |
template
Should be "ltc_sink" and not just "ltc"
|
|
|
|
|
|
|
| |
after a while
By default we never time them out and simply continue couting up with
each frame forever.
|
|
|
|
|
|
| |
This allows selecting whether we continue updating our last known
upstream timecode whenever a new one arrives or instead only keep the
last known one and from there on count up.
|
|
|
|
|
|
|
|
| |
This uses the last known upstream timecode (counted up per frame), or
otherwise zero if none was known.
The normal last-known timestamp uses the internal timecode as fallback
if no upstream timecode was ever known.
|
|
|
|
|
| |
Instead keep it unset and use the internal timecode wherever needed as
fallback.
|
|
|
|
| |
reality
|
| |
|
|
|
|
|
|
| |
We reject caps with other framerates as it's impossible to generate
timecodes unless we actually know a constant framerate. Reflect this
also in the pad template caps.
|
| |
|
|
|
|
|
|
| |
There's no point in working with invalid LTC timestamps as all future
calculations will be wrong based on this, and invalid LTC timestamps can
sometimes be read via the audio input.
|
|
|
|
|
|
|
| |
actual video timestamps
Otherwise we would start/end at exactly the given times, which might be
up to 1 frame earlier/later than the video.
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
Based on a patch by
Georg Lippitsch <glippitsch@toolsonair.com>
Vivia Nikolaidou <vivia@toolsonair.com>
Using libltc from https://github.com/x42/libltc
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We now have a single property to select the timecode source that should
be applied, and for each timecode source the timecode is updated at
every frame. Then based on a set mode, the timecode is added to the
frame if none exists already or all existing timecodes are removed and
the timecode is added.
In addition the real-time clock is considered a proper timecode source
now instead of only allowing to initialize once in the beginning with
it, and also instead of just taking the current time we now take the
current time at the clock time of the video frame.
|
| |
|
|
|
|
|
| |
It was possible to set a start running time and start/end timecode
before, but not an end running time.
|
|
|
|
|
|
|
|
|
| |
If recording is set to FALSE after the last audio or video buffer and
before the EOS event then recording stop is never signalled.
Similarly, we should signal recording stop once both audio and video are
EOS, regardless of the recording property, as there's nothing to be
recorded anymore.
|
|
|
|
| |
And check everywhere if they're NULL before accessing them.
|
| |
|
|
|
|
|
|
| |
These variables are all accessed from multiple threads.
Also fix some minor leaks in error code paths.
|
| |
|
|
|
|
|
|
| |
This might be necessary temporarily for changing the previous settings.
Make it an actual error if the settings are like this while processing a
buffer.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
If the first audio buffer to be dropped started right between two video
buffers (after the end of the first but before the start of the second,
as is often the case with N/1001 video frame rates), we would miss
sending the dropping=true message.
https://bugzilla.gnome.org/show_bug.cgi?id=797248
|
|
|
|
|
|
|
|
|
|
|
| |
Previously it was dispatched before the last video buffer, and audio
buffers would follow afterwards. It's misleading to send the
dropping=true message before both streams have really stopped, it can
lead to races when someone is e.g. waiting for that message to send EOS.
Also added some debug output.
https://bugzilla.gnome.org/show_bug.cgi?id=797145
|
|
|
|
|
| |
Was checking if fps_d == 60000 (instead of fps_n), causing 60000/1001 to
be always falsely interpreted as non-drop-frame
|
|
|
|
|
|
| |
Also add test to meson
https://bugzilla.gnome.org/show_bug.cgi?id=796977
|
|
|
|
|
|
|
|
| |
The case is properly handled a few lines below by dropping the buffer.
We shouldn't perpetually block the audio chain function until the
target-timecode is reached.
https://bugzilla.gnome.org/show_bug.cgi?id=796906
|
|
|
|
|
|
|
|
| |
It works like a valve in front of the actual avwait. When recording ==
TRUE, other rules are then examined. When recording == FALSE, nothing is
passing through.
https://bugzilla.gnome.org/show_bug.cgi?id=796836
|
|
|
|
| |
https://bugzilla.gnome.org/show_bug.cgi?id=794568
|
|
|
|
| |
This reverts commit e0be05dc7059cc97dceb70a48ca9cad4ee2edce6.
|