5#include "vorbis-tremor.h"
13#pragma GCC optimize("O3")
18#ifndef VARBIS_MAX_READ_SIZE
19#define VARBIS_MAX_READ_SIZE 1024
22#define VORBIS_HEADER_OPEN_LIMIT 1024
49 LOGW(
"Decoder already active, calling end() first");
76 LOGI(
"ov_clear completed");
88 virtual operator bool()
override {
return active; }
90 virtual bool copy()
override {
96 LOGE(
"Failed to open Vorbis stream");
103 LOGE(
"PCM buffer is null - memory allocation failed");
108 LOGE(
"PCM buffer size is 0");
114 LOGE(
"Decoder is not active");
123 LOGI(
"copy result: %d", (
int)result);
127 if (current !=
cfg) {
136 LOGE(
"Output stream is null");
142 if (result == 0 || result == -3) {
154 const char *
mime()
override {
return "audio/vorbis+ogg"; }
167 LOGW(
"Read size %zu is very large, consider smaller buffer",
188 int rc = ov_open_callbacks(
this, &
file,
nullptr, 0,
callbacks);
192 LOGI(
"ov_open_callbacks succeeded");
202 LOGE(
"Cannot get audio info - stream not open");
206 vorbis_info *
info = ov_info(&
file, -1);
207 if (
info ==
nullptr) {
208 LOGE(
"ov_info returned null pointer");
220 virtual size_t readBytes(uint8_t *data,
size_t len)
override {
223 LOGD(
"readBytes: %zu", result);
227 static size_t read_func(
void *ptr,
size_t size,
size_t nmemb,
230 assert(datasource !=
nullptr);
231 size_t result = self->
readBytes((uint8_t *)ptr, size * nmemb);
232 LOGD(
"read_func: %d -> %d", size * nmemb, (
int)result);
236 static int seek_func(
void *datasource, ogg_int64_t offset,
int whence) {
258 return "Interruption in the data";
260 return "Invalid stream section";
264 return "Internal fault";
266 return "Unimplemented feature";
268 return "Invalid argument";
270 return "Not a Vorbis file";
272 return "Invalid Vorbis header";
274 return "Vorbis version mismatch";
276 return "Stream not seekable";
278 return "Unknown error";
287 return "Read from media error";
289 return "Not Vorbis data";
291 return "Vorbis version mismatch";
293 return "Invalid Vorbis bitstream header";
295 return "Internal logic fault";
297 return "Unknown open error";
#define LOGW(...)
Definition AudioLoggerIDF.h:29
#define TRACED()
Definition AudioLoggerIDF.h:31
#define LOGI(...)
Definition AudioLoggerIDF.h:28
#define LOGD(...)
Definition AudioLoggerIDF.h:27
#define LOGE(...)
Definition AudioLoggerIDF.h:30
#define VARBIS_MAX_READ_SIZE
Definition CodecVorbis.h:19
#define VORBIS_HEADER_OPEN_LIMIT
Definition CodecVorbis.h:22
#define assert(T)
Definition avr.h:10
virtual size_t write(const uint8_t *data, size_t len)
Definition Arduino.h:120
virtual size_t readBytes(uint8_t *data, size_t len)
Definition Arduino.h:140
virtual int available()
Definition Arduino.h:139
static void checkMemory(bool printMemory=false)
Executes heap_caps_check_integrity_all()
Definition AudioRuntime.h:25