[MPlayer-dev-eng] [PATCH] reorganized demux_{asf,avi,mpg,xmms}_control

seru seru at gmx.net
Mon Dec 23 00:50:04 CET 2002


El lun, 23 de dic de 2002, a las 01:14:04 +0100, Arpi dijo:
> Hi,
> 
> argh
> WTF are you trying to do ????????
I was trying to do demux_control functions for other formats but it was such a mess I thougt it would be better to put it all in one place
> 
> pleeeeeeeeeeeeease RTFA before sending more of such nonsenses
 In the archive I found nothing :( 
I only saw you planned a libmpdemux rewrite after 0.90

Sorry, but what is wrong with the patch? 
The way it is right now seems much worse to me, as you're just repeating the same function in the end of demux_{asf,avi,mpg,xmms}.c

> 
> > Compiled and tested with asf, avi and mpg, all show total time and
> > percentage correctly.
> > Also, this will allow us to create demux_control functions for other
> > formats (mov, mp3, ogg, ...) more easily.
> > 
> > As a side note, mpeg total time seems a little strange (with or without
> > this patch). I tried a file which is 13379840 bytes, and MPlayer says it's
> > '2304,0 kbps (288,0 kbyte/s)' -- that must be in the header, right? So I
> > guess the header has something wrong though, because DEMUXER_
> > CTRL_GET_TIME_LENGTH gives 46 seconds, while 13379840/1024/288=45,37 secs,
> > and the OSD says it's 53 secs. :-?? What can we do about this? Nothing?
> > 
> > 
> > Index: libmpdemux/demuxer.h
> > ===================================================================
> > RCS file: /cvsroot/mplayer/main/libmpdemux/demuxer.h,v
> > retrieving revision 1.52
> > diff -u -r1.52 demuxer.h
> > --- libmpdemux/demuxer.h	22 Dec 2002 21:01:01 -0000	1.52
> > +++ libmpdemux/demuxer.h	22 Dec 2002 23:58:18 -0000
> > @@ -245,7 +245,7 @@
> >  int demux_info_print(demuxer_t *demuxer);
> >  int demux_control(demuxer_t *demuxer, int cmd, void *arg);
> >  
> > -#endif
> > -
> >  extern unsigned long demuxer_get_time_length(demuxer_t *demuxer);
> >  extern int demuxer_get_percent_pos(demuxer_t *demuxer);
> > +#endif
> > +
> > Index: libmpdemux/demuxer.c
> > ===================================================================
> > RCS file: /cvsroot/mplayer/main/libmpdemux/demuxer.c,v
> > retrieving revision 1.126
> > diff -u -r1.126 demuxer.c
> > --- libmpdemux/demuxer.c	22 Dec 2002 21:01:01 -0000	1.126
> > +++ libmpdemux/demuxer.c	22 Dec 2002 23:58:22 -0000
> > @@ -16,6 +16,7 @@
> >  #include "stream.h"
> >  #include "demuxer.h"
> >  #include "stheader.h"
> > +#include "aviheader.h"
> >  #include "mf.h"
> >  
> >  #include "../libvo/fastmemcpy.h"
> > @@ -1274,31 +1275,104 @@
> >    return NULL;
> >  }
> >  
> > -extern int demux_mpg_control(demuxer_t *demuxer, int cmd, void *arg);
> > -extern int demux_asf_control(demuxer_t *demuxer, int cmd, void *arg);
> > -extern int demux_avi_control(demuxer_t *demuxer, int cmd, void *arg);
> > -extern int demux_xmms_control(demuxer_t *demuxer, int cmd, void *arg);
> > -
> > -int demux_control(demuxer_t *demuxer, int cmd, void *arg) {
> > -    switch(demuxer->type) {
> > -	case DEMUXER_TYPE_MPEG_ES:
> > -	case DEMUXER_TYPE_MPEG_PS:
> > -	    return demux_mpg_control(demuxer,cmd,arg);
> > -	case DEMUXER_TYPE_ASF:
> > -	    return demux_asf_control(demuxer,cmd,arg);
> > -	case DEMUXER_TYPE_AVI:
> > -	case DEMUXER_TYPE_AVI_NI:
> > -	case DEMUXER_TYPE_AVI_NINI:
> > -	    return demux_avi_control(demuxer,cmd,arg);
> > +int demux_control(demuxer_t *demuxer,int cmd, void *arg){
> > +    int asf_movielength=0;
> > +/*  demux_stream_t *d_audio=demuxer->audio;
> > +    sh_audio_t *sh_audio=d_audio->sh; */
> > +    demux_stream_t *d_video=demuxer->video;
> > +    sh_video_t *sh_video=d_video->sh;
> > +    avi_priv_t *priv=demuxer->priv;
> >  #ifdef HAVE_XMMS
> > -	case DEMUXER_TYPE_XMMS:
> > -	    return demux_xmms_control(demuxer,cmd,arg);
> > +    xmms_priv_t *xpriv=demuxer->priv;
> >  #endif
> > -	default:
> > -	    return DEMUXER_CTRL_NOTIMPL;
> > +    switch(cmd) {
> > +
> > +        case DEMUXER_CTRL_GET_TIME_LENGTH:
> > +            switch(demuxer->type) {
> > +	        case DEMUXER_TYPE_ASF:
> > +                    *((unsigned long *)arg)=(unsigned long)(asf_movielength);
> > +                    break;
> > +
> > +	        case DEMUXER_TYPE_AVI:
> > +	        case DEMUXER_TYPE_AVI_NI:
> > +	        case DEMUXER_TYPE_AVI_NINI:
> > +                    if (!priv->numberofframes) {
> > +                        return DEMUXER_CTRL_DONTKNOW;
> > +                    }
> > +                    *((unsigned long *)arg)=priv->numberoffr
> > ames/sh_video->fps;
> > +                    if (sh_video->video.dwLength<=1) {
> > +                         return DEMUXER_CTRL_GUESS;
> > +                    }
> > +                    return DEMUXER_CTRL_OK;
> > +                    break;
> > +
> > +	        case DEMUXER_TYPE_MPEG_ES:
> > +	        case DEMUXER_TYPE_MPEG_PS:
> > +                    if(!sh_video->i_bps) {  // unspecified or VBR
> > +                       return DEMUXER_CTRL_DONTKNOW;
> > +                    }
> > +                    *((unsigned long *)arg)=(demuxer->movi_e
> > nd-demuxer->movi_start)/sh_video->i_bps;
> > +                    return DEMUXER_CTRL_GUESS;
> > +                    break;
> > +
> > +#ifdef HAVE_XMMS
> > +                case DEMUXER_TYPE_XMMS:
> > +                    if (xmms_length<=0) {
> > +                        return DEMUXER_CTRL_DONTKNOW;
> > +                    }
> > +                    *((unsigned long *)arg)=(unsigned long)xmms_length/1000;
> > +                    return DEMUXER_CTRL_GUESS;
> > +                    break;
> > +#endif
> > +
> > +                default:
> > +                    break;
> > +            }
> > +
> > +        case DEMUXER_CTRL_GET_PERCENT_POS:
> > +            if (demuxer->movi_end==demuxer->movi_start) {
> > +                return DEMUXER_CTRL_DONTKNOW;
> > +            }
> > +            switch(demuxer->type) {
> > +                case DEMUXER_TYPE_ASF:
> > +                    *((int *)arg)=(int)((demuxer->filepos-de
> > muxer->movi_start)/((demuxer->movi_end-demuxer->movi_start)/100));
> > +                    return DEMUXER_CTRL_OK;
> > +                    break;
> > +
> > +	        case DEMUXER_TYPE_AVI:
> > +	        case DEMUXER_TYPE_AVI_NI:
> > +	        case DEMUXER_TYPE_AVI_NINI:
> > +                    if (!priv->numberofframes) {
> > +                        *((int *)arg)=(int)((demuxer->filepo
> > s-demuxer->movi_start)/((demuxer->movi_end-demuxer->movi_start)/100));
> > +                        return DEMUXER_CTRL_OK;
> > +                    }
> > +                    *((int *)arg)=(int)(priv->video_pack_no*
> > 100/priv->numberofframes);
> > +                    if (sh_video->video.dwLength<=1) {
> > +                        return DEMUXER_CTRL_GUESS;
> > +                    }
> > +                    return DEMUXER_CTRL_OK;
> > +                    break;
> > +
> > +	        case DEMUXER_TYPE_MPEG_ES:
> > +	        case DEMUXER_TYPE_MPEG_PS:
> > +                    *((int *)arg)=(int)((demuxer->filepos-de
> > muxer->movi_start)/((demuxer->movi_end-demuxer->movi_start)/100));
> > +                    return DEMUXER_CTRL_OK;
> > +                    break;
> > +
> > +#ifdef HAVE_XMMS
> > +                case DEMUXER_TYPE_XMMS:
> > +                    if (xmms_length<=0) {
> > +                      return DEMUXER_CTRL_DONTKNOW;
> > +                    }
> > +                    *((int *)arg)=(int)( xpriv->spos / (floa
> > t)(sh_audio->wf->nAvgBytesPerSec) / xmms_length );
> > +                    return DEMUXER_CTRL_OK;
> > +                    break;
> > +#endif
> > +           }
> > +        default:
> > +            return DEMUXER_CTRL_NOTIMPL;
> >      }
> >  }
> > -
> >  
> >  
> >  unsigned long demuxer_get_time_length(demuxer_t *demuxer){     
> > Index: libmpdemux/demux_asf.c
> > ===================================================================
> > RCS file: /cvsroot/mplayer/main/libmpdemux/demux_asf.c,v
> > retrieving revision 1.26
> > diff -u -r1.26 demux_asf.c
> > --- libmpdemux/demux_asf.c	23 Nov 2002 10:58:08 -0000	1.26
> > +++ libmpdemux/demux_asf.c	22 Dec 2002 23:58:23 -0000
> > @@ -12,7 +12,6 @@
> >  #include "asf.h"
> >  #include "demuxer.h"
> >  
> > -
> >  /*
> >   * Load 16/32-bit values in little endian byte order
> >   * from an unaligned address
> > @@ -396,25 +395,3 @@
> >  
> >  }
> >  
> > -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;
> > -    }
> > -}
> > Index: libmpdemux/demux_avi.c
> > ===================================================================
> > RCS file: /cvsroot/mplayer/main/libmpdemux/demux_avi.c,v
> > retrieving revision 1.53
> > diff -u -r1.53 demux_avi.c
> > --- libmpdemux/demux_avi.c	21 Dec 2002 22:11:48 -0000	1.53
> > +++ libmpdemux/demux_avi.c	22 Dec 2002 23:58:25 -0000
> > @@ -823,34 +823,3 @@
> >    free(priv);
> >  }
> >  
> > -
> > -int demux_avi_control(demuxer_t *demuxer,int cmd, void *arg){
> > -    avi_priv_t *priv=demuxer->priv;
> > -/*    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 (!priv->numberofframes) return DEMUXER_CTRL_DONTKNOW;
> > -	    *((unsigned long *)arg)=priv->numberofframes/sh_video->fps;
> > -	    if (sh_video->video.dwLength<=1) return DEMUXER_CTRL_GUESS;
> > -	    return DEMUXER_CTRL_OK;
> > -
> > -	case DEMUXER_CTRL_GET_PERCENT_POS:
> > -    	    if (!priv->numberofframes) {
> > -		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; 
> > -	    }
> > -	    *((int *)arg)=(int)(priv->video_pack_no*100/priv->numberofframes);
> > -	    if (sh_video->video.dwLength<=1) return DEMUXER_CTRL_GUESS;
> > -	    return DEMUXER_CTRL_OK;
> > -
> > -	default:
> > -	    return DEMUXER_CTRL_NOTIMPL;
> > -    }
> > -}
> > Index: libmpdemux/demux_mpg.c
> > ===================================================================
> > RCS file: /cvsroot/mplayer/main/libmpdemux/demux_mpg.c,v
> > retrieving revision 1.46
> > diff -u -r1.46 demux_mpg.c
> > --- libmpdemux/demux_mpg.c	23 Nov 2002 10:58:08 -0000	1.46
> > +++ libmpdemux/demux_mpg.c	22 Dec 2002 23:58:26 -0000
> > @@ -405,26 +405,3 @@
> >          }
> >  }
> >  
> > -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->mov
> > i_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;
> > -    }
> > -}
> > Index: libmpdemux/demux_xmms.c
> > ===================================================================
> > RCS file: /cvsroot/mplayer/main/libmpdemux/demux_xmms.c,v
> > retrieving revision 1.1
> > diff -u -r1.1 demux_xmms.c
> > --- libmpdemux/demux_xmms.c	22 Dec 2002 21:01:01 -0000	1.1
> > +++ libmpdemux/demux_xmms.c	22 Dec 2002 23:58:26 -0000
> > @@ -313,24 +313,3 @@
> >    return 1;
> >  }
> >  
> > -int demux_xmms_control(demuxer_t *demuxer,int cmd, void *arg){
> > -    demux_stream_t *d_video=demuxer->video;
> > -    sh_audio_t *sh_audio=demuxer->audio->sh;
> > -    xmms_priv_t *priv=demuxer->priv;
> > -
> > -    switch(cmd) {
> > -	case DEMUXER_CTRL_GET_TIME_LENGTH:
> > -	    if (xmms_length<=0) return DEMUXER_CTRL_DONTKNOW;
> > -	    *((unsigned long *)arg)=(unsigned long)xmms_length/1000;
> > -	    return DEMUXER_CTRL_GUESS;
> > -
> > -	case DEMUXER_CTRL_GET_PERCENT_POS:
> > -	    if (xmms_length<=0) 
> > -    		return DEMUXER_CTRL_DONTKNOW;
> > -    	    *((int *)arg)=(int)( priv->spos / (float)(sh_audio-
> > >wf->nAvgBytesPerSec) / xmms_length );
> > -	    return DEMUXER_CTRL_OK;
> > -
> > -	default:
> > -	    return DEMUXER_CTRL_NOTIMPL;
> > -    }
> > -}
> > 
> > 
> 
> 
> A'rpi / Astral & ESP-team
> 
> --
> Developer of MPlayer, the Movie Player for Linux - http://www.MPlayerHQ.hu
> _______________________________________________
> MPlayer-dev-eng mailing list
> MPlayer-dev-eng at mplayerhq.hu
> http://mplayerhq.hu/mailman/listinfo/mplayer-dev-eng



More information about the MPlayer-dev-eng mailing list