From 9ef02a5fec2fe6cfc2765e3cb0b197be09726cd8 Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Sun, 27 Jan 2008 00:06:36 +0000 Subject: mpegplayer: End of data would not be detected correctly if mpeg parser was in a sync state. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16174 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/mpegplayer/mpeg_parser.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/apps/plugins/mpegplayer/mpeg_parser.c b/apps/plugins/mpegplayer/mpeg_parser.c index 167f07da5c..345aa73111 100644 --- a/apps/plugins/mpegplayer/mpeg_parser.c +++ b/apps/plugins/mpegplayer/mpeg_parser.c @@ -679,13 +679,22 @@ static int parse_demux(struct stream *str, enum stream_parse_mode type) { case STREAM_PM_STREAMING: /* Has the end been reached already? */ - if (str->state == SSTATE_END) + switch (str->state) + { + case SSTATE_PARSE: /* Expected case first if no jumptable */ + /* Are we at the end of file? */ + if (str->hdr.win_left < disk_buf.filesize) + break; + str_end_of_stream(str); return STREAM_DATA_END; - /* Are we at the end of file? */ - if (str->hdr.win_left >= disk_buf.filesize) - { + case SSTATE_SYNC: + /* Is sync at the end of file? */ + if (str->hdr.win_right < disk_buf.filesize) + break; str_end_of_stream(str); + /* Fall-through */ + case SSTATE_END: return STREAM_DATA_END; } -- cgit v1.2.3