mirror of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
synced 2024-11-22 03:21:00 +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
|
||||
let Some(ref out_buffer) = state.out_buffer else {
|
||||
if state.out_buffer.is_none() {
|
||||
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 {
|
||||
return false;
|
||||
|
|
Loading…
Reference in a new issue