[FFmpeg-devel] [PATCH] HE-AAC v2 decoder try 2

Reimar Döffinger Reimar.Doeffinger
Wed Jun 16 07:38:27 CEST 2010


On Tue, Jun 15, 2010 at 05:54:03PM -0400, Alex Converse wrote:
> @@ -471,6 +473,9 @@ static int decode_audio_specific_config(AACContext *ac, void *data,
>          av_log(ac->avctx, AV_LOG_ERROR, "invalid sampling rate index %d\n", ac->m4ac.sampling_index);
>          return -1;
>      }
> +    if (ac->m4ac.sbr == 1 && ac->m4ac.ps) {
> +        ac->m4ac.ps = 1;
> +    }

Pointless {} and maybe for readability and consistency with other code parts it
would be better to write ac->m4ac.ps == -1 ?

> @@ -1667,6 +1672,10 @@ static int decode_extension_payload(AACContext *ac, GetBitContext *gb, int cnt,
>              av_log(ac->avctx, AV_LOG_ERROR, "Implicit SBR was found with a first occurrence after the first frame.\n");
>              skip_bits_long(gb, 8 * cnt - 4);
>              return res;
> +        } else if (ac->m4ac.sbr == -1 && ac->output_configured < OC_LOCKED && ac->m4ac.ps == -1 && ac->avctx->channels == 1) {

Hmm... Does the value of sbr really matter here? Since sbr is set unconditionally in the lese part...

> +        if (num_bits_left < 0) {
> +            av_log(ac->avctx, AV_LOG_ERROR, "num_bits_left %d\n", num_bits_left);
> +            abort();
> +        }

abort is quite rare in FFmpeg, I think this should be documented why it is
acceptable to use it.

> @@ -1166,7 +1175,7 @@ static void sbr_qmf_analysis(DSPContext *dsp, FFTContext *mdct, const float *in,
>   * (14496-3 sp04 p206)
>   */
>  static void sbr_qmf_synthesis(DSPContext *dsp, FFTContext *mdct,
> -                              float *out, float X[2][32][64],
> +                              float *out, float X[2][38][64],
>                                float mdct_buf[2][64],
>                                float *v0, int *v_off, const unsigned int div,
>                                float bias, float scale)
> @@ -1402,7 +1411,7 @@ static int sbr_hf_gen(AACContext *ac, SpectralBandReplication *sbr,
>  }
>  
>  /// Generate the subband filtered lowband
> -static int sbr_x_gen(SpectralBandReplication *sbr, float X[2][32][64],
> +static int sbr_x_gen(SpectralBandReplication *sbr, float X[2][38][64],
>                       const float X_low[32][40][2], const float Y[2][38][64][2],
>                       int ch)
>  {
> @@ -1424,7 +1433,7 @@ static int sbr_x_gen(SpectralBandReplication *sbr, float X[2][32][64],
>      }
>  
>      for (k = 0; k < sbr->kx[1]; k++) {
> -        for (i = i_Temp; i < i_f; i++) {
> +        for (i = i_Temp; i < 38; i++) {
>              X[0][i][k] = X_low[k][i + ENVELOPE_ADJUSTMENT_OFFSET][0];
>              X[1][i][k] = X_low[k][i + ENVELOPE_ADJUSTMENT_OFFSET][1];
>          }

Could it make sense to give this a name instead of using a "magic" 38?

> +#if 0
> +            h11r = 0;
> +            h12r = 1;
> +            h21r = 1;
> +            h22r = 0;
> +            h11i = h12i = h21i = h22i = 0;
> +#endif

Hm?

> +void write_float_3d_array (const void *p, int b, int c, int d)
> +{
> +    int i;
> +    for (i = 0; i < b; i++) {
> +        printf("{\n");
> +        write_float_2d_array(p, c, d);
> +        printf("},\n");
> +        p += c * d * sizeof(float);
> +    }

Use a extra local float* variable, arithmetic on void * isn't valid.



More information about the ffmpeg-devel mailing list