@@ -1786,6 +1786,13 @@ | |||||
<string>Main</string> | <string>Main</string> | ||||
</property> | </property> | ||||
<layout class="QVBoxLayout" name="verticalLayout_17"> | <layout class="QVBoxLayout" name="verticalLayout_17"> | ||||
<item> | |||||
<widget class="QCheckBox" name="ch_exp_transport"> | |||||
<property name="text"> | |||||
<string>Enable transport controls</string> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item> | <item> | ||||
<widget class="QCheckBox" name="cb_exp_plugin_bridges"> | <widget class="QCheckBox" name="cb_exp_plugin_bridges"> | ||||
<property name="text"> | <property name="text"> | ||||
@@ -1167,26 +1167,31 @@ typedef enum { | |||||
* @see ENGINE_OPTION_TRANSPORT_MODE | * @see ENGINE_OPTION_TRANSPORT_MODE | ||||
*/ | */ | ||||
typedef enum { | typedef enum { | ||||
/*! | |||||
* No transport. | |||||
*/ | |||||
ENGINE_TRANSPORT_MODE_DISABLED = 0, | |||||
/*! | /*! | ||||
* Internal transport mode. | * Internal transport mode. | ||||
*/ | */ | ||||
ENGINE_TRANSPORT_MODE_INTERNAL = 0, | |||||
ENGINE_TRANSPORT_MODE_INTERNAL = 1, | |||||
/*! | /*! | ||||
* Transport from JACK. | * Transport from JACK. | ||||
* Only available if driver name is "JACK". | * Only available if driver name is "JACK". | ||||
*/ | */ | ||||
ENGINE_TRANSPORT_MODE_JACK = 1, | |||||
ENGINE_TRANSPORT_MODE_JACK = 2, | |||||
/*! | /*! | ||||
* Transport from host, used when Carla is a plugin. | * Transport from host, used when Carla is a plugin. | ||||
*/ | */ | ||||
ENGINE_TRANSPORT_MODE_PLUGIN = 2, | |||||
ENGINE_TRANSPORT_MODE_PLUGIN = 3, | |||||
/*! | /*! | ||||
* Special mode, used in plugin-bridges only. | * Special mode, used in plugin-bridges only. | ||||
*/ | */ | ||||
ENGINE_TRANSPORT_MODE_BRIDGE = 3 | |||||
ENGINE_TRANSPORT_MODE_BRIDGE = 4 | |||||
} EngineTransportMode; | } EngineTransportMode; | ||||
@@ -466,10 +466,13 @@ void carla_set_engine_option(EngineOption option, int value, const char* valueSt | |||||
break; | break; | ||||
case CB::ENGINE_OPTION_TRANSPORT_MODE: | case CB::ENGINE_OPTION_TRANSPORT_MODE: | ||||
CARLA_SAFE_ASSERT_RETURN(value >= CB::ENGINE_TRANSPORT_MODE_INTERNAL && value <= CB::ENGINE_TRANSPORT_MODE_BRIDGE,); | |||||
CARLA_SAFE_ASSERT_RETURN(value >= CB::ENGINE_TRANSPORT_MODE_DISABLED && value <= CB::ENGINE_TRANSPORT_MODE_BRIDGE,); | |||||
gStandalone.engineOptions.transportMode = static_cast<CB::EngineTransportMode>(value); | gStandalone.engineOptions.transportMode = static_cast<CB::EngineTransportMode>(value); | ||||
delete[] gStandalone.engineOptions.transportExtra; | delete[] gStandalone.engineOptions.transportExtra; | ||||
gStandalone.engineOptions.transportExtra = (valueStr != nullptr) ? carla_strdup_safe(valueStr) : nullptr; | |||||
if (value != CB::ENGINE_TRANSPORT_MODE_DISABLED && valueStr != nullptr) | |||||
gStandalone.engineOptions.transportExtra = carla_strdup_safe(valueStr); | |||||
else | |||||
gStandalone.engineOptions.transportExtra = nullptr; | |||||
break; | break; | ||||
case CB::ENGINE_OPTION_FORCE_STEREO: | case CB::ENGINE_OPTION_FORCE_STEREO: | ||||
@@ -1384,11 +1384,14 @@ void CarlaEngine::setOption(const EngineOption option, const int value, const ch | |||||
break; | break; | ||||
case ENGINE_OPTION_TRANSPORT_MODE: | case ENGINE_OPTION_TRANSPORT_MODE: | ||||
CARLA_SAFE_ASSERT_RETURN(value >= ENGINE_TRANSPORT_MODE_INTERNAL && value <= ENGINE_TRANSPORT_MODE_BRIDGE,); | |||||
CARLA_SAFE_ASSERT_RETURN(value >= ENGINE_TRANSPORT_MODE_DISABLED && value <= ENGINE_TRANSPORT_MODE_BRIDGE,); | |||||
CARLA_SAFE_ASSERT_RETURN(getType() == kEngineTypeJack || value != ENGINE_TRANSPORT_MODE_JACK,); | CARLA_SAFE_ASSERT_RETURN(getType() == kEngineTypeJack || value != ENGINE_TRANSPORT_MODE_JACK,); | ||||
pData->options.transportMode = static_cast<EngineTransportMode>(value); | pData->options.transportMode = static_cast<EngineTransportMode>(value); | ||||
delete[] pData->options.transportExtra; | delete[] pData->options.transportExtra; | ||||
pData->options.transportExtra = (valueStr != nullptr) ? carla_strdup_safe(valueStr) : nullptr; | |||||
if (value >= ENGINE_TRANSPORT_MODE_DISABLED && valueStr != nullptr) | |||||
pData->options.transportExtra = carla_strdup_safe(valueStr); | |||||
else | |||||
pData->options.transportExtra = nullptr; | |||||
pData->time.setNeedsReset(); | pData->time.setNeedsReset(); | ||||
@@ -1087,7 +1087,7 @@ public: | |||||
{ | { | ||||
if (option == ENGINE_OPTION_TRANSPORT_MODE && fClient != nullptr) | if (option == ENGINE_OPTION_TRANSPORT_MODE && fClient != nullptr) | ||||
{ | { | ||||
CARLA_SAFE_ASSERT_RETURN(value >= ENGINE_TRANSPORT_MODE_INTERNAL && value <= ENGINE_TRANSPORT_MODE_JACK,); | |||||
CARLA_SAFE_ASSERT_RETURN(value >= ENGINE_TRANSPORT_MODE_DISABLED && value <= ENGINE_TRANSPORT_MODE_JACK,); | |||||
if (value == ENGINE_TRANSPORT_MODE_JACK) | if (value == ENGINE_TRANSPORT_MODE_JACK) | ||||
{ | { | ||||
@@ -836,18 +836,21 @@ ENGINE_PROCESS_MODE_BRIDGE = 4 | |||||
# Engine transport mode. | # Engine transport mode. | ||||
# @see ENGINE_OPTION_TRANSPORT_MODE | # @see ENGINE_OPTION_TRANSPORT_MODE | ||||
# No transport. | |||||
ENGINE_TRANSPORT_MODE_DISABLED = 0 | |||||
# Internal transport mode. | # Internal transport mode. | ||||
ENGINE_TRANSPORT_MODE_INTERNAL = 0 | |||||
ENGINE_TRANSPORT_MODE_INTERNAL = 1 | |||||
# Transport from JACK. | # Transport from JACK. | ||||
# Only available if driver name is "JACK". | # Only available if driver name is "JACK". | ||||
ENGINE_TRANSPORT_MODE_JACK = 1 | |||||
ENGINE_TRANSPORT_MODE_JACK = 2 | |||||
# Transport from host, used when Carla is a plugin. | # Transport from host, used when Carla is a plugin. | ||||
ENGINE_TRANSPORT_MODE_PLUGIN = 2 | |||||
ENGINE_TRANSPORT_MODE_PLUGIN = 3 | |||||
# Special mode, used in plugin-bridges only. | # Special mode, used in plugin-bridges only. | ||||
ENGINE_TRANSPORT_MODE_BRIDGE = 3 | |||||
ENGINE_TRANSPORT_MODE_BRIDGE = 4 | |||||
# ------------------------------------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------------------------------------ | ||||
# File Callback Opcode | # File Callback Opcode | ||||
@@ -789,7 +789,7 @@ class HostWindow(QMainWindow): | |||||
self.ui.act_file_save.setEnabled(canSave) | self.ui.act_file_save.setEnabled(canSave) | ||||
self.ui.act_engine_start.setEnabled(False) | self.ui.act_engine_start.setEnabled(False) | ||||
self.ui.act_engine_stop.setEnabled(True) | self.ui.act_engine_stop.setEnabled(True) | ||||
self.ui.w_transport.setEnabled(True) | |||||
self.ui.w_transport.setEnabled(transportMode != ENGINE_TRANSPORT_MODE_DISABLED) | |||||
if self.host.isPlugin or not self.fSessionManagerName: | if self.host.isPlugin or not self.fSessionManagerName: | ||||
self.ui.act_file_open.setEnabled(True) | self.ui.act_file_open.setEnabled(True) | ||||
@@ -1519,6 +1519,27 @@ class HostWindow(QMainWindow): | |||||
self.ui.act_add_jack.setVisible(settings.value(CARLA_KEY_EXPERIMENTAL_JACK_APPS, | self.ui.act_add_jack.setVisible(settings.value(CARLA_KEY_EXPERIMENTAL_JACK_APPS, | ||||
CARLA_DEFAULT_EXPERIMENTAL_JACK_APPS, type=bool)) | CARLA_DEFAULT_EXPERIMENTAL_JACK_APPS, type=bool)) | ||||
if not (self.host.isControl or self.host.isPlugin): | |||||
if settings.value(CARLA_KEY_EXPERIMENTAL_TRANSPORT, CARLA_DEFAULT_EXPERIMENTAL_TRANSPORT, type=bool): | |||||
if self.ui.cb_transport_jack.isChecked(): | |||||
transportMode = ENGINE_TRANSPORT_MODE_JACK | |||||
else: | |||||
transportMode = ENGINE_TRANSPORT_MODE_INTERNAL | |||||
transportExtra = ":link:" if self.ui.cb_transport_link.isChecked() else "" | |||||
else: | |||||
# Stop transport if becoming disabled | |||||
if self.ui.w_transport.isEnabled() and self.host.is_engine_running(): | |||||
self.host.transport_pause() | |||||
self.host.transport_relocate(0) | |||||
self.host.transport_pause() | |||||
transportMode = ENGINE_TRANSPORT_MODE_DISABLED | |||||
transportExtra = "" | |||||
self.ui.w_transport.setEnabled(transportMode != ENGINE_TRANSPORT_MODE_DISABLED) | |||||
self.host.transportMode = transportMode | |||||
self.host.set_engine_option(ENGINE_OPTION_TRANSPORT_MODE, transportMode, transportExtra) | |||||
self.fMiniCanvasUpdateTimeout = 1000 if self.fSavedSettings[CARLA_KEY_CANVAS_FANCY_EYE_CANDY] else 0 | self.fMiniCanvasUpdateTimeout = 1000 if self.fSavedSettings[CARLA_KEY_CANVAS_FANCY_EYE_CANDY] else 0 | ||||
setEngineSettings(self.host) | setEngineSettings(self.host) | ||||
@@ -506,6 +506,10 @@ class CarlaSettingsW(QDialog): | |||||
# ---------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------- | ||||
# Experimental | # Experimental | ||||
self.ui.ch_exp_transport.setChecked(settings.value(CARLA_KEY_EXPERIMENTAL_TRANSPORT, | |||||
CARLA_DEFAULT_EXPERIMENTAL_TRANSPORT, | |||||
type=bool)) | |||||
self.ui.ch_exp_jack_apps.setChecked(settings.value(CARLA_KEY_EXPERIMENTAL_JACK_APPS, | self.ui.ch_exp_jack_apps.setChecked(settings.value(CARLA_KEY_EXPERIMENTAL_JACK_APPS, | ||||
CARLA_DEFAULT_EXPERIMENTAL_JACK_APPS, | CARLA_DEFAULT_EXPERIMENTAL_JACK_APPS, | ||||
type=bool)) | type=bool)) | ||||
@@ -667,10 +671,6 @@ class CarlaSettingsW(QDialog): | |||||
# ---------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------- | ||||
# Wine | # Wine | ||||
settings.setValue(CARLA_KEY_EXPERIMENTAL_JACK_APPS, self.ui.ch_exp_jack_apps.isChecked()) | |||||
settings.setValue(CARLA_KEY_EXPERIMENTAL_LOAD_LIB_GLOBAL, self.ui.ch_exp_load_lib_global.isChecked()) | |||||
settings.setValue(CARLA_KEY_EXPERIMENTAL_PREVENT_BAD_BEHAVIOUR, self.ui.ch_exp_prevent_bad_behaviour.isChecked()) | |||||
settings.setValue(CARLA_KEY_WINE_EXECUTABLE, self.ui.le_wine_exec.text()) | settings.setValue(CARLA_KEY_WINE_EXECUTABLE, self.ui.le_wine_exec.text()) | ||||
settings.setValue(CARLA_KEY_WINE_AUTO_PREFIX, self.ui.cb_wine_prefix_detect.isChecked()) | settings.setValue(CARLA_KEY_WINE_AUTO_PREFIX, self.ui.cb_wine_prefix_detect.isChecked()) | ||||
settings.setValue(CARLA_KEY_WINE_FALLBACK_PREFIX, self.ui.le_wine_prefix_fallback.text()) | settings.setValue(CARLA_KEY_WINE_FALLBACK_PREFIX, self.ui.le_wine_prefix_fallback.text()) | ||||
@@ -681,7 +681,8 @@ class CarlaSettingsW(QDialog): | |||||
# ---------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------- | ||||
# Experimental | # Experimental | ||||
settings.setValue(CARLA_KEY_EXPERIMENTAL_JACK_APPS, self.ui.ch_exp_jack_apps.isChecked()) | |||||
settings.setValue(CARLA_KEY_EXPERIMENTAL_TRANSPORT, self.ui.ch_exp_transport.isChecked()) | |||||
settings.setValue(CARLA_KEY_EXPERIMENTAL_JACK_APPS, self.ui.ch_exp_jack_apps.isChecked()) | |||||
settings.setValue(CARLA_KEY_EXPERIMENTAL_LOAD_LIB_GLOBAL, self.ui.ch_exp_load_lib_global.isChecked()) | settings.setValue(CARLA_KEY_EXPERIMENTAL_LOAD_LIB_GLOBAL, self.ui.ch_exp_load_lib_global.isChecked()) | ||||
settings.setValue(CARLA_KEY_EXPERIMENTAL_PREVENT_BAD_BEHAVIOUR, self.ui.ch_exp_prevent_bad_behaviour.isChecked()) | settings.setValue(CARLA_KEY_EXPERIMENTAL_PREVENT_BAD_BEHAVIOUR, self.ui.ch_exp_prevent_bad_behaviour.isChecked()) | ||||
@@ -834,6 +835,7 @@ class CarlaSettingsW(QDialog): | |||||
self.ui.cb_canvas_render_hq_aa.setChecked(CARLA_DEFAULT_CANVAS_HQ_ANTIALIASING and self.ui.cb_canvas_render_hq_aa.isEnabled()) | self.ui.cb_canvas_render_hq_aa.setChecked(CARLA_DEFAULT_CANVAS_HQ_ANTIALIASING and self.ui.cb_canvas_render_hq_aa.isEnabled()) | ||||
self.ui.ch_engine_force_stereo.setChecked(CARLA_DEFAULT_FORCE_STEREO) | self.ui.ch_engine_force_stereo.setChecked(CARLA_DEFAULT_FORCE_STEREO) | ||||
self.ui.ch_engine_prefer_plugin_bridges.setChecked(CARLA_DEFAULT_PREFER_PLUGIN_BRIDGES) | self.ui.ch_engine_prefer_plugin_bridges.setChecked(CARLA_DEFAULT_PREFER_PLUGIN_BRIDGES) | ||||
self.ui.ch_exp_transport.setChecked(CARLA_DEFAULT_EXPERIMENTAL_TRANSPORT) | |||||
# -------------------------------------------------------------------------------------------------------- | # -------------------------------------------------------------------------------------------------------- | ||||
@@ -233,6 +233,7 @@ CARLA_KEY_WINE_RT_PRIO_ENABLED = "Wine/RtPrioEnabled" # bool | |||||
CARLA_KEY_WINE_BASE_RT_PRIO = "Wine/BaseRtPrio" # int | CARLA_KEY_WINE_BASE_RT_PRIO = "Wine/BaseRtPrio" # int | ||||
CARLA_KEY_WINE_SERVER_RT_PRIO = "Wine/ServerRtPrio" # int | CARLA_KEY_WINE_SERVER_RT_PRIO = "Wine/ServerRtPrio" # int | ||||
CARLA_KEY_EXPERIMENTAL_TRANSPORT = "Experimental/Transport" # bool | |||||
CARLA_KEY_EXPERIMENTAL_PLUGIN_BRIDGES = "Experimental/PluginBridges" # bool | CARLA_KEY_EXPERIMENTAL_PLUGIN_BRIDGES = "Experimental/PluginBridges" # bool | ||||
CARLA_KEY_EXPERIMENTAL_WINE_BRIDGES = "Experimental/WineBridges" # bool | CARLA_KEY_EXPERIMENTAL_WINE_BRIDGES = "Experimental/WineBridges" # bool | ||||
CARLA_KEY_EXPERIMENTAL_JACK_APPS = "Experimental/JackApplications" # bool | CARLA_KEY_EXPERIMENTAL_JACK_APPS = "Experimental/JackApplications" # bool | ||||
@@ -305,6 +306,7 @@ CARLA_DEFAULT_WINE_BASE_RT_PRIO = 15 | |||||
CARLA_DEFAULT_WINE_SERVER_RT_PRIO = 10 | CARLA_DEFAULT_WINE_SERVER_RT_PRIO = 10 | ||||
# Experimental | # Experimental | ||||
CARLA_DEFAULT_EXPERIMENTAL_TRANSPORT = False | |||||
CARLA_DEFAULT_EXPERIMENTAL_PLUGIN_BRIDGES = False | CARLA_DEFAULT_EXPERIMENTAL_PLUGIN_BRIDGES = False | ||||
CARLA_DEFAULT_EXPERIMENTAL_WINE_BRIDGES = False | CARLA_DEFAULT_EXPERIMENTAL_WINE_BRIDGES = False | ||||
CARLA_DEFAULT_EXPERIMENTAL_JACK_APPS = False | CARLA_DEFAULT_EXPERIMENTAL_JACK_APPS = False | ||||
@@ -373,6 +373,8 @@ const char* EngineTransportMode2Str(const EngineTransportMode mode) noexcept | |||||
{ | { | ||||
switch (mode) | switch (mode) | ||||
{ | { | ||||
case ENGINE_TRANSPORT_MODE_DISABLED: | |||||
return "ENGINE_TRANSPORT_MODE_DISABLED"; | |||||
case ENGINE_TRANSPORT_MODE_INTERNAL: | case ENGINE_TRANSPORT_MODE_INTERNAL: | ||||
return "ENGINE_TRANSPORT_MODE_INTERNAL"; | return "ENGINE_TRANSPORT_MODE_INTERNAL"; | ||||
case ENGINE_TRANSPORT_MODE_JACK: | case ENGINE_TRANSPORT_MODE_JACK: | ||||