Mercurial > libavformat.hg
changeset 6205:1327f1008940 libavformat
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.
author | alexc |
---|---|
date | Thu, 01 Jul 2010 14:49:32 +0000 |
parents | fbc809c24e5b |
children | 8515b7b4fe87 |
files | adtsenc.c |
diffstat | 1 files changed, 10 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- 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);