mdeutils/mauplay/id3.c

31 lines
689 B
C
Raw Normal View History

2025-11-24 16:21:56 +09:00
#include "mauplay.h"
unsigned char* id3_findimage(const char* path, size_t* size) {
2025-11-24 20:16:42 +09:00
size_t fsz;
2025-11-24 20:04:55 +09:00
unsigned char* buffer = MDEID3GetTag(path, "APIC", &fsz);
2025-11-24 20:16:42 +09:00
unsigned char* d = NULL;
2025-11-24 20:04:55 +09:00
int i;
2025-11-24 20:05:19 +09:00
if(buffer == NULL) return NULL;
2025-11-24 20:04:55 +09:00
for(i = 1; i < fsz; i++) {
if(buffer[i] == 0) break;
}
i++;
/* XXX: 0 is technically Other - am not sure if this should be done... */
if(buffer[i] == 0 || buffer[i] == 3) {
int count = (buffer[0] == 1 || buffer[0] == 2) ? 2 : 1;
2025-11-24 16:21:56 +09:00
2025-11-24 20:04:55 +09:00
i++;
2025-11-24 16:21:56 +09:00
2025-11-24 20:04:55 +09:00
for(; i < fsz; i++) {
if(buffer[i] == 0) count--;
if(count == 0) break;
2025-11-24 16:21:56 +09:00
}
2025-11-24 20:04:55 +09:00
i++;
d = malloc(fsz - i);
memcpy(d, buffer + i, fsz - i);
*size = fsz - i;
2025-11-24 16:21:56 +09:00
}
2025-11-24 20:04:55 +09:00
free(buffer);
2025-11-24 16:21:56 +09:00
return d;
}