Browse Source

Add carla_copy* calls and use them where useful

tags/1.9.4
falkTX 12 years ago
parent
commit
1387d56fce
13 changed files with 72 additions and 29 deletions
  1. +4
    -4
      source/backend/engine/CarlaEngine.cpp
  2. +1
    -1
      source/backend/engine/CarlaEngineJack.cpp
  3. +3
    -3
      source/backend/engine/CarlaEnginePlugin.cpp
  4. +4
    -4
      source/backend/engine/CarlaEngineRtAudio.cpp
  5. +3
    -3
      source/backend/plugin/DssiPlugin.cpp
  6. +1
    -1
      source/backend/plugin/FluidSynthPlugin.cpp
  7. +3
    -3
      source/backend/plugin/LadspaPlugin.cpp
  8. +1
    -1
      source/backend/plugin/LinuxSamplerPlugin.cpp
  9. +3
    -3
      source/backend/plugin/NativePlugin.cpp
  10. +1
    -1
      source/utils/CarlaLibUtils.hpp
  11. +1
    -1
      source/utils/CarlaString.hpp
  12. +46
    -3
      source/utils/CarlaUtils.hpp
  13. +1
    -1
      source/utils/RtList.hpp

+ 4
- 4
source/backend/engine/CarlaEngine.cpp View File

@@ -1370,8 +1370,8 @@ void CarlaEngine::processRack(float* inBuf[2], float* outBuf[2], const uint32_t
if (processed) if (processed)
{ {
// initialize inputs (from previous outputs) // 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); std::memcpy(kData->rack.in, kData->rack.out, sizeof(EngineEvent)*RACK_EVENT_COUNT);


// initialize outputs (zero) // 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 no plugins in the rack, copy inputs over outputs
if (! processed) 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); std::memcpy(kData->rack.out, kData->rack.in, sizeof(EngineEvent)*RACK_EVENT_COUNT);
} }
} }


+ 1
- 1
source/backend/engine/CarlaEngineJack.cpp View File

@@ -340,7 +340,7 @@ public:
return; return;


uint8_t jdata[size]; uint8_t jdata[size];
std::memcpy(jdata, data, sizeof(uint8_t)*size);
carla_copy<uint8_t>(jdata, data, size);


jdata[0] = data[0] + channel; jdata[0] = data[0] + channel;




+ 3
- 3
source/backend/engine/CarlaEnginePlugin.cpp View File

@@ -64,7 +64,7 @@ public:
paramBuffers[paramBalance] = 63.5f; paramBuffers[paramBalance] = 63.5f;
paramBuffers[paramPan] = 63.5f; paramBuffers[paramPan] = 63.5f;


std::memcpy(prevParamBuffers, paramBuffers, sizeof(float)*paramCount);
carla_copyFloat(prevParamBuffers, paramBuffers, paramCount);


// set-up engine // set-up engine
fOptions.processMode = PROCESS_MODE_CONTINUOUS_RACK; fOptions.processMode = PROCESS_MODE_CONTINUOUS_RACK;
@@ -400,7 +400,7 @@ protected:
} }
#endif #endif


std::memcpy(prevParamBuffers, paramBuffers, sizeof(float)*paramCount);
carla_copyFloat(prevParamBuffers, paramBuffers, paramCount);
} }


void d_deactivate() void d_deactivate()
@@ -443,7 +443,7 @@ protected:
carlaEvent->value = paramBuffers[i]/127; carlaEvent->value = paramBuffers[i]/127;
} }
} }
std::memcpy(prevParamBuffers, paramBuffers, sizeof(float)*paramCount);
carla_copyFloat(prevParamBuffers, paramBuffers, paramCount);


// initialize midi input // initialize midi input
std::memset(rackMidiEventsIn, 0, sizeof(CarlaEngineMidiEvent)*CarlaEngine::MAX_MIDI_EVENTS); std::memset(rackMidiEventsIn, 0, sizeof(CarlaEngineMidiEvent)*CarlaEngine::MAX_MIDI_EVENTS);


+ 4
- 4
source/backend/engine/CarlaEngineRtAudio.cpp View File

@@ -298,8 +298,8 @@ protected:
} }
else 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 // initialize audio output
@@ -417,8 +417,8 @@ protected:
} }
else 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 // output events


+ 3
- 3
source/backend/plugin/DssiPlugin.cpp View File

@@ -1365,7 +1365,7 @@ public:
if (doBalance) if (doBalance)
{ {
if (i % 2 == 0) 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 balRangeL = (kData->postProc.balanceLeft + 1.0f)/2.0f;
float balRangeR = (kData->postProc.balanceRight + 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) if (kData->latency > 0 && kData->latency < frames)
{ {
for (i=0; i < kData->audioIn.count; i++) 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 #endif
} // End of Post-processing } // 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) 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++) 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++) for (uint32_t i=0; i < kData->audioOut.count; i++)
carla_zeroFloat(fAudioOutBuffers[i], frames); carla_zeroFloat(fAudioOutBuffers[i], frames);




+ 1
- 1
source/backend/plugin/FluidSynthPlugin.cpp View File

@@ -1219,7 +1219,7 @@ public:
if (doBalance) if (doBalance)
{ {
if (i % 2 == 0) 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 balRangeL = (kData->postProc.balanceLeft + 1.0f)/2.0f;
float balRangeR = (kData->postProc.balanceRight + 1.0f)/2.0f; float balRangeR = (kData->postProc.balanceRight + 1.0f)/2.0f;


+ 3
- 3
source/backend/plugin/LadspaPlugin.cpp View File

@@ -1036,7 +1036,7 @@ public:
if (doBalance) if (doBalance)
{ {
if (i % 2 == 0) 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 balRangeL = (kData->postProc.balanceLeft + 1.0f)/2.0f;
float balRangeR = (kData->postProc.balanceRight + 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) if (kData->latency > 0 && kData->latency < frames)
{ {
for (i=0; i < kData->audioIn.count; i++) 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 #endif
} // End of Post-processing } // 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) 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++) 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++) for (uint32_t i=0; i < kData->audioOut.count; i++)
carla_zeroFloat(fAudioOutBuffers[i], frames); carla_zeroFloat(fAudioOutBuffers[i], frames);




+ 1
- 1
source/backend/plugin/LinuxSamplerPlugin.cpp View File

@@ -764,7 +764,7 @@ public:
if (do_balance) if (do_balance)
{ {
if (i%2 == 0) 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_rangeL = (x_balanceLeft+1.0)/2;
bal_rangeR = (x_balanceRight+1.0)/2; bal_rangeR = (x_balanceRight+1.0)/2;


+ 3
- 3
source/backend/plugin/NativePlugin.cpp View File

@@ -1377,7 +1377,7 @@ public:
if (doBalance) if (doBalance)
{ {
if (i % 2 == 0) 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 balRangeL = (kData->postProc.balanceLeft + 1.0f)/2.0f;
float balRangeR = (kData->postProc.balanceRight + 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) 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++) 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++) for (uint32_t i=0; i < kData->audioOut.count; i++)
carla_zeroFloat(fAudioOutBuffers[i], frames); carla_zeroFloat(fAudioOutBuffers[i], frames);


@@ -1576,7 +1576,7 @@ protected:
return &fTimeInfo; return &fTimeInfo;
} }


bool handleWriteMidiEvent(const MidiEvent* const event)
bool handleWriteMidiEvent(const ::MidiEvent* const event)
{ {
CARLA_ASSERT(fEnabled); CARLA_ASSERT(fEnabled);
CARLA_ASSERT(fMidiOut.count > 0); CARLA_ASSERT(fMidiOut.count > 0);


+ 1
- 1
source/utils/CarlaLibUtils.hpp View File

@@ -77,7 +77,7 @@ const char* lib_error(const char* const filename)


#ifdef CARLA_OS_WIN #ifdef CARLA_OS_WIN
static char libError[2048]; static char libError[2048];
std::memset(libError, 0, sizeof(char)*2048);
carla_zeroMem(libError, sizeof(char)*2048);


LPVOID winErrorString; LPVOID winErrorString;
DWORD winErrorCode = GetLastError(); DWORD winErrorCode = GetLastError();


+ 1
- 1
source/utils/CarlaString.hpp View File

@@ -313,7 +313,7 @@ public:
if (unsigned int len = carla_base64_decode(buffer, binaryBuffer)) if (unsigned int len = carla_base64_decode(buffer, binaryBuffer))
{ {
uint8_t* const binaryBufferHeap = new uint8_t[len]; uint8_t* const binaryBufferHeap = new uint8_t[len];
std::memcpy(binaryBufferHeap, binaryBuffer, len);
carla_copy<uint8_t>(binaryBufferHeap, binaryBuffer, len);


*rawPtr = binaryBufferHeap; *rawPtr = binaryBufferHeap;
return len; return len;


+ 46
- 3
source/utils/CarlaUtils.hpp View File

@@ -235,6 +235,36 @@ const T& carla_fixValue(const T& min, const T& max, const T& value)
return value; return value;
} }


template<typename T>
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<typename T>
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<typename T> template<typename T>
static inline static inline
void carla_fill(T* data, const size_t size, const T v) 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(data != nullptr);
CARLA_ASSERT(size > 0); CARLA_ASSERT(size > 0);


if (data == nullptr)
if (data == nullptr || size == 0)
return; return;


for (unsigned int i=0; i < size; i++)
for (size_t i=0; i < size; i++)
*data++ = v; *data++ = v;
} }


static inline
void carla_copyDouble(double* dataDst, double* dataSrc, const size_t size)
{
carla_copy<double>(dataDst, dataSrc, size);
}

static inline
void carla_copyFloat(float* dataDst, float* dataSrc, const size_t size)
{
carla_copy<float>(dataDst, dataSrc, size);
}

static inline static inline
void carla_zeroDouble(double* data, const size_t size) 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) void carla_zeroMem(void* const memory, const size_t numBytes)
{ {
CARLA_ASSERT(memory != nullptr); CARLA_ASSERT(memory != nullptr);
CARLA_ASSERT(numBytes > 0);


if (memory == nullptr)
if (memory == nullptr || numBytes == 0)
return; return;


std::memset(memory, 0, numBytes); std::memset(memory, 0, numBytes);


+ 1
- 1
source/utils/RtList.hpp View File

@@ -268,7 +268,7 @@ private:
if (reset) if (reset)
{ {
reset = false; reset = false;
std::memset(&value, 0, sizeof(T));
carla_zeroMem(&value, sizeof(T));
} }


return value; return value;


Loading…
Cancel
Save