}
-static void ogg_save_header(char *map, struct audio_format_info *afi)
-{
- afi->header = para_malloc(afi->header_len);
- memcpy(afi->header, map, afi->header_len);
-}
-
-static int ogg_compute_header_len(char *map, off_t numbytes,
+static int ogg_compute_header_len(char *map, size_t numbytes,
struct audio_format_info *afi)
{
- int ret, len = PARA_MIN(numbytes, CHUNK_SIZE);
- unsigned int serial;
+ int ret;
+ size_t len = PARA_MIN(numbytes, CHUNK_SIZE);
+ int serial;
char *buf;
+
ogg_page page;
ogg_packet packet;
vorbis_comment vc;
ogg_sync_init(sync_in);
vorbis_info_init(&vi);
vorbis_comment_init(&vc);
- buf = ogg_sync_buffer(sync_in, len);
+ buf = ogg_sync_buffer(sync_in, (long)len);
memcpy(buf, map, len);
- ogg_sync_wrote(sync_in, len);
+ ogg_sync_wrote(sync_in, (long)len);
ret = -E_SYNC_PAGEOUT;
if (ogg_sync_pageout(sync_in, &page) <= 0)
goto err1;
while (ogg_stream_flush(stream_out, &page))
afi->header_len += page.body_len + page.header_len;
PARA_INFO_LOG("header_len = %d\n", afi->header_len);
- ogg_save_header(map, afi);
+ afi->header_offset = 0;
ret = 1;
err2:
ogg_stream_destroy(stream_in);
* CHUNK_TIME begins. Always successful.
*/
static long unsigned ogg_compute_chunk_table(OggVorbis_File *of,
- struct audio_format_info *afi, double time_total)
+ struct audio_format_info *afi, long unsigned time_total)
{
int i, ret, num;
ssize_t max_chunk_len, pos = 0, min = 0, old_pos;
/*
* Init oggvorbis file and write some tech data to given pointers.
*/
-static int ogg_get_file_info(char *map, off_t numbytes,
+static int ogg_get_file_info(char *map, size_t numbytes,
struct audio_format_info *afi)
{
int ret;
ret = 1;
err:
ov_clear(&of); /* keeps the file open */
- if (ret < 0)
- free(afi->header);
return ret;
}