diff --git a/libavcodec/aacdec.h b/libavcodec/aacdec.h index e55fea6e40..052ed59e01 100644 --- a/libavcodec/aacdec.h +++ b/libavcodec/aacdec.h @@ -41,6 +41,8 @@ #include "aac.h" #include "mpeg4audio.h" +typedef struct AACDecContext AACDecContext; + /** * Output configuration status */ @@ -197,12 +199,37 @@ typedef struct DynamicRangeControl { */ } DynamicRangeControl; +/** + * DSP-specific primitives + */ +typedef struct AACDecDSP { + void (*dequant_scalefactors)(SingleChannelElement *sce); + + void (*apply_mid_side_stereo)(AACDecContext *ac, ChannelElement *cpe); + void (*apply_intensity_stereo)(AACDecContext *ac, ChannelElement *cpe, + int ms_present); + + void (*apply_tns)(void *_coef_param, TemporalNoiseShaping *tns, + IndividualChannelStream *ics, int decode); + + void (*apply_ltp)(AACDecContext *ac, SingleChannelElement *sce); + void (*update_ltp)(AACDecContext *ac, SingleChannelElement *sce); + + void (*imdct_and_windowing)(AACDecContext *ac, SingleChannelElement *sce); + void (*imdct_and_windowing_960)(AACDecContext *ac, SingleChannelElement *sce); + void (*imdct_and_windowing_ld)(AACDecContext *ac, SingleChannelElement *sce); + void (*imdct_and_windowing_eld)(AACDecContext *ac, SingleChannelElement *sce); +} AACDecDSP; + /** * main AAC decoding context */ -typedef struct AACDecContext { +struct AACDecContext { const struct AVClass *class; struct AVCodecContext *avctx; + + AACDecDSP dsp; + struct AVFrame *frame; int is_saved; ///< Set if elements have stored overlap from previous frame. @@ -298,7 +325,7 @@ typedef struct AACDecContext { void (*update_ltp)(struct AACDecContext *ac, SingleChannelElement *sce); void (*vector_pow43)(int *coefs, int len); void (*subband_scale)(int *dst, int *src, int scale, int offset, int len, void *log_context); -} AACDecContext; +}; #if defined(USE_FIXED) && USE_FIXED #define fdsp RENAME_FIXED(fdsp)