summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2007-07-23 22:16:15 +0000
committerJustin Ruggles <justin.ruggles@gmail.com>2007-07-23 22:16:15 +0000
commit878c40a1375f988e8947838a10c860e1956c7765 (patch)
treebf9875409370ba68d83ff40988c2f0abb6ffde81
parent21d0a823b5f64778096c12c1e6a73974b62a566d (diff)
change some bit masks to arrays
Originally committed as revision 9779 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavcodec/ac3dec.c60
1 files changed, 29 insertions, 31 deletions
diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c
index 2f4e38f02e..a7bbace29a 100644
--- a/libavcodec/ac3dec.c
+++ b/libavcodec/ac3dec.c
@@ -93,17 +93,17 @@ typedef struct {
uint8_t surmixlev;
uint8_t dsurmod;
- uint8_t blksw;
- uint8_t dithflag;
+ uint8_t blksw[AC3_MAX_CHANNELS];
+ uint8_t dithflag[AC3_MAX_CHANNELS];
uint8_t cplinu;
- uint8_t chincpl;
+ uint8_t chincpl[AC3_MAX_CHANNELS];
uint8_t phsflginu;
uint8_t cplbegf;
uint8_t cplendf;
uint8_t cplcoe;
uint32_t cplbndstrc;
uint8_t rematstr;
- uint8_t rematflg;
+ uint8_t rematflg[AC3_MAX_CHANNELS];
uint8_t cplexpstr;
uint8_t lfeexpstr;
uint8_t chexpstr[5];
@@ -127,7 +127,7 @@ typedef struct {
uint8_t cpldeltoffst[8];
uint8_t cpldeltlen[8];
uint8_t cpldeltba[8];
- uint8_t deltnseg[5];
+ int deltnseg[5];
uint8_t deltoffst[5][8];
uint8_t deltlen[5][8];
uint8_t deltba[5][8];
@@ -508,8 +508,8 @@ static int get_transform_coeffs_cpling(AC3DecodeContext *ctx, mant_groups *m)
switch(tbap) {
case 0:
for (ch = 0; ch < ctx->nfchans; ch++)
- if (((ctx->chincpl) >> ch) & 1) {
- if ((ctx->dithflag >> ch) & 1) {
+ if (ctx->chincpl[ch]) {
+ if (ctx->dithflag[ch]) {
cplcoeff = (av_random(&ctx->dith_state) & 0xFFFF) * scale_factors[exps[start]];
ctx->transform_coeffs[ch + 1][start] = cplcoeff * cplcos[ch] * LEVEL_MINUS_3DB;
} else
@@ -561,7 +561,7 @@ static int get_transform_coeffs_cpling(AC3DecodeContext *ctx, mant_groups *m)
cplcoeff = (get_sbits(gb, qntztab[tbap]) << (16 - qntztab[tbap])) * scale_factors[exps[start]];
}
for (ch = 0; ch < ctx->nfchans; ch++)
- if ((ctx->chincpl >> ch) & 1)
+ if (ctx->chincpl[ch])
ctx->transform_coeffs[ch + 1][start] = cplcoeff * cplcos[ch];
start++;
}
@@ -584,7 +584,7 @@ static int get_transform_coeffs_ch(AC3DecodeContext *ctx, int ch_index, mant_gro
factors[i] = scale_factors[i] * ctx->chcoeffs[ch_index];
if (ch_index != -1) { /* fbw channels */
- dithflag = (ctx->dithflag >> ch_index) & 1;
+ dithflag = ctx->dithflag[ch_index];
exps = ctx->dexps[ch_index];
bap = ctx->bap[ch_index];
coeffs = ctx->transform_coeffs[ch_index + 1];
@@ -678,7 +678,7 @@ static int get_transform_coeffs(AC3DecodeContext * ctx)
if (get_transform_coeffs_ch(ctx, i, &m))
return -1;
/* tranform coefficients for coupling channels */
- if ((ctx->chincpl >> i) & 1) {
+ if (ctx->chincpl[i]) {
if (!got_cplchan) {
if (get_transform_coeffs_cpling(ctx, &m)) {
av_log(NULL, AV_LOG_ERROR, "error in decoupling channels\n");
@@ -725,21 +725,21 @@ static void do_rematrixing(AC3DecodeContext *ctx)
end = FFMIN(ctx->endmant[0], ctx->endmant[1]);
- if (ctx->rematflg & 1)
+ if (ctx->rematflg[0])
do_rematrixing1(ctx, bnd1, bnd2);
- if (ctx->rematflg & 2)
+ if (ctx->rematflg[1])
do_rematrixing1(ctx, bnd2, bnd3);
bndend = bnd4;
if (bndend > end) {
bndend = end;
- if (ctx->rematflg & 4)
+ if (ctx->rematflg[2])
do_rematrixing1(ctx, bnd3, bndend);
} else {
- if (ctx->rematflg & 4)
+ if (ctx->rematflg[2])
do_rematrixing1(ctx, bnd3, bnd4);
- if (ctx->rematflg & 8)
+ if (ctx->rematflg[3])
do_rematrixing1(ctx, bnd4, end);
}
}
@@ -1287,7 +1287,7 @@ static inline void do_imdct(AC3DecodeContext *ctx)
ctx->transform_coeffs[0], ctx->tmp_imdct);
}
for (ch=1; ch<=ctx->nfchans; ch++) {
- if ((ctx->blksw >> (ch-1)) & 1)
+ if (ctx->blksw[ch-1])
do_imdct_256(ctx, ch);
else
ctx->imdct_512.fft.imdct_calc(&ctx->imdct_512, ctx->tmp_output,
@@ -1317,13 +1317,11 @@ static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk)
int mstrcplco, cplcoexp, cplcomant;
int dynrng, chbwcod, ngrps, cplabsexp, skipl;
- ctx->blksw = 0;
for (i = 0; i < nfchans; i++) /*block switch flag */
- ctx->blksw |= get_bits1(gb) << i;
+ ctx->blksw[i] = get_bits1(gb);
- ctx->dithflag = 0;
for (i = 0; i < nfchans; i++) /* dithering flag */
- ctx->dithflag |= get_bits1(gb) << i;
+ ctx->dithflag[i] = get_bits1(gb);
if (get_bits1(gb)) { /* dynamic range */
dynrng = get_sbits(gb, 8);
@@ -1346,10 +1344,9 @@ static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk)
if (get_bits1(gb)) { /* coupling strategy */
ctx->cplinu = get_bits1(gb);
ctx->cplbndstrc = 0;
- ctx->chincpl = 0;
if (ctx->cplinu) { /* coupling in use */
for (i = 0; i < nfchans; i++)
- ctx->chincpl |= get_bits1(gb) << i;
+ ctx->chincpl[i] = get_bits1(gb);
if (acmod == 0x02)
ctx->phsflginu = get_bits1(gb); //phase flag in use
@@ -1370,6 +1367,9 @@ static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk)
ctx->cplbndstrc |= 1 << i;
ctx->ncplbnd--;
}
+ } else {
+ for (i = 0; i < nfchans; i++)
+ ctx->chincpl[i] = 0;
}
}
@@ -1377,7 +1377,7 @@ static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk)
ctx->cplcoe = 0;
for (i = 0; i < nfchans; i++)
- if ((ctx->chincpl) >> i & 1)
+ if (ctx->chincpl[i])
if (get_bits1(gb)) { /* coupling co-ordinates */
ctx->cplcoe |= 1 << i;
mstrcplco = 3 * get_bits(gb, 2);
@@ -1401,17 +1401,15 @@ static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk)
if (acmod == 0x02) {/* rematrixing */
ctx->rematstr = get_bits1(gb);
if (ctx->rematstr) {
- ctx->rematflg = 0;
-
if (!(ctx->cplinu) || ctx->cplbegf > 2)
for (rbnd = 0; rbnd < 4; rbnd++)
- ctx->rematflg |= get_bits1(gb) << rbnd;
+ ctx->rematflg[rbnd] = get_bits1(gb);
if (ctx->cplbegf > 0 && ctx->cplbegf <= 2 && ctx->cplinu)
for (rbnd = 0; rbnd < 3; rbnd++)
- ctx->rematflg |= get_bits1(gb) << rbnd;
+ ctx->rematflg[rbnd] = get_bits1(gb);
if (ctx->cplbegf == 0 && ctx->cplinu)
for (rbnd = 0; rbnd < 2; rbnd++)
- ctx->rematflg |= get_bits1(gb) << rbnd;
+ ctx->rematflg[rbnd] = get_bits1(gb);
}
}
@@ -1426,7 +1424,7 @@ static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk)
for (i = 0; i < nfchans; i++) /* channel bandwidth code */
if (ctx->chexpstr[i] != EXP_REUSE) {
- if ((ctx->chincpl >> i) & 1)
+ if (ctx->chincpl[i])
ctx->endmant[i] = ctx->cplstrtmant;
else {
chbwcod = get_bits(gb, 6);
@@ -1550,7 +1548,7 @@ static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk)
ctx->bit_alloc_params.cplfleak = ctx->cplfleak;
ctx->bit_alloc_params.cplsleak = ctx->cplsleak;
- if (ctx->chincpl && (bit_alloc_flags & 64))
+ if (ctx->cplinu && (bit_alloc_flags & 64))
do_bit_allocation(ctx, 5);
for (i = 0; i < nfchans; i++)
if ((bit_alloc_flags >> i) & 1)
@@ -1573,7 +1571,7 @@ static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk)
}
/* recover coefficients if rematrixing is in use */
- if (ctx->rematflg)
+ if(ctx->acmod == AC3_ACMOD_STEREO)
do_rematrixing(ctx);
do_downmix(ctx);