|
|
|
@@ -117,6 +117,7 @@ typedef struct AC3EncodeContext { |
|
|
|
int nb_coefs[AC3_MAX_CHANNELS]; |
|
|
|
|
|
|
|
int rematrixing; ///< determines how rematrixing strategy is calculated |
|
|
|
int num_rematrixing_bands; ///< number of rematrixing bands |
|
|
|
|
|
|
|
/* bitrate allocation control */ |
|
|
|
int slow_gain_code; ///< slow gain code (sgaincod) |
|
|
|
@@ -305,6 +306,8 @@ static void compute_rematrixing_strategy(AC3EncodeContext *s) |
|
|
|
int blk, bnd, i; |
|
|
|
AC3Block *block, *block0; |
|
|
|
|
|
|
|
s->num_rematrixing_bands = 4; |
|
|
|
|
|
|
|
if (s->rematrixing & AC3_REMATRIXING_IS_STATIC) |
|
|
|
return; |
|
|
|
|
|
|
|
@@ -313,7 +316,7 @@ static void compute_rematrixing_strategy(AC3EncodeContext *s) |
|
|
|
for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) { |
|
|
|
block = &s->blocks[blk]; |
|
|
|
block->new_rematrixing_strategy = !blk; |
|
|
|
for (bnd = 0; bnd < 4; bnd++) { |
|
|
|
for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++) { |
|
|
|
/* calculate calculate sum of squared coeffs for one band in one block */ |
|
|
|
int start = ff_ac3_rematrix_band_tab[bnd]; |
|
|
|
int end = FFMIN(nb_coefs, ff_ac3_rematrix_band_tab[bnd+1]); |
|
|
|
@@ -365,7 +368,7 @@ static void apply_rematrixing(AC3EncodeContext *s) |
|
|
|
AC3Block *block = &s->blocks[blk]; |
|
|
|
if (block->new_rematrixing_strategy) |
|
|
|
flags = block->rematrixing_flags; |
|
|
|
for (bnd = 0; bnd < 4; bnd++) { |
|
|
|
for (bnd = 0; bnd < s->num_rematrixing_bands; bnd++) { |
|
|
|
if (flags[bnd]) { |
|
|
|
start = ff_ac3_rematrix_band_tab[bnd]; |
|
|
|
end = FFMIN(nb_coefs, ff_ac3_rematrix_band_tab[bnd+1]); |
|
|
|
@@ -785,7 +788,7 @@ static void count_frame_bits(AC3EncodeContext *s) |
|
|
|
/* stereo rematrixing */ |
|
|
|
if (s->channel_mode == AC3_CHMODE_STEREO && |
|
|
|
s->blocks[blk].new_rematrixing_strategy) { |
|
|
|
frame_bits += 4; |
|
|
|
frame_bits += s->num_rematrixing_bands; |
|
|
|
} |
|
|
|
|
|
|
|
for (ch = 0; ch < s->fbw_channels; ch++) { |
|
|
|
@@ -1304,7 +1307,7 @@ static void output_audio_block(AC3EncodeContext *s, int blk) |
|
|
|
put_bits(&s->pb, 1, block->new_rematrixing_strategy); |
|
|
|
if (block->new_rematrixing_strategy) { |
|
|
|
/* rematrixing flags */ |
|
|
|
for (rbnd = 0; rbnd < 4; rbnd++) |
|
|
|
for (rbnd = 0; rbnd < s->num_rematrixing_bands; rbnd++) |
|
|
|
put_bits(&s->pb, 1, block->rematrixing_flags[rbnd]); |
|
|
|
} |
|
|
|
} |
|
|
|
|