summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demuxer.c
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-01-15 16:11:45 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-01-15 16:11:45 +0000
commitd147077c217d3242516a5bd63376c06826946194 (patch)
treea5950e13de390f1123c102e647e1a0df31bbe2e6 /libmpdemux/demuxer.c
parentc0c3ee091046f634433ce330637eb73c242524ae (diff)
downloadmpv-d147077c217d3242516a5bd63376c06826946194.tar.bz2
mpv-d147077c217d3242516a5bd63376c06826946194.tar.xz
Move generic length and percent pos calculation to demuxer.c
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@14503 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/demuxer.c')
-rw-r--r--libmpdemux/demuxer.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c
index d08961fe08..d6f91e0ce7 100644
--- a/libmpdemux/demuxer.c
+++ b/libmpdemux/demuxer.c
@@ -1717,7 +1717,12 @@ int demux_control(demuxer_t *demuxer, int cmd, void *arg) {
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 demuxer_get_percent_pos(demuxer_t *demuxer){
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;
}