diff options
author | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2009-08-17 05:55:40 +0000 |
---|---|---|
committer | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2009-08-17 05:55:40 +0000 |
commit | 5d058a67c1f19df9565f8a3a78a7fa377999222a (patch) | |
tree | 57388d6bab52b01606c15e9ff2bc9e63797060e9 | |
parent | 69cb72414aeeb37a5c30b1194f9ee8fff6a8d512 (diff) | |
download | mpv-5d058a67c1f19df9565f8a3a78a7fa377999222a.tar.bz2 mpv-5d058a67c1f19df9565f8a3a78a7fa377999222a.tar.xz |
Handle demuxers that never set filepos by using stream_tell.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29528 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r-- | libmpdemux/demuxer.c | 5 | ||||
-rw-r--r-- | mencoder.c | 3 |
2 files changed, 5 insertions, 3 deletions
diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c index c46ba9d43d..25c66f92ed 100644 --- a/libmpdemux/demuxer.c +++ b/libmpdemux/demuxer.c @@ -242,7 +242,7 @@ demuxer_t *new_demuxer(stream_t *stream, int type, int a_id, int v_id, d->movi_end = stream->end_pos; d->seekable = 1; d->synced = 0; - d->filepos = 0; + d->filepos = -1; d->audio = new_demuxer_stream(d, a_id); d->video = new_demuxer_stream(d, v_id); d->sub = new_demuxer_stream(d, s_id); @@ -1262,8 +1262,9 @@ int demuxer_get_percent_pos(demuxer_t *demuxer) int res = demux_control(demuxer, DEMUXER_CTRL_GET_PERCENT_POS, &ans); int len = (demuxer->movi_end - demuxer->movi_start) / 100; if (res <= 0) { + off_t pos = demuxer->filepos > 0 ? demuxer->filepos : stream_tell(demuxer->stream); if (len > 0) - ans = (demuxer->filepos - demuxer->movi_start) / len; + ans = (pos - demuxer->movi_start) / len; else ans = 0; } diff --git a/mencoder.c b/mencoder.c index 9129df7c9a..5b569bb5fd 100644 --- a/mencoder.c +++ b/mencoder.c @@ -1399,7 +1399,8 @@ if(sh_audio && !demuxer2){ { float t=(GetTimerMS()-timer_start)*0.001f; float len=(demuxer->movi_end-demuxer->movi_start); - float p=len>1000 ? (float)(demuxer->filepos-demuxer->movi_start) / len : + off_t pos = demuxer->filepos >= 0 ? demuxer->filepos : stream_tell(demuxer->stream); + float p=len>1000 ? (float)(pos-demuxer->movi_start) / len : (demuxer_get_percent_pos(demuxer) / 100.0); #if 0 if(!len && sh_audio && sh_audio->audio.dwLength>100){ |