aacdec: set AVFrame sample_rate

AVFrame.sample_rate is set in ff_get_buffer, but aacdec calls
ff_get_buffer before the samplerate is known. So it needs to be
set again before returning the frame.
This commit is contained in:
John Stebbins 2014-02-09 01:19:30 +00:00 committed by Janne Grunau
parent 4a7d3837b4
commit 462d5e8e6c
1 changed files with 7 additions and 4 deletions

View File

@ -2753,6 +2753,7 @@ static int aac_decode_er_frame(AVCodecContext *avctx, void *data,
spectral_to_sample(ac); spectral_to_sample(ac);
ac->frame->nb_samples = samples; ac->frame->nb_samples = samples;
ac->frame->sample_rate = avctx->sample_rate;
*got_frame_ptr = 1; *got_frame_ptr = 1;
skip_bits_long(gb, get_bits_left(gb)); skip_bits_long(gb, get_bits_left(gb));
@ -2885,16 +2886,18 @@ static int aac_decode_frame_int(AVCodecContext *avctx, void *data,
multiplier = (ac->oc[1].m4ac.sbr == 1) ? ac->oc[1].m4ac.ext_sample_rate > ac->oc[1].m4ac.sample_rate : 0; multiplier = (ac->oc[1].m4ac.sbr == 1) ? ac->oc[1].m4ac.ext_sample_rate > ac->oc[1].m4ac.sample_rate : 0;
samples <<= multiplier; samples <<= multiplier;
if (samples)
ac->frame->nb_samples = samples;
*got_frame_ptr = !!samples;
if (ac->oc[1].status && audio_found) { if (ac->oc[1].status && audio_found) {
avctx->sample_rate = ac->oc[1].m4ac.sample_rate << multiplier; avctx->sample_rate = ac->oc[1].m4ac.sample_rate << multiplier;
avctx->frame_size = samples; avctx->frame_size = samples;
ac->oc[1].status = OC_LOCKED; ac->oc[1].status = OC_LOCKED;
} }
if (samples) {
ac->frame->nb_samples = samples;
ac->frame->sample_rate = avctx->sample_rate;
}
*got_frame_ptr = !!samples;
return 0; return 0;
fail: fail:
pop_output_configuration(ac); pop_output_configuration(ac);