8#ifndef FAAC_DEFAULT_BITRATE
9#define FAAC_DEFAULT_BITRATE 128000
67 LOGE(
"Output undefined");
76 faac_params_init(¶ms,
sizeof(params));
80 params.mpeg_version = FAAC_MPEG4;
81 params.input_format = FAAC_INPUT_16BIT;
82 params.output_format =
use_adts ? FAAC_STREAM_ADTS : FAAC_STREAM_RAW;
90 faac_status rc = faac_encoder_open(¶ms, &
enc);
92 LOGE(
"faac_encoder_open: %s", faac_strerror(rc));
100 LOGE(
"faac_encoder_get_info: %s", faac_strerror(rc));
101 faac_encoder_close(&
enc);
104 LOGI(
"frame_samples: %d, max_output_bytes: %d",
116 if (
enc ==
nullptr)
return;
124 uint32_t written = 0;
126 if (!
encode(
nullptr, 0, &written))
break;
127 }
while (written > 0);
128 faac_encoder_close(&
enc);
132 size_t write(
const uint8_t *data,
size_t len)
override {
133 if (
enc ==
nullptr || data ==
nullptr)
return 0;
134 const int16_t *samples = (
const int16_t *)data;
135 size_t sample_count = len /
sizeof(int16_t);
136 for (
size_t j = 0; j < sample_count; j++) {
146 const char *
mime()
override {
return "audio/aac"; }
148 operator bool()
override {
return enc !=
nullptr; }
153 if (
enc ==
nullptr)
return false;
154 return faac_encoder_asc(
enc, &data, &len) == FAAC_OK;
164 faac_encoder *
enc =
nullptr;
185 bool encode(
const int16_t *samples, uint32_t sample_count,
186 uint32_t *p_written =
nullptr) {
187 uint32_t written = 0;
191 if (p_written !=
nullptr) *p_written = written;
193 LOGE(
"faac_encoder_encode: %s", faac_strerror(rc));
198 if (result != written) {
199 LOGW(
"Output truncated: %d of %d", (
int)result, (
int)written);
#define LOGW(...)
Definition AudioLoggerIDF.h:29
#define TRACEI()
Definition AudioLoggerIDF.h:32
#define LOGI(...)
Definition AudioLoggerIDF.h:28
#define LOGE(...)
Definition AudioLoggerIDF.h:30
#define FAAC_DEFAULT_BITRATE
Definition CodecAACFAAC.h:9
virtual size_t write(const uint8_t *data, size_t len)
Definition Arduino.h:120