mirror of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
synced 2025-02-16 12:55:13 +00:00
livesync: Use the actual output buffer duration of gap filler buffers
Otherwise the following can happen: - 25fps stream - buffer with PTS 0ms, duration 20ms arrives, is output - buffer with PTS 40ms, duration 20ms arrives - is considered early because 20ms < 40ms - filler buffer with PTS 20ms and 40ms duration is output - buffer with PTS 40ms is output After this change no filler would be inserted because the gap is smaller than the duration of a filler buffer. Also, previously the 40ms duration would be used if a filler was previously output because in that case the cached output buffer duration would've already been patched from 20ms to 40ms. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1647>
This commit is contained in:
parent
eee93aea52
commit
bd2a039c8d
1 changed files with 7 additions and 3 deletions
|
@ -1295,10 +1295,14 @@ impl LiveSync {
|
||||||
};
|
};
|
||||||
|
|
||||||
// When out_timestamp is set, we also have an out_buffer unless it is the first buffer
|
// When out_timestamp is set, we also have an out_buffer unless it is the first buffer
|
||||||
let Some(ref out_buffer) = state.out_buffer else {
|
if state.out_buffer.is_none() {
|
||||||
return false;
|
return false;
|
||||||
};
|
}
|
||||||
let slack = out_buffer.duration().unwrap();
|
|
||||||
|
// Use the duration we would insert as a gap filler in patch_output_buffer()
|
||||||
|
let slack = state.out_duration.map_or(DEFAULT_DURATION, |dur| {
|
||||||
|
dur.clamp(MINIMUM_DURATION, MAXIMUM_DURATION)
|
||||||
|
});
|
||||||
|
|
||||||
if timestamp.start < out_timestamp.end + slack {
|
if timestamp.start < out_timestamp.end + slack {
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in a new issue