Browse Source

Expose measured Opus codec delay for capture clock mapping

master
evgeny 4 days ago
parent
commit
ab283eebdc
  1. 12
      lib/opus_codec.c
  2. 2
      lib/opus_codec.h

12
lib/opus_codec.c

@ -151,6 +151,18 @@ int opus_codec_encoder_application_set(opus_codec_encoder_t* enc, int applicatio
return opus_encoder_ctl(enc->opus_enc, OPUS_SET_APPLICATION(application));
}
int opus_codec_encoder_delay(opus_codec_encoder_t* enc, int* samples) {
if (!enc || !samples) { DEBUG_ERROR(DEBUG_CATEGORY_CALL, "Opus delay invalid arguments"); return -1; }
opus_int32 delay = 0;
int result = opus_encoder_ctl(enc->opus_enc, OPUS_GET_LOOKAHEAD(&delay));
if (result != OPUS_OK || delay < 0 || delay > enc->sample_rate) {
DEBUG_ERROR(DEBUG_CATEGORY_CALL, "Opus delay query failed result=%d samples=%d", result, (int)delay); return -1;
}
*samples = delay;
DEBUG_DEBUG(DEBUG_CATEGORY_CALL, "Opus capture delay samples=%d rate=%d", (int)delay, enc->sample_rate);
return 0;
}
const char* opus_codec_strerror(int err) {
switch (err) {
case OPUS_OK: return "OK";

2
lib/opus_codec.h

@ -34,6 +34,8 @@ int opus_codec_encoder_bitrate_set(opus_codec_encoder_t* enc, int bitrate_bps);
int opus_codec_encoder_complexity_set(opus_codec_encoder_t* enc, int complexity);
int opus_codec_encoder_signal_set(opus_codec_encoder_t* enc, int signal_type);
int opus_codec_encoder_application_set(opus_codec_encoder_t* enc, int application);
/* Задержка codec в сэмплах на канал; запрашивать после настройки encoder, не задавать константой. */
int opus_codec_encoder_delay(opus_codec_encoder_t* enc, int* samples);
const char* opus_codec_strerror(int err);

Loading…
Cancel
Save