diff options
author | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-11-16 03:42:14 +0000 |
---|---|---|
committer | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-11-16 03:42:14 +0000 |
commit | 422b0d2a4c936d87ed27ee7b56e21d2d60752194 (patch) | |
tree | 1a739173121ee09271ab441c058fc5ec7b0857bb /libmpdemux/demux_asf.c | |
parent | 4bda81ad1667ff2f6fd888a5010c375fde8e5038 (diff) | |
download | mpv-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_asf.c')
-rw-r--r-- | libmpdemux/demux_asf.c | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/libmpdemux/demux_asf.c b/libmpdemux/demux_asf.c index 37011bd8fd..9d6196dab5 100644 --- a/libmpdemux/demux_asf.c +++ b/libmpdemux/demux_asf.c @@ -35,7 +35,8 @@ extern int asf_scrambling_h; extern int asf_scrambling_w; extern int asf_scrambling_b; extern int asf_packetsize; - +extern double asf_packetrate; +extern int asf_movielength; // based on asf file-format doc by Eugene [http://divx.euro.ru] @@ -357,7 +358,7 @@ void demux_seek_asf(demuxer_t *demuxer,float rel_seek_secs,int flags){ //FIXME: reports good or bad to steve@daviesfam.org please //================= seek in ASF ========================== - float p_rate=10; // packets / sec + float p_rate=asf_packetrate; // packets / sec off_t rel_seek_packs=(flags&2)? // FIXME: int may be enough? (rel_seek_secs*(demuxer->movi_end-demuxer->movi_start)/asf_packetsize): (rel_seek_secs*p_rate); @@ -395,3 +396,25 @@ void demux_seek_asf(demuxer_t *demuxer,float rel_seek_secs,int flags){ } +int demux_asf_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: + *((unsigned long *)arg)=(unsigned long)(asf_movielength); + 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; + } +} |