# HG changeset patch # User jbr # Date 1198112108 0 # Node ID 2f9c17454842e840c75bb0d060968ad9e457117d # Parent a5f184563b8c8a8b7a0f8423ff70d81eb044e620 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. diff -r a5f184563b8c -r 2f9c17454842 ac3dec.c --- a/ac3dec.c Wed Dec 19 23:03:52 2007 +0000 +++ b/ac3dec.c Thu Dec 20 00:55:08 2007 +0000 @@ -792,7 +792,8 @@ i = !(ctx->channel_mode); do { 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) { ctx->dynamic_range[i] = 1.0f; } diff -r a5f184563b8c -r 2f9c17454842 avcodec.h --- a/avcodec.h Wed Dec 19 23:03:52 2007 +0000 +++ b/avcodec.h Thu Dec 20 00:55:08 2007 +0000 @@ -2154,6 +2154,14 @@ * - decoding: Set by user. */ 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; /** diff -r a5f184563b8c -r 2f9c17454842 utils.c --- a/utils.c Wed Dec 19 23:03:52 2007 +0000 +++ b/utils.c Thu Dec 20 00:55:08 2007 +0000 @@ -761,6 +761,7 @@ {"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"}, {"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}, };