resample: fix avresample_get_delay() return value

The correct "next" input sample is not the first sample of the
resampling buffer, but the center sample of the filter_length-sized
block at the beginning.

CC:libav-stable@libav.org
This commit is contained in:
Anton Khirnov 2014-03-04 21:18:27 +01:00
parent 71c32ed533
commit b9dea23766
1 changed files with 5 additions and 1 deletions

View File

@ -47,6 +47,7 @@ struct ResampleContext {
void (*resample_one)(struct ResampleContext *c, int no_filter, void *dst0,
int dst_index, const void *src0, int src_size,
int index, int frac);
int padding_size;
};
@ -212,6 +213,7 @@ ResampleContext *ff_audio_resample_init(AVAudioResampleContext *avr)
goto error;
c->ideal_dst_incr = c->dst_incr;
c->padding_size = (c->filter_length - 1) / 2;
c->index = -phase_count * ((c->filter_length - 1) / 2);
c->frac = 0;
@ -462,8 +464,10 @@ int ff_audio_resample(ResampleContext *c, AudioData *dst, AudioData *src)
int avresample_get_delay(AVAudioResampleContext *avr)
{
ResampleContext *c = avr->resample;
if (!avr->resample_needed || !avr->resample)
return 0;
return avr->resample->buffer->nb_samples;
return FFMAX(c->buffer->nb_samples - c->padding_size, 0);
}