From 454959a5aa73b585e2937b948178310c74bfc297 Mon Sep 17 00:00:00 2001 From: Gian-Carlo Pascutto Date: Sun, 3 Nov 2013 12:42:47 +0200 Subject: [PATCH] aacdec: Set the profile during decoding Previously the profile would not be set if the bitstream needs to be decoded to know the profile. Signed-off-by: Anton Khirnov --- libavcodec/aacdec.c | 10 ++++++++++ libavcodec/aacsbr.c | 1 + 2 files changed, 11 insertions(+) diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c index ae22e67595..6a05938281 100644 --- a/libavcodec/aacdec.c +++ b/libavcodec/aacdec.c @@ -2185,10 +2185,12 @@ static int decode_extension_payload(AACContext *ac, GetBitContext *gb, int cnt, } else if (ac->oc[1].m4ac.ps == -1 && ac->oc[1].status < OC_LOCKED && ac->avctx->channels == 1) { ac->oc[1].m4ac.sbr = 1; ac->oc[1].m4ac.ps = 1; + ac->avctx->profile = FF_PROFILE_AAC_HE_V2; output_configure(ac, ac->oc[1].layout_map, ac->oc[1].layout_map_tags, ac->oc[1].status, 1); } else { ac->oc[1].m4ac.sbr = 1; + ac->avctx->profile = FF_PROFILE_AAC_HE; } res = ff_decode_sbr_extension(ac, &che->sbr, gb, crc_flag, cnt, elem_type); break; @@ -2704,6 +2706,10 @@ static int aac_decode_er_frame(AVCodecContext *avctx, void *data, if ((err = frame_configure_elements(avctx)) < 0) return err; + // The FF_PROFILE_AAC_* defines are all object_type - 1 + // This may lead to an undefined profile being signaled + ac->avctx->profile = ac->oc[1].m4ac.object_type - 1; + ac->tags_mapped = 0; if (chan_config < 0 || chan_config >= 8) { @@ -2772,6 +2778,10 @@ static int aac_decode_frame_int(AVCodecContext *avctx, void *data, if ((err = frame_configure_elements(avctx)) < 0) goto fail; + // The FF_PROFILE_AAC_* defines are all object_type - 1 + // This may lead to an undefined profile being signaled + ac->avctx->profile = ac->oc[1].m4ac.object_type - 1; + ac->tags_mapped = 0; // parse while ((elem_type = get_bits(gb, 3)) != TYPE_END) { diff --git a/libavcodec/aacsbr.c b/libavcodec/aacsbr.c index 650f7aa7e2..d3822477cc 100644 --- a/libavcodec/aacsbr.c +++ b/libavcodec/aacsbr.c @@ -919,6 +919,7 @@ static void read_sbr_extension(AACContext *ac, SpectralBandReplication *sbr, } else { #if 1 *num_bits_left -= ff_ps_read_data(ac->avctx, gb, &sbr->ps, *num_bits_left); + ac->avctx->profile = FF_PROFILE_AAC_HE_V2; #else avpriv_report_missing_feature(ac->avctx, "Parametric Stereo"); skip_bits_long(gb, *num_bits_left); // bs_fill_bits