From 1387d56fce177562d2dcd4dd8a60e2c705fca801 Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 21 Feb 2013 22:32:55 +0000 Subject: [PATCH] Add carla_copy* calls and use them where useful --- source/backend/engine/CarlaEngine.cpp | 8 ++-- source/backend/engine/CarlaEngineJack.cpp | 2 +- source/backend/engine/CarlaEnginePlugin.cpp | 6 +-- source/backend/engine/CarlaEngineRtAudio.cpp | 8 ++-- source/backend/plugin/DssiPlugin.cpp | 6 +-- source/backend/plugin/FluidSynthPlugin.cpp | 2 +- source/backend/plugin/LadspaPlugin.cpp | 6 +-- source/backend/plugin/LinuxSamplerPlugin.cpp | 2 +- source/backend/plugin/NativePlugin.cpp | 6 +-- source/utils/CarlaLibUtils.hpp | 2 +- source/utils/CarlaString.hpp | 2 +- source/utils/CarlaUtils.hpp | 49 ++++++++++++++++++-- source/utils/RtList.hpp | 2 +- 13 files changed, 72 insertions(+), 29 deletions(-) diff --git a/source/backend/engine/CarlaEngine.cpp b/source/backend/engine/CarlaEngine.cpp index 56e9b497c..70b783111 100644 --- a/source/backend/engine/CarlaEngine.cpp +++ b/source/backend/engine/CarlaEngine.cpp @@ -1370,8 +1370,8 @@ void CarlaEngine::processRack(float* inBuf[2], float* outBuf[2], const uint32_t if (processed) { // initialize inputs (from previous outputs) - std::memcpy(inBuf[0], outBuf[0], sizeof(float)*frames); - std::memcpy(inBuf[1], outBuf[1], sizeof(float)*frames); + carla_copyFloat(inBuf[0], outBuf[0], frames); + carla_copyFloat(inBuf[1], outBuf[1], frames); std::memcpy(kData->rack.in, kData->rack.out, sizeof(EngineEvent)*RACK_EVENT_COUNT); // initialize outputs (zero) @@ -1432,8 +1432,8 @@ void CarlaEngine::processRack(float* inBuf[2], float* outBuf[2], const uint32_t // if no plugins in the rack, copy inputs over outputs if (! processed) { - std::memcpy(outBuf[0], inBuf[0], sizeof(float)*frames); - std::memcpy(outBuf[1], inBuf[1], sizeof(float)*frames); + carla_copyFloat(outBuf[0], inBuf[0], frames); + carla_copyFloat(outBuf[1], inBuf[1], frames); std::memcpy(kData->rack.out, kData->rack.in, sizeof(EngineEvent)*RACK_EVENT_COUNT); } } diff --git a/source/backend/engine/CarlaEngineJack.cpp b/source/backend/engine/CarlaEngineJack.cpp index 793f11dff..ebba65eba 100644 --- a/source/backend/engine/CarlaEngineJack.cpp +++ b/source/backend/engine/CarlaEngineJack.cpp @@ -340,7 +340,7 @@ public: return; uint8_t jdata[size]; - std::memcpy(jdata, data, sizeof(uint8_t)*size); + carla_copy(jdata, data, size); jdata[0] = data[0] + channel; diff --git a/source/backend/engine/CarlaEnginePlugin.cpp b/source/backend/engine/CarlaEnginePlugin.cpp index 3f152080f..c08bd7003 100644 --- a/source/backend/engine/CarlaEnginePlugin.cpp +++ b/source/backend/engine/CarlaEnginePlugin.cpp @@ -64,7 +64,7 @@ public: paramBuffers[paramBalance] = 63.5f; paramBuffers[paramPan] = 63.5f; - std::memcpy(prevParamBuffers, paramBuffers, sizeof(float)*paramCount); + carla_copyFloat(prevParamBuffers, paramBuffers, paramCount); // set-up engine fOptions.processMode = PROCESS_MODE_CONTINUOUS_RACK; @@ -400,7 +400,7 @@ protected: } #endif - std::memcpy(prevParamBuffers, paramBuffers, sizeof(float)*paramCount); + carla_copyFloat(prevParamBuffers, paramBuffers, paramCount); } void d_deactivate() @@ -443,7 +443,7 @@ protected: carlaEvent->value = paramBuffers[i]/127; } } - std::memcpy(prevParamBuffers, paramBuffers, sizeof(float)*paramCount); + carla_copyFloat(prevParamBuffers, paramBuffers, paramCount); // initialize midi input std::memset(rackMidiEventsIn, 0, sizeof(CarlaEngineMidiEvent)*CarlaEngine::MAX_MIDI_EVENTS); diff --git a/source/backend/engine/CarlaEngineRtAudio.cpp b/source/backend/engine/CarlaEngineRtAudio.cpp index b14d71685..c128763cd 100644 --- a/source/backend/engine/CarlaEngineRtAudio.cpp +++ b/source/backend/engine/CarlaEngineRtAudio.cpp @@ -298,8 +298,8 @@ protected: } else { - std::memcpy(fAudioInBuf1, insPtr, sizeof(float)*nframes); - std::memcpy(fAudioInBuf2, insPtr+nframes, sizeof(float)*nframes); + carla_copyFloat(fAudioInBuf1, insPtr, nframes); + carla_copyFloat(fAudioInBuf2, insPtr+nframes, nframes); } // initialize audio output @@ -417,8 +417,8 @@ protected: } else { - std::memcpy(outsPtr, fAudioOutBuf1, sizeof(float)*nframes); - std::memcpy(outsPtr+nframes, fAudioOutBuf2, sizeof(float)*nframes); + carla_copyFloat(outsPtr, fAudioOutBuf1, nframes); + carla_copyFloat(outsPtr+nframes, fAudioOutBuf2, nframes); } // output events diff --git a/source/backend/plugin/DssiPlugin.cpp b/source/backend/plugin/DssiPlugin.cpp index c5d172baa..a7f673ff3 100644 --- a/source/backend/plugin/DssiPlugin.cpp +++ b/source/backend/plugin/DssiPlugin.cpp @@ -1365,7 +1365,7 @@ public: if (doBalance) { if (i % 2 == 0) - std::memcpy(oldBufLeft, outBuffer[i], sizeof(float)*frames); + carla_copyFloat(oldBufLeft, outBuffer[i], frames); float balRangeL = (kData->postProc.balanceLeft + 1.0f)/2.0f; float balRangeR = (kData->postProc.balanceRight + 1.0f)/2.0f; @@ -1400,7 +1400,7 @@ public: if (kData->latency > 0 && kData->latency < frames) { for (i=0; i < kData->audioIn.count; i++) - std::memcpy(kData->latencyBuffers[i], inBuffer[i] + (frames - kData->latency), sizeof(float)*kData->latency); + carla_copyFloat(kData->latencyBuffers[i], inBuffer[i] + (frames - kData->latency), kData->latency); } #endif } // End of Post-processing @@ -1438,7 +1438,7 @@ public: void processSingle(float** const inBuffer, float** const outBuffer, const uint32_t frames, const uint32_t timeOffset, const uint32_t midiEventCount) { for (uint32_t i=0; i < kData->audioIn.count; i++) - std::memcpy(fAudioInBuffers[i], inBuffer[i]+timeOffset, sizeof(float)*frames); + carla_copyFloat(fAudioInBuffers[i], inBuffer[i]+timeOffset, frames); for (uint32_t i=0; i < kData->audioOut.count; i++) carla_zeroFloat(fAudioOutBuffers[i], frames); diff --git a/source/backend/plugin/FluidSynthPlugin.cpp b/source/backend/plugin/FluidSynthPlugin.cpp index ca27596c2..84da5218d 100644 --- a/source/backend/plugin/FluidSynthPlugin.cpp +++ b/source/backend/plugin/FluidSynthPlugin.cpp @@ -1219,7 +1219,7 @@ public: if (doBalance) { if (i % 2 == 0) - std::memcpy(oldBufLeft, outBuffer[i], sizeof(float)*frames); + carla_copyFloat(oldBufLeft, outBuffer[i], frames); float balRangeL = (kData->postProc.balanceLeft + 1.0f)/2.0f; float balRangeR = (kData->postProc.balanceRight + 1.0f)/2.0f; diff --git a/source/backend/plugin/LadspaPlugin.cpp b/source/backend/plugin/LadspaPlugin.cpp index d5738ede9..149502695 100644 --- a/source/backend/plugin/LadspaPlugin.cpp +++ b/source/backend/plugin/LadspaPlugin.cpp @@ -1036,7 +1036,7 @@ public: if (doBalance) { if (i % 2 == 0) - std::memcpy(oldBufLeft, outBuffer[i], sizeof(float)*frames); + carla_copyFloat(oldBufLeft, outBuffer[i], frames); float balRangeL = (kData->postProc.balanceLeft + 1.0f)/2.0f; float balRangeR = (kData->postProc.balanceRight + 1.0f)/2.0f; @@ -1071,7 +1071,7 @@ public: if (kData->latency > 0 && kData->latency < frames) { for (i=0; i < kData->audioIn.count; i++) - std::memcpy(kData->latencyBuffers[i], inBuffer[i] + (frames - kData->latency), sizeof(float)*kData->latency); + carla_copyFloat(kData->latencyBuffers[i], inBuffer[i] + (frames - kData->latency), kData->latency); } #endif } // End of Post-processing @@ -1109,7 +1109,7 @@ public: void processSingle(float** const inBuffer, float** const outBuffer, const uint32_t frames, const uint32_t timeOffset) { for (uint32_t i=0; i < kData->audioIn.count; i++) - std::memcpy(fAudioInBuffers[i], inBuffer[i]+timeOffset, sizeof(float)*frames); + carla_copyFloat(fAudioInBuffers[i], inBuffer[i]+timeOffset, frames); for (uint32_t i=0; i < kData->audioOut.count; i++) carla_zeroFloat(fAudioOutBuffers[i], frames); diff --git a/source/backend/plugin/LinuxSamplerPlugin.cpp b/source/backend/plugin/LinuxSamplerPlugin.cpp index 2025e77b0..dab00f6b3 100644 --- a/source/backend/plugin/LinuxSamplerPlugin.cpp +++ b/source/backend/plugin/LinuxSamplerPlugin.cpp @@ -764,7 +764,7 @@ public: if (do_balance) { if (i%2 == 0) - memcpy(&oldBufLeft, outBuffer[i], sizeof(float)*frames); + carla_copyFloat(oldBufLeft, outBuffer[i], frames); bal_rangeL = (x_balanceLeft+1.0)/2; bal_rangeR = (x_balanceRight+1.0)/2; diff --git a/source/backend/plugin/NativePlugin.cpp b/source/backend/plugin/NativePlugin.cpp index 7efe188ee..bd2c6b635 100644 --- a/source/backend/plugin/NativePlugin.cpp +++ b/source/backend/plugin/NativePlugin.cpp @@ -1377,7 +1377,7 @@ public: if (doBalance) { if (i % 2 == 0) - std::memcpy(oldBufLeft, outBuffer[i], sizeof(float)*frames); + carla_copyFloat(oldBufLeft, outBuffer[i], frames); float balRangeL = (kData->postProc.balanceLeft + 1.0f)/2.0f; float balRangeR = (kData->postProc.balanceRight + 1.0f)/2.0f; @@ -1465,7 +1465,7 @@ public: void processSingle(float** const inBuffer, float** const outBuffer, const uint32_t frames, const uint32_t timeOffset) { for (uint32_t i=0; i < kData->audioIn.count; i++) - std::memcpy(fAudioInBuffers[i], inBuffer[i]+timeOffset, sizeof(float)*frames); + carla_copyFloat(fAudioInBuffers[i], inBuffer[i]+timeOffset, frames); for (uint32_t i=0; i < kData->audioOut.count; i++) carla_zeroFloat(fAudioOutBuffers[i], frames); @@ -1576,7 +1576,7 @@ protected: return &fTimeInfo; } - bool handleWriteMidiEvent(const MidiEvent* const event) + bool handleWriteMidiEvent(const ::MidiEvent* const event) { CARLA_ASSERT(fEnabled); CARLA_ASSERT(fMidiOut.count > 0); diff --git a/source/utils/CarlaLibUtils.hpp b/source/utils/CarlaLibUtils.hpp index c8e3174a2..6ab491f46 100644 --- a/source/utils/CarlaLibUtils.hpp +++ b/source/utils/CarlaLibUtils.hpp @@ -77,7 +77,7 @@ const char* lib_error(const char* const filename) #ifdef CARLA_OS_WIN static char libError[2048]; - std::memset(libError, 0, sizeof(char)*2048); + carla_zeroMem(libError, sizeof(char)*2048); LPVOID winErrorString; DWORD winErrorCode = GetLastError(); diff --git a/source/utils/CarlaString.hpp b/source/utils/CarlaString.hpp index 1e93f5b35..7c4994fcd 100644 --- a/source/utils/CarlaString.hpp +++ b/source/utils/CarlaString.hpp @@ -313,7 +313,7 @@ public: if (unsigned int len = carla_base64_decode(buffer, binaryBuffer)) { uint8_t* const binaryBufferHeap = new uint8_t[len]; - std::memcpy(binaryBufferHeap, binaryBuffer, len); + carla_copy(binaryBufferHeap, binaryBuffer, len); *rawPtr = binaryBufferHeap; return len; diff --git a/source/utils/CarlaUtils.hpp b/source/utils/CarlaUtils.hpp index d2ece9de0..8b3390cc6 100644 --- a/source/utils/CarlaUtils.hpp +++ b/source/utils/CarlaUtils.hpp @@ -235,6 +235,36 @@ const T& carla_fixValue(const T& min, const T& max, const T& value) return value; } +template +static inline +void carla_copy(T* dataDst, T* dataSrc, const size_t size) +{ + CARLA_ASSERT(dataDst != nullptr); + CARLA_ASSERT(dataSrc != nullptr); + CARLA_ASSERT(size > 0); + + if (dataDst == nullptr || dataSrc == nullptr || size == 0) + return; + + for (size_t i=0; i < size; i++) + *dataDst++ = *dataSrc++; +} + +template +static inline +void carla_copy(T* dataDst, const T* dataSrc, const size_t size) +{ + CARLA_ASSERT(dataDst != nullptr); + CARLA_ASSERT(dataSrc != nullptr); + CARLA_ASSERT(size > 0); + + if (dataDst == nullptr || dataSrc == nullptr || size == 0) + return; + + for (size_t i=0; i < size; i++) + *dataDst++ = *dataSrc++; +} + template static inline void carla_fill(T* data, const size_t size, const T v) @@ -242,13 +272,25 @@ void carla_fill(T* data, const size_t size, const T v) CARLA_ASSERT(data != nullptr); CARLA_ASSERT(size > 0); - if (data == nullptr) + if (data == nullptr || size == 0) return; - for (unsigned int i=0; i < size; i++) + for (size_t i=0; i < size; i++) *data++ = v; } +static inline +void carla_copyDouble(double* dataDst, double* dataSrc, const size_t size) +{ + carla_copy(dataDst, dataSrc, size); +} + +static inline +void carla_copyFloat(float* dataDst, float* dataSrc, const size_t size) +{ + carla_copy(dataDst, dataSrc, size); +} + static inline void carla_zeroDouble(double* data, const size_t size) { @@ -268,8 +310,9 @@ static inline void carla_zeroMem(void* const memory, const size_t numBytes) { CARLA_ASSERT(memory != nullptr); + CARLA_ASSERT(numBytes > 0); - if (memory == nullptr) + if (memory == nullptr || numBytes == 0) return; std::memset(memory, 0, numBytes); diff --git a/source/utils/RtList.hpp b/source/utils/RtList.hpp index 9c5371639..116734205 100644 --- a/source/utils/RtList.hpp +++ b/source/utils/RtList.hpp @@ -268,7 +268,7 @@ private: if (reset) { reset = false; - std::memset(&value, 0, sizeof(T)); + carla_zeroMem(&value, sizeof(T)); } return value;