mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-14 16:15:04 +00:00
ROUND 1... FIGHT... MODENDP-264
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@15422 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
b92ca24e10
commit
da72c570ea
@ -42,9 +42,14 @@
|
|||||||
@brief Functions for generating dither noise
|
@brief Functions for generating dither noise
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "pa_dither.h"
|
|
||||||
#include "pa_types.h"
|
#include "pa_types.h"
|
||||||
|
#include "pa_dither.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)
|
#define PA_DITHER_BITS_ (15)
|
||||||
|
|
||||||
@ -57,9 +62,9 @@ void PaUtil_InitializeTriangularDitherState( PaUtilTriangularDitherGenerator *st
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
signed long PaUtil_Generate16BitTriangularDither( PaUtilTriangularDitherGenerator *state )
|
PaInt32 PaUtil_Generate16BitTriangularDither( PaUtilTriangularDitherGenerator *state )
|
||||||
{
|
{
|
||||||
signed long current, highPass;
|
PaInt32 current, highPass;
|
||||||
|
|
||||||
/* Generate two random numbers. */
|
/* Generate two random numbers. */
|
||||||
state->randSeed1 = (state->randSeed1 * 196314165) + 907633515;
|
state->randSeed1 = (state->randSeed1 * 196314165) + 907633515;
|
||||||
@ -69,9 +74,10 @@ signed long PaUtil_Generate16BitTriangularDither( PaUtilTriangularDitherGenerato
|
|||||||
* Shift before adding to prevent overflow which would skew the distribution.
|
* Shift before adding to prevent overflow which would skew the distribution.
|
||||||
* Also shift an extra bit for the high pass filter.
|
* Also shift an extra bit for the high pass filter.
|
||||||
*/
|
*/
|
||||||
#define DITHER_SHIFT_ ((SIZEOF_LONG*8 - PA_DITHER_BITS_) + 1)
|
#define DITHER_SHIFT_ ((sizeof(PaInt32)*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. */
|
/* High pass filter to reduce audibility. */
|
||||||
highPass = current - state->previous;
|
highPass = current - state->previous;
|
||||||
@ -86,7 +92,7 @@ static const float const_float_dither_scale_ = PA_FLOAT_DITHER_SCALE_;
|
|||||||
|
|
||||||
float PaUtil_GenerateFloatTriangularDither( PaUtilTriangularDitherGenerator *state )
|
float PaUtil_GenerateFloatTriangularDither( PaUtilTriangularDitherGenerator *state )
|
||||||
{
|
{
|
||||||
signed long current, highPass;
|
PaInt32 current, highPass;
|
||||||
|
|
||||||
/* Generate two random numbers. */
|
/* Generate two random numbers. */
|
||||||
state->randSeed1 = (state->randSeed1 * 196314165) + 907633515;
|
state->randSeed1 = (state->randSeed1 * 196314165) + 907633515;
|
||||||
@ -96,9 +102,8 @@ float PaUtil_GenerateFloatTriangularDither( PaUtilTriangularDitherGenerator *sta
|
|||||||
* Shift before adding to prevent overflow which would skew the distribution.
|
* Shift before adding to prevent overflow which would skew the distribution.
|
||||||
* Also shift an extra bit for the high pass filter.
|
* Also shift an extra bit for the high pass filter.
|
||||||
*/
|
*/
|
||||||
#define DITHER_SHIFT_ ((SIZEOF_LONG*8 - PA_DITHER_BITS_) + 1)
|
current = (((PaInt32)state->randSeed1)>>DITHER_SHIFT_) +
|
||||||
current = (((signed long)state->randSeed1)>>DITHER_SHIFT_) +
|
(((PaInt32)state->randSeed2)>>DITHER_SHIFT_);
|
||||||
(((signed long)state->randSeed2)>>DITHER_SHIFT_);
|
|
||||||
|
|
||||||
/* High pass filter to reduce audibility. */
|
/* High pass filter to reduce audibility. */
|
||||||
highPass = current - state->previous;
|
highPass = current - state->previous;
|
||||||
|
@ -44,18 +44,24 @@
|
|||||||
@brief Functions for generating dither noise
|
@brief Functions for generating dither noise
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "pa_types.h"
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#endif /* __cplusplus */
|
#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 */
|
/** @brief State needed to generate a dither signal */
|
||||||
typedef struct PaUtilTriangularDitherGenerator{
|
typedef struct PaUtilTriangularDitherGenerator{
|
||||||
unsigned long previous;
|
PaUint32 previous;
|
||||||
unsigned long randSeed1;
|
PaUint32 randSeed1;
|
||||||
unsigned long randSeed2;
|
PaUint32 randSeed2;
|
||||||
} PaUtilTriangularDitherGenerator;
|
} PaUtilTriangularDitherGenerator;
|
||||||
|
|
||||||
|
|
||||||
@ -73,9 +79,9 @@ void PaUtil_InitializeTriangularDitherState( PaUtilTriangularDitherGenerator *di
|
|||||||
signed short out = (signed short)(((in>>1) + dither) >> 15);
|
signed short out = (signed short)(((in>>1) + dither) >> 15);
|
||||||
</pre>
|
</pre>
|
||||||
@return
|
@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 );
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1709,8 +1709,10 @@ static OSStatus ringBufferIOProc( AudioConverterRef inAudioConverter,
|
|||||||
PaUtilRingBuffer *rb = (PaUtilRingBuffer *) inUserData;
|
PaUtilRingBuffer *rb = (PaUtilRingBuffer *) inUserData;
|
||||||
|
|
||||||
VVDBUG(("ringBufferIOProc()\n"));
|
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 ) {
|
if( PaUtil_GetRingBufferReadAvailable( rb ) == 0 ) {
|
||||||
*outData = NULL;
|
*outData = NULL;
|
||||||
*ioDataSize = 0;
|
*ioDataSize = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user