summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2010-11-08 00:54:32 +0200
committerUoti Urpala <uau@glyph.nonexistent.invalid>2010-11-08 18:05:12 +0200
commit9a663ffec62720931f34ae2742a32652d1de5f8e (patch)
tree6fe61b81610e178b760f3a5f4e0403fe4690d23b /libmpdemux
parent3628a903f40943740ff97a03a106d9a5208fae76 (diff)
downloadmpv-9a663ffec62720931f34ae2742a32652d1de5f8e.tar.bz2
mpv-9a663ffec62720931f34ae2742a32652d1de5f8e.tar.xz
core: move video pos/length query functions from demux to core
Move functions to query current playback position, percentage position and total video length from from the demuxer layer to top level. The functions need access to playback state that doesn't belong on the demuxing level. Make the new functions more capable and simplify some code that can now rely on them. This fixes some errors in displayed in OSD and slave mode information when using timeline (ordered chapters).
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/demux_demuxers.c5
-rw-r--r--libmpdemux/demuxer.c63
-rw-r--r--libmpdemux/demuxer.h3
3 files changed, 1 insertions, 70 deletions
diff --git a/libmpdemux/demux_demuxers.c b/libmpdemux/demux_demuxers.c
index 531f048508..906ea402c5 100644
--- a/libmpdemux/demux_demuxers.c
+++ b/libmpdemux/demux_demuxers.c
@@ -151,11 +151,8 @@ static int demux_demuxers_control(demuxer_t *demuxer,int cmd, void *arg){
dd_priv_t* priv = demuxer->priv;
switch (cmd) {
case DEMUXER_CTRL_GET_TIME_LENGTH:
- *((double *)arg) = demuxer_get_time_length(priv->vd);
- return DEMUXER_CTRL_OK;
case DEMUXER_CTRL_GET_PERCENT_POS:
- *((int *)arg) = demuxer_get_percent_pos(priv->vd);
- return DEMUXER_CTRL_OK;
+ return demux_control(priv->vd, cmd, arg);
}
return DEMUXER_CTRL_NOTIMPL;
}
diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c
index ae81ae3e33..99f1be9fe8 100644
--- a/libmpdemux/demuxer.c
+++ b/libmpdemux/demuxer.c
@@ -1379,69 +1379,6 @@ int demux_control(demuxer_t *demuxer, int cmd, void *arg)
return DEMUXER_CTRL_NOTIMPL;
}
-
-
-double demuxer_get_time_length(demuxer_t *demuxer)
-{
- double get_time_ans;
- sh_video_t *sh_video = demuxer->video->sh;
- sh_audio_t *sh_audio = demuxer->audio->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 && sh_audio && sh_audio->i_bps)
- get_time_ans = (double) (demuxer->movi_end -
- demuxer->movi_start) / (sh_video->i_bps +
- sh_audio->i_bps);
- else if (sh_video && sh_video->i_bps)
- get_time_ans = (double) (demuxer->movi_end -
- demuxer->movi_start) / sh_video->i_bps;
- else if (sh_audio && sh_audio->i_bps)
- get_time_ans = (double) (demuxer->movi_end -
- demuxer->movi_start) / sh_audio->i_bps;
- else
- get_time_ans = 0;
- }
- return get_time_ans;
-}
-
-/**
- * \brief demuxer_get_current_time() returns the time of the current play in three possible ways:
- * either when the stream reader satisfies STREAM_CTRL_GET_CURRENT_TIME (e.g. dvd)
- * or using sh_video->pts when the former method fails
- * 0 otherwise
- * \return the current play time
- */
-int demuxer_get_current_time(demuxer_t *demuxer)
-{
- double get_time_ans = 0;
- sh_video_t *sh_video = demuxer->video->sh;
- if (demuxer->stream_pts != MP_NOPTS_VALUE)
- get_time_ans = demuxer->stream_pts;
- else if (sh_video)
- get_time_ans = sh_video->pts;
- return (int) get_time_ans;
-}
-
-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 <= 0) {
- off_t pos = demuxer->filepos > 0 ? demuxer->filepos : stream_tell(demuxer->stream);
- if (len > 0)
- ans = (pos - demuxer->movi_start) / len;
- else
- ans = 0;
- }
- if (ans < 0)
- ans = 0;
- if (ans > 100)
- ans = 100;
- return ans;
-}
-
int demuxer_switch_audio(demuxer_t *demuxer, int index)
{
int res = demux_control(demuxer, DEMUXER_CTRL_SWITCH_AUDIO, &index);
diff --git a/libmpdemux/demuxer.h b/libmpdemux/demuxer.h
index 1a1f189b55..2c200ead1e 100644
--- a/libmpdemux/demuxer.h
+++ b/libmpdemux/demuxer.h
@@ -434,9 +434,6 @@ char* demux_info_get(demuxer_t *demuxer, const char *opt);
int demux_info_print(demuxer_t *demuxer);
int demux_control(demuxer_t *demuxer, int cmd, void *arg);
-int demuxer_get_current_time(demuxer_t *demuxer);
-double demuxer_get_time_length(demuxer_t *demuxer);
-int demuxer_get_percent_pos(demuxer_t *demuxer);
int demuxer_switch_audio(demuxer_t *demuxer, int index);
int demuxer_switch_video(demuxer_t *demuxer, int index);