summaryrefslogtreecommitdiffstats
path: root/libavcodec/mpegaudiodec.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2011-05-31 23:16:26 +0200
committerMichael Niedermayer <michaelni@gmx.at>2011-06-01 00:09:05 +0200
commitf6a8ce98a7bce601a7db4a8f2a615822dc8f71bd (patch)
tree25eca30f64783b92220d8e75bdd8551842d22752 /libavcodec/mpegaudiodec.c
parent0abbd3adb6a28c088e121bf3da6c04225398bee4 (diff)
parent5ac4952a5808cc8cfe01031ca9d4df7d072f453c (diff)
downloadffmpeg-streaming-f6a8ce98a7bce601a7db4a8f2a615822dc8f71bd.zip
ffmpeg-streaming-f6a8ce98a7bce601a7db4a8f2a615822dc8f71bd.tar.gz
Merge remote-tracking branch 'qatar/master'
* qatar/master: vf_drawtext: Replace FFmpeg by Libav in license boilerplate. mpegaudiodec: remove unusued code and variables improved 'edts' atom writing support mpegaudio: clean up compute_antialias() definition vp8: fix segmentation race during frame-threading. Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/mpegaudiodec.c')
-rw-r--r--libavcodec/mpegaudiodec.c96
1 files changed, 40 insertions, 56 deletions
diff --git a/libavcodec/mpegaudiodec.c b/libavcodec/mpegaudiodec.c
index 4500739..6a3b6f9 100644
--- a/libavcodec/mpegaudiodec.c
+++ b/libavcodec/mpegaudiodec.c
@@ -112,8 +112,6 @@ typedef struct MPADecodeContext {
#include "mpegaudiodata.h"
#include "mpegaudiodectab.h"
-static void RENAME(compute_antialias)(MPADecodeContext *s, GranuleDef *g);
-
/* vlc structure for decoding layer 3 huffman tables */
static VLC huff_vlc[16];
static VLC_TYPE huff_vlc_tables[
@@ -135,8 +133,7 @@ static uint16_t band_index_long[9][23];
/* intensity stereo coef table */
static INTFLOAT is_table[2][16];
static INTFLOAT is_table_lsf[2][2][16];
-static int32_t csa_table[8][4];
-static float csa_table_float[8][4];
+static INTFLOAT csa_table[8][4];
static INTFLOAT mdct_win[8][36];
static int16_t division_tab3[1<<6 ];
@@ -272,27 +269,6 @@ static inline int l3_unscale(int value, int exponent)
return m;
}
-/* all integer n^(4/3) computation code */
-#define DEV_ORDER 13
-
-#define POW_FRAC_BITS 24
-#define POW_FRAC_ONE (1 << POW_FRAC_BITS)
-#define POW_FIX(a) ((int)((a) * POW_FRAC_ONE))
-#define POW_MULL(a,b) (((int64_t)(a) * (int64_t)(b)) >> POW_FRAC_BITS)
-
-static int dev_4_3_coefs[DEV_ORDER];
-
-static av_cold void int_pow_init(void)
-{
- int i, a;
-
- a = POW_FIX(1.0);
- for(i=0;i<DEV_ORDER;i++) {
- a = POW_MULL(a, POW_FIX(4.0 / 3.0) - i * POW_FIX(1.0)) / (i + 1);
- dev_4_3_coefs[i] = a;
- }
-}
-
static av_cold int decode_init(AVCodecContext * avctx)
{
MPADecodeContext *s = avctx->priv_data;
@@ -388,7 +364,6 @@ static av_cold int decode_init(AVCodecContext * avctx)
/* compute n ^ (4/3) and store it in mantissa/exp format */
- int_pow_init();
mpegaudio_tableinit();
for (i = 0; i < 4; i++)
@@ -441,14 +416,17 @@ static av_cold int decode_init(AVCodecContext * avctx)
ci = ci_table[i];
cs = 1.0 / sqrt(1.0 + ci * ci);
ca = cs * ci;
+#if !CONFIG_FLOAT
csa_table[i][0] = FIXHR(cs/4);
csa_table[i][1] = FIXHR(ca/4);
csa_table[i][2] = FIXHR(ca/4) + FIXHR(cs/4);
csa_table[i][3] = FIXHR(ca/4) - FIXHR(cs/4);
- csa_table_float[i][0] = cs;
- csa_table_float[i][1] = ca;
- csa_table_float[i][2] = ca + cs;
- csa_table_float[i][3] = ca - cs;
+#else
+ csa_table[i][0] = cs;
+ csa_table[i][1] = ca;
+ csa_table[i][2] = ca + cs;
+ csa_table[i][3] = ca - cs;
+#endif
}
/* compute mdct windows */
@@ -1335,10 +1313,26 @@ static void compute_stereo(MPADecodeContext *s,
}
}
-#if !CONFIG_FLOAT
-static void compute_antialias_fixed(MPADecodeContext *s, GranuleDef *g)
+#if CONFIG_FLOAT
+#define AA(j) do { \
+ float tmp0 = ptr[-1-j]; \
+ float tmp1 = ptr[ j]; \
+ ptr[-1-j] = tmp0 * csa_table[j][0] - tmp1 * csa_table[j][1]; \
+ ptr[ j] = tmp0 * csa_table[j][1] + tmp1 * csa_table[j][0]; \
+ } while (0)
+#else
+#define AA(j) do { \
+ int tmp0 = ptr[-1-j]; \
+ int tmp1 = ptr[ j]; \
+ int tmp2 = MULH(tmp0 + tmp1, csa_table[j][0]); \
+ ptr[-1-j] = 4*(tmp2 - MULH(tmp1, csa_table[j][2])); \
+ ptr[ j] = 4*(tmp2 + MULH(tmp0, csa_table[j][3])); \
+ } while (0)
+#endif
+
+static void compute_antialias(MPADecodeContext *s, GranuleDef *g)
{
- int32_t *ptr, *csa;
+ INTFLOAT *ptr;
int n, i;
/* we antialias only "long" bands */
@@ -1353,28 +1347,18 @@ static void compute_antialias_fixed(MPADecodeContext *s, GranuleDef *g)
ptr = g->sb_hybrid + 18;
for(i = n;i > 0;i--) {
- int tmp0, tmp1, tmp2;
- csa = &csa_table[0][0];
-#define INT_AA(j) \
- tmp0 = ptr[-1-j];\
- tmp1 = ptr[ j];\
- tmp2= MULH(tmp0 + tmp1, csa[0+4*j]);\
- ptr[-1-j] = 4*(tmp2 - MULH(tmp1, csa[2+4*j]));\
- ptr[ j] = 4*(tmp2 + MULH(tmp0, csa[3+4*j]));
-
- INT_AA(0)
- INT_AA(1)
- INT_AA(2)
- INT_AA(3)
- INT_AA(4)
- INT_AA(5)
- INT_AA(6)
- INT_AA(7)
+ AA(0);
+ AA(1);
+ AA(2);
+ AA(3);
+ AA(4);
+ AA(5);
+ AA(6);
+ AA(7);
ptr += 18;
}
}
-#endif
static void compute_imdct(MPADecodeContext *s,
GranuleDef *g,
@@ -1470,7 +1454,7 @@ static void compute_imdct(MPADecodeContext *s,
/* main layer3 decoding function */
static int mp_decode_layer3(MPADecodeContext *s)
{
- int nb_granules, main_data_begin, private_bits;
+ int nb_granules, main_data_begin;
int gr, ch, blocksplit_flag, i, j, k, n, bits_pos;
GranuleDef *g;
int16_t exponents[576]; //FIXME try INTFLOAT
@@ -1478,14 +1462,14 @@ static int mp_decode_layer3(MPADecodeContext *s)
/* read side info */
if (s->lsf) {
main_data_begin = get_bits(&s->gb, 8);
- private_bits = get_bits(&s->gb, s->nb_channels);
+ skip_bits(&s->gb, s->nb_channels);
nb_granules = 1;
} else {
main_data_begin = get_bits(&s->gb, 9);
if (s->nb_channels == 2)
- private_bits = get_bits(&s->gb, 3);
+ skip_bits(&s->gb, 3);
else
- private_bits = get_bits(&s->gb, 5);
+ skip_bits(&s->gb, 5);
nb_granules = 2;
for(ch=0;ch<s->nb_channels;ch++) {
s->granules[ch][0].scfsi = 0;/* all scale factors are transmitted */
@@ -1703,7 +1687,7 @@ static int mp_decode_layer3(MPADecodeContext *s)
g = &s->granules[ch][gr];
reorder_block(s, g);
- RENAME(compute_antialias)(s, g);
+ compute_antialias(s, g);
compute_imdct(s, g, &s->sb_samples[ch][18 * gr][0], s->mdct_buf[ch]);
}
} /* gr */
OpenPOWER on IntegriCloud