diff options
| author | Dave Chapman <dave@dchapman.com> | 2005-10-30 15:07:40 +0000 |
|---|---|---|
| committer | Dave Chapman <dave@dchapman.com> | 2005-10-30 15:07:40 +0000 |
| commit | 15a830bdba2589de8b24f2aebe4ab9797da53b32 (patch) | |
| tree | 82f02855bd3cf54ed98f2b6d8be71dd170b7ace5 /apps/codecs | |
| parent | a4c190f7d47b4ea8998f7dcab468ccfb3a16aca9 (diff) | |
| download | rockbox-15a830bdba2589de8b24f2aebe4ab9797da53b32.zip rockbox-15a830bdba2589de8b24f2aebe4ab9797da53b32.tar.gz rockbox-15a830bdba2589de8b24f2aebe4ab9797da53b32.tar.bz2 rockbox-15a830bdba2589de8b24f2aebe4ab9797da53b32.tar.xz | |
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
Diffstat (limited to 'apps/codecs')
| -rw-r--r-- | apps/codecs/flac.c | 19 |
1 files changed, 14 insertions, 5 deletions
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; } |