summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2010-12-17 23:42:52 +0000
committerJustin Ruggles <justin.ruggles@gmail.com>2010-12-17 23:42:52 +0000
commite62ef8f2dbf1ac0a197310f2be69c93b89f838c2 (patch)
tree3e121901f291084c21f98eb8e933e4e083c5c0a3
parent78646ac206feceb8a24bfe45cd3e216e14fd5b1b (diff)
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.c19
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);