diff options
author | Maxim Poliakovski <max_pole@gmx.de> | 2013-09-30 23:14:51 +0200 |
---|---|---|
committer | Diego Biurrun <diego@biurrun.de> | 2013-10-03 18:20:01 +0200 |
commit | 79cbac8cd456c3f1c914bd1e7262b55e48de13a7 (patch) | |
tree | a06c45e77b9f0e19acc69360084aa8227c2f3ebc /libavcodec/atrac.h | |
parent | 5ce04c14dd3dd3670cbdba82275a3a72c716ec6f (diff) | |
download | ffmpeg-79cbac8cd456c3f1c914bd1e7262b55e48de13a7.tar.gz |
atrac3: Generalize gain compensation code
Move it to the ATRAC common code, to reuse in the upcoming ATRAC3+ decoder.
Signed-off-by: Diego Biurrun <diego@biurrun.de>
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 4923caa78a..8909323b01 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 lev_code[7]; ///< level at corresponding control point + int loc_code[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 |