[SCM] libav/experimental: Allow remuxing of explicitly signalled AAC files into ADTS.

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 17:09:50 UTC 2013


The following commit has been merged in the experimental branch:
commit 5935f9d6bd5902131d964a677516cf149bb08b48
Author: Alex Converse <alex.converse at gmail.com>
Date:   Thu Jul 1 14:49:32 2010 +0000

    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

diff --git a/libavformat/adtsenc.c b/libavformat/adtsenc.c
index ecc8dc4..bab9c14 100644
--- a/libavformat/adtsenc.c
+++ b/libavformat/adtsenc.c
@@ -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);
 

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list