aboutsummaryrefslogtreecommitdiff
path: root/gst-libs/ext/libav/libavcodec/libvorbis.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst-libs/ext/libav/libavcodec/libvorbis.c')
-rw-r--r--gst-libs/ext/libav/libavcodec/libvorbis.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/gst-libs/ext/libav/libavcodec/libvorbis.c b/gst-libs/ext/libav/libavcodec/libvorbis.c
index 25e6006..60235d7 100644
--- a/gst-libs/ext/libav/libavcodec/libvorbis.c
+++ b/gst-libs/ext/libav/libavcodec/libvorbis.c
@@ -29,6 +29,7 @@
#include "libavutil/opt.h"
#include "avcodec.h"
#include "bytestream.h"
+#include "internal.h"
#include "vorbis.h"
#include "libavutil/mathematics.h"
@@ -59,6 +60,12 @@ static const AVOption options[] = {
{ "iblock", "Sets the impulse block bias", offsetof(OggVorbisContext, iblock), AV_OPT_TYPE_DOUBLE, { .dbl = 0 }, -15, 0, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM },
{ NULL }
};
+
+static const AVCodecDefault defaults[] = {
+ { "b", "0" },
+ { NULL },
+};
+
static const AVClass class = { "libvorbis", av_default_item_name, options, LIBAVUTIL_VERSION_INT };
static av_cold int oggvorbis_init_encoder(vorbis_info *vi, AVCodecContext *avccontext)
@@ -66,20 +73,27 @@ static av_cold int oggvorbis_init_encoder(vorbis_info *vi, AVCodecContext *avcco
OggVorbisContext *context = avccontext->priv_data;
double cfreq;
- if (avccontext->flags & CODEC_FLAG_QSCALE) {
- /* variable bitrate */
+ if (avccontext->flags & CODEC_FLAG_QSCALE || !avccontext->bit_rate) {
+ /* variable bitrate
+ * NOTE: we use the oggenc range of -1 to 10 for global_quality for
+ * user convenience, but libvorbis uses -0.1 to 1.0.
+ */
+ float q = avccontext->global_quality / (float)FF_QP2LAMBDA;
+ /* default to 3 if the user did not set quality or bitrate */
+ if (!(avccontext->flags & CODEC_FLAG_QSCALE))
+ q = 3.0;
if (vorbis_encode_setup_vbr(vi, avccontext->channels,
avccontext->sample_rate,
- avccontext->global_quality / (float)FF_QP2LAMBDA / 10.0))
+ q / 10.0))
return -1;
} else {
int minrate = avccontext->rc_min_rate > 0 ? avccontext->rc_min_rate : -1;
- int maxrate = avccontext->rc_min_rate > 0 ? avccontext->rc_max_rate : -1;
+ int maxrate = avccontext->rc_max_rate > 0 ? avccontext->rc_max_rate : -1;
/* constant bitrate */
if (vorbis_encode_setup_managed(vi, avccontext->channels,
- avccontext->sample_rate, minrate,
- avccontext->bit_rate, maxrate))
+ avccontext->sample_rate, maxrate,
+ avccontext->bit_rate, minrate))
return -1;
/* variable bitrate by estimate, disable slow rate management */
@@ -262,4 +276,5 @@ AVCodec ff_libvorbis_encoder = {
.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE },
.long_name = NULL_IF_CONFIG_SMALL("libvorbis Vorbis"),
.priv_class = &class,
+ .defaults = defaults,
};