Mercurial > mplayer.hg
diff libmpdemux/demuxer.c @ 14502:8769fa370f83
Move generic length and percent pos calculation to demuxer.c
author | reimar |
---|---|
date | Sat, 15 Jan 2005 16:11:45 +0000 |
parents | fa80ed52127b |
children | 91bbfcb66883 |
line wrap: on
line diff
--- a/libmpdemux/demuxer.c Sat Jan 15 16:08:04 2005 +0000 +++ b/libmpdemux/demuxer.c Sat Jan 15 16:11:45 2005 +0000 @@ -1717,7 +1717,12 @@ unsigned long demuxer_get_time_length(demuxer_t *demuxer){ unsigned long get_time_ans; + sh_video_t *sh_video = demuxer->video->sh; + // <= 0 means DEMUXER_CTRL_NOTIMPL or DEMUXER_CTRL_DONTKNOW if (demux_control(demuxer, DEMUXER_CTRL_GET_TIME_LENGTH,(void *)&get_time_ans)<=0) { + if (sh_video && sh_video->i_bps) + get_time_ans = (demuxer->movi_end-demuxer->movi_start)/sh_video->i_bps; + else get_time_ans=0; } return get_time_ans; @@ -1727,9 +1732,14 @@ int ans = 0; int res = demux_control(demuxer, DEMUXER_CTRL_GET_PERCENT_POS, &ans); int len = (demuxer->movi_end - demuxer->movi_start) / 100; - if (res == DEMUXER_CTRL_NOTIMPL && len > 0) + if (res <= 0) { + if (len > 0) ans = (demuxer->filepos - demuxer->movi_start) / len; - if (ans>100 || ans<0) ans=0; + else + ans = 0; + } + if (ans < 0) ans = 0; + if (ans > 100) ans = 100; return ans; }