Add option for user to scale the amount of dynamic range compression which is
authorJustin Ruggles <justin.ruggles@gmail.com>
Thu, 20 Dec 2007 00:55:08 +0000 (00:55 +0000)
committerJustin Ruggles <justin.ruggles@gmail.com>
Thu, 20 Dec 2007 00:55:08 +0000 (00:55 +0000)
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

libavcodec/ac3dec.c
libavcodec/avcodec.h
libavcodec/utils.c

index 468723f..c06edc4 100644 (file)
@@ -792,7 +792,8 @@ static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk)
     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;
         }
index 88d600c..a32f961 100644 (file)
@@ -2154,6 +2154,14 @@ typedef struct AVCodecContext {
      * - 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;
 
 /**
index 290814d..3b5ef7a 100644 (file)
@@ -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"},
 {"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},
 };