[FFmpeg-cvslog] r18888 - in trunk/libavcodec: ac3dec_data.c ac3dec_data.h eac3dec.c

Michael Niedermayer michaelni
Mon May 25 14:46:42 CEST 2009


On Thu, May 21, 2009 at 02:15:03AM +0200, jbr wrote:
> Author: jbr
> Date: Thu May 21 02:15:03 2009
> New Revision: 18888
> 
> Log:
> eac3dec: make GAQ dequantization 24-bit
> 
> Modified:
>    trunk/libavcodec/ac3dec_data.c
>    trunk/libavcodec/ac3dec_data.h
>    trunk/libavcodec/eac3dec.c
> 
> Modified: trunk/libavcodec/ac3dec_data.c
> ==============================================================================
> --- trunk/libavcodec/ac3dec_data.c	Thu May 21 02:09:23 2009	(r18887)
> +++ trunk/libavcodec/ac3dec_data.c	Thu May 21 02:15:03 2009	(r18888)
> @@ -87,19 +87,18 @@ const int16_t ff_eac3_gaq_remap_2_4_a[9]
>  /**
>   * Table E3.6, Gk=2 & Gk=4, B
>   * Large mantissa inverse quantization, negative mantissa remapping offsets
> - * Table values from the spec are right-shifted by 8 to simplify calculations.
>   * ff_eac3_gaq_remap_3_4_b[hebap-8][Gk=2,4]
>   */
> -const int8_t ff_eac3_gaq_remap_2_4_b[9][2] = {
> -    { -22,  -5 },
> -    { -46, -20 },
> -    { -56, -26 },
> -    { -60, -29 },
> -    { -62, -31 },
> -    { -63, -32 },
> -    { -64, -32 },
> -    { -64, -32 },
> -    { -64, -32 },
> +const int16_t ff_eac3_gaq_remap_2_4_b[9][2] = {
> +    {  -5461, -1170 },
> +    { -11703, -4915 },
> +    { -14199, -6606 },
> +    { -15327, -7412 },
> +    { -15864, -7805 },
> +    { -16126, -7999 },
> +    { -16255, -8096 },
> +    { -16320, -8144 },
> +    { -16352, -8168 }
>  };
>  
>  static const int16_t vq_hebap1[4][6] = {
> 
> Modified: trunk/libavcodec/ac3dec_data.h
> ==============================================================================
> --- trunk/libavcodec/ac3dec_data.h	Thu May 21 02:09:23 2009	(r18887)
> +++ trunk/libavcodec/ac3dec_data.h	Thu May 21 02:15:03 2009	(r18888)
> @@ -29,7 +29,7 @@ extern const uint8_t ff_eac3_hebap_tab[6
>  extern const uint8_t ff_eac3_bits_vs_hebap[20];
>  extern const int16_t ff_eac3_gaq_remap_1[12];
>  extern const int16_t ff_eac3_gaq_remap_2_4_a[9][2];
> -extern const int8_t  ff_eac3_gaq_remap_2_4_b[9][2];
> +extern const int16_t ff_eac3_gaq_remap_2_4_b[9][2];
>  
>  extern const int16_t (* const ff_eac3_mantissa_vq[8])[6];
>  extern const uint8_t ff_eac3_frm_expstr[32][6];
> 
> Modified: trunk/libavcodec/eac3dec.c
> ==============================================================================
> --- trunk/libavcodec/eac3dec.c	Thu May 21 02:09:23 2009	(r18887)
> +++ trunk/libavcodec/eac3dec.c	Thu May 21 02:15:03 2009	(r18888)
> @@ -178,19 +178,21 @@ void ff_eac3_decode_transform_coeffs_aht
>                  if (mant == -(1 << (gbits-1))) {
>                      /* large mantissa */
>                      int b;
> -                    mant = get_sbits(gbc, bits-2+log_gain) << (26-log_gain-bits);
> +                    int mbits = bits - (2 - log_gain);
> +                    mant = get_sbits(gbc, mbits);
> +                    mant <<= (23 - (mbits - 1));
>                      /* remap mantissa value to correct for asymmetric quantization */
>                      if (mant >= 0)
> -                        b = 32768 >> (log_gain+8);
> +                        b = 1 << (23 - (mbits - 1));

>                      else
> -                        b = ff_eac3_gaq_remap_2_4_b[hebap-8][log_gain-1];
> -                    mant += (ff_eac3_gaq_remap_2_4_a[hebap-8][log_gain-1] * (mant>>8) + b) >> 7;

> +                        b = ff_eac3_gaq_remap_2_4_b[hebap-8][log_gain-1] << 8;
> +                    mant += (((ff_eac3_gaq_remap_2_4_a[hebap-8][log_gain-1] << 8) * (int64_t)mant) >> 23) + b;

mant += ((ff_eac3_gaq_remap_2_4_a[hebap-8][log_gain-1] * (int64_t)mant) >> 15) + b;


>                  } else {
>                      /* small mantissa, no GAQ, or Gk=1 */
>                      mant <<= 24 - bits;
>                      if (!log_gain) {
>                          /* remap mantissa value for no GAQ or Gk=1 */
> -                        mant += (ff_eac3_gaq_remap_1[hebap-8] * (mant>>8)) >> 7;

> +                        mant += ((ff_eac3_gaq_remap_1[hebap-8] << 8) * (int64_t)mant) >> 23;

mant += (ff_eac3_gaq_remap_1[hebap-8] * (int64_t)mant) >> 15;

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

The worst form of inequality is to try to make unequal things equal.
-- Aristotle
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-cvslog/attachments/20090525/9cfd1dc1/attachment-0001.pgp>



More information about the ffmpeg-cvslog mailing list