[FFmpeg-devel] [PATCH] ac3enc: add num_rematrixing_bands to AC3EncodeContext and use it instead of the hardcoded value.
Måns Rullgård
mans
Fri Mar 4 23:31:45 CET 2011
Justin Ruggles <justin.ruggles at gmail.com> writes:
> Currently it is always 4, but this change will allow it to be adjusted when
> bandwidth-related features are added such as channel coupling, enhanced
> channel coupling, and spectral extension.
> ---
> libavcodec/ac3enc.c | 11 +++++++----
> 1 files changed, 7 insertions(+), 4 deletions(-)
>
>
> diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c
> index 02bc403..676bb5e 100644
> --- a/libavcodec/ac3enc.c
> +++ b/libavcodec/ac3enc.c
> @@ -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]);
> }
> }
Looks reasonble.
--
M?ns Rullg?rd
mans at mansr.com
More information about the ffmpeg-devel
mailing list