⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pa_converters.c

📁 一个开源的sip源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/* -------------------------------------------------------------------------- */static void Float32_To_Int8_Clip(    void *destinationBuffer, signed int destinationStride,    void *sourceBuffer, signed int sourceStride,    unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ){    float *src = (float*)sourceBuffer;    signed char *dest =  (signed char*)destinationBuffer;    (void)ditherGenerator; /* unused parameter */    while( count-- )    {        PaInt32 samp = (PaInt32)(*src * (127.0f));        PA_CLIP_( samp, -0x80, 0x7F );        *dest = (signed char) samp;        src += sourceStride;        dest += destinationStride;    }}/* -------------------------------------------------------------------------- */static void Float32_To_Int8_DitherClip(    void *destinationBuffer, signed int destinationStride,    void *sourceBuffer, signed int sourceStride,    unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ){    float *src = (float*)sourceBuffer;    signed char *dest =  (signed char*)destinationBuffer;    (void)ditherGenerator; /* unused parameter */    while( count-- )    {        float dither  = PaUtil_GenerateFloatTriangularDither( ditherGenerator );        /* use smaller scaler to prevent overflow when we add the dither */        float dithered = (*src * (126.0f)) + dither;        PaInt32 samp = (PaInt32) dithered;        PA_CLIP_( samp, -0x80, 0x7F );        *dest = (signed char) samp;        src += sourceStride;        dest += destinationStride;    }}/* -------------------------------------------------------------------------- */static void Float32_To_UInt8(    void *destinationBuffer, signed int destinationStride,    void *sourceBuffer, signed int sourceStride,    unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ){    float *src = (float*)sourceBuffer;    unsigned char *dest =  (unsigned char*)destinationBuffer;    (void)ditherGenerator; /* unused parameter */    while( count-- )    {        unsigned char samp = (unsigned char)(128 + ((unsigned char) (*src * (127.0f))));        *dest = samp;        src += sourceStride;        dest += destinationStride;    }}/* -------------------------------------------------------------------------- */static void Float32_To_UInt8_Dither(    void *destinationBuffer, signed int destinationStride,    void *sourceBuffer, signed int sourceStride,    unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ){    float *src = (float*)sourceBuffer;    unsigned char *dest =  (unsigned char*)destinationBuffer;    (void)ditherGenerator; /* unused parameter */    while( count-- )    {        /* IMPLEMENT ME */        src += sourceStride;        dest += destinationStride;    }}/* -------------------------------------------------------------------------- */static void Float32_To_UInt8_Clip(    void *destinationBuffer, signed int destinationStride,    void *sourceBuffer, signed int sourceStride,    unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ){    float *src = (float*)sourceBuffer;    unsigned char *dest =  (unsigned char*)destinationBuffer;    (void)ditherGenerator; /* unused parameter */    while( count-- )    {        /* IMPLEMENT ME */        src += sourceStride;        dest += destinationStride;    }}/* -------------------------------------------------------------------------- */static void Float32_To_UInt8_DitherClip(    void *destinationBuffer, signed int destinationStride,    void *sourceBuffer, signed int sourceStride,    unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ){    float *src = (float*)sourceBuffer;    unsigned char *dest =  (unsigned char*)destinationBuffer;    (void)ditherGenerator; /* unused parameter */    while( count-- )    {        /* IMPLEMENT ME */        src += sourceStride;        dest += destinationStride;    }}/* -------------------------------------------------------------------------- */static void Int32_To_Float32(    void *destinationBuffer, signed int destinationStride,    void *sourceBuffer, signed int sourceStride,    unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ){    PaInt32 *src = (PaInt32*)sourceBuffer;    float *dest =  (float*)destinationBuffer;    (void)ditherGenerator; /* unused parameter */    while( count-- )    {        *dest = (float) ((double)*src * const_1_div_2147483648_);        src += sourceStride;        dest += destinationStride;    }}/* -------------------------------------------------------------------------- */static void Int32_To_Int24(    void *destinationBuffer, signed int destinationStride,    void *sourceBuffer, signed int sourceStride,    unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ){    PaInt32 *src    = (PaInt32*)sourceBuffer;    unsigned char *dest = (unsigned char*)destinationBuffer;    (void) ditherGenerator; /* unused parameter */    	while( count-- )    {		/* REVIEW */#if defined(PA_LITTLE_ENDIAN)        dest[0] = (unsigned char)(*src >> 8);        dest[1] = (unsigned char)(*src >> 16);        dest[2] = (unsigned char)(*src >> 24);#elif defined(PA_BIG_ENDIAN)        dest[0] = (unsigned char)(*src >> 24);        dest[1] = (unsigned char)(*src >> 16);        dest[2] = (unsigned char)(*src >> 8);#endif        src += sourceStride;        dest += destinationStride * 3;    }}/* -------------------------------------------------------------------------- */static void Int32_To_Int24_Dither(    void *destinationBuffer, signed int destinationStride,    void *sourceBuffer, signed int sourceStride,    unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ){    (void) destinationBuffer; /* unused parameters */    (void) destinationStride; /* unused parameters */    (void) sourceBuffer; /* unused parameters */    (void) sourceStride; /* unused parameters */    (void) count; /* unused parameters */    (void) ditherGenerator; /* unused parameters */    /* IMPLEMENT ME */}/* -------------------------------------------------------------------------- */static void Int32_To_Int16(    void *destinationBuffer, signed int destinationStride,    void *sourceBuffer, signed int sourceStride,    unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ){    PaInt32 *src = (PaInt32*)sourceBuffer;    PaInt16 *dest =  (PaInt16*)destinationBuffer;    (void)ditherGenerator; /* unused parameter */    while( count-- )    {        *dest = (PaInt16) ((*src) >> 16);        src += sourceStride;        dest += destinationStride;    }}/* -------------------------------------------------------------------------- */static void Int32_To_Int16_Dither(    void *destinationBuffer, signed int destinationStride,    void *sourceBuffer, signed int sourceStride,    unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ){    PaInt32 *src = (PaInt32*)sourceBuffer;    PaInt16 *dest =  (PaInt16*)destinationBuffer;    PaInt32 dither;    while( count-- )    {        /* REVIEW */        dither = PaUtil_Generate16BitTriangularDither( ditherGenerator );        *dest = (PaInt16) ((((*src)>>1) + dither) >> 15);        src += sourceStride;        dest += destinationStride;    }}/* -------------------------------------------------------------------------- */static void Int32_To_Int8(    void *destinationBuffer, signed int destinationStride,    void *sourceBuffer, signed int sourceStride,    unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ){    PaInt32 *src = (PaInt32*)sourceBuffer;    signed char *dest =  (signed char*)destinationBuffer;    (void)ditherGenerator; /* unused parameter */    while( count-- )    {        *dest = (signed char) ((*src) >> 24);        src += sourceStride;        dest += destinationStride;    }}/* -------------------------------------------------------------------------- */static void Int32_To_Int8_Dither(    void *destinationBuffer, signed int destinationStride,    void *sourceBuffer, signed int sourceStride,    unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ){    PaInt32 *src = (PaInt32*)sourceBuffer;    signed char *dest =  (signed char*)destinationBuffer;    PaInt32 dither;    while( count-- )    {        /* REVIEW */        dither = PaUtil_Generate16BitTriangularDither( ditherGenerator );        *dest = (signed char) ((((*src)>>1) + dither) >> 23);        src += sourceStride;        dest += destinationStride;    }}/* -------------------------------------------------------------------------- */static void Int32_To_UInt8(    void *destinationBuffer, signed int destinationStride,    void *sourceBuffer, signed int sourceStride,    unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ){    PaInt32 *src = (PaInt32*)sourceBuffer;    unsigned char *dest =  (unsigned char*)destinationBuffer;    (void)ditherGenerator; /* unused parameter */    while( count-- )    {		(*dest) = (unsigned char)(((*src) >> 24) + 128);         src += sourceStride;        dest += destinationStride;    }}/* -------------------------------------------------------------------------- */static void Int32_To_UInt8_Dither(    void *destinationBuffer, signed int destinationStride,    void *sourceBuffer, signed int sourceStride,    unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ){    PaInt32 *src = (PaInt32*)sourceBuffer;    unsigned char *dest =  (unsigned char*)destinationBuffer;    (void)ditherGenerator; /* unused parameter */    while( count-- )    {        /* IMPLEMENT ME */        src += sourceStride;        dest += destinationStride;    }}/* -------------------------------------------------------------------------- */static void Int24_To_Float32(    void *destinationBuffer, signed int destinationStride,    void *sourceBuffer, signed int sourceStride,    unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ){    unsigned char *src = (unsigned char*)sourceBuffer;    float *dest = (float*)destinationBuffer;    PaInt32 temp;    (void) ditherGenerator; /* unused parameter */        while( count-- )    {#if defined(PA_LITTLE_ENDIAN)        temp = (((long)src[0]) << 8);          temp = temp | (((long)src[1]) << 16);        temp = temp | (((long)src[2]) << 24);#elif defined(PA_BIG_ENDIAN)        temp = (((long)src[0]) << 24);        temp = temp | (((long)src[1]) << 16);        temp = temp | (((long)src[2]) << 8);#endif        *dest = (float) ((double)temp * const_1_div_2147483648_);        src += sourceStride * 3;        dest += destinationStride;    }}/* -------------------------------------------------------------------------- */static void Int24_To_Int32(    void *destinationBuffer, signed int destinationStride,    void *sourceBuffer, signed int sourceStride,    unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator ){    unsigned char *src  = (unsigned char*)sourceBuffer;    PaInt32 *dest = (PaInt32*)  destinationBuffer;    PaInt32 temp;    (void) ditherGenerator; /* unused parameter */        while( count-- )    {#if defined(PA_LITTLE_ENDIAN)        temp = (((long)src[0]) << 8);          temp = temp | (((long)src[1]) << 16);        temp = temp | (((long)src[2]) << 24);#elif defined(PA_BIG_ENDIAN)        temp = (((long)src[0]) << 24);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -