Commit 6ca3b248 authored by Justin Ruggles's avatar Justin Ruggles

resample: allocate a large enough output buffer

Fixes invalid writes and crashes when doing conversions such as stereo to 5.1
channels or sample rate conversion on 5.1 channels.
parent b1740cb0
...@@ -272,11 +272,13 @@ int audio_resample(ReSampleContext *s, short *output, short *input, int nb_sampl ...@@ -272,11 +272,13 @@ int audio_resample(ReSampleContext *s, short *output, short *input, int nb_sampl
lenout = 4 * nb_samples * s->ratio + 16; lenout = 4 * nb_samples * s->ratio + 16;
if (s->sample_fmt[1] != AV_SAMPLE_FMT_S16) { if (s->sample_fmt[1] != AV_SAMPLE_FMT_S16) {
int out_size = lenout * av_get_bytes_per_sample(s->sample_fmt[1]) *
s->output_channels;
output_bak = output; output_bak = output;
if (!s->buffer_size[1] || s->buffer_size[1] < lenout) { if (!s->buffer_size[1] || s->buffer_size[1] < out_size) {
av_free(s->buffer[1]); av_free(s->buffer[1]);
s->buffer_size[1] = lenout; s->buffer_size[1] = out_size;
s->buffer[1] = av_malloc(s->buffer_size[1]); s->buffer[1] = av_malloc(s->buffer_size[1]);
if (!s->buffer[1]) { if (!s->buffer[1]) {
av_log(s->resample_context, AV_LOG_ERROR, "Could not allocate buffer\n"); av_log(s->resample_context, AV_LOG_ERROR, "Could not allocate buffer\n");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment