Author: superdump
Date: Tue Jul 15 15:24:22 2008
New Revision: 2788

Log:
Dynamically allocate an aligned buffer for interleaved_output rather than
having a mostly redundant large array in the context


Modified:
   aac/aac.c

Modified: aac/aac.c
==============================================================================
--- aac/aac.c   (original)
+++ aac/aac.c   Tue Jul 15 15:24:22 2008
@@ -434,7 +434,7 @@ typedef struct {
      * @defgroup output   Members used for output interleaving and down-mixing.
      * @{
      */
-    DECLARE_ALIGNED_16(float, interleaved_output[MAX_CHANNELS * 1024]); ///< 
Interim buffer for interleaving PCM samples.
+    float *interleaved_output;                        ///< Interim buffer for 
interleaving PCM samples.
     float *output_data[MAX_CHANNELS];                 ///< Points to each 
element's 'ret' buffer (PCM output).
     ChannelElement *mm[3];                            ///< Center/Front/Back 
channel elements to use for matrix mix-down.
     float add_bias;                                   ///< offset for 
dsp.float_to_int16
@@ -564,6 +564,14 @@ static int output_configure(AACContext *
         }
     }
 
+    // allocate appropriately aligned buffer for interleaved output
+    if(!ac->interleaved_output)
+        ac->interleaved_output = av_malloc(channels * 1024 * sizeof(float));
+    else if(channels != avctx->channels) {
+        av_free(ac->interleaved_output);
+        ac->interleaved_output = av_malloc(channels * 1024 * sizeof(float));
+    }
+
     ac->mm[MIXDOWN_FRONT] = ac->mm[MIXDOWN_BACK] = ac->mm[MIXDOWN_CENTER] = 
NULL;
 
     /* Check for matrix mix-down to mono or stereo. */
@@ -2332,6 +2340,7 @@ static av_cold int aac_decode_close(AVCo
         av_free(ac->mdct_ltp);
     }
 #endif /* AAC_LTP */
+    av_freep(&ac->interleaved_output);
     return 0 ;
 }
 
_______________________________________________
FFmpeg-soc mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-soc

Reply via email to