#define FRAME_HEADER_SIZE 4
#define MIN_FRAME_SIZE 21
-#define DEFAULT_INBUF_SIZE 8192
struct mp3header {
unsigned long sync;
static FILE *infile;
static struct mp3info mp3;
-static char *inbuf;
-static size_t inbuf_size;
static struct audio_format_handler *af;
static ssize_t *chunk_table, num_chunks;
*/
static int mp3_seek_next_header(void)
{
- int k, l = 0, c, first_len;
+ int k, l = 0, c, first_len, ret;
struct mp3header h, h2;
long valid_start = 0;
first_len = get_header(infile, &h);
if (first_len <= 0)
continue;
- if (fseek(infile, first_len - FRAME_HEADER_SIZE, SEEK_CUR) < 0)
- return -E_FSEEK;
+ ret = para_fseek(infile, first_len - FRAME_HEADER_SIZE, SEEK_CUR);
+ if (ret < 0)
+ return ret;
for (k = 1; k < MIN_CONSEC_GOOD_FRAMES; k++) {
if ((l = get_header(infile, &h2)) <= 0)
break;
if (!compare_headers(&h, &h2))
break;
- fseek(infile, l - FRAME_HEADER_SIZE, SEEK_CUR);
+ ret = para_fseek(infile, l - FRAME_HEADER_SIZE, SEEK_CUR);
+ if (ret < 0)
+ return ret;
}
if (k == MIN_CONSEC_GOOD_FRAMES) {
- fseek(infile, valid_start, SEEK_SET);
+ ret = para_fseek(infile, valid_start, SEEK_SET);
+ if (ret < 0)
+ return ret;
memcpy(&(mp3.header), &h2, sizeof(struct mp3header));
return first_len;
}
static int mp3_get_id3(void)
{
char fbuf[4];
+ int ret;
mp3.id3_isvalid = 0;
mp3.id3.title[0] = '\0';
mp3.id3.album[0] = '\0';
mp3.id3.comment[0] = '\0';
mp3.id3.year[0] = '\0';
- if (fseek(infile, -128, SEEK_END))
- return -E_FSEEK;
+ ret = para_fseek(infile, -128, SEEK_END);
+ if (ret < 0 )
+ return ret;
if (para_fread(fbuf, 1, 3, infile) < 0)
return -E_FREAD;
fbuf[3] = '\0';
PARA_INFO_LOG("%s", "no id3 tag\n");
return 0;
}
- if (fseek(infile, -125, SEEK_END) < 0)
- return -E_FSEEK;
+ ret = para_fseek(infile, -125, SEEK_END);
+ if (ret < 0)
+ return ret;
if (para_fread(mp3.id3.title, 1, 30, infile) != 30)
return -E_FREAD;
mp3.id3.title[30] = '\0';
static int find_valid_start(void)
{
- int frame_len;
+ int ret, frame_len;
if (!infile)
return -E_MP3_NO_FILE;
frame_len = mp3_seek_next_header();
if (frame_len <= 0)
return frame_len;
- } else
- if (fseek(infile, -FRAME_HEADER_SIZE, SEEK_CUR) < 0)
- return -E_FSEEK;
+ } else {
+ ret = para_fseek(infile, -FRAME_HEADER_SIZE, SEEK_CUR);
+ if (ret < 0)
+ return ret;
+ }
if (frame_len <= 1)
return -E_FRAME_LENGTH;
return frame_len;
unsigned chunk_table_size = 1000; /* gets increased on demand */
num_chunks = 0;
- inbuf = para_malloc(DEFAULT_INBUF_SIZE);
- inbuf_size = DEFAULT_INBUF_SIZE;
chunk_table = para_malloc(chunk_table_size * sizeof(size_t));
ret = mp3_get_id3();
if (ret < 0)
int freq, br, fl;
struct timeval tmp, cct; /* current chunk time */
if (len > 0) {
- ret = -E_FSEEK;
- if (fseek(infile, len, SEEK_CUR) < 0)
+ ret = para_fseek(infile, len, SEEK_CUR);
+ if (ret < 0)
goto err_out;
}
len = find_valid_start();
ret = -E_MP3_INFO;
if (!num_chunks || !freq_avg || !br_avg)
goto err_out;
- ret = -E_FSEEK;
- if (fseek(infile, 0, SEEK_END) < 0)
+ ret= para_fseek(infile, 0, SEEK_END);
+ if (ret < 0)
goto err_out;
chunk_table[num_chunks] = ftell(infile);
mp3.br_average = br_avg;
err_out:
PARA_ERROR_LOG("%s\n", PARA_STRERROR(-ret));
free(chunk_table);
- free(inbuf);
return ret;
}
fclose(infile);
infile = NULL;
free(chunk_table);
- free(inbuf);
}
static const char* mp3_suffixes[] = {"mp3", NULL};