diff options
author | Justin Ruggles <jruggle@earthlink.net> | 2006-01-21 17:09:23 +0000 |
---|---|---|
committer | Benjamin Larsson <banan@ludd.ltu.se> | 2006-01-21 17:09:23 +0000 |
commit | 13c71451350071888b5d690f9d48cd316e0d4aed (patch) | |
tree | 463d0dac31326b855ce81574a3c9b80f13284d55 /libavcodec | |
parent | 48d1b9a17c7ff9c622e9e0bf9806ca3552e8bf4d (diff) | |
download | ffmpeg-13c71451350071888b5d690f9d48cd316e0d4aed.tar.gz |
Implement audio cutoff frequency to the vorbis encoder.
Patch by Justin Ruggles jruggle earthlink net.
Originally committed as revision 4877 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/oggvorbis.c | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/libavcodec/oggvorbis.c b/libavcodec/oggvorbis.c index 80ed07db4f..56fa247500 100644 --- a/libavcodec/oggvorbis.c +++ b/libavcodec/oggvorbis.c @@ -29,25 +29,35 @@ typedef struct OggVorbisContext { static int oggvorbis_init_encoder(vorbis_info *vi, AVCodecContext *avccontext) { + double cfreq; if(avccontext->flags & CODEC_FLAG_QSCALE) { - return vorbis_encode_init_vbr(vi, avccontext->channels, + /* variable bitrate */ + if(vorbis_encode_setup_vbr(vi, avccontext->channels, avccontext->sample_rate, - avccontext->global_quality / (float)FF_QP2LAMBDA); - } + avccontext->global_quality / (float)FF_QP2LAMBDA)) + return -1; + } else { + /* constant bitrate */ + if(vorbis_encode_setup_managed(vi, avccontext->channels, + avccontext->sample_rate, -1, avccontext->bit_rate, -1)) + return -1; + #ifdef OGGVORBIS_VBR_BY_ESTIMATE - /* variable bitrate by estimate */ + /* variable bitrate by estimate */ + if(vorbis_encode_ctl(vi, OV_ECTL_RATEMANAGE_AVG, NULL)) + return -1; +#endif + } - return (vorbis_encode_setup_managed(vi, avccontext->channels, - avccontext->sample_rate, -1, avccontext->bit_rate, -1) || - vorbis_encode_ctl(vi, OV_ECTL_RATEMANAGE_AVG, NULL) || - vorbis_encode_setup_init(vi)) ; -#else - /* constant bitrate */ + /* cutoff frequency */ + if(avccontext->cutoff > 0) { + cfreq = avccontext->cutoff / 1000.0; + if(vorbis_encode_ctl(vi, OV_ECTL_LOWPASS_SET, &cfreq)) + return -1; + } - return vorbis_encode_init(vi, avccontext->channels, - avccontext->sample_rate, -1, avccontext->bit_rate, -1) ; -#endif + return vorbis_encode_setup_init(vi); } static int oggvorbis_encode_init(AVCodecContext *avccontext) { |