summaryrefslogtreecommitdiffstats
path: root/gst/audioresample/gstaudioresample.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/audioresample/gstaudioresample.c')
-rw-r--r--gst/audioresample/gstaudioresample.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/gst/audioresample/gstaudioresample.c b/gst/audioresample/gstaudioresample.c
index cbbfe81a..02537075 100644
--- a/gst/audioresample/gstaudioresample.c
+++ b/gst/audioresample/gstaudioresample.c
@@ -395,14 +395,20 @@ static GstFlowReturn
GST_LOG_OBJECT (audioresample, "resample gave me %d bytes or %d samples",
outsize, outsamples);
+ GST_BUFFER_OFFSET (outbuf) = audioresample->offset;
GST_BUFFER_TIMESTAMP (outbuf) =
audioresample->offset * GST_SECOND / audioresample->o_rate;
- GST_BUFFER_DURATION (outbuf) =
- outsamples * GST_SECOND / audioresample->o_rate;
- GST_BUFFER_OFFSET (outbuf) = audioresample->offset;
+
audioresample->offset += outsamples;
GST_BUFFER_OFFSET_END (outbuf) = audioresample->offset;
+ /* we calculate DURATION as the difference between "next" timestamp
+ * and current timestamp so we ensure a contiguous stream, instead of
+ * having rounding errors. */
+ GST_BUFFER_DURATION (outbuf) =
+ audioresample->offset * GST_SECOND / audioresample->o_rate -
+ GST_BUFFER_TIMESTAMP (outbuf);
+
/* check for possible mem corruption */
if (outsize > GST_BUFFER_SIZE (outbuf)) {
/* this is an error that when it happens, would need fixing in the