[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