[Plib-cvs] plib/src/sl slDSP.cxx,1.20,1.21 slScheduler.cxx,1.9,1.10 sl.h,1.22,1.23 slPortability.h,1
Brought to you by:
sjbaker
From: James J. <pu...@us...> - 2003-05-18 13:45:09
|
Update of /cvsroot/plib/plib/src/sl In directory sc8-pr-cvs1:/tmp/cvs-serv23894 Modified Files: slDSP.cxx slScheduler.cxx sl.h slPortability.h Log Message: Patches by Bert Driehuis and Melchior Franz. Improved FreeBSD support. ---------------------------------------------------------------------- Index: slDSP.cxx =================================================================== RCS file: /cvsroot/plib/plib/src/sl/slDSP.cxx,v retrieving revision 1.20 retrieving revision 1.21 diff -u -d -r1.20 -r1.21 --- slDSP.cxx 4 Jan 2003 02:55:55 -0000 1.20 +++ slDSP.cxx 18 May 2003 13:45:04 -0000 1.21 @@ -413,7 +413,7 @@ /* NetBSD/OpenBSD 2.3 this should be very close to SUN Audio */ /* ------------------------------------------------------------ */ -#elif defined(UL_BSD) || defined(UL_SOLARIS) +#elif (defined(UL_BSD) && !defined(__FreeBSD__)) || defined(UL_SOLARIS) void slDSP::open ( const char *device, int _rate, int _stereo, int _bps ) { Index: slScheduler.cxx =================================================================== RCS file: /cvsroot/plib/plib/src/sl/slScheduler.cxx,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- slScheduler.cxx 2 Sep 2002 06:05:47 -0000 1.9 +++ slScheduler.cxx 18 May 2003 13:45:04 -0000 1.10 @@ -36,7 +36,7 @@ mixer_buffer = NULL ; /* Note there is a required null element on the end of array */ for ( mi=0; mi <= SL_MAX_MIXERINPUTS; mi++ ) - mixer_inputs[mi] = NULL ; + mixer_inputs[mi] = NULL ; current = this ; mixer_gain = 0x100 ; /* When we have to make sound quieter */ @@ -84,6 +84,10 @@ setMaxConcurrent ( 0 ); mixer_buffer_size = getDriverBufferSize () ; + int div = 1; + if ( getStereo() ) div *= 2 ; + if ( getBps() == 16 ) div *= 2 ; + seconds_per_buffer = (float)mixer_buffer_size / ( div * getRate() ) ; mixer_buffer = new Uchar [ mixer_buffer_size ] ; memset ( mixer_buffer, 0x80, mixer_buffer_size ) ; @@ -132,7 +136,7 @@ int i ; - while ( secondsUsed() <= safety_margin ) + while ( ( secondsUsed() <= safety_margin ) && ( secondsRemaining() >= seconds_per_buffer ) ) { slPlayer *psp [ SL_MAX_MIXERINPUTS ] ; int pri [ SL_MAX_MIXERINPUTS ] ; @@ -146,7 +150,7 @@ /* Ignore non-existent channels */ if ( player [ i ] == NULL ) - continue ; + continue ; /* Clean up dead sample players */ @@ -155,15 +159,15 @@ if ( player [ i ] == music ) music = NULL ; - delete player [ i ] ; - player [ i ] = NULL ; - continue ; + delete player [ i ] ; + player [ i ] = NULL ; + continue ; } /* Skip paused players, but leave them alone */ if ( player [ i ] -> isPaused () ) - continue ; + continue ; /* This one is viable, make sure we have room */ @@ -174,9 +178,11 @@ ( mypri > pri[lowest] ) ) { /* Not enough room; get rid of someone */ - player[lowest] -> preempt ( mixer_buffer_size ) ; - psp[lowest] = player[i] ; - pri[lowest] = mypri ; + if ( player[lowest] != NULL ) + player[lowest] -> preempt ( mixer_buffer_size ) ; + + psp[lowest] = player[i] ; + pri[lowest] = mypri ; int j; for ( j = 0; j < inputsused; j++ ) if ( pri[lowest] < pri[j] ) @@ -186,7 +192,7 @@ { /* Ok, we've got room, presumably, for another item */ psp[inputsused] = player[i]; pri[inputsused] = mypri; - if ( ( ( inputsused ++ ) == 0 ) || + if ( ( ( inputsused ++ ) == 0 ) || ( pri[lowest] > mypri ) ) lowest = inputsused; } @@ -258,7 +264,7 @@ /* We compute one value in here, in the loop below */ register int t ; /* We need to determine the maximum range of values */ - int tmax = 0x80, tmin = 0x80; + int tmax = 0x80, tmin = 0x80; /* A pointer to the element about to be added to "t" */ register Uchar **p ; /* Sound cards use offset binary, so do zero adjustment */ Index: sl.h =================================================================== RCS file: /cvsroot/plib/plib/src/sl/sl.h,v retrieving revision 1.22 retrieving revision 1.23 diff -u -d -r1.22 -r1.23 --- sl.h 4 Jan 2003 02:55:55 -0000 1.22 +++ sl.h 18 May 2003 13:45:04 -0000 1.23 @@ -73,15 +73,15 @@ int error ; int fd ; -#ifdef UL_BSD +#if defined(SL_USING_OSS_AUDIO) + audio_buf_info buff_info ; +#elif defined(UL_BSD) audio_info_t ainfo; // ioctl structure audio_offset_t audio_offset; // offset in audiostream long counter; // counter-written packets #elif defined(UL_SOLARIS) audio_info_t ainfo; long counter; -#elif defined(SL_USING_OSS_AUDIO) - audio_buf_info buff_info ; #elif defined(UL_IRIX) ALconfig config; // configuration stuff ALport port; // .. we are here @@ -645,6 +645,7 @@ float safety_margin ; int mixer_buffer_size, mixer_gain ; + float seconds_per_buffer; Uchar *mixer_buffer ; Uchar *mixer_inputs [ SL_MAX_MIXERINPUTS + 1 ] ; Index: slPortability.h =================================================================== RCS file: /cvsroot/plib/plib/src/sl/slPortability.h,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- slPortability.h 30 Nov 2002 13:18:56 -0000 1.13 +++ slPortability.h 18 May 2003 13:45:04 -0000 1.14 @@ -75,7 +75,9 @@ #endif #ifdef UL_BSD +#ifndef __FreeBSD__ # include <sys/audioio.h> +#endif #endif /* Tom */ |