liveadder: round when calculation length from duration
authorMichael Olbrich <m.olbrich@pengutronix.de>
Wed, 18 Sep 2013 15:51:26 +0000 (17:51 +0200)
committerSebastian Dröge <slomo@circular-chaos.org>
Sat, 28 Sep 2013 11:31:13 +0000 (13:31 +0200)
commit93ec45a6dfaa9fb0047742fb85314c4946b35070
tree2288519f4b250887528eb6d63caa8cb79b234066
parenta1cc9ca4de84d3230a4db875db8ef0983372d57d
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
gst/liveadder/liveadder.c