Skip to content
Snippets Groups Projects
Commit 5935f9d6 authored by Alex Converse's avatar Alex Converse
Browse files

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.

Originally committed as revision 23935 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 8a472821
No related branches found
No related tags found
No related merge requests found
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include "libavcodec/get_bits.h" #include "libavcodec/get_bits.h"
#include "libavcodec/put_bits.h" #include "libavcodec/put_bits.h"
#include "libavcodec/avcodec.h" #include "libavcodec/avcodec.h"
#include "libavcodec/mpeg4audio.h"
#include "avformat.h" #include "avformat.h"
#include "adts.h" #include "adts.h"
...@@ -30,11 +31,17 @@ int ff_adts_decode_extradata(AVFormatContext *s, ADTSContext *adts, uint8_t *buf ...@@ -30,11 +31,17 @@ int ff_adts_decode_extradata(AVFormatContext *s, ADTSContext *adts, uint8_t *buf
{ {
GetBitContext gb; GetBitContext gb;
PutBitContext pb; PutBitContext pb;
MPEG4AudioConfig m4ac;
int off;
init_get_bits(&gb, buf, size * 8); init_get_bits(&gb, buf, size * 8);
adts->objecttype = get_bits(&gb, 5) - 1; off = ff_mpeg4audio_get_config(&m4ac, buf, size);
adts->sample_rate_index = get_bits(&gb, 4); if (off < 0)
adts->channel_conf = get_bits(&gb, 4); 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) { if (adts->objecttype > 3U) {
av_log(s, AV_LOG_ERROR, "MPEG-4 AOT %d is not allowed in ADTS\n", adts->objecttype+1); av_log(s, AV_LOG_ERROR, "MPEG-4 AOT %d is not allowed in ADTS\n", adts->objecttype+1);
...@@ -52,10 +59,6 @@ int ff_adts_decode_extradata(AVFormatContext *s, ADTSContext *adts, uint8_t *buf ...@@ -52,10 +59,6 @@ int ff_adts_decode_extradata(AVFormatContext *s, ADTSContext *adts, uint8_t *buf
av_log(s, AV_LOG_ERROR, "Scalable configurations are not allowed in ADTS\n"); av_log(s, AV_LOG_ERROR, "Scalable configurations are not allowed in ADTS\n");
return -1; return -1;
} }
if (get_bits(&gb, 1)) {
av_log_missing_feature(s, "Signaled SBR or PS", 0);
return -1;
}
if (!adts->channel_conf) { if (!adts->channel_conf) {
init_put_bits(&pb, adts->pce_data, MAX_PCE_SIZE); init_put_bits(&pb, adts->pce_data, MAX_PCE_SIZE);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment