]> git.sesse.net Git - ffmpeg/commitdiff
Allow remuxing of explicitly signalled AAC files into ADTS.
authorAlex Converse <alex.converse@gmail.com>
Thu, 1 Jul 2010 14:49:32 +0000 (14:49 +0000)
committerAlex Converse <alex.converse@gmail.com>
Thu, 1 Jul 2010 14:49:32 +0000 (14:49 +0000)
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

libavformat/adtsenc.c

index ecc8dc40dee68c70fad5549922e2e32b8c054392..bab9c145c2d50e4b66bf39a5a0861b3aa154d82b 100644 (file)
@@ -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 @@ int ff_adts_decode_extradata(AVFormatContext *s, ADTSContext *adts, uint8_t *buf
 {
     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 @@ 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");
         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);