Modified: freeswitch/trunk/libs/portaudio/src/common/pa_dither.c (15421 => 15422)
--- freeswitch/trunk/libs/portaudio/src/common/pa_dither.c 2009-11-11 02:19:44 UTC (rev 15421)
+++ freeswitch/trunk/libs/portaudio/src/common/pa_dither.c 2009-11-11 02:43:55 UTC (rev 15422)
@@ -42,10 +42,15 @@
@brief Functions for generating dither noise
*/
-
+#include "pa_types.h"
#include "pa_dither.h"
-#include "pa_types.h"
+
+/* Note that the linear congruential algorithm requires 32 bit integers
+ * because it uses arithmetic overflow. So use PaUint32 instead of
+ * unsigned long so it will work on 64 bit systems.
+ */
+
#define PA_DITHER_BITS_ (15)
@@ -57,9 +62,9 @@
}
-signed long PaUtil_Generate16BitTriangularDither( PaUtilTriangularDitherGenerator *state )
+PaInt32 PaUtil_Generate16BitTriangularDither( PaUtilTriangularDitherGenerator *state )
{
- signed long current, highPass;
+ PaInt32 current, highPass;
/* Generate two random numbers. */
state->randSeed1 = (state->randSeed1 * 196314165) + 907633515;
@@ -69,9 +74,10 @@
* Shift before adding to prevent overflow which would skew the distribution.
* Also shift an extra bit for the high pass filter.
*/
-#define DITHER_SHIFT_ ((SIZEOF_LONG*8 - PA_DITHER_BITS_) + 1)
- current = (((signed long)state->randSeed1)>>DITHER_SHIFT_) +
- (((signed long)state->randSeed2)>>DITHER_SHIFT_);
+#define DITHER_SHIFT_ ((sizeof(PaInt32)*8 - PA_DITHER_BITS_) + 1)
+
+ current = (((PaInt32)state->randSeed1)>>DITHER_SHIFT_) +
+ (((PaInt32)state->randSeed2)>>DITHER_SHIFT_);
/* High pass filter to reduce audibility. */
highPass = current - state->previous;
@@ -86,7 +92,7 @@
float PaUtil_GenerateFloatTriangularDither( PaUtilTriangularDitherGenerator *state )
{
- signed long current, highPass;
+ PaInt32 current, highPass;
/* Generate two random numbers. */
state->randSeed1 = (state->randSeed1 * 196314165) + 907633515;
@@ -96,9 +102,8 @@
* Shift before adding to prevent overflow which would skew the distribution.
* Also shift an extra bit for the high pass filter.
*/
-#define DITHER_SHIFT_ ((SIZEOF_LONG*8 - PA_DITHER_BITS_) + 1)
- current = (((signed long)state->randSeed1)>>DITHER_SHIFT_) +
- (((signed long)state->randSeed2)>>DITHER_SHIFT_);
+ current = (((PaInt32)state->randSeed1)>>DITHER_SHIFT_) +
+ (((PaInt32)state->randSeed2)>>DITHER_SHIFT_);
/* High pass filter to reduce audibility. */
highPass = current - state->previous;
Modified: freeswitch/trunk/libs/portaudio/src/common/pa_dither.h (15421 => 15422)
--- freeswitch/trunk/libs/portaudio/src/common/pa_dither.h 2009-11-11 02:19:44 UTC (rev 15421)
+++ freeswitch/trunk/libs/portaudio/src/common/pa_dither.h 2009-11-11 02:43:55 UTC (rev 15422)
@@ -44,18 +44,24 @@
@brief Functions for generating dither noise
*/
+#include "pa_types.h"
+
#ifdef __cplusplus
extern "C"
{
#endif /* __cplusplus */
+/* Note that the linear congruential algorithm requires 32 bit integers
+ * because it uses arithmetic overflow. So use PaUint32 instead of
+ * unsigned long so it will work on 64 bit systems.
+ */
/** @brief State needed to generate a dither signal */
typedef struct PaUtilTriangularDitherGenerator{
- unsigned long previous;
- unsigned long randSeed1;
- unsigned long randSeed2;
+ PaUint32 previous;
+ PaUint32 randSeed1;
+ PaUint32 randSeed2;
} PaUtilTriangularDitherGenerator;
@@ -73,9 +79,9 @@
signed short out = (signed short)(((in>>1) + dither) >> 15);
</pre>
@return
- A signed long with a range of +32767 to -32768
+ A signed 32-bit integer with a range of +32767 to -32768
*/
-signed long PaUtil_Generate16BitTriangularDither( PaUtilTriangularDitherGenerator *ditherState );
+PaInt32 PaUtil_Generate16BitTriangularDither( PaUtilTriangularDitherGenerator *ditherState );
/**
Modified: freeswitch/trunk/libs/portaudio/src/hostapi/coreaudio/pa_mac_core.c (15421 => 15422)
--- freeswitch/trunk/libs/portaudio/src/hostapi/coreaudio/pa_mac_core.c 2009-11-11 02:19:44 UTC (rev 15421)
+++ freeswitch/trunk/libs/portaudio/src/hostapi/coreaudio/pa_mac_core.c 2009-11-11 02:43:55 UTC (rev 15422)
@@ -1709,8 +1709,10 @@
PaUtilRingBuffer *rb = (PaUtilRingBuffer *) inUserData;
VVDBUG(("ringBufferIOProc()\n"));
-
- assert( sizeof( UInt32 ) == sizeof( long ) );
+ /*
+ Removing this fixes it but no clue if it breaks other things. (bkw_)
+ assert( sizeof( UInt32 ) == sizeof( long ) );
+ */
if( PaUtil_GetRingBufferReadAvailable( rb ) == 0 ) {
*outData = NULL;
*ioDataSize = 0;