[FFmpeg-devel] [PATCH] AAC: move scratch array to context to ensure 16-byte alignment

Robert Swain robert.swain
Wed Dec 10 01:04:18 CET 2008


2008/12/9 Mans Rullgard <mans at mansr.com>:
> diff --git a/libavcodec/aac.c b/libavcodec/aac.c
> index 1803d4d..8fbf964 100644
> --- a/libavcodec/aac.c
> +++ b/libavcodec/aac.c
> @@ -1336,7 +1336,7 @@ static void imdct_and_windowing(AACContext * ac, SingleChannelElement * sce) {
>     const float * lwindow_prev = ics->use_kb_window[1] ? ff_aac_kbd_long_1024 : ff_sine_1024;
>     const float * swindow_prev = ics->use_kb_window[1] ? ff_aac_kbd_short_128 : ff_sine_128;
>     float * buf = ac->buf_mdct;
> -    DECLARE_ALIGNED(16, float, temp[128]);
> +    float * temp = ac->temp;
>     int i;
>
>     // imdct
> diff --git a/libavcodec/aac.h b/libavcodec/aac.h
> index 6022ca6..dab85b9 100644
> --- a/libavcodec/aac.h
> +++ b/libavcodec/aac.h
> @@ -288,6 +288,7 @@ typedef struct {
>     int sf_offset;                                    ///< offset into pow2sf_tab as appropriate for dsp.float_to_int16
>     /** @} */
>
> +    DECLARE_ALIGNED(16, float, temp[128]);
>  } AACContext;
>
>  #endif /* AVCODEC_AAC_H */

Is temp[] not aligned when the declaration is within the function? The
GCC manual at least says it works for variables or structure fields so
either should be OK, shouldn't they? Does this differ in other
compilers?

Regards,
Rob




More information about the ffmpeg-devel mailing list