1
0
mirror of https://github.com/mpv-player/mpv synced 2024-12-27 01:22:30 +00:00

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
This commit is contained in:
aurel 2008-08-13 00:01:31 +00:00
parent f88bf0c7b7
commit 03e568867e

View File

@ -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;
}