[FFmpeg-cvslog] r26049 - trunk/libavcodec/ac3enc.c

jbr subversion
Sat Dec 18 00:42:52 CET 2010


Author: jbr
Date: Sat Dec 18 00:42:52 2010
New Revision: 26049

Log:
Check user-specified cutoff frequency in validate_options().

Modified:
   trunk/libavcodec/ac3enc.c

Modified: trunk/libavcodec/ac3enc.c
==============================================================================
--- trunk/libavcodec/ac3enc.c	Fri Dec 17 23:06:00 2010	(r26048)
+++ trunk/libavcodec/ac3enc.c	Sat Dec 18 00:42:52 2010	(r26049)
@@ -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(AVCo
     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(AVCo
  * 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(AVCod
     s->samples_written = 0;
     s->frame_size      = s->frame_size_min;
 
-    set_bandwidth(s, avctx->cutoff);
+    set_bandwidth(s);
 
     exponent_init(s);
 



More information about the ffmpeg-cvslog mailing list