summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
authoraurel <aurel@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-08-13 00:01:31 +0000
committeraurel <aurel@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-08-13 00:01:31 +0000
commit03e568867efbc2c7dab528005ed32af0c25fe000 (patch)
tree7444d5c4a217ac86f19f6dc128ff0fb12a929edb /libmpdemux
parentf88bf0c7b7faf4b6f58c8b4c9c0f3892e07dc5ba (diff)
downloadmpv-03e568867efbc2c7dab528005ed32af0c25fe000.tar.bz2
mpv-03e568867efbc2c7dab528005ed32af0c25fe000.tar.xz
demux_lavf: fix mp_seek behavior in case of seeking error
When trying to seek past the end of file, the ByteIOContext expect that the stream is left in the same state as it was before the tentative seek. stream_seek() does not meet this expectation. It changes current position when seeking past the end of file. Thus, it is necessary to reset the stream to its previous state after a seek failure. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27459 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/demux_lavf.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/libmpdemux/demux_lavf.c b/libmpdemux/demux_lavf.c
index 2b6fd05a5c..6de56c5e18 100644
--- a/libmpdemux/demux_lavf.c
+++ b/libmpdemux/demux_lavf.c
@@ -97,6 +97,7 @@ static int mp_read(void *opaque, uint8_t *buf, int size) {
static offset_t mp_seek(void *opaque, offset_t pos, int whence) {
stream_t *stream = opaque;
+ offset_t current_pos;
mp_msg(MSGT_HEADER,MSGL_DBG2,"mp_seek(%p, %d, %d)\n", stream, (int)pos, whence);
if(whence == SEEK_CUR)
pos +=stream_tell(stream);
@@ -113,8 +114,12 @@ static offset_t mp_seek(void *opaque, offset_t pos, int whence) {
return -1;
if(pos<stream->end_pos && stream->eof)
stream_reset(stream);
- if(stream_seek(stream, pos)==0)
+ current_pos = stream_tell(stream);
+ if(stream_seek(stream, pos)==0) {
+ stream_reset(stream);
+ stream_seek(stream, current_pos);
return -1;
+ }
return pos - stream->start_pos;
}