mirror of https://git.ffmpeg.org/ffmpeg.git
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:
parent
4a7d3837b4
commit
462d5e8e6c
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue