mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-25 01:30:38 +00:00
liveadder: round when calculation length from duration
liveadder sometimes calculates the offsets incorrectly before adding. The resulting errors can easily be heard when mixing silence with a sine. I'm not sure what the exact conditions are to trigger this, but it definitively happens when the buffers of two streams have a different duration and buffer length and duration don't match exactly for one stream because of rounding errors (e.g. duration=0:00:00.021333333) I have to admit, I got lost in the math somewhere but it seems that not rounding in gst_live_adder_length_from_duration() causes 1 sample overlaps in consecutive buffers from the same stream. When using gst_util_uint64_scale_int_round() instead of just truncating the sine sound correctly again. https://bugzilla.gnome.org/show_bug.cgi?id=708345
This commit is contained in:
parent
a1cc9ca4de
commit
93ec45a6df
1 changed files with 2 additions and 1 deletions
|
@ -918,7 +918,8 @@ gst_live_adder_length_from_duration (GstLiveAdder * adder,
|
||||||
GstClockTime duration)
|
GstClockTime duration)
|
||||||
{
|
{
|
||||||
guint64 ret = GST_AUDIO_INFO_BPF (&adder->info) *
|
guint64 ret = GST_AUDIO_INFO_BPF (&adder->info) *
|
||||||
(duration * GST_AUDIO_INFO_RATE (&adder->info) / GST_SECOND);
|
gst_util_uint64_scale_int_round (duration,
|
||||||
|
GST_AUDIO_INFO_RATE (&adder->info), GST_SECOND);
|
||||||
|
|
||||||
return (guint) ret;
|
return (guint) ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue