diff libmpdemux/demux_mpg.c @ 8208:ae5a2ae1c349

demuxer_control(), percent position and time length query implemented in asf, avi, mpeg demuxers. patch by Balatoni Denes <pnis@coder.hu>
author arpi
date Sat, 16 Nov 2002 03:42:14 +0000
parents 9fc45fe0d444
children 772d6d27fd66
line wrap: on
line diff
--- a/libmpdemux/demux_mpg.c	Sat Nov 16 03:25:37 2002 +0000
+++ b/libmpdemux/demux_mpg.c	Sat Nov 16 03:42:14 2002 +0000
@@ -403,7 +403,28 @@
           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;
+    }
+}