From 5bfe1baab393d2a0b16329abda1bd1a7f38d4aec Mon Sep 17 00:00:00 2001 From: Leo Singer Date: Fri, 17 Dec 2010 00:49:26 -0800 Subject: [PATCH] audioresample: corrected buffer duration calculation to account for nonzero initial timestamp Since we calculate timestamps by: timestamp = t0 + (out samples) / (out rate) and durations by: duration = ((out samples) + (processed samples)) / (out rate) - timestamp if t0 is nonzero, this would simplify to duration = t0 + (processed samples) / (out rate). This duration is too large by the amount t0. We should have done: duration = t0 + ((out samples) + (processed samples)) / (out rate) - timestamp so that duration = (processed samples) / (out rate). --- gst/audioresample/gstaudioresample.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gst/audioresample/gstaudioresample.c b/gst/audioresample/gstaudioresample.c index a9222a6..90967c2 100644 --- a/gst/audioresample/gstaudioresample.c +++ b/gst/audioresample/gstaudioresample.c @@ -889,7 +889,7 @@ gst_audio_resample_push_drain (GstAudioResample * resample, guint history_len) GST_BUFFER_TIMESTAMP (outbuf) = resample->t0 + gst_util_uint64_scale_int_round (resample->samples_out, GST_SECOND, resample->outrate); - GST_BUFFER_DURATION (outbuf) = + GST_BUFFER_DURATION (outbuf) = resample->t0 + gst_util_uint64_scale_int_round (resample->samples_out + out_processed, GST_SECOND, resample->outrate) - GST_BUFFER_TIMESTAMP (outbuf); } else { @@ -1137,7 +1137,7 @@ gst_audio_resample_process (GstAudioResample * resample, GstBuffer * inbuf, GST_BUFFER_TIMESTAMP (outbuf) = resample->t0 + gst_util_uint64_scale_int_round (resample->samples_out, GST_SECOND, resample->outrate); - GST_BUFFER_DURATION (outbuf) = + GST_BUFFER_DURATION (outbuf) = resample->t0 + gst_util_uint64_scale_int_round (resample->samples_out + out_processed, GST_SECOND, resample->outrate) - GST_BUFFER_TIMESTAMP (outbuf); } else { -- 2.7.4