13#include "sbc/formats.h"
41 virtual const char *
mime()
override {
return "audio/sbc"; }
61 virtual size_t write(
const uint8_t *data,
size_t len) {
62 LOGD(
"write: %d", len);
68 uint8_t *start = (uint8_t *)data;
82 for (
int j = 0; j < count; j++) {
119 info.bits_per_sample = 16;
120 info.channels =
sbc.mode == SBC_MODE_MONO ? 1 : 2;
121 LOGI(
"channels: %d",
info.channels);
122 switch (
sbc.frequency) {
124 info.sample_rate = 16000;
127 info.sample_rate = 32000;
130 info.sample_rate = 44100;
133 info.sample_rate = 48000;
136 LOGE(
"Unsupported sample rate");
137 info.sample_rate = 0;
140 LOGI(
"sample_rate: %d",
info.sample_rate);
148 size_t result_len = 0;
149 int frame_len = sbc_parse(&
sbc, data, length);
163 LOGI(
"input_buffer: %d", len);
176 size_t result_len = 0;
179 if (result_len > 0) {
221 LOGE(
"Invalid blocks: %d - using 16",
blocks);
235 this->allocation_method = SBC_AM_LOUDNESS;
257 virtual const char *
mime() {
return "audio/sbc"; }
263 virtual size_t write(
const uint8_t *data,
size_t len) {
264 LOGD(
"write: %d", len);
270 LOGE(
"output not defined");
275 for (
int j = 0; j < len; j++) {
314 if (
info.bits_per_sample!=16){
315 LOGE(
"Invalid bits_per_sample: %d",
info.bits_per_sample);
319 switch (
info.sample_rate) {
321 sbc.frequency = SBC_FREQ_16000;
324 sbc.frequency = SBC_FREQ_32000;
327 sbc.frequency = SBC_FREQ_44100;
330 sbc.frequency = SBC_FREQ_48000;
333 LOGE(
"Invalid sample_rate: %d",
info.sample_rate);
337 switch (
info.channels) {
339 sbc.mode = SBC_MODE_MONO;
342 sbc.mode = SBC_MODE_STEREO;
345 LOGE(
"Invalid channels: %d",
info.channels);
351 sbc.subbands = SBC_SB_4;
354 sbc.subbands = SBC_SB_8;
363 sbc.blocks = SBC_BLK_4;
366 sbc.blocks = SBC_BLK_8;
369 sbc.blocks = SBC_BLK_12;
372 sbc.blocks = SBC_BLK_16;