okayed chunks of AAC encoder
authorKostya Shishkov <kostya.shishkov@gmail.com>
Sun, 24 Aug 2008 05:56:23 +0000 (05:56 +0000)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Sun, 24 Aug 2008 05:56:23 +0000 (05:56 +0000)
Originally committed as revision 14939 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/aacenc.c

index a3364cf73d30188adb812e19dc92f92393437c31..fff69645b36eeaaf0621f7b21bb5164fcf4c6d0b 100644 (file)
@@ -28,6 +28,7 @@
  *              TODOs:
  * psy model selection with some option
  * add sane pulse detection
  *              TODOs:
  * psy model selection with some option
  * add sane pulse detection
+ * add temporal noise shaping
  ***********************************/
 
 #include "avcodec.h"
  ***********************************/
 
 #include "avcodec.h"
@@ -211,10 +212,6 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)
         return -1;
     }
     s->samplerate_index = i;
         return -1;
     }
     s->samplerate_index = i;
-    s->swb_sizes1024 = swb_size_1024[i];
-    s->swb_num1024   = ff_aac_num_swb_1024[i];
-    s->swb_sizes128  = swb_size_128[i];
-    s->swb_num128    = ff_aac_num_swb_128[i];
 
     dsputil_init(&s->dsp, avctx);
     ff_mdct_init(&s->mdct1024, 11, 0);
 
     dsputil_init(&s->dsp, avctx);
     ff_mdct_init(&s->mdct1024, 11, 0);
@@ -229,7 +226,7 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)
     s->cpe = av_mallocz(sizeof(ChannelElement) * aac_chan_configs[avctx->channels-1][0]);
     if(ff_aac_psy_init(&s->psy, avctx, AAC_PSY_3GPP,
                        aac_chan_configs[avctx->channels-1][0], 0,
     s->cpe = av_mallocz(sizeof(ChannelElement) * aac_chan_configs[avctx->channels-1][0]);
     if(ff_aac_psy_init(&s->psy, avctx, AAC_PSY_3GPP,
                        aac_chan_configs[avctx->channels-1][0], 0,
-                       s->swb_sizes1024, s->swb_num1024, s->swb_sizes128, s->swb_num128) < 0){
+                       swb_size_1024[i], ff_aac_num_swb_1024[i], swb_size_128[i], ff_aac_num_swb_128[i]) < 0){
         av_log(avctx, AV_LOG_ERROR, "Cannot initialize selected model.\n");
         return -1;
     }
         av_log(avctx, AV_LOG_ERROR, "Cannot initialize selected model.\n");
         return -1;
     }
@@ -243,9 +240,8 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)
  * Encode ics_info element.
  * @see Table 4.6 (syntax of ics_info)
  */
  * Encode ics_info element.
  * @see Table 4.6 (syntax of ics_info)
  */
-static void put_ics_info(AVCodecContext *avctx, IndividualChannelStream *info)
+static void put_ics_info(AACEncContext *s, IndividualChannelStream *info)
 {
 {
-    AACEncContext *s = avctx->priv_data;
     int i;
 
     put_bits(&s->pb, 1, 0);                // ics_reserved bit
     int i;
 
     put_bits(&s->pb, 1, 0);                // ics_reserved bit
@@ -261,6 +257,24 @@ static void put_ics_info(AVCodecContext *avctx, IndividualChannelStream *info)
     }
 }
 
     }
 }
 
+/**
+ * Calculate the number of bits needed to code all coefficient signs in current band.
+ */
+static int calculate_band_sign_bits(AACEncContext *s, SingleChannelElement *sce,
+                                    int group_len, int start, int size)
+{
+    int bits = 0;
+    int i, w;
+    for(w = 0; w < group_len; w++){
+        for(i = 0; i < size; i++){
+            if(sce->icoefs[start + i])
+                bits++;
+        }
+        start += 128;
+    }
+    return bits;
+}
+
 /**
  * Encode pulse data.
  */
 /**
  * Encode pulse data.
  */
@@ -295,7 +309,7 @@ static void encode_spectral_coeffs(AACEncContext *s, SingleChannelElement *sce)
                 continue;
             }
             for(w2 = w; w2 < w + sce->ics.group_len[wg]; w2++){
                 continue;
             }
             for(w2 = w; w2 < w + sce->ics.group_len[wg]; w2++){
-                encode_band_coeffs(s, cpe, channel, start + w2*128,
+                encode_band_coeffs(s, sce, start + w2*128,
                                    sce->ics.swb_sizes[i],
                                    sce->band_type[w*16 + i]);
             }
                                    sce->ics.swb_sizes[i],
                                    sce->band_type[w*16 + i]);
             }