* qatar/master: atrac3: Generalize gain compensation code Conflicts: libavcodec/atrac.c libavcodec/atrac.h libavcodec/atrac3.c Merged-by: Michael Niedermayer <michaelni@gmx.at>tags/n2.1
| @@ -88,7 +88,8 @@ void ff_atrac_gain_compensation(AtracGCContext *gctx, float *in, float *prev, | |||||
| float lev, gc_scale, gain_inc; | float lev, gc_scale, gain_inc; | ||||
| int i, pos, lastpos; | int i, pos, lastpos; | ||||
| gc_scale = gc_next->num_points ? gctx->gain_tab1[gc_next->levcode[0]] : 1.0f; | |||||
| gc_scale = gc_next->num_points ? gctx->gain_tab1[gc_next->lev_code[0]] | |||||
| : 1.0f; | |||||
| if (!gc_now->num_points) { | if (!gc_now->num_points) { | ||||
| for (pos = 0; pos < num_samples; pos++) | for (pos = 0; pos < num_samples; pos++) | ||||
| @@ -97,13 +98,12 @@ void ff_atrac_gain_compensation(AtracGCContext *gctx, float *in, float *prev, | |||||
| pos = 0; | pos = 0; | ||||
| for (i = 0; i < gc_now->num_points; i++) { | for (i = 0; i < gc_now->num_points; i++) { | ||||
| lastpos = gc_now->loccode[i] << gctx->loc_scale; | |||||
| lastpos = gc_now->loc_code[i] << gctx->loc_scale; | |||||
| lev = gctx->gain_tab1[gc_now->levcode[i]]; | |||||
| gain_inc = gctx->gain_tab2[(i + 1 < gc_now->num_points | |||||
| ? gc_now->levcode[i + 1] | |||||
| : gctx->id2exp_offset) | |||||
| - gc_now->levcode[i] + 15]; | |||||
| lev = gctx->gain_tab1[gc_now->lev_code[i]]; | |||||
| gain_inc = gctx->gain_tab2[(i + 1 < gc_now->num_points ? gc_now->lev_code[i + 1] | |||||
| : gctx->id2exp_offset) - | |||||
| gc_now->lev_code[i] + 15]; | |||||
| /* apply constant gain level and overlap */ | /* apply constant gain level and overlap */ | ||||
| for (; pos < lastpos; pos++) | for (; pos < lastpos; pos++) | ||||
| @@ -33,20 +33,20 @@ | |||||
| * Gain control parameters for one subband. | * Gain control parameters for one subband. | ||||
| */ | */ | ||||
| typedef struct AtracGainInfo { | 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 | |||||
| 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; | } AtracGainInfo; | ||||
| /** | /** | ||||
| * Gain compensation context structure. | * Gain compensation context structure. | ||||
| */ | */ | ||||
| typedef struct AtracGCContext { | 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 | |||||
| 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; | } AtracGCContext; | ||||
| extern float ff_atrac_sf_table[64]; | extern float ff_atrac_sf_table[64]; | ||||
| @@ -413,16 +413,15 @@ static int decode_tonal_components(GetBitContext *gb, | |||||
| static int decode_gain_control(GetBitContext *gb, GainBlock *block, | static int decode_gain_control(GetBitContext *gb, GainBlock *block, | ||||
| int num_bands) | int num_bands) | ||||
| { | { | ||||
| int j, b; | |||||
| int b, j; | |||||
| int *level, *loc; | int *level, *loc; | ||||
| AtracGainInfo *gain = block->g_block; | AtracGainInfo *gain = block->g_block; | ||||
| for (b = 0; b <= num_bands; b++) { | for (b = 0; b <= num_bands; b++) { | ||||
| gain[b].num_points = get_bits(gb, 3); | gain[b].num_points = get_bits(gb, 3); | ||||
| level = gain[b].levcode; | |||||
| loc = gain[b].loccode; | |||||
| level = gain[b].lev_code; | |||||
| loc = gain[b].loc_code; | |||||
| for (j = 0; j < gain[b].num_points; j++) { | for (j = 0; j < gain[b].num_points; j++) { | ||||
| level[j] = get_bits(gb, 4); | level[j] = get_bits(gb, 4); | ||||
| @@ -432,7 +431,7 @@ static int decode_gain_control(GetBitContext *gb, GainBlock *block, | |||||
| } | } | ||||
| } | } | ||||
| /* Clear unused blocks. */ | |||||
| /* Clear the unused blocks. */ | |||||
| for (; b < 4 ; b++) | for (; b < 4 ; b++) | ||||
| gain[b].num_points = 0; | gain[b].num_points = 0; | ||||