diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2010-12-17 23:42:52 +0000 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2010-12-17 23:42:52 +0000 |
commit | e62ef8f2dbf1ac0a197310f2be69c93b89f838c2 (patch) | |
tree | 3e121901f291084c21f98eb8e933e4e083c5c0a3 | |
parent | 78646ac206feceb8a24bfe45cd3e216e14fd5b1b (diff) | |
download | ffmpeg-e62ef8f2dbf1ac0a197310f2be69c93b89f838c2.tar.gz |
Check user-specified cutoff frequency in validate_options().
Originally committed as revision 26049 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavcodec/ac3enc.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c index 274e76be9d..b69ed8b26f 100644 --- a/libavcodec/ac3enc.c +++ b/libavcodec/ac3enc.c @@ -111,6 +111,7 @@ typedef struct AC3EncodeContext { int channel_mode; ///< channel mode (acmod) const uint8_t *channel_map; ///< channel map used to reorder channels + int cutoff; ///< user-specified cutoff frequency, in Hz int bandwidth_code[AC3_MAX_CHANNELS]; ///< bandwidth code (0 to 60) (chbwcod) int nb_coefs[AC3_MAX_CHANNELS]; @@ -1691,6 +1692,15 @@ static av_cold int validate_options(AVCodecContext *avctx, AC3EncodeContext *s) s->bit_rate = avctx->bit_rate; s->frame_size_code = i << 1; + /* validate cutoff */ + if (avctx->cutoff < 0) { + av_log(avctx, AV_LOG_ERROR, "invalid cutoff frequency\n"); + return AVERROR(EINVAL); + } + s->cutoff = avctx->cutoff; + if (s->cutoff > (s->sample_rate >> 1)) + s->cutoff = s->sample_rate >> 1; + return 0; } @@ -1700,15 +1710,14 @@ static av_cold int validate_options(AVCodecContext *avctx, AC3EncodeContext *s) * The user can optionally supply a cutoff frequency. Otherwise an appropriate * default value will be used. */ -static av_cold void set_bandwidth(AC3EncodeContext *s, int cutoff) +static av_cold void set_bandwidth(AC3EncodeContext *s) { int ch, bw_code; - if (cutoff) { + if (s->cutoff) { /* calculate bandwidth based on user-specified cutoff frequency */ int fbw_coeffs; - cutoff = av_clip(cutoff, 1, s->sample_rate >> 1); - fbw_coeffs = cutoff * 2 * AC3_MAX_COEFS / s->sample_rate; + fbw_coeffs = s->cutoff * 2 * AC3_MAX_COEFS / s->sample_rate; bw_code = av_clip((fbw_coeffs - 73) / 3, 0, 60); } else { /* use default bandwidth setting */ @@ -1818,7 +1827,7 @@ static av_cold int ac3_encode_init(AVCodecContext *avctx) s->samples_written = 0; s->frame_size = s->frame_size_min; - set_bandwidth(s, avctx->cutoff); + set_bandwidth(s); exponent_init(s); |