Commit 1408352a authored by Justin Ruggles's avatar Justin Ruggles

Add option for user to scale the amount of dynamic range compression which is

applied by the audio decoder, and use that option in the AC3 decoder.

Originally committed as revision 11280 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent cd31f8dc
...@@ -792,7 +792,8 @@ static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk) ...@@ -792,7 +792,8 @@ static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk)
i = !(ctx->channel_mode); i = !(ctx->channel_mode);
do { do {
if(get_bits1(gb)) { if(get_bits1(gb)) {
ctx->dynamic_range[i] = dynamic_range_tab[get_bits(gb, 8)]; ctx->dynamic_range[i] = ((dynamic_range_tab[get_bits(gb, 8)]-1.0) *
ctx->avctx->drc_scale)+1.0;
} else if(blk == 0) { } else if(blk == 0) {
ctx->dynamic_range[i] = 1.0f; ctx->dynamic_range[i] = 1.0f;
} }
......
...@@ -2154,6 +2154,14 @@ typedef struct AVCodecContext { ...@@ -2154,6 +2154,14 @@ typedef struct AVCodecContext {
* - decoding: Set by user. * - decoding: Set by user.
*/ */
int request_channels; int request_channels;
/**
* Percentage of dynamic range compression to be applied by the decoder.
* The default value is 1.0, corresponding to full compression.
* - encoding: unused
* - decoding: Set by user.
*/
float drc_scale;
} AVCodecContext; } AVCodecContext;
/** /**
......
...@@ -761,6 +761,7 @@ static const AVOption options[]={ ...@@ -761,6 +761,7 @@ static const AVOption options[]={
{"drop_frame_timecode", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_DROP_FRAME_TIMECODE, INT_MIN, INT_MAX, V|E, "flags2"}, {"drop_frame_timecode", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_DROP_FRAME_TIMECODE, INT_MIN, INT_MAX, V|E, "flags2"},
{"non_linear_q", "use non linear quantizer", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_NON_LINEAR_QUANT, INT_MIN, INT_MAX, V|E, "flags2"}, {"non_linear_q", "use non linear quantizer", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_NON_LINEAR_QUANT, INT_MIN, INT_MAX, V|E, "flags2"},
{"request_channels", "set desired number of audio channels", OFFSET(request_channels), FF_OPT_TYPE_INT, DEFAULT, 0, INT_MAX, A|D}, {"request_channels", "set desired number of audio channels", OFFSET(request_channels), FF_OPT_TYPE_INT, DEFAULT, 0, INT_MAX, A|D},
{"drc_scale", "percentage of dynamic range compression to apply", OFFSET(drc_scale), FF_OPT_TYPE_FLOAT, 1.0, 0.0, 1.0, A|D},
{NULL}, {NULL},
}; };
......
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