# HG changeset patch # User alexc # Date 1277995772 0 # Node ID 1327f100894083255b589b9332069311ae0877fe # Parent fbc809c24e5be25d44eb8474764cf25c6c05ff24 Allow remuxing of explicitly signalled AAC files into ADTS. The ADTS output files are not explicitly signaled because the format does not support explicit signalling. diff -r fbc809c24e5b -r 1327f1008940 adtsenc.c --- a/adtsenc.c Thu Jul 01 13:50:15 2010 +0000 +++ b/adtsenc.c Thu Jul 01 14:49:32 2010 +0000 @@ -23,6 +23,7 @@ #include "libavcodec/get_bits.h" #include "libavcodec/put_bits.h" #include "libavcodec/avcodec.h" +#include "libavcodec/mpeg4audio.h" #include "avformat.h" #include "adts.h" @@ -30,11 +31,17 @@ { GetBitContext gb; PutBitContext pb; + MPEG4AudioConfig m4ac; + int off; init_get_bits(&gb, buf, size * 8); - adts->objecttype = get_bits(&gb, 5) - 1; - adts->sample_rate_index = get_bits(&gb, 4); - adts->channel_conf = get_bits(&gb, 4); + off = ff_mpeg4audio_get_config(&m4ac, buf, size); + if (off < 0) + return off; + skip_bits_long(&gb, off); + adts->objecttype = m4ac.object_type - 1; + adts->sample_rate_index = m4ac.sampling_index; + adts->channel_conf = m4ac.chan_config; if (adts->objecttype > 3U) { av_log(s, AV_LOG_ERROR, "MPEG-4 AOT %d is not allowed in ADTS\n", adts->objecttype+1); @@ -52,10 +59,6 @@ av_log(s, AV_LOG_ERROR, "Scalable configurations are not allowed in ADTS\n"); return -1; } - if (get_bits(&gb, 1)) { - av_log_missing_feature(s, "Signaled SBR or PS", 0); - return -1; - } if (!adts->channel_conf) { init_put_bits(&pb, adts->pce_data, MAX_PCE_SIZE);