3#include "AudioTools/AudioCodecs/HeaderParserAAC.h"
4#include "AudioTools/AudioCodecs/HeaderParserMP3.h"
5#include "AudioTools/CoreAudio/AudioBasic/StrView.h"
26 setCheck(
"audio/vnd.wave", checkWAV);
40 size_t write(uint8_t* data,
size_t len) {
41 actual_mime = default_mime;
40 size_t write(uint8_t* data,
size_t len) {
…}
47 void setCheck(
const char*
mime,
bool (*check)(uint8_t* start,
size_t len)) {
49 for (
int j = 0; j < checks.size(); j++) {
50 Check l_check = checks[j];
51 if (mime_str.equals(l_check.mime)) {
52 l_check.check = check;
57 checks.push_back(check_to_add);
47 void setCheck(
const char*
mime,
bool (*check)(uint8_t* start,
size_t len)) {
…}
61 void setMimeCallback(
void (*callback)(
const char*)) {
63 this->notifyMimeCallback = callback;
72 static bool checkAAC(uint8_t* start,
size_t len) {
73 return start[0] == 0xFF &&
74 (start[1] == 0xF0 || start[1] == 0xF1 || start[1] == 0xF9);
77 static bool checkAACExt(uint8_t* start,
size_t len) {
79 if (memcmp(start+4,
"ftypM4A", 7) == 0) {
85 int pos = aac.findSyncWord((
const uint8_t*)start, len);
90 if (aac.isValid(start+pos, len-pos)) {
96 static bool checkMP3(uint8_t* start,
size_t len) {
97 return memcmp(start,
"ID3", 3) == 0 ||
98 (start[0] == 0xFF && ((start[1] & 0xE0) == 0xE0));
101 static bool checkMP3Ext(uint8_t* start,
size_t len) {
103 return mp3.isValid(start, len);
106 static bool checkWAV(uint8_t* start,
size_t len) {
107 return memcmp(start,
"RIFF", 4) == 0;
110 static bool checkOGG(uint8_t* start,
size_t len) {
111 return memcmp(start,
"OggS", 4) == 0;
116 if (len < 189)
return start[0] == 0x47;
118 return start[0] == 0x47 && start[188] == 0x47;
123 return memcmp(start,
"PSID", 4) == 0 || memcmp(start,
"RSID", 4) == 0;
131 const char* mime =
nullptr;
132 bool (*check)(uint8_t* data,
size_t len) =
nullptr;
133 Check(
const char* mime,
bool (*check)(uint8_t* data,
size_t len)) {
140 bool is_first =
false;
141 const char* actual_mime =
nullptr;
142 const char* default_mime =
nullptr;
143 void (*notifyMimeCallback)(
const char*
mime) =
nullptr;
148 actual_mime =
lookupMime((uint8_t*)data, len);
149 if (notifyMimeCallback !=
nullptr && actual_mime !=
nullptr) {
150 notifyMimeCallback(actual_mime);
158 for (
int j = 0; j < checks.size(); j++) {
159 Check l_check = checks[j];
160 if (l_check.check(data, len)) {