forked from Rockbox/rockbox
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
WIP metadata: vorbis: support embedded jpeg album art
Change-Id: I5e1313f4f5523b26cb022bc69125670ed363e5a6
- Loading branch information
Showing
11 changed files
with
526 additions
and
87 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,158 @@ | ||
/* | ||
* Base64 encoding/decoding (RFC1341) | ||
* Copyright (c) 2005-2011, Jouni Malinen <[email protected]> | ||
* | ||
* This software may be distributed under the terms of the BSD license. | ||
* See README for more details. | ||
*/ | ||
#include <string.h> | ||
#include <stddef.h> | ||
|
||
#define os_malloc(...) NULL | ||
#define os_memset memset | ||
#define os_free(...) | ||
|
||
|
||
|
||
static const unsigned char base64_table[65] = | ||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; | ||
|
||
/** | ||
* base64_encode - Base64 encode | ||
* @src: Data to be encoded | ||
* @len: Length of the data to be encoded | ||
* @out_len: Pointer to output length variable, or %NULL if not used | ||
* Returns: Allocated buffer of out_len bytes of encoded data, | ||
* or %NULL on failure | ||
* | ||
* Caller is responsible for freeing the returned buffer. Returned buffer is | ||
* nul terminated to make it easier to use as a C string. The nul terminator is | ||
* not included in out_len. | ||
*/ | ||
unsigned char * base64_encode(const unsigned char *src, size_t len, | ||
size_t *out_len) | ||
{ | ||
unsigned char *out, *pos; | ||
const unsigned char *end, *in; | ||
size_t olen; | ||
int line_len; | ||
|
||
olen = len * 4 / 3 + 4; /* 3-byte blocks to 4-byte */ | ||
olen += olen / 72; /* line feeds */ | ||
olen++; /* nul termination */ | ||
if (olen < len) | ||
return NULL; /* integer overflow */ | ||
out = os_malloc(olen); | ||
if (out == NULL) | ||
return NULL; | ||
|
||
end = src + len; | ||
in = src; | ||
pos = out; | ||
line_len = 0; | ||
while (end - in >= 3) { | ||
*pos++ = base64_table[in[0] >> 2]; | ||
*pos++ = base64_table[((in[0] & 0x03) << 4) | (in[1] >> 4)]; | ||
*pos++ = base64_table[((in[1] & 0x0f) << 2) | (in[2] >> 6)]; | ||
*pos++ = base64_table[in[2] & 0x3f]; | ||
in += 3; | ||
line_len += 4; | ||
if (line_len >= 72) { | ||
*pos++ = '\n'; | ||
line_len = 0; | ||
} | ||
} | ||
|
||
if (end - in) { | ||
*pos++ = base64_table[in[0] >> 2]; | ||
if (end - in == 1) { | ||
*pos++ = base64_table[(in[0] & 0x03) << 4]; | ||
*pos++ = '='; | ||
} else { | ||
*pos++ = base64_table[((in[0] & 0x03) << 4) | | ||
(in[1] >> 4)]; | ||
*pos++ = base64_table[(in[1] & 0x0f) << 2]; | ||
} | ||
*pos++ = '='; | ||
line_len += 4; | ||
} | ||
|
||
if (line_len) | ||
*pos++ = '\n'; | ||
|
||
*pos = '\0'; | ||
if (out_len) | ||
*out_len = pos - out; | ||
return out; | ||
} | ||
|
||
|
||
/** | ||
* base64_decode - Base64 decode | ||
* @src: Data to be decoded | ||
* @len: Length of the data to be decoded | ||
* @out_len: Pointer to output length variable | ||
* Returns: Allocated buffer of out_len bytes of decoded data, | ||
* or %NULL on failure | ||
* | ||
* Caller is responsible for freeing the returned buffer. | ||
*/ | ||
unsigned char * base64_decode(const unsigned char *src, size_t len, | ||
size_t *out_len) | ||
{ | ||
unsigned char dtable[256], *out, *pos, block[4], tmp; | ||
size_t i, count, olen; | ||
int pad = 0; | ||
|
||
os_memset(dtable, 0x80, 256); | ||
for (i = 0; i < sizeof(base64_table) - 1; i++) | ||
dtable[base64_table[i]] = (unsigned char) i; | ||
dtable['='] = 0; | ||
|
||
count = 0; | ||
for (i = 0; i < len; i++) { | ||
if (dtable[src[i]] != 0x80) | ||
count++; | ||
} | ||
|
||
if (count == 0 || count % 4) | ||
return NULL; | ||
|
||
olen = count / 4 * 3; | ||
pos = out = os_malloc(olen); | ||
if (out == NULL) | ||
return NULL; | ||
|
||
count = 0; | ||
for (i = 0; i < len; i++) { | ||
tmp = dtable[src[i]]; | ||
if (tmp == 0x80) | ||
continue; | ||
|
||
if (src[i] == '=') | ||
pad++; | ||
block[count] = tmp; | ||
count++; | ||
if (count == 4) { | ||
*pos++ = (block[0] << 2) | (block[1] >> 4); | ||
*pos++ = (block[1] << 4) | (block[2] >> 2); | ||
*pos++ = (block[2] << 6) | block[3]; | ||
count = 0; | ||
if (pad) { | ||
if (pad == 1) | ||
pos--; | ||
else if (pad == 2) | ||
pos -= 2; | ||
else { | ||
/* Invalid padding */ | ||
os_free(out); | ||
return NULL; | ||
} | ||
break; | ||
} | ||
} | ||
} | ||
|
||
*out_len = pos - out; | ||
return out; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
/*************************************************************************** | ||
* __________ __ ___. | ||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
* \/ \/ \/ \/ \/ | ||
* $Id$ | ||
* | ||
* Copyright (C) 2005 Dave Chapman | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License | ||
* as published by the Free Software Foundation; either version 2 | ||
* of the License, or (at your option) any later version. | ||
* | ||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
* KIND, either express or implied. | ||
* | ||
****************************************************************************/ | ||
//#include <stdio.h> | ||
//#include <stdlib.h> | ||
//#include <ctype.h> | ||
//#include <inttypes.h> | ||
#include "platform.h" | ||
|
||
|
||
int get_ogg_format_and_move_to_comments(int fd, unsigned char *buf); | ||
|
||
int b64_decode(const char *in, size_t in_len, unsigned char *out, size_t *outlen); | ||
|
||
struct file | ||
{ | ||
int fd; | ||
bool packet_ended; | ||
long packet_remaining; | ||
}; | ||
|
||
bool file_init(struct file* file, int fd, int type, int remaining); | ||
ssize_t file_read(struct file* file, void* buffer, size_t buffer_size); | ||
bool file_read_page_header(struct file* file); | ||
int id3_unsynchronize(char* tag, int len, bool *ff_found); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.