mirror of
https://github.com/xiph/opus.git
synced 2025-06-02 00:27:43 +00:00
Adding constrained VBR mode
This commit is contained in:
parent
d8571e4b87
commit
b55b66119b
5 changed files with 25 additions and 1 deletions
2
celt
2
celt
|
@ -1 +1 @@
|
||||||
Subproject commit 7c328c2d7a9bb28b837d935658ec05bfd7746aa6
|
Subproject commit 6f6e8b39842a7d175e89f47e4d37ad5de8143ad2
|
|
@ -125,6 +125,11 @@ extern "C" {
|
||||||
#define OPUS_GET_VOICE_RATIO_REQUEST 19
|
#define OPUS_GET_VOICE_RATIO_REQUEST 19
|
||||||
#define OPUS_GET_VOICE_RATIO(x) OPUS_GET_VOICE_RATIO_REQUEST, __check_int_ptr(x)
|
#define OPUS_GET_VOICE_RATIO(x) OPUS_GET_VOICE_RATIO_REQUEST, __check_int_ptr(x)
|
||||||
|
|
||||||
|
#define OPUS_SET_VBR_CONSTRAINT_REQUEST 20
|
||||||
|
#define OPUS_SET_VBR_CONSTRAINT(x) OPUS_SET_VBR_CONSTRAINT_REQUEST, __check_int(x)
|
||||||
|
#define OPUS_GET_VBR_CONSTRAINT_REQUEST 21
|
||||||
|
#define OPUS_GET_VBR_CONSTRAINT(x) OPUS_GET_VBR_CONSTRAINT_REQUEST, __check_int_ptr(x)
|
||||||
|
|
||||||
typedef struct OpusEncoder OpusEncoder;
|
typedef struct OpusEncoder OpusEncoder;
|
||||||
typedef struct OpusDecoder OpusDecoder;
|
typedef struct OpusDecoder OpusDecoder;
|
||||||
|
|
||||||
|
|
|
@ -360,6 +360,7 @@ int opus_encode(OpusEncoder *st, const short *pcm, int frame_size,
|
||||||
if (st->use_vbr)
|
if (st->use_vbr)
|
||||||
{
|
{
|
||||||
celt_encoder_ctl(st->celt_enc, CELT_SET_VBR(1));
|
celt_encoder_ctl(st->celt_enc, CELT_SET_VBR(1));
|
||||||
|
celt_encoder_ctl(st->celt_enc, CELT_SET_VBR_CONSTRAINT(st->vbr_constraint));
|
||||||
celt_encoder_ctl(st->celt_enc, CELT_SET_BITRATE(st->bitrate_bps));
|
celt_encoder_ctl(st->celt_enc, CELT_SET_BITRATE(st->bitrate_bps));
|
||||||
nb_compr_bytes = max_data_bytes-1;
|
nb_compr_bytes = max_data_bytes-1;
|
||||||
} else {
|
} else {
|
||||||
|
@ -616,6 +617,18 @@ int opus_encoder_ctl(OpusEncoder *st, int request, ...)
|
||||||
*value = st->voice_ratio;
|
*value = st->voice_ratio;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case OPUS_SET_VBR_CONSTRAINT_REQUEST:
|
||||||
|
{
|
||||||
|
int value = va_arg(ap, int);
|
||||||
|
st->vbr_constraint = value;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case OPUS_GET_VBR_CONSTRAINT_REQUEST:
|
||||||
|
{
|
||||||
|
int *value = va_arg(ap, int*);
|
||||||
|
*value = st->vbr_constraint;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "unknown opus_encoder_ctl() request: %d", request);
|
fprintf(stderr, "unknown opus_encoder_ctl() request: %d", request);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -51,6 +51,7 @@ struct OpusEncoder {
|
||||||
/* Sampling rate (at the API level) */
|
/* Sampling rate (at the API level) */
|
||||||
int Fs;
|
int Fs;
|
||||||
int use_vbr;
|
int use_vbr;
|
||||||
|
int vbr_constraint;
|
||||||
int bitrate_bps;
|
int bitrate_bps;
|
||||||
int encoder_buffer;
|
int encoder_buffer;
|
||||||
int delay_compensation;
|
int delay_compensation;
|
||||||
|
|
|
@ -82,6 +82,7 @@ int main(int argc, char *argv[])
|
||||||
int complexity;
|
int complexity;
|
||||||
int use_inbandfec;
|
int use_inbandfec;
|
||||||
int use_dtx;
|
int use_dtx;
|
||||||
|
int cvbr = 0;
|
||||||
int packet_loss_perc;
|
int packet_loss_perc;
|
||||||
int count=0, count_act=0, k;
|
int count=0, count_act=0, k;
|
||||||
int skip;
|
int skip;
|
||||||
|
@ -169,6 +170,9 @@ int main(int argc, char *argv[])
|
||||||
} else if( STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-inbandfec" ) == 0 ) {
|
} else if( STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-inbandfec" ) == 0 ) {
|
||||||
use_inbandfec = 1;
|
use_inbandfec = 1;
|
||||||
args++;
|
args++;
|
||||||
|
} else if( STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-cvbr" ) == 0 ) {
|
||||||
|
cvbr = 1;
|
||||||
|
args++;
|
||||||
} else if( STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-dtx") == 0 ) {
|
} else if( STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-dtx") == 0 ) {
|
||||||
use_dtx = 1;
|
use_dtx = 1;
|
||||||
args++;
|
args++;
|
||||||
|
@ -222,6 +226,7 @@ int main(int argc, char *argv[])
|
||||||
opus_encoder_ctl(enc, OPUS_SET_BITRATE(bitrate_bps));
|
opus_encoder_ctl(enc, OPUS_SET_BITRATE(bitrate_bps));
|
||||||
opus_encoder_ctl(enc, OPUS_SET_BANDWIDTH(bandwidth));
|
opus_encoder_ctl(enc, OPUS_SET_BANDWIDTH(bandwidth));
|
||||||
opus_encoder_ctl(enc, OPUS_SET_VBR_FLAG(use_vbr));
|
opus_encoder_ctl(enc, OPUS_SET_VBR_FLAG(use_vbr));
|
||||||
|
opus_encoder_ctl(enc, OPUS_SET_VBR_CONSTRAINT(cvbr));
|
||||||
opus_encoder_ctl(enc, OPUS_SET_COMPLEXITY(complexity));
|
opus_encoder_ctl(enc, OPUS_SET_COMPLEXITY(complexity));
|
||||||
opus_encoder_ctl(enc, OPUS_SET_INBAND_FEC_FLAG(use_inbandfec));
|
opus_encoder_ctl(enc, OPUS_SET_INBAND_FEC_FLAG(use_inbandfec));
|
||||||
opus_encoder_ctl(enc, OPUS_SET_DTX_FLAG(use_dtx));
|
opus_encoder_ctl(enc, OPUS_SET_DTX_FLAG(use_dtx));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue