7#include "opus/opus_multistream.h"
9#ifndef OPUS_ENC_MAX_BUFFER_SIZE
10#define OPUS_ENC_MAX_BUFFER_SIZE 2048
13#ifndef OPUS_DEC_MAX_BUFFER_SIZE
14#define OPUS_DEC_MAX_BUFFER_SIZE 4 * 1024
140 const char*
mime()
override {
return "audio/opus"; }
171 if (err != OPUS_OK ||
dec ==
nullptr) {
173 "opus_multistream_decoder_create: %s for sample_rate: %d, "
174 "channels:%d, streams:%d, coupled:%d",
185 if (
dec !=
nullptr) {
186 opus_multistream_decoder_destroy(
dec);
209 if (channels_changed || !
active) {
218 LOGD(
"OpusMultiStreamAudioDecoder::write: %d", (
int)len);
219 int in_band_forward_error_correction = 0;
221 int out_samples = opus_multistream_decode(
223 in_band_forward_error_correction);
224 if (out_samples < 0) {
225 LOGW(
"opus_multistream_decode: %s", opus_strerror(out_samples));
226 }
else if (out_samples > 0) {
228 LOGD(
"opus_multistream_decode: %d", out_bytes);
229 int open = out_bytes;
235 processed += written;
247 OpusMSDecoder*
dec =
nullptr;
256 if (valid == rate)
return true;
285 const char*
mime()
override {
return "audio/opus"; }
288 LOGD(
"OpusMultiStreamAudioEncoder::setAudioInfo: sample_rate: %d, channels: %d",
295 if (
enc !=
nullptr) {
302 LOGD(
"OpusMultiStreamAudioEncoder::begin: sample_rate: %d, channels: %d",
320 if (err != OPUS_OK ||
enc ==
nullptr) {
322 "opus_multistream_encoder_create: %s for sample_rate: %d, "
323 "channels:%d, streams:%d, coupled:%d",
347 if (
enc !=
nullptr) {
348 opus_multistream_encoder_destroy(
enc);
356 LOGD(
"OpusMultiStreamAudioEncoder::write: %d", (
int)len);
357 for (
int j = 0; j < len; j++) {
368 if (
enc ==
nullptr)
return 0;
369 opus_int32 samples = 0;
370 if (opus_multistream_encoder_ctl(
enc, OPUS_GET_LOOKAHEAD(&samples)) !=
374 return samples > 0 ? samples : 0;
381 if (bytesPerSample <= 0)
return 0;
389 OpusMSEncoder*
enc =
nullptr;
407 LOGD(
"opus_multistream_encode - frame_size: %d", frames);
408 int len = opus_multistream_encode(
enc, (opus_int16*)
frame.
data(), frames,
411 LOGE(
"opus_multistream_encode: %s", opus_strerror(len));
412 }
else if (len > 0) {
413 LOGD(
"opus_multistream_encode: %d", len);
416 LOGE(
"encodeFrame data lost: %d->%d", len, eff);
424 case OPUS_FRAMESIZE_2_5_MS:
425 return sampling_rate / 400;
426 case OPUS_FRAMESIZE_5_MS:
427 return sampling_rate / 200;
428 case OPUS_FRAMESIZE_10_MS:
429 return sampling_rate / 100;
430 case OPUS_FRAMESIZE_20_MS:
431 return sampling_rate / 50;
432 case OPUS_FRAMESIZE_40_MS:
433 return sampling_rate / 25;
434 case OPUS_FRAMESIZE_60_MS:
435 return 3 * sampling_rate / 50;
436 case OPUS_FRAMESIZE_80_MS:
437 return 4 * sampling_rate / 50;
438 case OPUS_FRAMESIZE_100_MS:
439 return 5 * sampling_rate / 50;
440 case OPUS_FRAMESIZE_120_MS:
441 return 6 * sampling_rate / 50;
443 return sampling_rate / 100;
449 opus_multistream_encoder_ctl(
enc, OPUS_SET_BITRATE(
cfg.
bitrate)) !=
455 opus_multistream_encoder_ctl(
461 opus_multistream_encoder_ctl(
enc, OPUS_SET_VBR(
cfg.
vbr)) != OPUS_OK) {
466 opus_multistream_encoder_ctl(
472 opus_multistream_encoder_ctl(
478 opus_multistream_encoder_ctl(
483 if (
cfg.
signal >= 0 && opus_multistream_encoder_ctl(
489 opus_multistream_encoder_ctl(
495 opus_multistream_encoder_ctl(
501 opus_multistream_encoder_ctl(
enc, OPUS_SET_LSB_DEPTH(
cfg.
lsb_depth)) !=
507 opus_multistream_encoder_ctl(
513 if (
cfg.
use_dtx >= 0 && opus_multistream_encoder_ctl(
519 opus_multistream_encoder_ctl(
#define LOGW(...)
Definition AudioLoggerIDF.h:29
#define TRACED()
Definition AudioLoggerIDF.h:31
#define LOGD(...)
Definition AudioLoggerIDF.h:27
#define LOGE(...)
Definition AudioLoggerIDF.h:30
#define OPUS_DEC_MAX_BUFFER_SIZE
Definition CodecOpus.h:12
#define OPUS_ENC_MAX_BUFFER_SIZE
Definition CodecOpus.h:8
#define assert(T)
Definition avr.h:10
virtual size_t write(const uint8_t *data, size_t len)
Definition Arduino.h:120