summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libmpdemux/demux_asf.c4
-rw-r--r--libmpdemux/demux_avi.c4
-rw-r--r--libmpdemux/demux_mkv.c5
-rw-r--r--libmpdemux/demux_mpg.c8
-rw-r--r--libmpdemux/demux_ty.c5
-rw-r--r--libmpdemux/demuxer.c14
6 files changed, 14 insertions, 26 deletions
diff --git a/libmpdemux/demux_asf.c b/libmpdemux/demux_asf.c
index 53b9e0eb95..dffe79294c 100644
--- a/libmpdemux/demux_asf.c
+++ b/libmpdemux/demux_asf.c
@@ -423,11 +423,7 @@ int demux_asf_control(demuxer_t *demuxer,int cmd, void *arg){
return DEMUXER_CTRL_OK;
case DEMUXER_CTRL_GET_PERCENT_POS:
- if (demuxer->movi_end==demuxer->movi_start) {
return DEMUXER_CTRL_DONTKNOW;
- }
- *((int *)arg)=(int)((demuxer->filepos-demuxer->movi_start)/((demuxer->movi_end-demuxer->movi_start)/100));
- return DEMUXER_CTRL_OK;
default:
return DEMUXER_CTRL_NOTIMPL;
diff --git a/libmpdemux/demux_avi.c b/libmpdemux/demux_avi.c
index bef49b1e45..4edf4e5c5e 100644
--- a/libmpdemux/demux_avi.c
+++ b/libmpdemux/demux_avi.c
@@ -846,9 +846,7 @@ int demux_avi_control(demuxer_t *demuxer,int cmd, void *arg){
case DEMUXER_CTRL_GET_PERCENT_POS:
if (!priv->numberofframes) {
- if (demuxer->movi_end==demuxer->movi_start) return DEMUXER_CTRL_DONTKNOW;
- *((int *)arg)=(int)((demuxer->filepos-demuxer->movi_start)/((demuxer->movi_end-demuxer->movi_start)/100));
- return DEMUXER_CTRL_OK;
+ return DEMUXER_CTRL_DONTKNOW;
}
*((int *)arg)=(int)(priv->video_pack_no*100/priv->numberofframes);
if (sh_video->video.dwLength<=1) return DEMUXER_CTRL_GUESS;
diff --git a/libmpdemux/demux_mkv.c b/libmpdemux/demux_mkv.c
index 81fde570ac..d68e1408b0 100644
--- a/libmpdemux/demux_mkv.c
+++ b/libmpdemux/demux_mkv.c
@@ -3328,12 +3328,7 @@ demux_mkv_control (demuxer_t *demuxer, int cmd, void *arg)
case DEMUXER_CTRL_GET_PERCENT_POS:
if (mkv_d->duration == 0)
{
- if (demuxer->movi_start == demuxer->movi_end)
return DEMUXER_CTRL_DONTKNOW;
-
- *((int *)arg) = (int)((demuxer->filepos - demuxer->movi_start) /
- ((demuxer->movi_end-demuxer->movi_start)/100));
- return DEMUXER_CTRL_OK;
}
*((int *) arg) = (int) (100 * mkv_d->last_pts / mkv_d->duration);
diff --git a/libmpdemux/demux_mpg.c b/libmpdemux/demux_mpg.c
index 9819c48c1b..dbfa43a5e4 100644
--- a/libmpdemux/demux_mpg.c
+++ b/libmpdemux/demux_mpg.c
@@ -520,20 +520,14 @@ int demux_mpg_control(demuxer_t *demuxer,int cmd, void *arg){
*((unsigned long *)arg)=(long)mpg_d->final_pts;
return DEMUXER_CTRL_GUESS;
}
- if(!sh_video || !sh_video->i_bps) // unspecified or VBR
return DEMUXER_CTRL_DONTKNOW;
- *((unsigned long *)arg)=(demuxer->movi_end-demuxer->movi_start)/sh_video->i_bps;
- return DEMUXER_CTRL_GUESS;
case DEMUXER_CTRL_GET_PERCENT_POS:
- if (demuxer->movi_end==demuxer->movi_start)
- return DEMUXER_CTRL_DONTKNOW;
if (mpg_d && mpg_d->has_valid_timestamps && mpg_d->final_pts > 0.0) {
*((int *)arg)=(int)(100 * mpg_d->last_pts / mpg_d->final_pts);
return DEMUXER_CTRL_OK;
}
- *((int *)arg)=(int)((demuxer->filepos-demuxer->movi_start)/((demuxer->movi_end-demuxer->movi_start)/100));
- return DEMUXER_CTRL_OK;
+ return DEMUXER_CTRL_DONTKNOW;
default:
return DEMUXER_CTRL_NOTIMPL;
diff --git a/libmpdemux/demux_ty.c b/libmpdemux/demux_ty.c
index 4f35a93906..5df73c447b 100644
--- a/libmpdemux/demux_ty.c
+++ b/libmpdemux/demux_ty.c
@@ -1027,12 +1027,7 @@ int demux_ty_control( demuxer_t *demuxer,int cmd, void *arg )
return DEMUXER_CTRL_GUESS;
case DEMUXER_CTRL_GET_PERCENT_POS:
- if (demuxer->movi_end==demuxer->movi_start)
return DEMUXER_CTRL_DONTKNOW;
- *((int *)arg)=
- (int)((demuxer->filepos-demuxer->movi_start)/
- ((demuxer->movi_end-demuxer->movi_start)/100));
- return DEMUXER_CTRL_OK;
default:
return DEMUXER_CTRL_NOTIMPL;
}
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;
}