Commit 4a63c69f authored by Michael Niedermayer's avatar Michael Niedermayer

Merge remote-tracking branch 'qatar/master'

* qatar/master:
  atrac3: Generalize gain compensation code

Conflicts:
	libavcodec/atrac.c
	libavcodec/atrac.h
	libavcodec/atrac3.c
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents 2ece7d94 79cbac8c
...@@ -88,7 +88,8 @@ void ff_atrac_gain_compensation(AtracGCContext *gctx, float *in, float *prev, ...@@ -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, ...@@ -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]]; lev = gctx->gain_tab1[gc_now->lev_code[i]];
gain_inc = gctx->gain_tab2[(i + 1 < gc_now->num_points gain_inc = gctx->gain_tab2[(i + 1 < gc_now->num_points ? gc_now->lev_code[i + 1]
? gc_now->levcode[i + 1] : gctx->id2exp_offset) -
: gctx->id2exp_offset) gc_now->lev_code[i] + 15];
- gc_now->levcode[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 @@ ...@@ -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 num_points; ///< number of gain control points
int levcode[7]; ///< level at corresponding control point int lev_code[7]; ///< level at corresponding control point
int loccode[7]; ///< location of gain control points 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_tab1[16]; ///< gain compensation level table
float gain_tab2[31]; ///< gain compensation interpolation table float gain_tab2[31]; ///< gain compensation interpolation table
int id2exp_offset; ///< offset for converting level index into level exponent int id2exp_offset; ///< offset for converting level index into level exponent
int loc_scale; ///< scale of location code = 2^loc_scale samples int loc_scale; ///< scale of location code = 2^loc_scale samples
int loc_size; ///< size of location code in 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, ...@@ -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; level = gain[b].lev_code;
loc = gain[b].loccode; 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, ...@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment