Originally committed as revision 11196 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
@@ -53,14 +53,14 @@ typedef enum { | |||||
/** Channel mode (audio coding mode) */ | /** Channel mode (audio coding mode) */ | ||||
typedef enum { | typedef enum { | ||||
AC3_ACMOD_DUALMONO = 0, | |||||
AC3_ACMOD_MONO, | |||||
AC3_ACMOD_STEREO, | |||||
AC3_ACMOD_3F, | |||||
AC3_ACMOD_2F1R, | |||||
AC3_ACMOD_3F1R, | |||||
AC3_ACMOD_2F2R, | |||||
AC3_ACMOD_3F2R | |||||
AC3_CHMODE_DUALMONO = 0, | |||||
AC3_CHMODE_MONO, | |||||
AC3_CHMODE_STEREO, | |||||
AC3_CHMODE_3F, | |||||
AC3_CHMODE_2F1R, | |||||
AC3_CHMODE_3F1R, | |||||
AC3_CHMODE_2F2R, | |||||
AC3_CHMODE_3F2R | |||||
} AC3ChannelMode; | } AC3ChannelMode; | ||||
typedef struct AC3BitAllocParameters { | typedef struct AC3BitAllocParameters { | ||||
@@ -81,14 +81,14 @@ typedef struct { | |||||
uint16_t sync_word; | uint16_t sync_word; | ||||
uint16_t crc1; | uint16_t crc1; | ||||
uint8_t sr_code; | uint8_t sr_code; | ||||
uint8_t frmsizecod; | |||||
uint8_t bsid; | |||||
uint8_t bsmod; | |||||
uint8_t acmod; | |||||
uint8_t cmixlev; | |||||
uint8_t surmixlev; | |||||
uint8_t dsurmod; | |||||
uint8_t lfeon; | |||||
uint8_t frame_size_code; | |||||
uint8_t bitstream_id; | |||||
uint8_t bitstream_mode; | |||||
uint8_t channel_mode; | |||||
uint8_t center_mix_level; | |||||
uint8_t surround_mix_level; | |||||
uint8_t dolby_surround_mode; | |||||
uint8_t lfe_on; | |||||
/** @} */ | /** @} */ | ||||
/** @defgroup derived Derived values | /** @defgroup derived Derived values | ||||
@@ -47,8 +47,8 @@ int ff_ac3_parse_header(const uint8_t buf[7], AC3HeaderInfo *hdr) | |||||
return AC3_PARSE_ERROR_SYNC; | return AC3_PARSE_ERROR_SYNC; | ||||
/* read ahead to bsid to make sure this is AC-3, not E-AC-3 */ | /* read ahead to bsid to make sure this is AC-3, not E-AC-3 */ | ||||
hdr->bsid = show_bits_long(&gbc, 29) & 0x1F; | |||||
if(hdr->bsid > 10) | |||||
hdr->bitstream_id = show_bits_long(&gbc, 29) & 0x1F; | |||||
if(hdr->bitstream_id > 10) | |||||
return AC3_PARSE_ERROR_BSID; | return AC3_PARSE_ERROR_BSID; | ||||
hdr->crc1 = get_bits(&gbc, 16); | hdr->crc1 = get_bits(&gbc, 16); | ||||
@@ -56,30 +56,30 @@ int ff_ac3_parse_header(const uint8_t buf[7], AC3HeaderInfo *hdr) | |||||
if(hdr->sr_code == 3) | if(hdr->sr_code == 3) | ||||
return AC3_PARSE_ERROR_SAMPLE_RATE; | return AC3_PARSE_ERROR_SAMPLE_RATE; | ||||
hdr->frmsizecod = get_bits(&gbc, 6); | |||||
if(hdr->frmsizecod > 37) | |||||
hdr->frame_size_code = get_bits(&gbc, 6); | |||||
if(hdr->frame_size_code > 37) | |||||
return AC3_PARSE_ERROR_FRAME_SIZE; | return AC3_PARSE_ERROR_FRAME_SIZE; | ||||
skip_bits(&gbc, 5); // skip bsid, already got it | skip_bits(&gbc, 5); // skip bsid, already got it | ||||
hdr->bsmod = get_bits(&gbc, 3); | |||||
hdr->acmod = get_bits(&gbc, 3); | |||||
if((hdr->acmod & 1) && hdr->acmod != AC3_ACMOD_MONO) { | |||||
hdr->cmixlev = get_bits(&gbc, 2); | |||||
hdr->bitstream_mode = get_bits(&gbc, 3); | |||||
hdr->channel_mode = get_bits(&gbc, 3); | |||||
if((hdr->channel_mode & 1) && hdr->channel_mode != AC3_CHMODE_MONO) { | |||||
hdr->center_mix_level = get_bits(&gbc, 2); | |||||
} | } | ||||
if(hdr->acmod & 4) { | |||||
hdr->surmixlev = get_bits(&gbc, 2); | |||||
if(hdr->channel_mode & 4) { | |||||
hdr->surround_mix_level = get_bits(&gbc, 2); | |||||
} | } | ||||
if(hdr->acmod == AC3_ACMOD_STEREO) { | |||||
hdr->dsurmod = get_bits(&gbc, 2); | |||||
if(hdr->channel_mode == AC3_CHMODE_STEREO) { | |||||
hdr->dolby_surround_mode = get_bits(&gbc, 2); | |||||
} | } | ||||
hdr->lfeon = get_bits1(&gbc); | |||||
hdr->lfe_on = get_bits1(&gbc); | |||||
hdr->sr_shift = FFMAX(hdr->bsid, 8) - 8; | |||||
hdr->sr_shift = FFMAX(hdr->bitstream_id, 8) - 8; | |||||
hdr->sample_rate = ff_ac3_sample_rate_tab[hdr->sr_code] >> hdr->sr_shift; | hdr->sample_rate = ff_ac3_sample_rate_tab[hdr->sr_code] >> hdr->sr_shift; | ||||
hdr->bit_rate = (ff_ac3_bitrate_tab[hdr->frmsizecod>>1] * 1000) >> hdr->sr_shift; | |||||
hdr->channels = ff_ac3_channels_tab[hdr->acmod] + hdr->lfeon; | |||||
hdr->frame_size = ff_ac3_frame_size_tab[hdr->frmsizecod][hdr->sr_code] * 2; | |||||
hdr->bit_rate = (ff_ac3_bitrate_tab[hdr->frame_size_code>>1] * 1000) >> hdr->sr_shift; | |||||
hdr->channels = ff_ac3_channels_tab[hdr->channel_mode] + hdr->lfe_on; | |||||
hdr->frame_size = ff_ac3_frame_size_tab[hdr->frame_size_code][hdr->sr_code] * 2; | |||||
return 0; | return 0; | ||||
} | } | ||||
@@ -88,8 +88,8 @@ static int ac3_sync(const uint8_t *buf, int *channels, int *sample_rate, | |||||
int *bit_rate, int *samples) | int *bit_rate, int *samples) | ||||
{ | { | ||||
int err; | int err; | ||||
unsigned int sr_code, acmod, bsid, lfeon; | |||||
unsigned int strmtyp, substreamid, frmsiz, sr_code2, numblkscod; | |||||
unsigned int sr_code, channel_mode, bitstream_id, lfe_on; | |||||
unsigned int stream_type, substream_id, frame_size, sr_code2, num_blocks_code; | |||||
GetBitContext bits; | GetBitContext bits; | ||||
AC3HeaderInfo hdr; | AC3HeaderInfo hdr; | ||||
@@ -98,48 +98,48 @@ static int ac3_sync(const uint8_t *buf, int *channels, int *sample_rate, | |||||
if(err < 0 && err != -2) | if(err < 0 && err != -2) | ||||
return 0; | return 0; | ||||
bsid = hdr.bsid; | |||||
if(bsid <= 10) { /* Normal AC-3 */ | |||||
bitstream_id = hdr.bitstream_id; | |||||
if(bitstream_id <= 10) { /* Normal AC-3 */ | |||||
*sample_rate = hdr.sample_rate; | *sample_rate = hdr.sample_rate; | ||||
*bit_rate = hdr.bit_rate; | *bit_rate = hdr.bit_rate; | ||||
*channels = hdr.channels; | *channels = hdr.channels; | ||||
*samples = AC3_FRAME_SIZE; | *samples = AC3_FRAME_SIZE; | ||||
return hdr.frame_size; | return hdr.frame_size; | ||||
} else if (bsid > 10 && bsid <= 16) { /* Enhanced AC-3 */ | |||||
} else if (bitstream_id > 10 && bitstream_id <= 16) { /* Enhanced AC-3 */ | |||||
init_get_bits(&bits, &buf[2], (AC3_HEADER_SIZE-2) * 8); | init_get_bits(&bits, &buf[2], (AC3_HEADER_SIZE-2) * 8); | ||||
strmtyp = get_bits(&bits, 2); | |||||
substreamid = get_bits(&bits, 3); | |||||
stream_type = get_bits(&bits, 2); | |||||
substream_id = get_bits(&bits, 3); | |||||
if (strmtyp != 0 || substreamid != 0) | |||||
if (stream_type != 0 || substream_id != 0) | |||||
return 0; /* Currently don't support additional streams */ | return 0; /* Currently don't support additional streams */ | ||||
frmsiz = get_bits(&bits, 11) + 1; | |||||
if(frmsiz*2 < AC3_HEADER_SIZE) | |||||
frame_size = get_bits(&bits, 11) + 1; | |||||
if(frame_size*2 < AC3_HEADER_SIZE) | |||||
return 0; | return 0; | ||||
sr_code = get_bits(&bits, 2); | sr_code = get_bits(&bits, 2); | ||||
if (sr_code == 3) { | if (sr_code == 3) { | ||||
sr_code2 = get_bits(&bits, 2); | sr_code2 = get_bits(&bits, 2); | ||||
numblkscod = 3; | |||||
num_blocks_code = 3; | |||||
if(sr_code2 == 3) | if(sr_code2 == 3) | ||||
return 0; | return 0; | ||||
*sample_rate = ff_ac3_sample_rate_tab[sr_code2] / 2; | *sample_rate = ff_ac3_sample_rate_tab[sr_code2] / 2; | ||||
} else { | } else { | ||||
numblkscod = get_bits(&bits, 2); | |||||
num_blocks_code = get_bits(&bits, 2); | |||||
*sample_rate = ff_ac3_sample_rate_tab[sr_code]; | *sample_rate = ff_ac3_sample_rate_tab[sr_code]; | ||||
} | } | ||||
acmod = get_bits(&bits, 3); | |||||
lfeon = get_bits1(&bits); | |||||
channel_mode = get_bits(&bits, 3); | |||||
lfe_on = get_bits1(&bits); | |||||
*samples = eac3_blocks[numblkscod] * 256; | |||||
*bit_rate = frmsiz * (*sample_rate) * 16 / (*samples); | |||||
*channels = ff_ac3_channels_tab[acmod] + lfeon; | |||||
*samples = eac3_blocks[num_blocks_code] * 256; | |||||
*bit_rate = frame_size * (*sample_rate) * 16 / (*samples); | |||||
*channels = ff_ac3_channels_tab[channel_mode] + lfe_on; | |||||
return frmsiz * 2; | |||||
return frame_size * 2; | |||||
} | } | ||||
/* Unsupported bitstream version */ | /* Unsupported bitstream version */ | ||||
@@ -97,13 +97,13 @@ static const float gain_levels[6] = { | |||||
* Table for center mix levels | * Table for center mix levels | ||||
* reference: Section 5.4.2.4 cmixlev | * reference: Section 5.4.2.4 cmixlev | ||||
*/ | */ | ||||
static const uint8_t clevs[4] = { 2, 3, 4, 3 }; | |||||
static const uint8_t center_levels[4] = { 2, 3, 4, 3 }; | |||||
/** | /** | ||||
* Table for surround mix levels | * Table for surround mix levels | ||||
* reference: Section 5.4.2.5 surmixlev | * reference: Section 5.4.2.5 surmixlev | ||||
*/ | */ | ||||
static const uint8_t slevs[4] = { 2, 4, 0, 4 }; | |||||
static const uint8_t surround_levels[4] = { 2, 4, 0, 4 }; | |||||
/** | /** | ||||
* Table for default stereo downmixing coefficients | * Table for default stereo downmixing coefficients | ||||
@@ -128,8 +128,8 @@ static const uint8_t ac3_default_coeffs[8][5][2] = { | |||||
#define AC3_OUTPUT_LFEON 8 | #define AC3_OUTPUT_LFEON 8 | ||||
typedef struct { | typedef struct { | ||||
int acmod; ///< audio coding mode | |||||
int dsurmod; ///< dolby surround mode | |||||
int channel_mode; ///< channel mode (acmod) | |||||
int dolby_surround_mode; ///< dolby surround mode | |||||
int blksw[AC3_MAX_CHANNELS]; ///< block switch flags | int blksw[AC3_MAX_CHANNELS]; ///< block switch flags | ||||
int dithflag[AC3_MAX_CHANNELS]; ///< dither flags | int dithflag[AC3_MAX_CHANNELS]; ///< dither flags | ||||
int dither_all; ///< true if all channels are dithered | int dither_all; ///< true if all channels are dithered | ||||
@@ -155,7 +155,7 @@ typedef struct { | |||||
int nchans; ///< number of total channels | int nchans; ///< number of total channels | ||||
int nfchans; ///< number of full-bandwidth channels | int nfchans; ///< number of full-bandwidth channels | ||||
int lfeon; ///< lfe channel in use | |||||
int lfe_on; ///< lfe channel in use | |||||
int lfe_ch; ///< index of LFE channel | int lfe_ch; ///< index of LFE channel | ||||
int output_mode; ///< output channel configuration | int output_mode; ///< output channel configuration | ||||
int out_channels; ///< number of output channels | int out_channels; ///< number of output channels | ||||
@@ -336,7 +336,7 @@ static int ac3_parse_header(AC3DecodeContext *ctx) | |||||
{ | { | ||||
AC3HeaderInfo hdr; | AC3HeaderInfo hdr; | ||||
GetBitContext *gb = &ctx->gb; | GetBitContext *gb = &ctx->gb; | ||||
float cmixlev, surmixlev; | |||||
float center_mix_level, surround_mix_level; | |||||
int err, i; | int err, i; | ||||
err = ff_ac3_parse_header(gb->buffer, &hdr); | err = ff_ac3_parse_header(gb->buffer, &hdr); | ||||
@@ -345,23 +345,23 @@ static int ac3_parse_header(AC3DecodeContext *ctx) | |||||
/* get decoding parameters from header info */ | /* get decoding parameters from header info */ | ||||
ctx->bit_alloc_params.sr_code = hdr.sr_code; | ctx->bit_alloc_params.sr_code = hdr.sr_code; | ||||
ctx->acmod = hdr.acmod; | |||||
cmixlev = gain_levels[clevs[hdr.cmixlev]]; | |||||
surmixlev = gain_levels[slevs[hdr.surmixlev]]; | |||||
ctx->dsurmod = hdr.dsurmod; | |||||
ctx->lfeon = hdr.lfeon; | |||||
ctx->channel_mode = hdr.channel_mode; | |||||
center_mix_level = gain_levels[center_levels[hdr.center_mix_level]]; | |||||
surround_mix_level = gain_levels[surround_levels[hdr.surround_mix_level]]; | |||||
ctx->dolby_surround_mode = hdr.dolby_surround_mode; | |||||
ctx->lfe_on = hdr.lfe_on; | |||||
ctx->bit_alloc_params.sr_shift = hdr.sr_shift; | ctx->bit_alloc_params.sr_shift = hdr.sr_shift; | ||||
ctx->sampling_rate = hdr.sample_rate; | ctx->sampling_rate = hdr.sample_rate; | ||||
ctx->bit_rate = hdr.bit_rate; | ctx->bit_rate = hdr.bit_rate; | ||||
ctx->nchans = hdr.channels; | ctx->nchans = hdr.channels; | ||||
ctx->nfchans = ctx->nchans - ctx->lfeon; | |||||
ctx->nfchans = ctx->nchans - ctx->lfe_on; | |||||
ctx->lfe_ch = ctx->nfchans + 1; | ctx->lfe_ch = ctx->nfchans + 1; | ||||
ctx->frame_size = hdr.frame_size; | ctx->frame_size = hdr.frame_size; | ||||
/* set default output to all source channels */ | /* set default output to all source channels */ | ||||
ctx->out_channels = ctx->nchans; | ctx->out_channels = ctx->nchans; | ||||
ctx->output_mode = ctx->acmod; | |||||
if(ctx->lfeon) | |||||
ctx->output_mode = ctx->channel_mode; | |||||
if(ctx->lfe_on) | |||||
ctx->output_mode |= AC3_OUTPUT_LFEON; | ctx->output_mode |= AC3_OUTPUT_LFEON; | ||||
/* skip over portion of header which has already been read */ | /* skip over portion of header which has already been read */ | ||||
@@ -369,18 +369,18 @@ static int ac3_parse_header(AC3DecodeContext *ctx) | |||||
skip_bits(gb, 16); // skip crc1 | skip_bits(gb, 16); // skip crc1 | ||||
skip_bits(gb, 8); // skip fscod and frmsizecod | skip_bits(gb, 8); // skip fscod and frmsizecod | ||||
skip_bits(gb, 11); // skip bsid, bsmod, and acmod | skip_bits(gb, 11); // skip bsid, bsmod, and acmod | ||||
if(ctx->acmod == AC3_ACMOD_STEREO) { | |||||
if(ctx->channel_mode == AC3_CHMODE_STEREO) { | |||||
skip_bits(gb, 2); // skip dsurmod | skip_bits(gb, 2); // skip dsurmod | ||||
} else { | } else { | ||||
if((ctx->acmod & 1) && ctx->acmod != AC3_ACMOD_MONO) | |||||
if((ctx->channel_mode & 1) && ctx->channel_mode != AC3_CHMODE_MONO) | |||||
skip_bits(gb, 2); // skip cmixlev | skip_bits(gb, 2); // skip cmixlev | ||||
if(ctx->acmod & 4) | |||||
if(ctx->channel_mode & 4) | |||||
skip_bits(gb, 2); // skip surmixlev | skip_bits(gb, 2); // skip surmixlev | ||||
} | } | ||||
skip_bits1(gb); // skip lfeon | skip_bits1(gb); // skip lfeon | ||||
/* read the rest of the bsi. read twice for dual mono mode. */ | /* read the rest of the bsi. read twice for dual mono mode. */ | ||||
i = !(ctx->acmod); | |||||
i = !(ctx->channel_mode); | |||||
do { | do { | ||||
ctx->dialnorm[i] = dialnorm_tab[get_bits(gb, 5)]; // dialog normalization | ctx->dialnorm[i] = dialnorm_tab[get_bits(gb, 5)]; // dialog normalization | ||||
if (get_bits1(gb)) | if (get_bits1(gb)) | ||||
@@ -411,19 +411,19 @@ static int ac3_parse_header(AC3DecodeContext *ctx) | |||||
/* set stereo downmixing coefficients | /* set stereo downmixing coefficients | ||||
reference: Section 7.8.2 Downmixing Into Two Channels */ | reference: Section 7.8.2 Downmixing Into Two Channels */ | ||||
for(i=0; i<ctx->nfchans; i++) { | for(i=0; i<ctx->nfchans; i++) { | ||||
ctx->downmix_coeffs[i][0] = gain_levels[ac3_default_coeffs[ctx->acmod][i][0]]; | |||||
ctx->downmix_coeffs[i][1] = gain_levels[ac3_default_coeffs[ctx->acmod][i][1]]; | |||||
ctx->downmix_coeffs[i][0] = gain_levels[ac3_default_coeffs[ctx->channel_mode][i][0]]; | |||||
ctx->downmix_coeffs[i][1] = gain_levels[ac3_default_coeffs[ctx->channel_mode][i][1]]; | |||||
} | } | ||||
if(ctx->acmod > 1 && ctx->acmod & 1) { | |||||
ctx->downmix_coeffs[1][0] = ctx->downmix_coeffs[1][1] = cmixlev; | |||||
if(ctx->channel_mode > 1 && ctx->channel_mode & 1) { | |||||
ctx->downmix_coeffs[1][0] = ctx->downmix_coeffs[1][1] = center_mix_level; | |||||
} | } | ||||
if(ctx->acmod == AC3_ACMOD_2F1R || ctx->acmod == AC3_ACMOD_3F1R) { | |||||
int nf = ctx->acmod - 2; | |||||
ctx->downmix_coeffs[nf][0] = ctx->downmix_coeffs[nf][1] = surmixlev * LEVEL_MINUS_3DB; | |||||
if(ctx->channel_mode == AC3_CHMODE_2F1R || ctx->channel_mode == AC3_CHMODE_3F1R) { | |||||
int nf = ctx->channel_mode - 2; | |||||
ctx->downmix_coeffs[nf][0] = ctx->downmix_coeffs[nf][1] = surround_mix_level * LEVEL_MINUS_3DB; | |||||
} | } | ||||
if(ctx->acmod == AC3_ACMOD_2F2R || ctx->acmod == AC3_ACMOD_3F2R) { | |||||
int nf = ctx->acmod - 4; | |||||
ctx->downmix_coeffs[nf][0] = ctx->downmix_coeffs[nf+1][1] = surmixlev; | |||||
if(ctx->channel_mode == AC3_CHMODE_2F2R || ctx->channel_mode == AC3_CHMODE_3F2R) { | |||||
int nf = ctx->channel_mode - 4; | |||||
ctx->downmix_coeffs[nf][0] = ctx->downmix_coeffs[nf+1][1] = surround_mix_level; | |||||
} | } | ||||
return 0; | return 0; | ||||
@@ -766,9 +766,9 @@ static void ac3_downmix(float samples[AC3_MAX_CHANNELS][256], int nfchans, | |||||
} | } | ||||
v0 /= s0; | v0 /= s0; | ||||
v1 /= s1; | v1 /= s1; | ||||
if(output_mode == AC3_ACMOD_MONO) { | |||||
if(output_mode == AC3_CHMODE_MONO) { | |||||
samples[0][i] = (v0 + v1) * LEVEL_MINUS_3DB; | samples[0][i] = (v0 + v1) * LEVEL_MINUS_3DB; | ||||
} else if(output_mode == AC3_ACMOD_STEREO) { | |||||
} else if(output_mode == AC3_CHMODE_STEREO) { | |||||
samples[0][i] = v0; | samples[0][i] = v0; | ||||
samples[1][i] = v1; | samples[1][i] = v1; | ||||
} | } | ||||
@@ -781,7 +781,7 @@ static void ac3_downmix(float samples[AC3_MAX_CHANNELS][256], int nfchans, | |||||
static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk) | static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk) | ||||
{ | { | ||||
int nfchans = ctx->nfchans; | int nfchans = ctx->nfchans; | ||||
int acmod = ctx->acmod; | |||||
int channel_mode = ctx->channel_mode; | |||||
int i, bnd, seg, ch; | int i, bnd, seg, ch; | ||||
GetBitContext *gb = &ctx->gb; | GetBitContext *gb = &ctx->gb; | ||||
uint8_t bit_alloc_stages[AC3_MAX_CHANNELS]; | uint8_t bit_alloc_stages[AC3_MAX_CHANNELS]; | ||||
@@ -801,7 +801,7 @@ static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk) | |||||
} | } | ||||
/* dynamic range */ | /* dynamic range */ | ||||
i = !(ctx->acmod); | |||||
i = !(ctx->channel_mode); | |||||
do { | do { | ||||
if(get_bits1(gb)) { | if(get_bits1(gb)) { | ||||
ctx->dynrng[i] = dynrng_tab[get_bits(gb, 8)]; | ctx->dynrng[i] = dynrng_tab[get_bits(gb, 8)]; | ||||
@@ -823,7 +823,7 @@ static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk) | |||||
ctx->chincpl[ch] = get_bits1(gb); | ctx->chincpl[ch] = get_bits1(gb); | ||||
/* phase flags in use */ | /* phase flags in use */ | ||||
if (acmod == AC3_ACMOD_STEREO) | |||||
if (channel_mode == AC3_CHMODE_STEREO) | |||||
ctx->phsflginu = get_bits1(gb); | ctx->phsflginu = get_bits1(gb); | ||||
/* coupling frequency range and band structure */ | /* coupling frequency range and band structure */ | ||||
@@ -872,7 +872,7 @@ static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk) | |||||
} | } | ||||
} | } | ||||
/* phase flags */ | /* phase flags */ | ||||
if (acmod == AC3_ACMOD_STEREO && ctx->phsflginu && cplcoe) { | |||||
if (channel_mode == AC3_CHMODE_STEREO && ctx->phsflginu && cplcoe) { | |||||
for (bnd = 0; bnd < ctx->ncplbnd; bnd++) { | for (bnd = 0; bnd < ctx->ncplbnd; bnd++) { | ||||
if (get_bits1(gb)) | if (get_bits1(gb)) | ||||
ctx->cplco[2][bnd] = -ctx->cplco[2][bnd]; | ctx->cplco[2][bnd] = -ctx->cplco[2][bnd]; | ||||
@@ -881,7 +881,7 @@ static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk) | |||||
} | } | ||||
/* stereo rematrixing strategy and band structure */ | /* stereo rematrixing strategy and band structure */ | ||||
if (acmod == AC3_ACMOD_STEREO) { | |||||
if (channel_mode == AC3_CHMODE_STEREO) { | |||||
ctx->rematstr = get_bits1(gb); | ctx->rematstr = get_bits1(gb); | ||||
if (ctx->rematstr) { | if (ctx->rematstr) { | ||||
ctx->nrematbnd = 4; | ctx->nrematbnd = 4; | ||||
@@ -1046,13 +1046,13 @@ static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk) | |||||
} | } | ||||
/* recover coefficients if rematrixing is in use */ | /* recover coefficients if rematrixing is in use */ | ||||
if(ctx->acmod == AC3_ACMOD_STEREO) | |||||
if(ctx->channel_mode == AC3_CHMODE_STEREO) | |||||
do_rematrixing(ctx); | do_rematrixing(ctx); | ||||
/* apply scaling to coefficients (headroom, dialnorm, dynrng) */ | /* apply scaling to coefficients (headroom, dialnorm, dynrng) */ | ||||
for(ch=1; ch<=ctx->nchans; ch++) { | for(ch=1; ch<=ctx->nchans; ch++) { | ||||
float gain = 2.0f * ctx->mul_bias; | float gain = 2.0f * ctx->mul_bias; | ||||
if(ctx->acmod == AC3_ACMOD_DUALMONO) { | |||||
if(ctx->channel_mode == AC3_CHMODE_DUALMONO) { | |||||
gain *= ctx->dialnorm[ch-1] * ctx->dynrng[ch-1]; | gain *= ctx->dialnorm[ch-1] * ctx->dynrng[ch-1]; | ||||
} else { | } else { | ||||
gain *= ctx->dialnorm[0] * ctx->dynrng[0]; | gain *= ctx->dialnorm[0] * ctx->dynrng[0]; | ||||
@@ -1136,9 +1136,9 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size, | |||||
return -1; | return -1; | ||||
} | } | ||||
if(avctx->channels == 2) { | if(avctx->channels == 2) { | ||||
ctx->output_mode = AC3_ACMOD_STEREO; | |||||
ctx->output_mode = AC3_CHMODE_STEREO; | |||||
} else if(avctx->channels == 1) { | } else if(avctx->channels == 1) { | ||||
ctx->output_mode = AC3_ACMOD_MONO; | |||||
ctx->output_mode = AC3_CHMODE_MONO; | |||||
} else if(avctx->channels != ctx->out_channels) { | } else if(avctx->channels != ctx->out_channels) { | ||||
av_log(avctx, AV_LOG_ERROR, "Cannot downmix AC3 from %d to %d channels.\n", | av_log(avctx, AV_LOG_ERROR, "Cannot downmix AC3 from %d to %d channels.\n", | ||||
ctx->out_channels, avctx->channels); | ctx->out_channels, avctx->channels); | ||||
@@ -37,17 +37,17 @@ typedef struct AC3EncodeContext { | |||||
int lfe_channel; | int lfe_channel; | ||||
int bit_rate; | int bit_rate; | ||||
unsigned int sample_rate; | unsigned int sample_rate; | ||||
unsigned int bsid; | |||||
unsigned int bitstream_id; | |||||
unsigned int frame_size_min; /* minimum frame size in case rounding is necessary */ | unsigned int frame_size_min; /* minimum frame size in case rounding is necessary */ | ||||
unsigned int frame_size; /* current frame size in words */ | unsigned int frame_size; /* current frame size in words */ | ||||
unsigned int bits_written; | unsigned int bits_written; | ||||
unsigned int samples_written; | unsigned int samples_written; | ||||
int sr_shift; | int sr_shift; | ||||
unsigned int frmsizecod; | |||||
unsigned int frame_size_code; | |||||
unsigned int sr_code; /* frequency */ | unsigned int sr_code; /* frequency */ | ||||
unsigned int acmod; | |||||
unsigned int channel_mode; | |||||
int lfe; | int lfe; | ||||
unsigned int bsmod; | |||||
unsigned int bitstream_mode; | |||||
short last_samples[AC3_MAX_CHANNELS][256]; | short last_samples[AC3_MAX_CHANNELS][256]; | ||||
unsigned int chbwcod[AC3_MAX_CHANNELS]; | unsigned int chbwcod[AC3_MAX_CHANNELS]; | ||||
int nb_coefs[AC3_MAX_CHANNELS]; | int nb_coefs[AC3_MAX_CHANNELS]; | ||||
@@ -527,14 +527,14 @@ static int compute_bit_allocation(AC3EncodeContext *s, | |||||
/* header size */ | /* header size */ | ||||
frame_bits += 65; | frame_bits += 65; | ||||
// if (s->acmod == 2) | |||||
// if (s->channel_mode == 2) | |||||
// frame_bits += 2; | // frame_bits += 2; | ||||
frame_bits += frame_bits_inc[s->acmod]; | |||||
frame_bits += frame_bits_inc[s->channel_mode]; | |||||
/* audio blocks */ | /* audio blocks */ | ||||
for(i=0;i<NB_BLOCKS;i++) { | for(i=0;i<NB_BLOCKS;i++) { | ||||
frame_bits += s->nb_channels * 2 + 2; /* blksw * c, dithflag * c, dynrnge, cplstre */ | frame_bits += s->nb_channels * 2 + 2; /* blksw * c, dithflag * c, dynrnge, cplstre */ | ||||
if (s->acmod == AC3_ACMOD_STEREO) { | |||||
if (s->channel_mode == AC3_CHMODE_STEREO) { | |||||
frame_bits++; /* rematstr */ | frame_bits++; /* rematstr */ | ||||
if(i==0) frame_bits += 4; | if(i==0) frame_bits += 4; | ||||
} | } | ||||
@@ -632,7 +632,7 @@ static int AC3_encode_init(AVCodecContext *avctx) | |||||
AC3EncodeContext *s = avctx->priv_data; | AC3EncodeContext *s = avctx->priv_data; | ||||
int i, j, ch; | int i, j, ch; | ||||
float alpha; | float alpha; | ||||
static const uint8_t acmod_defs[6] = { | |||||
static const uint8_t channel_mode_defs[6] = { | |||||
0x01, /* C */ | 0x01, /* C */ | ||||
0x02, /* L R */ | 0x02, /* L R */ | ||||
0x03, /* L C R */ | 0x03, /* L C R */ | ||||
@@ -648,7 +648,7 @@ static int AC3_encode_init(AVCodecContext *avctx) | |||||
/* number of channels */ | /* number of channels */ | ||||
if (channels < 1 || channels > 6) | if (channels < 1 || channels > 6) | ||||
return -1; | return -1; | ||||
s->acmod = acmod_defs[channels - 1]; | |||||
s->channel_mode = channel_mode_defs[channels - 1]; | |||||
s->lfe = (channels == 6) ? 1 : 0; | s->lfe = (channels == 6) ? 1 : 0; | ||||
s->nb_all_channels = channels; | s->nb_all_channels = channels; | ||||
s->nb_channels = channels > 5 ? 5 : channels; | s->nb_channels = channels > 5 ? 5 : channels; | ||||
@@ -665,8 +665,8 @@ static int AC3_encode_init(AVCodecContext *avctx) | |||||
s->sample_rate = freq; | s->sample_rate = freq; | ||||
s->sr_shift = i; | s->sr_shift = i; | ||||
s->sr_code = j; | s->sr_code = j; | ||||
s->bsid = 8 + s->sr_shift; | |||||
s->bsmod = 0; /* complete main audio service */ | |||||
s->bitstream_id = 8 + s->sr_shift; | |||||
s->bitstream_mode = 0; /* complete main audio service */ | |||||
/* bitrate & frame size */ | /* bitrate & frame size */ | ||||
bitrate /= 1000; | bitrate /= 1000; | ||||
@@ -677,8 +677,8 @@ static int AC3_encode_init(AVCodecContext *avctx) | |||||
if (i == 19) | if (i == 19) | ||||
return -1; | return -1; | ||||
s->bit_rate = bitrate; | s->bit_rate = bitrate; | ||||
s->frmsizecod = i << 1; | |||||
s->frame_size_min = ff_ac3_frame_size_tab[s->frmsizecod][s->sr_code]; | |||||
s->frame_size_code = i << 1; | |||||
s->frame_size_min = ff_ac3_frame_size_tab[s->frame_size_code][s->sr_code]; | |||||
s->bits_written = 0; | s->bits_written = 0; | ||||
s->samples_written = 0; | s->samples_written = 0; | ||||
s->frame_size = s->frame_size_min; | s->frame_size = s->frame_size_min; | ||||
@@ -719,15 +719,15 @@ static void output_frame_header(AC3EncodeContext *s, unsigned char *frame) | |||||
put_bits(&s->pb, 16, 0x0b77); /* frame header */ | put_bits(&s->pb, 16, 0x0b77); /* frame header */ | ||||
put_bits(&s->pb, 16, 0); /* crc1: will be filled later */ | put_bits(&s->pb, 16, 0); /* crc1: will be filled later */ | ||||
put_bits(&s->pb, 2, s->sr_code); | put_bits(&s->pb, 2, s->sr_code); | ||||
put_bits(&s->pb, 6, s->frmsizecod + (s->frame_size - s->frame_size_min)); | |||||
put_bits(&s->pb, 5, s->bsid); | |||||
put_bits(&s->pb, 3, s->bsmod); | |||||
put_bits(&s->pb, 3, s->acmod); | |||||
if ((s->acmod & 0x01) && s->acmod != AC3_ACMOD_MONO) | |||||
put_bits(&s->pb, 6, s->frame_size_code + (s->frame_size - s->frame_size_min)); | |||||
put_bits(&s->pb, 5, s->bitstream_id); | |||||
put_bits(&s->pb, 3, s->bitstream_mode); | |||||
put_bits(&s->pb, 3, s->channel_mode); | |||||
if ((s->channel_mode & 0x01) && s->channel_mode != AC3_CHMODE_MONO) | |||||
put_bits(&s->pb, 2, 1); /* XXX -4.5 dB */ | put_bits(&s->pb, 2, 1); /* XXX -4.5 dB */ | ||||
if (s->acmod & 0x04) | |||||
if (s->channel_mode & 0x04) | |||||
put_bits(&s->pb, 2, 1); /* XXX -6 dB */ | put_bits(&s->pb, 2, 1); /* XXX -6 dB */ | ||||
if (s->acmod == AC3_ACMOD_STEREO) | |||||
if (s->channel_mode == AC3_CHMODE_STEREO) | |||||
put_bits(&s->pb, 2, 0); /* surround not indicated */ | put_bits(&s->pb, 2, 0); /* surround not indicated */ | ||||
put_bits(&s->pb, 1, s->lfe); /* LFE */ | put_bits(&s->pb, 1, s->lfe); /* LFE */ | ||||
put_bits(&s->pb, 5, 31); /* dialog norm: -31 db */ | put_bits(&s->pb, 5, 31); /* dialog norm: -31 db */ | ||||
@@ -810,7 +810,7 @@ static void output_audio_block(AC3EncodeContext *s, | |||||
put_bits(&s->pb, 1, 0); /* no new coupling strategy */ | put_bits(&s->pb, 1, 0); /* no new coupling strategy */ | ||||
} | } | ||||
if (s->acmod == AC3_ACMOD_STEREO) | |||||
if (s->channel_mode == AC3_CHMODE_STEREO) | |||||
{ | { | ||||
if(block_num==0) | if(block_num==0) | ||||
{ | { | ||||