aacenc: Implement dummy channel group analysis that just calls the single channel...
authorNathan Caldwell <saintdev@gmail.com>
Thu, 19 May 2011 05:14:59 +0000 (23:14 -0600)
committerAlex Converse <alex.converse@gmail.com>
Wed, 29 Jun 2011 21:28:53 +0000 (14:28 -0700)
libavcodec/aacenc.c
libavcodec/aacpsy.c

index 1df16ad..385c6aa 100644 (file)
@@ -564,14 +564,17 @@ static int aac_encode_frame(AVCodecContext *avctx,
         memset(chan_el_counter, 0, sizeof(chan_el_counter));
         for (i = 0; i < s->chan_map[0]; i++) {
             FFPsyWindowInfo* wi = windows + start_ch;
+            const float *coeffs[2];
             tag      = s->chan_map[i+1];
             chans    = tag == TYPE_CPE ? 2 : 1;
             cpe      = &s->cpe[i];
             put_bits(&s->pb, 3, tag);
             put_bits(&s->pb, 4, chan_el_counter[tag]++);
+            for (ch = 0; ch < chans; ch++)
+                coeffs[ch] = cpe->ch[ch].coeffs;
+            s->psy.model->analyze_group(&s->psy, start_ch, coeffs, wi);
             for (ch = 0; ch < chans; ch++) {
                 s->cur_channel = start_ch * 2 + ch;
-                s->psy.model->analyze(&s->psy, start_ch + ch, cpe->ch[ch].coeffs, &wi[ch]);
                 s->coder->search_for_quantizers(avctx, s, &cpe->ch[ch], s->lambda);
             }
             cpe->common_window = 0;
index 79d7084..ff17846 100644 (file)
@@ -741,6 +741,16 @@ static void psy_3gpp_analyze(FFPsyContext *ctx, int channel,
     memcpy(pch->prev_band, pch->band, sizeof(pch->band));
 }
 
+static void psy_3gpp_analyze_group(FFPsyContext *ctx, int channel,
+                                   const float **coeffs, const FFPsyWindowInfo *wi)
+{
+    int ch;
+    FFPsyChannelGroup *group = ff_psy_find_group(ctx, channel);
+
+    for (ch = 0; ch < group->num_ch; ch++)
+        psy_3gpp_analyze(ctx, channel + ch, coeffs[ch], &wi[ch]);
+}
+
 static av_cold void psy_3gpp_end(FFPsyContext *apc)
 {
     AacPsyContext *pctx = (AacPsyContext*) apc->model_priv_data;
@@ -921,6 +931,6 @@ const FFPsyModel ff_aac_psy_model =
     .init    = psy_3gpp_init,
     .window  = psy_lame_window,
     .analyze = psy_3gpp_analyze,
-    .analyze_group = NULL,
+    .analyze_group = psy_3gpp_analyze_group,
     .end     = psy_3gpp_end,
 };