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. */