aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2007-12-20 00:55:08 +0000
committerJustin Ruggles <justin.ruggles@gmail.com>2007-12-20 00:55:08 +0000
commit1408352ada60d5a174b48d547114bb086812fcdb (patch)
tree5fc703d20a2a6d9226684deec3fb2749ea570e5f /libavcodec
parentcd31f8dc23649fc61658fadee302ce20f761303b (diff)
downloadffmpeg-1408352ada60d5a174b48d547114bb086812fcdb.tar.gz
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
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/ac3dec.c3
-rw-r--r--libavcodec/avcodec.h8
-rw-r--r--libavcodec/utils.c1
3 files changed, 11 insertions, 1 deletions
diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c
index 468723f285..c06edc46e5 100644
--- a/libavcodec/ac3dec.c
+++ b/libavcodec/ac3dec.c
@@ -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;
}
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 88d600c50f..a32f961403 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -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;
/**
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index 290814dcca..3b5ef7a773 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -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},
};