[SCM] libav/experimental: Check user-specified cutoff frequency in validate_options().

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 17:20:35 UTC 2013


The following commit has been merged in the experimental branch:
commit e62ef8f2dbf1ac0a197310f2be69c93b89f838c2
Author: Justin Ruggles <justin.ruggles at gmail.com>
Date:   Fri Dec 17 23:42:52 2010 +0000

    Check user-specified cutoff frequency in validate_options().
    
    Originally committed as revision 26049 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c
index 274e76b..b69ed8b 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);
 

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list