diff --git a/common/JackFormatConverter.cpp b/common/JackFormatConverter.cpp index 19685fb2..b7b9683b 100644 --- a/common/JackFormatConverter.cpp +++ b/common/JackFormatConverter.cpp @@ -25,9 +25,9 @@ #include #include "JackCompilerDeps.h" #include "JackError.h" -#include "memops.h" #define SAMPLE_32BIT_SCALING 0x7FFFFFFF +#define SAMPLE_16BIT_SCALING 0x7FFF #define NORMALIZED_FLOAT_MIN -1.0f #define NORMALIZED_FLOAT_MAX 1.0f @@ -64,7 +64,7 @@ class IntegerJackPortConverter : public BaseJackPortConverter { typedef void (*WriteCopyFunction) (char *dst, jack_default_audio_sample_t *src, unsigned long src_bytes, unsigned long dst_skip_bytes, - dither_state_t *state); + void*); private: int32_t buffer[BUFFER_SIZE_MAX + 8]; @@ -132,6 +132,37 @@ static void sample_move_d32_sS (char *dst, jack_default_audio_sample_t *src, } } +static void sample_move_dS_s16 (jack_default_audio_sample_t *dst, char *src, + unsigned long nsamples, unsigned long src_skip) +{ + const jack_default_audio_sample_t scaling = 1.0 / SAMPLE_16BIT_SCALING; + + while (nsamples--) { + const int16_t src16 = *((int16_t*)src); + *dst = src16 * scaling; + dst++; + src += src_skip; + } +} + +static void sample_move_d16_sS (char *dst, jack_default_audio_sample_t *src, + unsigned long nsamples, unsigned long dst_skip, + void*) +{ + while (nsamples--) { + int16_t* const dst16 = (int16_t*) dst; + if (*src <= NORMALIZED_FLOAT_MIN) { + *dst16 = -SAMPLE_16BIT_SCALING; + } else if (*src >= NORMALIZED_FLOAT_MAX) { + *dst16 = SAMPLE_16BIT_SCALING; + } else { + *dst16 = lrintf(*src * SAMPLE_16BIT_SCALING); + } + dst += dst_skip; + src++; + } +} + LIB_EXPORT IJackPortConverter* jack_port_create_converter(jack_port_t* port, const std::type_info& dst_type, const bool init_output_silence) { if(dst_type == (typeid(jack_default_audio_sample_t))) { diff --git a/common/wscript b/common/wscript index ecf99563..a835323f 100755 --- a/common/wscript +++ b/common/wscript @@ -69,7 +69,6 @@ def build(bld): 'JackTools.cpp', 'JackMessageBuffer.cpp', 'JackEngineProfiling.cpp', - 'memops.c', 'JackFormatConverter.cpp' ]