[FFmpeg-cvslog] r23935 - trunk/libavformat/adtsenc.c

alexc subversion
Thu Jul 1 16:49:33 CEST 2010


Author: alexc
Date: Thu Jul  1 16:49:32 2010
New Revision: 23935

Log:
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.

Modified:
   trunk/libavformat/adtsenc.c

Modified: trunk/libavformat/adtsenc.c
==============================================================================
--- trunk/libavformat/adtsenc.c	Thu Jul  1 15:50:15 2010	(r23934)
+++ trunk/libavformat/adtsenc.c	Thu Jul  1 16:49:32 2010	(r23935)
@@ -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(AVFormatCon
 {
     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(AVFormatCon
         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);
 



More information about the ffmpeg-cvslog mailing list