Commit 30f71adc authored by Justin Ruggles's avatar Justin Ruggles

move mix level tables from parser to decoder. have parser read bitstream value...

move mix level tables from parser to decoder. have parser read bitstream value instead of using an index to a table in the decoder.

Originally committed as revision 13696 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent caf0fbc8
...@@ -33,18 +33,6 @@ static const uint8_t eac3_blocks[4] = { ...@@ -33,18 +33,6 @@ static const uint8_t eac3_blocks[4] = {
1, 2, 3, 6 1, 2, 3, 6
}; };
/**
* Table for center mix levels
* reference: Section 5.4.2.4 cmixlev
*/
static const uint8_t center_levels[4] = { 4, 5, 6, 5 };
/**
* Table for surround mix levels
* reference: Section 5.4.2.5 surmixlev
*/
static const uint8_t surround_levels[4] = { 4, 6, 7, 6 };
int ff_ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr) int ff_ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr)
{ {
...@@ -64,8 +52,8 @@ int ff_ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr) ...@@ -64,8 +52,8 @@ int ff_ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr)
hdr->num_blocks = 6; hdr->num_blocks = 6;
/* set default mix levels */ /* set default mix levels */
hdr->center_mix_level = 3; // -4.5dB hdr->center_mix_level = 1; // -4.5dB
hdr->surround_mix_level = 4; // -6.0dB hdr->surround_mix_level = 1; // -6.0dB
if(hdr->bitstream_id <= 10) { if(hdr->bitstream_id <= 10) {
/* Normal AC-3 */ /* Normal AC-3 */
...@@ -87,9 +75,9 @@ int ff_ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr) ...@@ -87,9 +75,9 @@ int ff_ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr)
skip_bits(gbc, 2); // skip dsurmod skip_bits(gbc, 2); // skip dsurmod
} else { } else {
if((hdr->channel_mode & 1) && hdr->channel_mode != AC3_CHMODE_MONO) if((hdr->channel_mode & 1) && hdr->channel_mode != AC3_CHMODE_MONO)
hdr->center_mix_level = center_levels[get_bits(gbc, 2)]; hdr->center_mix_level = get_bits(gbc, 2);
if(hdr->channel_mode & 4) if(hdr->channel_mode & 4)
hdr->surround_mix_level = surround_levels[get_bits(gbc, 2)]; hdr->surround_mix_level = get_bits(gbc, 2);
} }
hdr->lfe_on = get_bits1(gbc); hdr->lfe_on = get_bits1(gbc);
......
...@@ -94,6 +94,18 @@ static const float gain_levels[9] = { ...@@ -94,6 +94,18 @@ static const float gain_levels[9] = {
LEVEL_MINUS_9DB LEVEL_MINUS_9DB
}; };
/**
* Table for center mix levels
* reference: Section 5.4.2.4 cmixlev
*/
static const uint8_t center_levels[4] = { 4, 5, 6, 5 };
/**
* Table for surround mix levels
* reference: Section 5.4.2.5 surmixlev
*/
static const uint8_t surround_levels[4] = { 4, 6, 7, 6 };
/** /**
* Table for default stereo downmixing coefficients * Table for default stereo downmixing coefficients
* reference: Section 7.8.2 Downmixing Into Two Channels * reference: Section 7.8.2 Downmixing Into Two Channels
...@@ -383,8 +395,8 @@ static int ac3_parse_header(AC3DecodeContext *s) ...@@ -383,8 +395,8 @@ static int ac3_parse_header(AC3DecodeContext *s)
static void set_downmix_coeffs(AC3DecodeContext *s) static void set_downmix_coeffs(AC3DecodeContext *s)
{ {
int i; int i;
float cmix = gain_levels[s->center_mix_level]; float cmix = gain_levels[center_levels[s->center_mix_level]];
float smix = gain_levels[s->surround_mix_level]; float smix = gain_levels[surround_levels[s->surround_mix_level]];
for(i=0; i<s->fbw_channels; i++) { for(i=0; i<s->fbw_channels; i++) {
s->downmix_coeffs[i][0] = gain_levels[ac3_default_coeffs[s->channel_mode][i][0]]; s->downmix_coeffs[i][0] = gain_levels[ac3_default_coeffs[s->channel_mode][i][0]];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment