diff options
author | Maxim Poliakovski <max_pole@gmx.de> | 2013-10-02 02:23:16 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-10-02 10:44:02 +0200 |
commit | d49f3fa5794c9f17e058a6bce3ce6eac870ef85c (patch) | |
tree | 361fdfad4a493c195371c6e36832a35fc5a95b8a /libavcodec/atrac.h | |
parent | 4fa2484067d19a69dfe6f6e6b67a58fcba380a27 (diff) | |
download | ffmpeg-d49f3fa5794c9f17e058a6bce3ce6eac870ef85c.tar.gz |
atrac3: Generalize gain compensation code
Move it to the ATRAC common code, so it can be reused
in the umpcoming ATRAC3+ decoder.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/atrac.h')
-rw-r--r-- | libavcodec/atrac.h | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/libavcodec/atrac.h b/libavcodec/atrac.h index fec66bd2a7..e47d4ca18d 100644 --- a/libavcodec/atrac.h +++ b/libavcodec/atrac.h @@ -29,6 +29,26 @@ #ifndef AVCODEC_ATRAC_H #define AVCODEC_ATRAC_H +/** + * Gain control parameters for one subband. + */ +typedef struct AtracGainInfo { + int num_points; ///< number of gain control points + int levcode[7]; ///< level at corresponding control point + int loccode[7]; ///< location of gain control points +} AtracGainInfo; + +/** + * Gain compensation context structure. + */ +typedef struct AtracGCContext { + float gain_tab1[16]; ///< gain compensation level table + float gain_tab2[31]; ///< gain compensation interpolation table + int id2exp_offset; ///< offset for converting level index into level exponent + int loc_scale; ///< scale of location code = 2^loc_scale samples + int loc_size; ///< size of location code in samples +} AtracGCContext; + extern float ff_atrac_sf_table[64]; /** @@ -37,6 +57,31 @@ extern float ff_atrac_sf_table[64]; void ff_atrac_generate_tables(void); /** + * Initialize gain compensation context. + * + * @param gctx pointer to gain compensation context to initialize + * @param id2exp_offset offset for converting level index into level exponent + * @param loc_scale location size factor + */ +void ff_atrac_init_gain_compensation(AtracGCContext *gctx, int id2exp_offset, + int loc_scale); + +/** + * Apply gain compensation and perform the MDCT overlapping part. + * + * @param gctx pointer to gain compensation context + * @param in input buffer + * @param prev previous buffer to perform overlap against + * @param gc_now gain control information for current frame + * @param gc_next gain control information for next frame + * @param num_samples number of samples to process + * @param out output data goes here + */ +void ff_atrac_gain_compensation(AtracGCContext *gctx, float *in, float *prev, + AtracGainInfo *gc_now, AtracGainInfo *gc_next, + int num_samples, float *out); + +/** * Quadrature mirror synthesis filter. * * @param inlo lower part of spectrum |