Signed-off-by: falkTX <falktx@gmail.com>tags/v2.1-alpha1-winvst
@@ -63,10 +63,8 @@ ALL_LIBS += $(MODULEDIR)/juce_audio_processors.a | |||
ALL_LIBS += $(MODULEDIR)/juce_core.a | |||
ALL_LIBS += $(MODULEDIR)/juce_data_structures.a | |||
ALL_LIBS += $(MODULEDIR)/juce_events.a | |||
ifeq ($(MACOS_OR_WIN32),true) | |||
ALL_LIBS += $(MODULEDIR)/juce_graphics.a | |||
ALL_LIBS += $(MODULEDIR)/juce_gui_basics.a | |||
endif | |||
ifeq ($(MACOS),true) | |||
ALL_LIBS += $(MODULEDIR)/juce_gui_extra.a | |||
endif | |||
@@ -452,8 +452,11 @@ LILV_LIBS = -ldl -lm -lrt | |||
RTMEMPOOL_LIBS = -lpthread -lrt | |||
WATER_LIBS = -ldl -lpthread -lrt | |||
ifeq ($(USING_JUCE),true) | |||
JUCE_CORE_LIBS = -ldl -lpthread -lrt | |||
JUCE_AUDIO_DEVICES_LIBS = $(shell pkg-config $(PKG_CONFIG_FLAGS) --libs alsa) | |||
JUCE_CORE_LIBS = -ldl -lpthread -lrt | |||
JUCE_EVENTS_LIBS = $(shell pkg-config $(PKG_CONFIG_FLAGS) --libs x11) | |||
JUCE_GRAPHICS_LIBS = $(shell pkg-config $(PKG_CONFIG_FLAGS) --libs freetype2) | |||
JUCE_GUI_BASICS_LIBS = $(shell pkg-config $(PKG_CONFIG_FLAGS) --libs x11 xext) | |||
else | |||
ifeq ($(HAVE_ALSA),true) | |||
RTAUDIO_FLAGS += $(shell pkg-config $(PKG_CONFIG_FLAGS) --cflags alsa) -D__LINUX_ALSA__ | |||
@@ -44,10 +44,8 @@ STANDALONE_LIBS += $(MODULEDIR)/juce_audio_processors.a | |||
STANDALONE_LIBS += $(MODULEDIR)/juce_core.a | |||
STANDALONE_LIBS += $(MODULEDIR)/juce_data_structures.a | |||
STANDALONE_LIBS += $(MODULEDIR)/juce_events.a | |||
ifeq ($(MACOS_OR_WIN32),true) | |||
STANDALONE_LIBS += $(MODULEDIR)/juce_graphics.a | |||
STANDALONE_LIBS += $(MODULEDIR)/juce_gui_basics.a | |||
endif | |||
ifeq ($(MACOS),true) | |||
STANDALONE_LIBS += $(MODULEDIR)/juce_gui_extra.a | |||
endif | |||
@@ -76,10 +74,8 @@ STANDALONE_LINK_FLAGS += $(JUCE_AUDIO_PROCESSORS_LIBS) | |||
STANDALONE_LINK_FLAGS += $(JUCE_CORE_LIBS) | |||
STANDALONE_LINK_FLAGS += $(JUCE_DATA_STRUCTURES_LIBS) | |||
STANDALONE_LINK_FLAGS += $(JUCE_EVENTS_LIBS) | |||
ifeq ($(MACOS_OR_WIN32),true) | |||
STANDALONE_LINK_FLAGS += $(JUCE_GRAPHICS_LIBS) | |||
STANDALONE_LINK_FLAGS += $(JUCE_GUI_BASICS_LIBS) | |||
endif | |||
ifeq ($(MACOS),true) | |||
STANDALONE_LINK_FLAGS += $(JUCE_GUI_EXTRA_LIBS) | |||
endif | |||
@@ -53,10 +53,8 @@ public: | |||
fAudioBuffer(), | |||
fMidiBuffer(), | |||
fPosInfo(), | |||
fChunk() | |||
#if defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) | |||
, fWindow() | |||
#endif | |||
fChunk(), | |||
fWindow() | |||
{ | |||
carla_debug("CarlaPluginJuce::CarlaPluginJuce(%p, %i)", engine, id); | |||
@@ -234,7 +232,6 @@ public: | |||
// ------------------------------------------------------------------- | |||
// Set data (internal stuff) | |||
#if defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) | |||
void setName(const char* const newName) override | |||
{ | |||
CarlaPlugin::setName(newName); | |||
@@ -246,7 +243,6 @@ public: | |||
fWindow->setName(uiName); | |||
} | |||
} | |||
#endif | |||
// ------------------------------------------------------------------- | |||
// Set data (plugin-specific stuff) | |||
@@ -269,10 +265,30 @@ public: | |||
CARLA_SAFE_ASSERT_RETURN(data != nullptr,); | |||
CARLA_SAFE_ASSERT_RETURN(dataSize > 0,); | |||
if (isJuceSaveFormat(data, dataSize)) | |||
{ | |||
const ScopedSingleProcessLocker spl(this, true); | |||
fInstance->setStateInformation(data, static_cast<int>(dataSize)); | |||
} | |||
else | |||
{ | |||
carla_stdout("NOTE: Loading plugin state in Carla compatibiity mode"); | |||
uint8_t* const dataCompat = new uint8_t[dataSize + 160]; | |||
std::memset(dataCompat, 0, 160); | |||
std::memcpy(dataCompat+160, data, dataSize); | |||
int32_t* const set = (int32_t*)dataCompat; | |||
dataCompat[39] = dataSize; | |||
set[0] = (int32_t)juce::ByteOrder::littleEndianInt("CcnK"); | |||
set[2] = (int32_t)juce::ByteOrder::littleEndianInt("FBCh"); | |||
set[3] = fxbSwap(1); | |||
set[39] = fxbSwap(dataSize); | |||
const ScopedSingleProcessLocker spl(this, true); | |||
fInstance->setStateInformation(dataCompat, static_cast<int>(dataSize+160)); | |||
} | |||
#if defined(HAVE_LIBLO) && ! defined(BUILD_BRIDGE) | |||
const bool sendOsc(pData->engine->isOscControlRegistered()); | |||
@@ -302,7 +318,6 @@ public: | |||
// ------------------------------------------------------------------- | |||
// Set ui stuff | |||
#if defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) | |||
void showCustomUI(const bool yesNo) override | |||
{ | |||
CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr,); | |||
@@ -346,7 +361,6 @@ public: | |||
CarlaPlugin::uiIdle(); | |||
} | |||
#endif | |||
// ------------------------------------------------------------------- | |||
// Plugin state | |||
@@ -542,13 +556,11 @@ public: | |||
if (fDesc.isInstrument) | |||
pData->hints |= PLUGIN_IS_SYNTH; | |||
#if defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) | |||
if (fInstance->hasEditor()) | |||
{ | |||
pData->hints |= PLUGIN_HAS_CUSTOM_UI; | |||
pData->hints |= PLUGIN_NEEDS_UI_MAIN_THREAD; | |||
} | |||
#endif | |||
if (aOuts > 0 && (aIns == aOuts || aIns == 1)) | |||
pData->hints |= PLUGIN_CAN_DRYWET; | |||
@@ -1224,6 +1236,8 @@ public: | |||
fInstance->setPlayHead(this); | |||
fInstance->addListener(this); | |||
fFormatName = format; | |||
// --------------------------------------------------------------- | |||
// get info | |||
@@ -1279,10 +1293,41 @@ private: | |||
juce::MidiBuffer fMidiBuffer; | |||
CurrentPositionInfo fPosInfo; | |||
juce::MemoryBlock fChunk; | |||
juce::String fFormatName; | |||
#if defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) | |||
ScopedPointer<JucePluginWindow> fWindow; | |||
#endif | |||
bool isJuceSaveFormat(const void* const data, const std::size_t dataSize) | |||
{ | |||
if (fFormatName != "VST2") | |||
return true; | |||
if (dataSize < 160) | |||
return false; | |||
const int32_t* const set = (const int32_t*)data; | |||
if (! compareMagic(set[0], "CcnK")) | |||
return false; | |||
if (! compareMagic(set[2], "FBCh")) | |||
return false; | |||
if (fxbSwap(set[3]) > 1) | |||
return false; | |||
const int32_t chunkSize = fxbSwap(set[39]); | |||
return static_cast<std::size_t>(chunkSize + 160) == dataSize; | |||
} | |||
static bool compareMagic(int32_t magic, const char* name) noexcept | |||
{ | |||
return magic == (int32_t)juce::ByteOrder::littleEndianInt (name) | |||
|| magic == (int32_t)juce::ByteOrder::bigEndianInt (name); | |||
} | |||
static int32_t fxbSwap(const int32_t x) noexcept | |||
{ | |||
return (int32_t)juce::ByteOrder::swapIfLittleEndian ((uint32_t) x); | |||
} | |||
CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginJuce) | |||
}; | |||
@@ -1,6 +1,6 @@ | |||
/* | |||
* Carla VST Plugin | |||
* Copyright (C) 2011-2018 Filipe Coelho <falktx@falktx.com> | |||
* Copyright (C) 2011-2019 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU General Public License as | |||
@@ -397,7 +397,7 @@ public: | |||
CARLA_SAFE_ASSERT_RETURN(data != nullptr,); | |||
CARLA_SAFE_ASSERT_RETURN(dataSize > 0,); | |||
if (loadOldSaveFormat(data, dataSize)) | |||
if (loadJuceSaveFormat(data, dataSize)) | |||
return; | |||
if (fLastChunk != nullptr) | |||
@@ -2476,7 +2476,7 @@ private: | |||
return (int32_t)ByteOrder::swapIfLittleEndian ((uint32_t) x); | |||
} | |||
bool loadOldSaveFormat(const void* const data, const std::size_t dataSize) | |||
bool loadJuceSaveFormat(const void* const data, const std::size_t dataSize) | |||
{ | |||
if (dataSize < 28) | |||
return false; | |||
@@ -2496,6 +2496,7 @@ private: | |||
if (static_cast<std::size_t>(chunkSize + 160) > dataSize) | |||
return false; | |||
carla_stdout("NOTE: Loading plugin state in Juce compatibiity mode"); | |||
setChunkData(&set[40], static_cast<std::size_t>(chunkSize)); | |||
return true; | |||
} | |||
@@ -29,10 +29,8 @@ LIBS += $(MODULEDIR)/juce_audio_processors.a | |||
LIBS += $(MODULEDIR)/juce_core.a | |||
LIBS += $(MODULEDIR)/juce_data_structures.a | |||
LIBS += $(MODULEDIR)/juce_events.a | |||
ifeq ($(MACOS_OR_WIN32),true) | |||
LIBS += $(MODULEDIR)/juce_graphics.a | |||
LIBS += $(MODULEDIR)/juce_gui_basics.a | |||
endif | |||
ifeq ($(MACOS),true) | |||
LIBS += $(MODULEDIR)/juce_gui_extra.a | |||
endif | |||
@@ -55,10 +53,8 @@ LINK_FLAGS += $(JUCE_AUDIO_PROCESSORS_LIBS) | |||
LINK_FLAGS += $(JUCE_CORE_LIBS) | |||
LINK_FLAGS += $(JUCE_DATA_STRUCTURES_LIBS) | |||
LINK_FLAGS += $(JUCE_EVENTS_LIBS) | |||
ifeq ($(MACOS_OR_WIN32),true) | |||
LINK_FLAGS += $(JUCE_GRAPHICS_LIBS) | |||
LINK_FLAGS += $(JUCE_GUI_BASICS_LIBS) | |||
endif | |||
ifeq ($(MACOS),true) | |||
LINK_FLAGS += $(JUCE_GUI_EXTRA_LIBS) | |||
endif | |||
@@ -99,7 +99,6 @@ LIBS_win32 += $(MODULEDIR)/juce_events.win32.a | |||
LIBS_win64 += $(MODULEDIR)/juce_events.win64.a | |||
LINK_FLAGS += $(JUCE_EVENTS_LIBS) | |||
ifeq ($(MACOS_OR_WIN32),true) | |||
LIBS_native += $(MODULEDIR)/juce_graphics.a | |||
LIBS_posix32 += $(MODULEDIR)/juce_graphics.posix32.a | |||
LIBS_posix64 += $(MODULEDIR)/juce_graphics.posix64.a | |||
@@ -113,7 +112,6 @@ LIBS_posix64 += $(MODULEDIR)/juce_gui_basics.posix64.a | |||
LIBS_win32 += $(MODULEDIR)/juce_gui_basics.win32.a | |||
LIBS_win64 += $(MODULEDIR)/juce_gui_basics.win64.a | |||
LINK_FLAGS += $(JUCE_GUI_BASICS_LIBS) | |||
endif | |||
ifeq ($(MACOS),true) | |||
LIBS_native += $(MODULEDIR)/juce_gui_extra.a | |||
@@ -101,7 +101,6 @@ LIBS_win32 += $(MODULEDIR)/juce_events.win32.a | |||
LIBS_win64 += $(MODULEDIR)/juce_events.win64.a | |||
LINK_FLAGS += $(JUCE_EVENTS_LIBS) | |||
ifeq ($(MACOS_OR_WIN32),true) | |||
LIBS_native += $(MODULEDIR)/juce_graphics.a | |||
LIBS_posix32 += $(MODULEDIR)/juce_graphics.posix32.a | |||
LIBS_posix64 += $(MODULEDIR)/juce_graphics.posix64.a | |||
@@ -115,7 +114,6 @@ LIBS_posix64 += $(MODULEDIR)/juce_gui_basics.posix64.a | |||
LIBS_win32 += $(MODULEDIR)/juce_gui_basics.win32.a | |||
LIBS_win64 += $(MODULEDIR)/juce_gui_basics.win64.a | |||
LINK_FLAGS += $(JUCE_GUI_BASICS_LIBS) | |||
endif # MACOS_OR_WIN32 | |||
ifeq ($(MACOS),true) | |||
LIBS_native += $(MODULEDIR)/juce_gui_extra.a | |||
@@ -49,6 +49,8 @@ | |||
#define JUCE_MODULE_AVAILABLE_juce_core 1 | |||
#define JUCE_MODULE_AVAILABLE_juce_data_structures 1 | |||
#define JUCE_MODULE_AVAILABLE_juce_events 1 | |||
#define JUCE_MODULE_AVAILABLE_juce_graphics 1 | |||
#define JUCE_MODULE_AVAILABLE_juce_gui_basics 1 | |||
// always disabled | |||
#define JUCE_MODULE_AVAILABLE_juce_audio_formats 0 | |||
@@ -59,15 +61,7 @@ | |||
#define JUCE_MODULE_AVAILABLE_juce_video 0 | |||
// conditional | |||
#if defined(APPCONFIG_OS_MAC) || defined(APPCONFIG_OS_WIN) | |||
# define JUCE_MODULE_AVAILABLE_juce_graphics 1 | |||
# define JUCE_MODULE_AVAILABLE_juce_gui_basics 1 | |||
#else | |||
# define JUCE_MODULE_AVAILABLE_juce_graphics 0 | |||
# define JUCE_MODULE_AVAILABLE_juce_gui_basics 0 | |||
#endif | |||
#if defined(APPCONFIG_OS_MAC) | |||
#ifdef APPCONFIG_OS_MAC | |||
# define JUCE_MODULE_AVAILABLE_juce_gui_extra 1 | |||
#else | |||
# define JUCE_MODULE_AVAILABLE_juce_gui_extra 0 | |||
@@ -89,9 +83,10 @@ | |||
#define JUCE_STRING_UTF_TYPE 8 | |||
#define JUCE_USE_VFORK 1 | |||
#if ! (defined(APPCONFIG_OS_MAC) || defined(APPCONFIG_OS_WIN)) | |||
#ifdef APPCONFIG_OS_LINUX | |||
# define JUCE_DISABLE_NATIVE_FILECHOOSERS 1 | |||
# define JUCE_MODAL_LOOPS_PERMITTED 0 | |||
# define JUCE_AUDIOPROCESSOR_NO_GUI 1 | |||
// # define JUCE_AUDIOPROCESSOR_NO_GUI 1 | |||
#endif | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
@@ -218,11 +213,7 @@ | |||
@see VSTPluginFormat, AudioPluginFormat, AudioPluginFormatManager, JUCE_PLUGINHOST_AU | |||
*/ | |||
#if defined(APPCONFIG_OS_MAC) || defined(APPCONFIG_OS_WIN) | |||
# define JUCE_PLUGINHOST_VST 1 | |||
#else | |||
# define JUCE_PLUGINHOST_VST 0 | |||
#endif | |||
#define JUCE_PLUGINHOST_VST 1 | |||
/** Config: JUCE_PLUGINHOST_VST3 | |||
Enables the VST3 audio plugin hosting classes. This requires the Steinberg VST3 SDK to be | |||
@@ -12,6 +12,9 @@ include ../Makefile.mk | |||
BUILD_CXX_FLAGS += $(JUCE_GRAPHICS_FLAGS) -I.. | |||
ifeq ($(LINUX),true) | |||
BUILD_CXX_FLAGS += $(shell pkg-config --cflags freetype2) | |||
endif | |||
ifeq ($(WIN32),true) | |||
BUILD_CXX_FLAGS += -Wno-missing-field-initializers -Wno-strict-overflow | |||
endif | |||
@@ -27,16 +27,6 @@ | |||
namespace juce | |||
{ | |||
static bool exeIsAvailable (const char* const executable) | |||
{ | |||
ChildProcess child; | |||
const bool ok = child.start ("which " + String (executable)) | |||
&& child.readAllProcessOutput().trim().isNotEmpty(); | |||
child.waitForProcessToFinish (60 * 1000); | |||
return ok; | |||
} | |||
bool FileChooser::isPlatformDialogAvailable() | |||
{ | |||
#if JUCE_DISABLE_NATIVE_FILECHOOSERS | |||
@@ -47,6 +37,17 @@ bool FileChooser::isPlatformDialogAvailable() | |||
#endif | |||
} | |||
#if ! JUCE_DISABLE_NATIVE_FILECHOOSERS | |||
static bool exeIsAvailable (const char* const executable) | |||
{ | |||
ChildProcess child; | |||
const bool ok = child.start ("which " + String (executable)) | |||
&& child.readAllProcessOutput().trim().isNotEmpty(); | |||
child.waitForProcessToFinish (60 * 1000); | |||
return ok; | |||
} | |||
static uint64 getTopWindowID() noexcept | |||
{ | |||
if (TopLevelWindow* top = TopLevelWindow::getActiveTopLevelWindow()) | |||
@@ -209,5 +210,6 @@ void FileChooser::showPlatformDialog (Array<File>& results, | |||
previousWorkingDirectory.setAsCurrentWorkingDirectory(); | |||
} | |||
#endif | |||
} // namespace juce |
@@ -65,10 +65,8 @@ LIBS += $(MODULEDIR)/juce_audio_processors.a | |||
LIBS += $(MODULEDIR)/juce_core.a | |||
LIBS += $(MODULEDIR)/juce_data_structures.a | |||
LIBS += $(MODULEDIR)/juce_events.a | |||
ifeq ($(MACOS_OR_WIN32),true) | |||
LIBS += $(MODULEDIR)/juce_graphics.a | |||
LIBS += $(MODULEDIR)/juce_gui_basics.a | |||
endif | |||
ifeq ($(MACOS),true) | |||
LIBS += $(MODULEDIR)/juce_gui_extra.a | |||
endif | |||
@@ -95,10 +93,8 @@ LINK_FLAGS += $(JUCE_AUDIO_PROCESSORS_LIBS) | |||
LINK_FLAGS += $(JUCE_CORE_LIBS) | |||
LINK_FLAGS += $(JUCE_DATA_STRUCTURES_LIBS) | |||
LINK_FLAGS += $(JUCE_EVENTS_LIBS) | |||
ifeq ($(MACOS_OR_WIN32),true) | |||
LINK_FLAGS += $(JUCE_GRAPHICS_LIBS) | |||
LINK_FLAGS += $(JUCE_GUI_BASICS_LIBS) | |||
endif | |||
ifeq ($(MACOS),true) | |||
LINK_FLAGS += $(JUCE_GUI_EXTRA_LIBS) | |||
endif | |||
@@ -33,10 +33,6 @@ | |||
namespace juce { | |||
#if JUCE_LINUX && defined(HAVE_X11) | |||
extern Display* display; | |||
#endif | |||
class JucePluginWindow : public DialogWindow | |||
{ | |||
public: | |||
@@ -103,6 +99,7 @@ private: | |||
return; | |||
#if JUCE_LINUX && defined(HAVE_X11) | |||
Display* const display = XWindowSystem::getInstance()->displayRef(); | |||
CARLA_SAFE_ASSERT_RETURN(display != nullptr,); | |||
::Window window = (::Window)getWindowHandle(); | |||