| @@ -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,); | ||||