summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demux_mpg.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-11-16 03:42:14 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-11-16 03:42:14 +0000
commit422b0d2a4c936d87ed27ee7b56e21d2d60752194 (patch)
tree1a739173121ee09271ab441c058fc5ec7b0857bb /libmpdemux/demux_mpg.c
parent4bda81ad1667ff2f6fd888a5010c375fde8e5038 (diff)
downloadmpv-422b0d2a4c936d87ed27ee7b56e21d2d60752194.tar.bz2
mpv-422b0d2a4c936d87ed27ee7b56e21d2d60752194.tar.xz
demuxer_control(), percent position and time length query implemented in
asf, avi, mpeg demuxers. patch by Balatoni Denes <pnis@coder.hu> git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@8209 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/demux_mpg.c')
-rw-r--r--libmpdemux/demux_mpg.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/libmpdemux/demux_mpg.c b/libmpdemux/demux_mpg.c
index 5437d8a0e5..bdc28fd618 100644
--- a/libmpdemux/demux_mpg.c
+++ b/libmpdemux/demux_mpg.c
@@ -403,7 +403,28 @@ void demux_seek_mpg(demuxer_t *demuxer,float rel_seek_secs,int flags){
if(i==0x1B3 || i==0x1B8) break; // found it!
if(!i || !skip_video_packet(d_video)) break; // EOF?
}
+}
+int demux_mpg_control(demuxer_t *demuxer,int cmd, void *arg){
+ demux_stream_t *d_audio=demuxer->audio;
+ demux_stream_t *d_video=demuxer->video;
+ sh_audio_t *sh_audio=d_audio->sh;
+ sh_video_t *sh_video=d_video->sh;
+ switch(cmd) {
+ case DEMUXER_CTRL_GET_TIME_LENGTH:
+ if(!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;
+ *((int *)arg)=(int)((demuxer->filepos-demuxer->movi_start)/((demuxer->movi_end-demuxer->movi_start)/100));
+ return DEMUXER_CTRL_OK;
+
+ default:
+ return DEMUXER_CTRL_NOTIMPL;
+ }
}
-