summaryrefslogtreecommitdiff
path: root/libavcodec/oggvorbis.c
diff options
context:
space:
mode:
authorJustin Ruggles <jruggle@earthlink.net>2006-01-21 17:09:23 +0000
committerBenjamin Larsson <banan@ludd.ltu.se>2006-01-21 17:09:23 +0000
commit13c71451350071888b5d690f9d48cd316e0d4aed (patch)
tree463d0dac31326b855ce81574a3c9b80f13284d55 /libavcodec/oggvorbis.c
parent48d1b9a17c7ff9c622e9e0bf9806ca3552e8bf4d (diff)
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/oggvorbis.c')
-rw-r--r--libavcodec/oggvorbis.c36
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) {