6#ifndef MAX_ZERO_READ_COUNT
7#define MAX_ZERO_READ_COUNT 3
10#ifndef CHANNEL_SELECT_BUFFER_SIZE
11#define CHANNEL_SELECT_BUFFER_SIZE 256
37 if (transform ==
nullptr) {
38 LOGE(
"transform is NULL");
42 LOGE(
"p_stream is NULL");
48 LOGD(
"TransformationReader::readBytes: %d", (
int)len);
54 LOGE(
"p_stream is NULL");
64 int result_len = min((
int)len,
result_queue.available());
66 LOGD(
"TransformationReader::readBytes: %d -> %d", (
int)len, result_len);
79 LOGD(
"TransformationReader::available: %d", available_bytes);
145 if (byte_factor <= 0.0f) {
146 LOGE(
"Invalid byte factor: %f", byte_factor);
157 bool byte_factor_changed =
160 LOGD(
"setupBuffers: %d", (
int)len);
164 int size = (0.5f / byte_factor * len);
167 if (size <= 0) size = 4;
168 if (
buffer.size() < size) {
169 LOGI(
"read size: %d", size);
176 LOGI(
"buffer size: %d", rb_size);
188 LOGD(
"fillResultQueue: %d", (
int)len);
194 LOGE(
"fillResultQueue: result_queue_buffer too small: %d < %d. "
195 "Increase result_queue_factor or call resizeReadResultQueue().",
206 LOGE(
"fillResultQueue: result_queue full (%d) but target not reached "
207 "(%d/%d). Increase result_queue_factor or call "
208 "resizeReadResultQueue().",
212 int read_size =
buffer.size();
214 LOGD(
"readBytes from source: %d -> %d", read_size,read_eff);
217 if (read_eff !=
buffer.size()) {
218 LOGD(
"readBytes %d -> %d",
buffer.size(), read_eff);
221 if (write_eff != read_eff) {
222 LOGE(
"TransformationReader::write %d -> %d", read_eff, write_eff);
300 LOGD(
"ReformatBaseStream::readBytes: %d", (
int)len);
301 return reader.readBytes(data, len);
305 return reader.available();
371 size_t write(
const uint8_t* data,
size_t len) {
372 return p_print->write(data, len);
404 size_t write(
const uint8_t* data,
size_t len)
override {
447 size_t write(
const uint8_t* data,
size_t len)
override {
526 for (
int j = 0; j <
vector.size(); j++) {
527 if (
vector[j].print == &print) {
535 for (
int j = 0; j <
vector.size(); j++) {
541 for (
int j = 0; j <
vector.size(); j++) {
542 if (
vector[j].info !=
nullptr) {
543 vector[j].info->setAudioInfo(info);
548 size_t write(
const uint8_t* data,
size_t len)
override {
549 for (
auto& rec :
vector) {
555 memcpy(copy, data, len);
557 int written = rec.print->write(copy + start, open);
566 for (
int j = 0; j <
vector.size(); j++) {
569 open -=
vector[j].print->write(ch);
585 for (
int j =
vector.size() - 1; j >= 0; j--) {
691 end_ms = endSeconds * 1000;
732 if (
p_io ==
nullptr)
return 0;
742 result =
p_io->readBytes(data, len);
750 size_t write(
const uint8_t* data,
size_t len)
override {
754 return p_out->write(data, len);
759 if (
p_io ==
nullptr)
return 0;
784 return info.sample_rate *
info.channels *
info.bits_per_sample / 8;
825 uint8_t buffer[1024];
827 int toread = min(1024, open);
828 p_io->readBytes(buffer, toread);
837 if (bytes_per_second > 0) {
841 LOGE(
"AudioInfo not defined");
868 for (
auto& ch : out.channels) {
869 if (ch >
cfg.channels - 1) {
870 LOGE(
"Channel '%d' not valid for max %d channels", ch,
cfg.channels);
951 size_t write(
const uint8_t* data,
size_t len)
override {
953 LOGD(
"write %d", (
int)len);
954 switch (
cfg.bits_per_sample) {
970 auto p_notify = info.p_audio_info;
971 if (p_notify !=
nullptr) {
973 result.
channels = info.channels.size();
974 p_notify->setAudioInfo(result);
988 template <
typename T>
989 size_t writeT(
const uint8_t* buffer,
size_t size) {
991 int sample_count = size /
sizeof(T);
993 T* data = (T*)buffer;
995 for (
int i = 0; i < sample_count; i +=
cfg.channels) {
998 T out_frame[out.channels.size()];
1000 for (
auto& ch : out.channels) {
1002 int channel = (ch <
cfg.channels) ? ch :
cfg.channels - 1;
1003 out_frame[ch_out++] = frame[channel];
1006 size_t written = out.buffer.writeArray((
const uint8_t*)&out_frame,
1009 if (out.buffer.availableForWrite() <
sizeof(out_frame)) {
1010 out.p_out->write(out.buffer.data(), out.buffer.available());
1025 if (channels_select.p_out == out)
return channels_select.channels.size();
1027 return defaultChannels;
1079 size_t write(
const uint8_t* data,
size_t len)
override {
1087 size_t result =
p_out !=
nullptr ?
p_out->write(data, len) : 0;
1139 uint32_t bytes_per_second =
info.sample_rate *
info.channels *
info.bits_per_sample / 8;
1140 if (bytes_per_second == 0)
return;
1141 uint32_t added_ms = (uint32_t)(((uint64_t)bytes * 1000) / bytes_per_second);
#define DEFAULT_BUFFER_SIZE
#define CHANNEL_SELECT_BUFFER_SIZE
#define MAX_ZERO_READ_COUNT