@@ -28,11 +28,16 @@ | |||||
#include "CarlaEngineUtils.hpp" | #include "CarlaEngineUtils.hpp" | ||||
#include "CarlaLadspaUtils.hpp" | #include "CarlaLadspaUtils.hpp" | ||||
#include "CarlaDssiUtils.hpp" | |||||
// used in dssi utils | |||||
#include "juce_core.h" | |||||
#include <QtCore/QDir> | |||||
#include <QtCore/QFileInfo> | |||||
#include <QtCore/QStringList> | |||||
// #include "CarlaBridgeUtils.hpp" | // #include "CarlaBridgeUtils.hpp" | ||||
// #include "CarlaDssiUtils.hpp" | |||||
// #include "CarlaJuceUtils.hpp" | // #include "CarlaJuceUtils.hpp" | ||||
// #include "CarlaLadspaUtils.hpp" | |||||
// #include "CarlaLibUtils.hpp" | // #include "CarlaLibUtils.hpp" | ||||
// #include "CarlaLv2Utils.hpp" | // #include "CarlaLv2Utils.hpp" | ||||
// #include "CarlaOscUtils.hpp" | // #include "CarlaOscUtils.hpp" | ||||
@@ -488,6 +493,58 @@ static void test_CarlaEngineUtils() noexcept | |||||
carla_stdout(EngineControlEventType2Str(kEngineControlEventTypeNull)); | carla_stdout(EngineControlEventType2Str(kEngineControlEventTypeNull)); | ||||
} | } | ||||
// ----------------------------------------------------------------------- | |||||
static void test_CarlaLadspaUtils() noexcept | |||||
{ | |||||
LADSPA_Descriptor desc; | |||||
carla_zeroStruct(desc); | |||||
LADSPA_RDF_Descriptor rdfDesc; | |||||
delete ladspa_rdf_dup(&rdfDesc); | |||||
is_ladspa_port_good(0x0, 0x0); | |||||
is_ladspa_rdf_descriptor_valid(&rdfDesc, &desc); | |||||
get_default_ladspa_port_value(0x0, -1.0f, 1.0f); | |||||
} | |||||
// ----------------------------------------------------------------------- | |||||
namespace dssi_juce { | |||||
const char* find_dssi_ui(const char* const filename, const char* const label) noexcept; | |||||
#define HAVE_JUCE | |||||
#include "CarlaDssiUtils.cpp" | |||||
} | |||||
namespace dssi_qt { | |||||
const char* find_dssi_ui(const char* const filename, const char* const label) noexcept; | |||||
#undef HAVE_JUCE | |||||
#include "CarlaDssiUtils.cpp" | |||||
} | |||||
static void test_CarlaDssiUtils() noexcept | |||||
{ | |||||
const char* const ui_juce = dssi_juce::find_dssi_ui("/usr/lib/dssi/trivial_sampler.so", "aa"); | |||||
const char* const ui_qt = dssi_qt::find_dssi_ui("/usr/lib/dssi/trivial_sampler.so", "aa"); | |||||
CARLA_SAFE_ASSERT(ui_juce != nullptr); | |||||
CARLA_SAFE_ASSERT(ui_qt != nullptr); | |||||
if (ui_juce != nullptr) | |||||
{ | |||||
carla_stdout("%s", ui_juce); | |||||
assert(std::strcmp(ui_juce, "/usr/lib/dssi/trivial_sampler/trivial_sampler_qt") == 0); | |||||
delete[] ui_juce; | |||||
} | |||||
if (ui_qt != nullptr) | |||||
{ | |||||
carla_stdout("%s", ui_qt); | |||||
assert(std::strcmp(ui_qt, "/usr/lib/dssi/trivial_sampler/trivial_sampler_qt") == 0); | |||||
delete[] ui_qt; | |||||
} | |||||
} | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
// main | // main | ||||
@@ -499,6 +556,9 @@ int main() | |||||
test_CarlaBackendUtils(); | test_CarlaBackendUtils(); | ||||
test_CarlaEngineUtils(); | test_CarlaEngineUtils(); | ||||
test_CarlaLadspaUtils(); | |||||
test_CarlaDssiUtils(); | |||||
return 0; | return 0; | ||||
} | } | ||||
@@ -68,7 +68,9 @@ CarlaString: CarlaString.cpp ../utils/CarlaString.hpp | |||||
valgrind --leak-check=full ./$@ | valgrind --leak-check=full ./$@ | ||||
CarlaUtils: CarlaUtils.cpp ../utils/*.hpp | CarlaUtils: CarlaUtils.cpp ../utils/*.hpp | ||||
$(CXX) $< $(PEDANTIC_CXX_FLAGS) -o $@ | |||||
$(CXX) $< $(PEDANTIC_CXX_FLAGS) -o $@ \ | |||||
../modules/juce_core.a -ldl -lpthread -lrt \ | |||||
$(shell pkg-config --cflags --libs QtCore) -isystem /usr/include/qt4 | |||||
valgrind --leak-check=full ./$@ | valgrind --leak-check=full ./$@ | ||||
RDF: RDF.cpp ../modules/ladspa_rdf.hpp ../modules/lv2_rdf.hpp | RDF: RDF.cpp ../modules/ladspa_rdf.hpp ../modules/lv2_rdf.hpp | ||||
@@ -17,9 +17,13 @@ | |||||
#include "CarlaDssiUtils.hpp" | #include "CarlaDssiUtils.hpp" | ||||
#include <QtCore/QDir> | |||||
#include <QtCore/QFileInfo> | |||||
#include <QtCore/QStringList> | |||||
#ifdef HAVE_JUCE | |||||
# include "juce_core.h" | |||||
#else | |||||
# include <QtCore/QDir> | |||||
# include <QtCore/QFileInfo> | |||||
# include <QtCore/QStringList> | |||||
#endif | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
@@ -30,6 +34,37 @@ const char* find_dssi_ui(const char* const filename, const char* const label) no | |||||
carla_debug("find_dssi_ui(\"%s\", \"%s\")", filename, label); | carla_debug("find_dssi_ui(\"%s\", \"%s\")", filename, label); | ||||
try { | try { | ||||
#ifdef HAVE_JUCE | |||||
using namespace juce; | |||||
String guiFilename; | |||||
String pluginDir(String(filename).upToLastOccurrenceOf(".", false, false)); | |||||
String checkLabel(label); | |||||
String checkSName(File(pluginDir).getFileName()); | |||||
if (! checkLabel.endsWith("_")) checkLabel += "_"; | |||||
if (! checkSName.endsWith("_")) checkSName += "_"; | |||||
Array<File> results; | |||||
for (int i=0, count=File(pluginDir).findChildFiles(results, File::findFiles|File::ignoreHiddenFiles, false); i < count; ++i) | |||||
{ | |||||
const File& gui(results[i]); | |||||
const String& guiShortName(gui.getFileName()); | |||||
if (guiShortName.startsWith(checkLabel) || guiShortName.startsWith(checkSName)) | |||||
{ | |||||
guiFilename = gui.getFullPathName(); | |||||
break; | |||||
} | |||||
} | |||||
if (guiFilename.isEmpty()) | |||||
return nullptr; | |||||
return carla_strdup(guiFilename.toRawUTF8()); | |||||
#else | |||||
QString guiFilename; | QString guiFilename; | ||||
QString pluginDir(filename); | QString pluginDir(filename); | ||||
pluginDir.resize(pluginDir.lastIndexOf(".")); | pluginDir.resize(pluginDir.lastIndexOf(".")); | ||||
@@ -56,7 +91,7 @@ const char* find_dssi_ui(const char* const filename, const char* const label) no | |||||
return nullptr; | return nullptr; | ||||
return carla_strdup(guiFilename.toUtf8().constData()); | return carla_strdup(guiFilename.toUtf8().constData()); | ||||
#endif | |||||
} CARLA_SAFE_EXCEPTION_RETURN("find_dssi_ui", nullptr); | } CARLA_SAFE_EXCEPTION_RETURN("find_dssi_ui", nullptr); | ||||
} | } | ||||
@@ -196,8 +196,8 @@ LADSPA_Data get_default_ladspa_port_value(const LADSPA_PortRangeHintDescriptor h | |||||
// no default value | // no default value | ||||
if (min < 0.0f && max > 0.0f) | if (min < 0.0f && max > 0.0f) | ||||
return 0.0f; | return 0.0f; | ||||
else | |||||
return min; | |||||
return min; | |||||
} | } | ||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
@@ -121,13 +121,13 @@ uint32_t carla_nextPowerOf2(uint32_t size) noexcept | |||||
* Add float array values to another float array. | * Add float array values to another float array. | ||||
*/ | */ | ||||
static inline | static inline | ||||
void carla_addFloat(float* dataDst, const float* dataSrc, const size_t numSamples) noexcept | |||||
void carla_addFloat(float* dataDst, const float* dataSrc, const std::size_t numSamples) noexcept | |||||
{ | { | ||||
CARLA_SAFE_ASSERT_RETURN(dataDst != nullptr,); | CARLA_SAFE_ASSERT_RETURN(dataDst != nullptr,); | ||||
CARLA_SAFE_ASSERT_RETURN(dataSrc != nullptr,); | CARLA_SAFE_ASSERT_RETURN(dataSrc != nullptr,); | ||||
CARLA_SAFE_ASSERT_RETURN(numSamples > 0,); | CARLA_SAFE_ASSERT_RETURN(numSamples > 0,); | ||||
for (size_t i=0; i < numSamples; ++i) | |||||
for (std::size_t i=0; i < numSamples; ++i) | |||||
*dataDst++ += *dataSrc++; | *dataDst++ += *dataSrc++; | ||||
} | } | ||||
@@ -135,7 +135,7 @@ void carla_addFloat(float* dataDst, const float* dataSrc, const size_t numSample | |||||
* Copy float array values to another float array. | * Copy float array values to another float array. | ||||
*/ | */ | ||||
static inline | static inline | ||||
void carla_copyFloat(float* const dataDst, const float* const dataSrc, const size_t numSamples) noexcept | |||||
void carla_copyFloat(float* const dataDst, const float* const dataSrc, const std::size_t numSamples) noexcept | |||||
{ | { | ||||
CARLA_SAFE_ASSERT_RETURN(dataDst != nullptr,); | CARLA_SAFE_ASSERT_RETURN(dataDst != nullptr,); | ||||
CARLA_SAFE_ASSERT_RETURN(dataSrc != nullptr,); | CARLA_SAFE_ASSERT_RETURN(dataSrc != nullptr,); | ||||
@@ -148,7 +148,7 @@ void carla_copyFloat(float* const dataDst, const float* const dataSrc, const siz | |||||
* Clear a float array. | * Clear a float array. | ||||
*/ | */ | ||||
static inline | static inline | ||||
void carla_zeroFloat(float* const data, const size_t numSamples) noexcept | |||||
void carla_zeroFloat(float* const data, const std::size_t numSamples) noexcept | |||||
{ | { | ||||
CARLA_SAFE_ASSERT_RETURN(data != nullptr,); | CARLA_SAFE_ASSERT_RETURN(data != nullptr,); | ||||
CARLA_SAFE_ASSERT_RETURN(numSamples > 0,); | CARLA_SAFE_ASSERT_RETURN(numSamples > 0,); | ||||
@@ -259,8 +259,8 @@ const char* carla_strdup(const char* const strBuf) | |||||
{ | { | ||||
CARLA_SAFE_ASSERT(strBuf != nullptr); | CARLA_SAFE_ASSERT(strBuf != nullptr); | ||||
const size_t bufferLen = (strBuf != nullptr) ? std::strlen(strBuf) : 0; | |||||
char* const buffer = new char[bufferLen+1]; | |||||
const std::size_t bufferLen = (strBuf != nullptr) ? std::strlen(strBuf) : 0; | |||||
char* const buffer = new char[bufferLen+1]; | |||||
if (strBuf != nullptr && bufferLen > 0) | if (strBuf != nullptr && bufferLen > 0) | ||||
std::strncpy(buffer, strBuf, bufferLen); | std::strncpy(buffer, strBuf, bufferLen); | ||||
@@ -292,13 +292,13 @@ const char* carla_strdup_free(char* const strBuf) | |||||
*/ | */ | ||||
template<typename T> | template<typename T> | ||||
static inline | static inline | ||||
void carla_add(T* dataDst, const T* dataSrc, const size_t size) noexcept | |||||
void carla_add(T* dataDst, const T* dataSrc, const std::size_t size) noexcept | |||||
{ | { | ||||
CARLA_SAFE_ASSERT_RETURN(dataDst != nullptr,); | CARLA_SAFE_ASSERT_RETURN(dataDst != nullptr,); | ||||
CARLA_SAFE_ASSERT_RETURN(dataSrc != nullptr,); | CARLA_SAFE_ASSERT_RETURN(dataSrc != nullptr,); | ||||
CARLA_SAFE_ASSERT_RETURN(size > 0,); | CARLA_SAFE_ASSERT_RETURN(size > 0,); | ||||
for (size_t i=0; i < size; ++i) | |||||
for (std::size_t i=0; i < size; ++i) | |||||
*dataDst++ += *dataSrc++; | *dataDst++ += *dataSrc++; | ||||
} | } | ||||
@@ -307,7 +307,7 @@ void carla_add(T* dataDst, const T* dataSrc, const size_t size) noexcept | |||||
*/ | */ | ||||
template<typename T> | template<typename T> | ||||
static inline | static inline | ||||
void carla_copy(T* const dataDst, const T* const dataSrc, const size_t size) noexcept | |||||
void carla_copy(T* const dataDst, const T* const dataSrc, const std::size_t size) noexcept | |||||
{ | { | ||||
CARLA_SAFE_ASSERT_RETURN(dataDst != nullptr,); | CARLA_SAFE_ASSERT_RETURN(dataDst != nullptr,); | ||||
CARLA_SAFE_ASSERT_RETURN(dataSrc != nullptr,); | CARLA_SAFE_ASSERT_RETURN(dataSrc != nullptr,); | ||||
@@ -321,7 +321,7 @@ void carla_copy(T* const dataDst, const T* const dataSrc, const size_t size) noe | |||||
*/ | */ | ||||
template<typename T> | template<typename T> | ||||
static inline | static inline | ||||
void carla_fill(T* data, const T v, const size_t size) noexcept | |||||
void carla_fill(T* data, const T v, const std::size_t size) noexcept | |||||
{ | { | ||||
CARLA_SAFE_ASSERT_RETURN(data != nullptr,); | CARLA_SAFE_ASSERT_RETURN(data != nullptr,); | ||||
CARLA_SAFE_ASSERT_RETURN(size > 0,); | CARLA_SAFE_ASSERT_RETURN(size > 0,); | ||||
@@ -332,7 +332,7 @@ void carla_fill(T* data, const T v, const size_t size) noexcept | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
for (size_t i=0; i < size; ++i) | |||||
for (std::size_t i=0; i < size; ++i) | |||||
*data++ = v; | *data++ = v; | ||||
} | } | ||||
} | } | ||||
@@ -341,7 +341,7 @@ void carla_fill(T* data, const T v, const size_t size) noexcept | |||||
* Clear a byte array. | * Clear a byte array. | ||||
*/ | */ | ||||
static inline | static inline | ||||
void carla_zeroBytes(void* const memory, const size_t numBytes) noexcept | |||||
void carla_zeroBytes(void* const memory, const std::size_t numBytes) noexcept | |||||
{ | { | ||||
CARLA_SAFE_ASSERT_RETURN(memory != nullptr,); | CARLA_SAFE_ASSERT_RETURN(memory != nullptr,); | ||||
CARLA_SAFE_ASSERT_RETURN(numBytes > 0,); | CARLA_SAFE_ASSERT_RETURN(numBytes > 0,); | ||||
@@ -353,7 +353,7 @@ void carla_zeroBytes(void* const memory, const size_t numBytes) noexcept | |||||
* Clear a char array. | * Clear a char array. | ||||
*/ | */ | ||||
static inline | static inline | ||||
void carla_zeroChar(char* const data, const size_t numChars) noexcept | |||||
void carla_zeroChar(char* const data, const std::size_t numChars) noexcept | |||||
{ | { | ||||
CARLA_SAFE_ASSERT_RETURN(data != nullptr,); | CARLA_SAFE_ASSERT_RETURN(data != nullptr,); | ||||
CARLA_SAFE_ASSERT_RETURN(numChars > 0,); | CARLA_SAFE_ASSERT_RETURN(numChars > 0,); | ||||
@@ -376,7 +376,7 @@ void carla_zeroStruct(T& structure) noexcept | |||||
*/ | */ | ||||
template <typename T> | template <typename T> | ||||
static inline | static inline | ||||
void carla_zeroStruct(T* const structure, const size_t count) noexcept | |||||
void carla_zeroStruct(T* const structure, const std::size_t count) noexcept | |||||
{ | { | ||||
CARLA_SAFE_ASSERT_RETURN(structure != nullptr,); | CARLA_SAFE_ASSERT_RETURN(structure != nullptr,); | ||||
CARLA_SAFE_ASSERT_RETURN(count > 0,); | CARLA_SAFE_ASSERT_RETURN(count > 0,); | ||||
@@ -399,7 +399,7 @@ void carla_copyStruct(T& struct1, const T& struct2) noexcept | |||||
*/ | */ | ||||
template <typename T> | template <typename T> | ||||
static inline | static inline | ||||
void carla_copyStruct(T* const struct1, const T* const struct2, const size_t count) noexcept | |||||
void carla_copyStruct(T* const struct1, const T* const struct2, const std::size_t count) noexcept | |||||
{ | { | ||||
CARLA_SAFE_ASSERT_RETURN(struct1 != nullptr,); | CARLA_SAFE_ASSERT_RETURN(struct1 != nullptr,); | ||||
CARLA_SAFE_ASSERT_RETURN(struct2 != nullptr,); | CARLA_SAFE_ASSERT_RETURN(struct2 != nullptr,); | ||||