From ce8640d7b8bf62c0b42823ff76c4387507353dae Mon Sep 17 00:00:00 2001 From: Michael Giacomelli Date: Sat, 2 Jan 2010 21:02:13 +0000 Subject: Second part of FS#10832 by Juliusz Chroboczek. Ignore empty mdat chunks in mp4 files. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24148 a1c6a512-1295-4272-9138-f99709370657 --- apps/codecs/libm4a/demux.c | 7 +++---- apps/metadata/mp4.c | 4 ++++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/apps/codecs/libm4a/demux.c b/apps/codecs/libm4a/demux.c index 9f887b6b83..8c7189e158 100644 --- a/apps/codecs/libm4a/demux.c +++ b/apps/codecs/libm4a/demux.c @@ -771,12 +771,11 @@ int qtmovie_read(stream_t *file, demux_res_t *demux_res) } break; case MAKEFOURCC('m','d','a','t'): - read_chunk_mdat(&qtmovie, chunk_len); - /* Keep track of start of stream in file - used for seeking */ - qtmovie.res->mdat_offset=stream_tell(qtmovie.stream); /* There can be empty mdats before the real one. If so, skip them */ - if (qtmovie.res->mdat_len == 0) + if (chunk_len == 8) break; + read_chunk_mdat(&qtmovie, chunk_len); + qtmovie.res->mdat_offset=stream_tell(qtmovie.stream); /* If we've already seen the format, assume there's nothing interesting after the mdat chunk (the file is "streamable"). This avoids having to seek, which might cause rebuffering. */ diff --git a/apps/metadata/mp4.c b/apps/metadata/mp4.c index c5a525d9c5..cd6eda428f 100644 --- a/apps/metadata/mp4.c +++ b/apps/metadata/mp4.c @@ -681,6 +681,10 @@ static bool read_mp4_container(int fd, struct mp3entry* id3, break; case MP4_mdat: + /* Some AAC files appear to contain additional empty mdat chunks. + Ignore them. */ + if(size == 0) + break; id3->filesize = size; if(id3->samples > 0) { /* We've already seen the moov chunk. */ -- cgit v1.2.3