From 15a830bdba2589de8b24f2aebe4ab9797da53b32 Mon Sep 17 00:00:00 2001 From: Dave Chapman Date: Sun, 30 Oct 2005 15:07:40 +0000 Subject: Skip ID3v2 tags at the start of a FLAC file. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7689 a1c6a512-1295-4272-9138-f99709370657 --- apps/codecs/flac.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'apps/codecs') diff --git a/apps/codecs/flac.c b/apps/codecs/flac.c index d975c1f..bbd45ec 100644 --- a/apps/codecs/flac.c +++ b/apps/codecs/flac.c @@ -73,7 +73,7 @@ struct FLACseekpoints { struct FLACseekpoints seekpoints[MAX_SUPPORTED_SEEKTABLE_SIZE]; int nseekpoints; -static bool flac_init(FLACContext* fc) +static bool flac_init(FLACContext* fc, int first_frame_offset) { unsigned char buf[255]; bool found_streaminfo=false; @@ -87,6 +87,11 @@ static bool flac_init(FLACContext* fc) ci->memset(fc,0,sizeof(FLACContext)); nseekpoints=0; + /* Skip any foreign tags at start of file */ + ci->seek_buffer(first_frame_offset); + + fc->metadatalength = first_frame_offset; + if (ci->read_filebuf(buf, 4) < 4) { return false; @@ -96,7 +101,7 @@ static bool flac_init(FLACContext* fc) { return false; } - fc->metadatalength = 4; + fc->metadatalength += 4; while (!endofmetadata) { if (ci->read_filebuf(buf, 4) < 4) @@ -199,8 +204,7 @@ bool flac_seek(FLACContext* fc, uint32_t newsample) { offset+=fc->metadatalength; - if ((off_t)offset < ci->filesize) { - ci->seek_buffer(offset); + if (ci->seek_buffer(offset)) { return true; } else { return false; @@ -240,7 +244,12 @@ enum codec_status codec_start(struct codec_api* api) next_track: - if (!flac_init(&fc)) { + if (codec_init(api)) { + LOGF("FLAC: Error initialising codec\n"); + return CODEC_ERROR; + } + + if (!flac_init(&fc,ci->id3->first_frame_offset)) { LOGF("FLAC: Error initialising codec\n"); return CODEC_ERROR; } -- cgit v1.1