[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