summaryrefslogtreecommitdiff
path: root/gst
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2014-01-15 23:30:28 +0100
committerSebastian Dröge <sebastian@centricular.com>2014-01-15 23:30:57 +0100
commitaa3eb10ceea5296f5abe12ca8be35b875f58d0eb (patch)
treec4dfd7be1663e50e90e11f8812cf7efbedceac3f /gst
parent078b82d6d1c609257b6528a9c4efb1ed4acd2bb8 (diff)
downloadgstreamer-plugins-bad-aa3eb10ceea5296f5abe12ca8be35b875f58d0eb.tar.gz
audiomixer: Fix and simplify overlap calculation
Diffstat (limited to 'gst')
-rw-r--r--gst/audiomixer/gstaudiomixer.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/gst/audiomixer/gstaudiomixer.c b/gst/audiomixer/gstaudiomixer.c
index 2605cc370..592985106 100644
--- a/gst/audiomixer/gstaudiomixer.c
+++ b/gst/audiomixer/gstaudiomixer.c
@@ -1424,11 +1424,9 @@ gst_audio_mixer_mix_buffer (GstAudioMixer * audiomixer, GstCollectPads * pads,
else
out_start = 0;
- if (audiomixer->offset + audiomixer->blocksize + adata->position / bpf <
- adata->output_offset + adata->size / bpf + out_start)
+ overlap = adata->size / bpf - adata->position / bpf;
+ if (overlap > audiomixer->blocksize - out_start)
overlap = audiomixer->blocksize - out_start;
- else
- overlap = adata->size / bpf - adata->position / bpf;
inbuf = gst_collect_pads_peek (pads, collect_data);
g_assert (inbuf != NULL && inbuf == adata->buffer);
@@ -1441,6 +1439,8 @@ gst_audio_mixer_mix_buffer (GstAudioMixer * audiomixer, GstCollectPads * pads,
adata->output_offset += adata->size / bpf;
if (adata->position >= adata->size) {
/* Buffer done, drop it */
+ adata->position = 0;
+ adata->size = 0;
gst_buffer_replace (&adata->buffer, NULL);
gst_buffer_unref (gst_collect_pads_pop (pads, collect_data));
}