Revision 7e0a284b libavcodec/ac3enc.c
libavcodec/ac3enc.c  

78  78 
int16_t **band_psd; ///< psd per critical band 
79  79 
int16_t **mask; ///< masking curve 
80  80 
uint16_t **qmant; ///< quantized mantissas 
81 
int8_t exp_shift[AC3_MAX_CHANNELS]; ///< exponent shift values


81 
int8_t coeff_shift[AC3_MAX_CHANNELS]; ///< fixedpoint coefficient shift values


82  82 
uint8_t new_rematrixing_strategy; ///< send new rematrixing flags in this block 
83  83 
uint8_t rematrixing_flags[4]; ///< rematrixing flags 
84  84 
} AC3Block; 
...  ...  
269  269  
270  270 
apply_window(&s>dsp, s>windowed_samples, input_samples, s>mdct.window, AC3_WINDOW_SIZE); 
271  271  
272 
block>exp_shift[ch] = normalize_samples(s);


272 
block>coeff_shift[ch] = normalize_samples(s);


273  273  
274  274 
mdct512(&s>mdct, block>mdct_coef[ch], s>windowed_samples); 
275  275 
} 
...  ...  
416  416 
AC3Block *block = &s>blocks[blk]; 
417  417 
uint8_t *exp = block>exp[ch]; 
418  418 
int32_t *coef = block>fixed_coef[ch]; 
419 
int exp_shift = block>exp_shift[ch]; 

420  419 
for (i = 0; i < AC3_MAX_COEFS; i++) { 
421  420 
int e; 
422  421 
int v = abs(coef[i]); 
423  422 
if (v == 0) 
424  423 
e = 24; 
425  424 
else { 
426 
e = 23  av_log2(v) + exp_shift;


425 
e = 23  av_log2(v); 

427  426 
if (e >= 24) { 
428  427 
e = 24; 
429  428 
coef[i] = 0; 
...  ...  
1139  1138 
* Quantize a set of mantissas for a single channel in a single block. 
1140  1139 
*/ 
1141  1140 
static void quantize_mantissas_blk_ch(AC3EncodeContext *s, int32_t *fixed_coef, 
1142 
int8_t exp_shift, uint8_t *exp,


1141 
uint8_t *exp, 

1143  1142 
uint8_t *bap, uint16_t *qmant, int n) 
1144  1143 
{ 
1145  1144 
int i; 
...  ...  
1147  1146 
for (i = 0; i < n; i++) { 
1148  1147 
int v; 
1149  1148 
int c = fixed_coef[i]; 
1150 
int e = exp[i]  exp_shift;


1149 
int e = exp[i]; 

1151  1150 
int b = bap[i]; 
1152  1151 
switch (b) { 
1153  1152 
case 0: 
...  ...  
1243  1242 
s>qmant1_ptr = s>qmant2_ptr = s>qmant4_ptr = NULL; 
1244  1243  
1245  1244 
for (ch = 0; ch < s>channels; ch++) { 
1246 
quantize_mantissas_blk_ch(s, block>fixed_coef[ch], block>exp_shift[ch],


1245 
quantize_mantissas_blk_ch(s, block>fixed_coef[ch], 

1247  1246 
block>exp[ch], block>bap[ch], 
1248  1247 
block>qmant[ch], s>nb_coefs[ch]); 
1249  1248 
} 
Also available in: Unified diff