summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demux_asf.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_asf.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_asf.c')
-rw-r--r--libmpdemux/demux_asf.c27
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;
+ }
+}