[FFmpeg-soc] [soc]: r1741 - in eac3: ac3dec.c ac3dec.h eac3dec.c
jbr
subversion at mplayerhq.hu
Tue Jan 1 20:31:18 CET 2008
Author: jbr
Date: Tue Jan 1 20:31:18 2008
New Revision: 1741
Log:
use a common function to decode transform coefficients
Modified:
eac3/ac3dec.c
eac3/ac3dec.h
eac3/eac3dec.c
Modified: eac3/ac3dec.c
==============================================================================
--- eac3/ac3dec.c (original)
+++ eac3/ac3dec.c Tue Jan 1 20:31:18 2008
@@ -424,7 +424,8 @@ void ff_ac3_uncouple_channels(AC3DecodeC
* Get the transform coefficients for a particular channel
* reference: Section 7.3 Quantization and Decoding of Mantissas
*/
-int ff_ac3_get_transform_coeffs_ch(AC3DecodeContext *s, int ch_index, mant_groups *m)
+static int ac3_get_transform_coeffs_ch(AC3DecodeContext *s, int ch_index,
+ mant_groups *m)
{
GetBitContext *gbc = &s->gbc;
int i, gcode, tbap, start, end;
@@ -529,10 +530,26 @@ void ff_ac3_remove_dithering(AC3DecodeCo
}
}
+static int get_transform_coeffs_ch(AC3DecodeContext *s, int blk, int ch,
+ mant_groups *m)
+{
+ if (!s->eac3 || !s->channel_uses_aht[ch]) {
+ if(ac3_get_transform_coeffs_ch(s, ch, m))
+ return -1;
+ } else if (s->channel_uses_aht[ch] == 1) {
+ ff_eac3_get_transform_coeffs_aht_ch(s, ch);
+ s->channel_uses_aht[ch] = -1; /* AHT info for this frame has been read - do not read again */
+ }
+ if (s->eac3 && s->channel_uses_aht[ch]) {
+ ff_eac3_idct_transform_coeffs_ch(s, ch, blk);
+ }
+ return 0;
+}
+
/**
* Get the transform coefficients.
*/
-static int get_transform_coeffs(AC3DecodeContext *s)
+int ff_ac3_get_transform_coeffs(AC3DecodeContext *s, int blk)
{
int ch, end;
int got_cplchan = 0;
@@ -542,17 +559,15 @@ static int get_transform_coeffs(AC3Decod
for (ch = 1; ch <= s->channels; ch++) {
/* transform coefficients for full-bandwidth channel */
- if(ff_ac3_get_transform_coeffs_ch(s, ch, &m))
+ if(get_transform_coeffs_ch(s, blk, ch, &m))
return -1;
/* tranform coefficients for coupling channel come right after the
coefficients for the first coupled channel*/
if (s->channel_in_cpl[ch]) {
if (!got_cplchan) {
- if (ff_ac3_get_transform_coeffs_ch(s, CPL_CH, &m)) {
- av_log(s->avctx, AV_LOG_ERROR, "error in decoupling channels\n");
+ if (get_transform_coeffs_ch(s, blk, CPL_CH, &m)) {
return -1;
}
- ff_ac3_uncouple_channels(s);
got_cplchan = 1;
}
end = s->end_freq[CPL_CH];
@@ -564,6 +579,10 @@ static int get_transform_coeffs(AC3Decod
while(++end < 256);
}
+ /* calculate transform coefficients for coupling range */
+ if(s->cpl_in_use[blk])
+ ff_ac3_uncouple_channels(s);
+
/* if any channel doesn't use dithering, zero appropriate coefficients */
if(!s->dither_all)
ff_ac3_remove_dithering(s);
@@ -962,8 +981,8 @@ static int ac3_parse_audio_block(AC3Deco
/* unpack the transform coefficients
this also uncouples channels if coupling is in use. */
- if (get_transform_coeffs(s)) {
- av_log(s->avctx, AV_LOG_ERROR, "Error in routine get_transform_coeffs\n");
+ if (ff_ac3_get_transform_coeffs(s, blk)) {
+ av_log(s->avctx, AV_LOG_ERROR, "Error decoding transform coefficients\n");
return -1;
}
Modified: eac3/ac3dec.h
==============================================================================
--- eac3/ac3dec.h (original)
+++ eac3/ac3dec.h Tue Jan 1 20:31:18 2008
@@ -251,9 +251,11 @@ int ff_ac3_parse_frame_header(AC3DecodeC
/* TEMPORARY SOLUTION */
int ff_eac3_parse_header(AC3DecodeContext *s);
int ff_eac3_parse_audio_block(AC3DecodeContext *s, int blk);
+void ff_eac3_get_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch);
+void ff_eac3_idct_transform_coeffs_ch(AC3DecodeContext *s, int ch, int blk);
void ff_eac3_tables_init(void);
-int ff_ac3_get_transform_coeffs_ch(AC3DecodeContext *s, int ch, mant_groups *m);
+int ff_ac3_get_transform_coeffs(AC3DecodeContext *s, int blk);
void ff_ac3_uncouple_channels(AC3DecodeContext *s);
Modified: eac3/eac3dec.c
==============================================================================
--- eac3/eac3dec.c (original)
+++ eac3/eac3dec.c Tue Jan 1 20:31:18 2008
@@ -169,7 +169,7 @@ static void spectral_extension(AC3Decode
}
#endif
-static void get_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch){
+void ff_eac3_get_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch){
int bin, blk, gs;
int hebap, end_bap, gaq_mode, bits, pre_mantissa, remap, log_gain;
float mant;
@@ -261,7 +261,7 @@ static void get_transform_coeffs_aht_ch(
}
}
-static void idct_transform_coeffs_ch(AC3DecodeContext *s, int ch, int blk){
+void ff_eac3_idct_transform_coeffs_ch(AC3DecodeContext *s, int ch, int blk){
// TODO fast IDCT
int bin, i;
float tmp;
@@ -274,23 +274,6 @@ static void idct_transform_coeffs_ch(AC3
}
}
-static void get_eac3_transform_coeffs_ch(AC3DecodeContext *s, int blk,
- int ch, mant_groups *m){
- if (!s->channel_uses_aht[ch]) {
- ff_ac3_get_transform_coeffs_ch(s, ch, m);
- } else if (s->channel_uses_aht[ch] == 1) {
- get_transform_coeffs_aht_ch(s, ch);
- s->channel_uses_aht[ch] = -1; /* AHT info for this frame has been read - do not read again */
- }
- if (s->channel_uses_aht[ch]) {
- idct_transform_coeffs_ch(s, ch, blk);
- }
-
- memset(s->transform_coeffs[ch]+s->end_freq[ch], 0,
- sizeof(s->transform_coeffs[ch]) -
- s->end_freq[ch] * sizeof(*s->transform_coeffs[ch]));
-}
-
static int parse_bsi(AC3DecodeContext *s){
int i, blk;
GetBitContext *gbc = &s->gbc;
@@ -1122,21 +1105,11 @@ int ff_eac3_parse_audio_block(AC3DecodeC
got_cplchan = 0;
/* Quantized mantissa values */
- for (ch = 1; ch <= s->channels; ch++) {
- get_eac3_transform_coeffs_ch(s, blk, ch, &m);
- if (s->cpl_in_use[blk] && s->channel_in_cpl[ch] && !got_cplchan) {
- get_eac3_transform_coeffs_ch(s, blk, CPL_CH, &m);
- got_cplchan = 1;
- }
- }
-
- if (s->cpl_in_use[blk]) {
- ff_ac3_uncouple_channels(s);
+ if(ff_ac3_get_transform_coeffs(s, blk)) {
+ av_log(s->avctx, AV_LOG_ERROR, "error decoding transform coefficients\n");
+ return -1;
}
- if(!s->dither_all)
- ff_ac3_remove_dithering(s);
-
#if 0
//apply spectral extension
if (s->spxinu)
More information about the FFmpeg-soc
mailing list