ref: ba547467c0e54814e3b464bc2646a27778948930
parent: 4907d3752ec580ced202dfa37e9616298547cbd0
author: Jean-Marc Valin <[email protected]>
date: Tue May 10 13:54:41 EDT 2011
Adding a decent auto/default bit-rate choice
--- a/src/opus.h
+++ b/src/opus.h
@@ -63,6 +63,8 @@
#define OPUS_TEST_RANGE_CODER_STATE 1
+#define OPUS_BITRATE_AUTO -1
+
#define OPUS_MODE_AUTO 2000
#define OPUS_MODE_VOICE 2001
#define OPUS_MODE_AUDIO 2002
--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -123,7 +123,8 @@
st->mode = MODE_HYBRID;
st->bandwidth = BANDWIDTH_FULLBAND;
st->use_vbr = 0;
- st->bitrate_bps = 32000;
+ st->user_bitrate_bps = OPUS_BITRATE_AUTO;
+ st->bitrate_bps = 3000+Fs*channels;
st->user_mode = OPUS_MODE_AUTO;
st->user_bandwidth = BANDWIDTH_AUTO;
st->voice_ratio = 90;
@@ -173,6 +174,12 @@
silk_enc = (char*)st+st->silk_enc_offset;
celt_enc = (CELTEncoder*)((char*)st+st->celt_enc_offset);
+
+ if (st->user_bitrate_bps==OPUS_BITRATE_AUTO)
+ st->bitrate_bps = 60*st->Fs/frame_size + st->Fs*st->channels;
+ else
+ st->bitrate_bps = st->user_bitrate_bps;
+
/* Rete-dependent mono-stereo decision */
if (st->channels == 2)
{
@@ -583,7 +590,14 @@
case OPUS_SET_BITRATE_REQUEST:
{
int value = va_arg(ap, int);
- st->bitrate_bps = value;
+ if (value != OPUS_BITRATE_AUTO)
+ {
+ if (value <= 0)
+ goto bad_arg;
+ else if (value <= 500)
+ value = 500;
+ }
+ st->user_bitrate_bps = value;
}
break;
case OPUS_GET_BITRATE_REQUEST:
--- a/src/opus_encoder.h
+++ b/src/opus_encoder.h
@@ -53,6 +53,7 @@
int use_vbr;
int vbr_constraint;
int bitrate_bps;
+ int user_bitrate_bps;
int encoder_buffer;
int delay_compensation;
int first;