3#include "AudioTools/AudioCodecs/AudioCodecsBase.h"
29 void setMode(AMRNB::Mode mode) {
36 buffer.
resize(amr.getEncodedFrameSizeBytes());
37 return getOutput() !=
nullptr;
48 LOGE(
"Invalid channels: %d", from.
channels);
52 size_t write(
const uint8_t *data,
size_t len)
override {
53 for (
size_t j = 0; j < len; j++) {
54 buffer.
write(data[j]);
56 int result_samples = amr.getFrameSizeSamples();
57 int16_t result[result_samples];
59 amr.decode(buffer.
data(), buffer.size(), result, result_samples);
61 if (getOutput() !=
nullptr) {
62 getOutput()->write((uint8_t *)result, size *
sizeof(int16_t));
74 return amr.getEncodedFrameSizeBytes();
78 int frameSize() {
return amr.getFrameSizeSamples() *
sizeof(int16_t); }
80 operator bool()
override {
return getOutput() !=
nullptr; }
85 SingleBuffer<uint8_t> buffer{0};
110 void setMode(AMRNB::Mode mode) {
117 return getOutput() !=
nullptr;
128 LOGE(
"Invalid channels: %d", from.
channels);
132 size_t write(
const uint8_t *data,
size_t len)
override {
133 for (
size_t j = 0; j < len; j++) {
134 buffer.
write(data[j]);
137 uint8_t result[result_bytes];
139 amr.encode((int16_t *)buffer.
data(),
140 buffer.size() /
sizeof(int16_t), result, result_bytes);
142 if (getOutput() !=
nullptr) {
143 getOutput()->write(result, size);
155 return amr.getEncodedFrameSizeBytes();
159 int frameSize() {
return amr.getFrameSizeSamples() *
sizeof(int16_t); }
161 const char *
mime() {
return "audio/amr"; }
163 void setOutput(
Print &out_stream)
override { p_print = &out_stream; }
165 Print *getOutput() {
return p_print; }
170 SingleBuffer<uint8_t> buffer{0};
171 Print *p_print =
nullptr;