[MPlayer-dev-eng] Re: ao_plugin play() problems - fix suggestions

Anders Johansson ajh at atri.curtin.edu.au
Tue Dec 11 04:28:22 CET 2001


Hi,

> On Mon, 10 Dec 2001, Stephen Davies wrote:
> 
> > (2) ao2 drivers should limit value returned from get_space
> > 
> > - ao2 drivers should be adjusted to always return a get_space value that
> >   is less than MAX_OUTBURST, and that "suits" the driver.
> >   For instance, ao_oss would take fragment size into account when
> >   calculating a value to return.
> 
> Well - I tried this out in ao_oss and it seems to do the job pretty
> smoothly for me.
> 
> Patch as so:
> 
> Index: libao2/ao_oss.c
> ===================================================================
> RCS file: /cvsroot/mplayer/main/libao2/ao_oss.c,v
> retrieving revision 1.15
> diff -u -r1.15 ao_oss.c
> --- libao2/ao_oss.c	4 Dec 2001 17:54:08 -0000	1.15
> +++ libao2/ao_oss.c	10 Dec 2001 21:57:35 -0000
> @@ -241,7 +241,10 @@
>  #ifdef SNDCTL_DSP_GETOSPACE
>    if(ioctl(audio_fd, SNDCTL_DSP_GETOSPACE, &zz)!=-1){
>        // calculate exact buffer space:
> -      return zz.fragments*zz.fragsize;
> +      playsize = zz.fragments*zz.fragsize;
> +      if (playsize > MAX_OUTBURST)
> +	playsize = (MAX_OUTBURST / zz.fragsize) * zz.fragsize;
> +      return playsize;
>    }
>  #endif
>  
> 
> Shall I commit that?
> 
> Anders - you will have trouble, though, if you want to add or subtract
> some samples in a plugin, that is, move the data length away from a
> multiple of a fragment.  I reckon buffering in ao_plugin is the only
> proper fix for that to work.
> 
> Steve
> 

Looks like a great solution to me. No worries about the problems I
will get I'll find a workaround.

//Anders



More information about the MPlayer-dev-eng mailing list