audio-resampler: fix history after buffer resize

When we resize the temp buffer, move the history in its new place.
This commit is contained in:
Wim Taymans 2016-01-26 22:53:33 +01:00
parent ed747492ef
commit bbdb447b2b

View file

@ -910,28 +910,28 @@ get_sample_bufs (GstAudioResampler * resampler, gsize need)
{ {
if (G_LIKELY (resampler->samples_len < need)) { if (G_LIKELY (resampler->samples_len < need)) {
guint c, blocks = resampler->blocks; guint c, blocks = resampler->blocks;
gsize bytes; gsize bytes, to_move = 0;
gint8 *ptr; gint8 *ptr, *samples;
GST_LOG ("realloc %d -> %d", (gint) resampler->samples_len, (gint) need); GST_LOG ("realloc %d -> %d", (gint) resampler->samples_len, (gint) need);
bytes = GST_ROUND_UP_N (need * resampler->bps * resampler->inc, ALIGN); bytes = GST_ROUND_UP_N (need * resampler->bps * resampler->inc, ALIGN);
resampler->samples = samples = g_malloc0 (blocks * bytes + ALIGN - 1);
g_realloc (resampler->samples, blocks * bytes + ALIGN - 1); ptr = MEM_ALIGN (samples, ALIGN);
if (resampler->samples_len == 0) {
memset (resampler->samples, 0, blocks * bytes + ALIGN - 1);
} else {
/* FIXME, move history */
}
resampler->samples_len = need;
ptr = MEM_ALIGN (resampler->samples, ALIGN); /* if we had some data, move history */
if (resampler->samples_len > 0)
to_move = resampler->samples_avail * resampler->bps * resampler->inc;
/* set up new pointers */ /* set up new pointers */
for (c = 0; c < blocks; c++) { for (c = 0; c < blocks; c++) {
memcpy (ptr + (c * bytes), resampler->sbuf[c], to_move);
resampler->sbuf[c] = ptr + (c * bytes); resampler->sbuf[c] = ptr + (c * bytes);
} }
g_free (resampler->samples);
resampler->samples = samples;
resampler->samples_len = need;
} }
return resampler->sbuf; return resampler->sbuf;
} }