Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Python rust backend #470

Merged
merged 153 commits into from
Dec 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
153 commits
Select commit Hold shift + click to select a range
d121c30
wip
SanderVocke Nov 18, 2024
b97eaed
wip
SanderVocke Nov 22, 2024
f08073a
wip
SanderVocke Nov 22, 2024
3123c20
wip
SanderVocke Nov 22, 2024
392c39a
wip
SanderVocke Nov 22, 2024
3dc4e03
wip
SanderVocke Nov 22, 2024
6e13319
wip
SanderVocke Nov 22, 2024
5354550
wip
SanderVocke Nov 22, 2024
22660d8
wip
SanderVocke Nov 24, 2024
3b27bc4
wip
SanderVocke Nov 25, 2024
9576096
wip
SanderVocke Nov 25, 2024
6fdca25
wip
SanderVocke Nov 25, 2024
ef16bec
wip
SanderVocke Nov 25, 2024
5d7b671
refactor: Update BackendLoop to use shoop_py_backend methods instead …
SanderVocke Nov 26, 2024
f3a5d0a
wip
SanderVocke Nov 26, 2024
6b99698
wip
SanderVocke Nov 26, 2024
45a08cb
wip
SanderVocke Nov 26, 2024
6ffe9bf
wip
SanderVocke Nov 26, 2024
f516356
wip
SanderVocke Nov 26, 2024
6f75d29
wip
SanderVocke Nov 27, 2024
f4fe489
feat: Implement Rust methods for MidiChannel based on BackendLoopMidi…
SanderVocke Nov 27, 2024
e2db2d8
refactor: Simplify MidiChannel implementation by removing duplicate code
SanderVocke Nov 27, 2024
16039ee
feat: Implement MidiEvent and MidiChannelState types in midi_channel.rs
SanderVocke Nov 27, 2024
96a5c22
fix: Add missing newline at end of file in midi_channel.rs
SanderVocke Nov 28, 2024
fa61693
feat: Implement PyO3-exposed methods for BackendLoopMidiChannel in mi…
SanderVocke Nov 28, 2024
850b51f
wip
SanderVocke Nov 28, 2024
f392285
refactor: Move MidiEvent struct to its own file for better organization
SanderVocke Nov 28, 2024
a522e3e
feat: Implement conversion from backend_bindings::MidiEvent to MidiEvent
SanderVocke Nov 28, 2024
00c35ae
feat: Add registration function for MidiEvent in midi.rs and mod.rs
SanderVocke Nov 28, 2024
3270410
refactor: Replace direct ffi calls in BackendLoopMidiChannel with Mid…
SanderVocke Nov 28, 2024
6bb7772
wip
SanderVocke Nov 28, 2024
463008d
wip
SanderVocke Nov 28, 2024
a217218
feat: Add methods for audio driver management and external port disco…
SanderVocke Nov 28, 2024
8c87a92
feat: Implement types for Jack and Dummy audio driver settings
SanderVocke Nov 28, 2024
cc25169
feat: Create ExternalPortDescriptor struct to wrap shoop_external_por…
SanderVocke Nov 28, 2024
be3d111
wip
SanderVocke Nov 28, 2024
07e7e09
feat: Add PyO3 wrappers for AudioDriver methods in Python backend
SanderVocke Nov 28, 2024
bedae5c
wip
SanderVocke Nov 28, 2024
7aaf812
wip
SanderVocke Nov 28, 2024
9e9ebd0
refactor: Replace FFI calls in AudioDriver with Rust method calls
SanderVocke Nov 28, 2024
6e5a997
Revert "refactor: Replace FFI calls in AudioDriver with Rust method c…
SanderVocke Nov 29, 2024
7a8432b
feat: Implement missing AudioDriver methods in Rust for feature parity
SanderVocke Nov 29, 2024
7a5f74b
fix: Define dummy_run_requested_frames function in AudioDriver implem…
SanderVocke Nov 29, 2024
25cb400
feat: Implement wrapper methods for AudioDriver in Python interface
SanderVocke Nov 29, 2024
f5a2536
feat: Add driver_type_supported method to Python audio driver wrapper
SanderVocke Nov 29, 2024
d970502
fix: Remove duplicate driver_type_supported and fix unsafe_backend_pt…
SanderVocke Nov 29, 2024
0cf3cf5
refactor: Replace direct lock calls with a method for better safety
SanderVocke Nov 29, 2024
264dfc5
fix: Resolve warnings and errors in audio driver and dependencies files
SanderVocke Nov 29, 2024
fb942fa
fix: Move `let` statement outside function call and correct argument …
SanderVocke Nov 29, 2024
66fc21e
fix: Resolve warnings and errors in audio_driver and midi_channel mod…
SanderVocke Nov 29, 2024
8e20a1e
fix: Update default values in find_external_ports signature
SanderVocke Nov 30, 2024
eb0464c
refactor: Replace specific imports from backend_bindings with a singl…
SanderVocke Nov 30, 2024
a31e54b
refactor: Replace FFI calls with AudioDriver methods in backend wrappers
SanderVocke Nov 30, 2024
685a19b
feat: Add Jack and Dummy audio driver settings classes and methods
SanderVocke Nov 30, 2024
0a21223
feat: Implement AudioDriverState struct for audio driver compatibility
SanderVocke Nov 30, 2024
57bbd4e
wip
SanderVocke Nov 30, 2024
ccda25d
wip
SanderVocke Nov 30, 2024
126e86a
wip
SanderVocke Nov 30, 2024
74583d5
feat: Implement BackendSessionState struct to mirror backend session …
SanderVocke Nov 30, 2024
9af95b6
feat: Implement ProfilingReportItem struct to mirror shoop_profiling_…
SanderVocke Nov 30, 2024
acff5e2
refactor: Move BackendSession struct definition to the end of the file
SanderVocke Nov 30, 2024
d69272b
feat: Implement ProfilingReport struct to mirror shoop_profiling_repo…
SanderVocke Nov 30, 2024
9498b9b
refactor: Update references to use ffi types in backend_session.rs
SanderVocke Nov 30, 2024
20f0bea
feat: Implement BackendSession methods in Rust for backend bindings
SanderVocke Nov 30, 2024
fa85335
refactor: Restore and reorganize BackendSession methods for clarity
SanderVocke Nov 30, 2024
284bfa8
feat: Implement missing FX chain port retrieval methods in Rust Backe…
SanderVocke Nov 30, 2024
3aac1b9
feat: Implement PyO3 wrapper for ProfilingReportItem with constructor…
SanderVocke Dec 1, 2024
80ea70e
feat: Implement PyO3 wrapper for ProfilingReport with backend constru…
SanderVocke Dec 1, 2024
a85ad7a
feat: Implement PyO3 wrapper for BackendSessionState with constructor…
SanderVocke Dec 1, 2024
6d7f653
feat: Add methods to get audio and MIDI input/output ports in Backend…
SanderVocke Dec 1, 2024
2386191
refactor: Forward BackendSession method calls to Rust implementations
SanderVocke Dec 1, 2024
bac827a
wip
SanderVocke Dec 1, 2024
9607a17
wip
SanderVocke Dec 3, 2024
7673e3a
feat: Add Rust struct FXChainStateInfo with FFI instantiation method
SanderVocke Dec 3, 2024
d4f2ca1
refactor: Simplify FXChainStateInfo from_ffi method parameter type
SanderVocke Dec 3, 2024
dbcabfb
feat: Add Rust ports for BackendFXChain methods in FXChain class
SanderVocke Dec 3, 2024
8315383
feat: Add FXChain and FXChainStateInfo structs with methods
SanderVocke Dec 3, 2024
05041be
feat: Implement missing methods in FXChain for complete coverage of B…
SanderVocke Dec 3, 2024
dd50b75
feat: Add PyO3 wrapper for FXChainState struct with instantiation method
SanderVocke Dec 3, 2024
5241c4f
feat: Implement PyO3 wrapper methods for FXChain class in Python bind…
SanderVocke Dec 3, 2024
adadd28
wip
SanderVocke Dec 3, 2024
c788578
fix: Add pyo3 signature to py_new method to resolve deprecation warning
SanderVocke Dec 3, 2024
7e81cc6
feat: Add FXChainType enum and conversion methods for backend bindings
SanderVocke Dec 3, 2024
082825a
fix: Remove unreachable pattern in FXChainType match statement
SanderVocke Dec 3, 2024
6bebd5f
wip
SanderVocke Dec 3, 2024
104b67e
feat: Add Rust port of shoop_audio_port_state_info_t struct with conv…
SanderVocke Dec 3, 2024
f7fd12e
refactor: Move AudioPort struct definition to the correct location
SanderVocke Dec 3, 2024
25d1a46
feat: Implement missing methods from BackendAudioPort in AudioPort class
SanderVocke Dec 3, 2024
cb567d7
refactor: Rename AudioPortStateInfo to AudioPortState and update methods
SanderVocke Dec 3, 2024
efbc8b7
feat: Implement missing methods in AudioPort for compatibility with B…
SanderVocke Dec 3, 2024
d1c7586
refactor: Remove unsafe_audio_port_from_raw_ptr function from module
SanderVocke Dec 3, 2024
4e4a092
feat: Implement missing PyO3-compatible methods in AudioPort class
SanderVocke Dec 3, 2024
974983c
feat: Implement PyO3-compatible wrapper for AudioPortState struct
SanderVocke Dec 3, 2024
f674918
refactor: Remove unused unsafe_port_from_raw_ptr method from MidiPort
SanderVocke Dec 3, 2024
7e63e1a
feat: Add Rust port of shoop_midi_port_state_info_t struct with conve…
SanderVocke Dec 3, 2024
7a99783
refactor: Rename MidiPortStateInfo to MidiPortState and adjust usage
SanderVocke Dec 3, 2024
a3a4199
feat: Implement missing methods from BackendMidiPort in MidiPort struct
SanderVocke Dec 3, 2024
22fd268
feat: Add midi module with MidiEvent struct and implementation
SanderVocke Dec 3, 2024
94104c6
feat: Add MIDI module and bindings for non-prebuilt feature
SanderVocke Dec 3, 2024
356407a
fix: Resolve warnings and errors related to MidiEvent imports and usage
SanderVocke Dec 3, 2024
1146ea3
fix: Resolve compilation errors by importing missing types in Rust code
SanderVocke Dec 3, 2024
b0321f7
refactor: Remove unsafe_midi_port_from_raw_ptr function from module
SanderVocke Dec 3, 2024
08e9137
feat: Add PyO3 wrapper for MidiPortState with construction method
SanderVocke Dec 3, 2024
e53934f
refactor: Rename PyMidiPortState to MidiPortState and update methods
SanderVocke Dec 3, 2024
dc0d042
feat: Implement missing methods in PyO3-compatible MidiPort class
SanderVocke Dec 3, 2024
fcc728e
wip
SanderVocke Dec 3, 2024
05c50aa
feat: Add Rust struct PortConnectionsState with FFI instantiation method
SanderVocke Dec 3, 2024
9cd5edb
refactor: Remove unused PortConnectionsState struct and its implement…
SanderVocke Dec 3, 2024
b45a49a
feat: Implement missing methods in DecoupledMidiPort for completeness
SanderVocke Dec 3, 2024
a1b5981
feat: Implement missing methods in PyO3-compatible DecoupledMidiPort …
SanderVocke Dec 3, 2024
678024c
wip
SanderVocke Dec 3, 2024
2869abf
feat: Add enum_items method to LoopMode for mapping variants to values
SanderVocke Dec 4, 2024
d59b8d8
feat: Add enum_items method to ChannelMode for variant mapping to values
SanderVocke Dec 4, 2024
a6aa1f7
feat: Add enum_items method to FXChainType for variant mapping
SanderVocke Dec 4, 2024
316523d
feat: Add enum_items method to PortDirection and PortDataType enums
SanderVocke Dec 4, 2024
9138dba
wip
SanderVocke Dec 4, 2024
562e415
feat: Implement PyO3 wrapper enum for AudioDriverType in Python module
SanderVocke Dec 4, 2024
f9756b8
feat: Implement PyO3-compatible PortConnectability struct and convers…
SanderVocke Dec 6, 2024
bf45ac4
wip
SanderVocke Dec 6, 2024
131a15b
wip
SanderVocke Dec 7, 2024
0290bd1
feat: Implement PyO3-compatible wrapper for Logger with instantiation…
SanderVocke Dec 7, 2024
270be88
wip
SanderVocke Dec 7, 2024
09e783c
feat: Add wrapper for PortConnectabilityKind in Python bindings
SanderVocke Dec 9, 2024
0d6d3d3
wip
SanderVocke Dec 9, 2024
f67f9d6
wip
SanderVocke Dec 9, 2024
26cf815
wip
SanderVocke Dec 9, 2024
8bb9d6f
Merge remote-tracking branch 'origin/master' into python_rust_backend
SanderVocke Dec 9, 2024
82ba927
wip
SanderVocke Dec 9, 2024
9793081
Update action.yml
SanderVocke Dec 9, 2024
6e849b4
Update action.yml
SanderVocke Dec 9, 2024
9cccfaa
Update action.yml
SanderVocke Dec 9, 2024
27e864d
Update action.yml
SanderVocke Dec 9, 2024
40ab66b
wip
SanderVocke Dec 9, 2024
a4d6f70
wip
SanderVocke Dec 20, 2024
66187d2
wip
SanderVocke Dec 20, 2024
872d6a4
wip
SanderVocke Dec 20, 2024
7129ac6
wip
SanderVocke Dec 20, 2024
9e46c37
wip
SanderVocke Dec 20, 2024
660d8b2
Update action.yml
SanderVocke Dec 20, 2024
726e5d2
Update action.yml
SanderVocke Dec 20, 2024
a44a0d4
wip
SanderVocke Dec 20, 2024
a8b6277
wip
SanderVocke Dec 20, 2024
db0f72d
wip
SanderVocke Dec 21, 2024
8210149
refactor: Separate OS-specific logic into distinct functions for clarity
SanderVocke Dec 21, 2024
daae832
fix: Remove unnecessary blank line in dependencies.rs file
SanderVocke Dec 21, 2024
d45c02d
fix: Add lifetime specifiers to function signatures in dependencies.rs
SanderVocke Dec 21, 2024
fc8284a
fix: Resolve mutable and immutable borrow conflict in dependencies.rs
SanderVocke Dec 21, 2024
442c848
fix: Resolve borrowing conflict by cloning env_map before use
SanderVocke Dec 21, 2024
ae44da2
fix: Resolve borrowing conflict by cloning env_map before use
SanderVocke Dec 21, 2024
34b49ec
wip
SanderVocke Dec 22, 2024
03414b6
wip
SanderVocke Dec 22, 2024
b8a9335
wip
SanderVocke Dec 22, 2024
62736c1
wip
SanderVocke Dec 22, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/actions/prepare_build/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ runs:
uses: dtolnay/rust-toolchain@nightly
with:
targets: x86_64-pc-windows-msvc
- name: Install rustfmt
shell: wrap-shell {0}
if: always() && inputs.variant == 'windows'
run: rustup component add rustfmt --toolchain nightly-x86_64-pc-windows-msvc
- name: Prepare Rust (non-Windows)
if: always() && inputs.variant != 'windows'
uses: dtolnay/rust-toolchain@nightly
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/build_and_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@ jobs:
- name: macos_release
release_build: true
package_kind: portable_folder
second_package_kind: dmg
#second_package_kind: dmg
third_package_kind: test_binaries
os: macos-13
upload_release_assets: true
Expand All @@ -340,7 +340,7 @@ jobs:
- name: macos_release_arm
release_build: true
package_kind: portable_folder
second_package_kind: dmg
#second_package_kind: dmg
third_package_kind: test_binaries
os: macos-14
upload_release_assets: true
Expand Down Expand Up @@ -459,9 +459,9 @@ jobs:



# # ##############################################################
# # ## Windows
# # ##############################################################
##############################################################
## Windows
##############################################################

build_windows:
strategy:
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,4 @@ py-build-cmake.cross.toml
Cargo.lock
target
.aider*
.env
3 changes: 1 addition & 2 deletions build_python_requirements.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
setuptools
setuptools-scm
ctypesgen @ git+https://github.com/SanderVocke/ctypesgen@9b88a970cb85823de83423add2a4b21ea79b63d9
setuptools-scm
meson
toml
21 changes: 0 additions & 21 deletions src/backend/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,6 @@ if (APPLE)
message(STATUS "MacOS architectures included: ${CMAKE_OSX_ARCHITECTURES}")
endif()

set(CTYPESGEN_COMMAND ${PYTHON_CMD} -m ctypesgen)

set(PREV_SETTING ${CMAKE_POSITION_INDEPENDENT_CODE})
set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
add_subdirectory(third_party/fmt EXCLUDE_FROM_ALL)
Expand Down Expand Up @@ -169,8 +167,6 @@ add_custom_target(

set(EXTERNAL_DEPS_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/external_deps)

# add_subdirectory(crashhandling)

# Backend lib
file(GLOB INTERNAL_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/internal/*.cpp)
if (HAVE_LV2)
Expand Down Expand Up @@ -274,29 +270,12 @@ else()
target_compile_definitions(shoopdaloop_backend_internals PUBLIC -DCOMPILE_LOG_LEVEL=${OVERRIDE_COMPILE_LOG_LEVEL})
endif()

# Generate libshoopdaloop_backend Python bindings into source dir
set(GENERATED_BINDINGS_PY ${CMAKE_CURRENT_BINARY_DIR}/libshoopdaloop_backend_bindings.py)
add_custom_command(
OUTPUT ${GENERATED_BINDINGS_PY}
COMMAND ${RUN_CMD_PREFIX} ${CMAKE_COMMAND} -E env ASAN_OPTIONS=detect_leaks=0 ${CTYPESGEN_COMMAND} --no-macro-warnings -lshoopdaloop_backend ${CMAKE_CURRENT_SOURCE_DIR}/libshoopdaloop_backend.h ${CMAKE_CURRENT_SOURCE_DIR}/types.h -o ${GENERATED_BINDINGS_PY}
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/libshoopdaloop_backend.h ${CMAKE_CURRENT_SOURCE_DIR}/libshoopdaloop_backend.cpp shoopdaloop_backend
COMMENT "Generating C bindings for libshoopdaloop_backend."
)
add_custom_target(
c_bindings
ALL
DEPENDS ${GENERATED_BINDINGS_PY}
)

# Generate javascript copy of enums into source dir
set(PATH_SEP ":")
if (WIN32)
set(PATH_SEP $<SEMICOLON>)
endif()

install(FILES ${GENERATED_BINDINGS_PY}
DESTINATION .)

# Generate and install version.txt and description.txt
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/version.txt
Expand Down
33 changes: 0 additions & 33 deletions src/backend/crashhandling/CMakeLists.txt

This file was deleted.

8 changes: 0 additions & 8 deletions src/backend/crashhandling/breakpad_symbols.cmake

This file was deleted.

98 changes: 0 additions & 98 deletions src/backend/crashhandling/shoop_crashhandling.cpp

This file was deleted.

20 changes: 0 additions & 20 deletions src/backend/crashhandling/shoop_crashhandling.h

This file was deleted.

6 changes: 5 additions & 1 deletion src/backend/internal/AudioChannel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -303,19 +303,23 @@ void AudioChannel<SampleT>::PROC_exec_cmd(ProcessingCommand cmd) {
auto first = (n > 0) ? ((SampleT*)rc.src)[0] : 0.0f;
}

float output_peak;

switch (cmd.cmd_type) {
case ProcessingCommandType::RawCopy:
memcpy(rc.dst, rc.src, rc.sz);
break;
case ProcessingCommandType::AdditiveCopy:
output_peak = ma_output_peak.load();
for (uint32_t i = 0; i < ac.n_elems; i++) {
auto sample = ac.dst[i] + ac.src[i] * ac.multiplier;
ac.dst[i] = sample;
if (ac.update_absmax) {
ma_output_peak = std::max((float)ma_output_peak.load(),
output_peak = std::max(output_peak,
(float)std::abs(sample));
}
}
ma_output_peak = output_peak;
break;
default:
throw_error<std::runtime_error>("Unknown processing command");
Expand Down
10 changes: 5 additions & 5 deletions src/backend/internal/BasicLoop.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ BasicLoop::BasicLoop() :
ma_triggering_now(false),
ma_length(0),
ma_position(0),
ma_maybe_next_planned_mode(LOOP_MODE_INVALID),
ma_maybe_next_planned_mode(LoopMode_Unknown),
ma_maybe_next_planned_delay(-1),
ma_already_triggered(false)
{
Expand Down Expand Up @@ -211,7 +211,7 @@ shoop_shared_ptr<LoopInterface> BasicLoop::get_sync_source(bool thread_safe) {
void BasicLoop::PROC_update_planned_transition_cache() {

ma_maybe_next_planned_mode = mp_planned_states.size() > 0 ?
(shoop_loop_mode_t) mp_planned_states.front() : LOOP_MODE_INVALID;
(shoop_loop_mode_t) mp_planned_states.front() : LoopMode_Unknown;
ma_maybe_next_planned_delay = mp_planned_state_countdowns.size() > 0 ?
mp_planned_state_countdowns.front() : -1;
}
Expand Down Expand Up @@ -261,7 +261,7 @@ void BasicLoop::PROC_handle_transition(shoop_loop_mode_t new_state) {
set_length(0, false);
}
ma_mode = new_state;
if(ma_mode > LOOP_MODE_INVALID) {
if(ma_mode >= LOOP_MODE_INVALID) {
throw_error<std::runtime_error>("invalid mode");
}
if (ma_mode == LoopMode_Stopped) { ma_position = 0; }
Expand Down Expand Up @@ -415,11 +415,11 @@ shoop_loop_mode_t BasicLoop::get_mode() const {
void BasicLoop::get_first_planned_transition(shoop_loop_mode_t &maybe_mode_out, uint32_t &delay_out) {
shoop_loop_mode_t maybe_mode = ma_maybe_next_planned_mode;
int maybe_delay = ma_maybe_next_planned_delay;
if (maybe_delay >= 0 && maybe_mode != LOOP_MODE_INVALID) {
if (maybe_delay >= 0 && maybe_mode != LoopMode_Unknown) {
maybe_mode_out = maybe_mode;
delay_out = maybe_delay;
} else {
maybe_mode_out = LOOP_MODE_INVALID;
maybe_mode_out = LoopMode_Unknown;
delay_out = 0;
}
}
Expand Down
12 changes: 12 additions & 0 deletions src/backend/internal/GraphLoopChannel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,18 @@ void GraphLoopChannel::disconnect_output_port(shoop_shared_ptr<GraphPort> port,
get_backend().set_graph_node_changes_pending();
}

void GraphLoopChannel::disconnect_port(shoop_shared_ptr<GraphPort> port, bool thread_safe) {
auto in_locked = mp_input_port_mapping.lock();
auto out_locked = mp_output_port_mapping.lock();
if (in_locked && in_locked == port) {
mp_input_port_mapping.reset();
} else if (out_locked && out_locked == port) {
mp_output_port_mapping.reset();
} else {
throw std::runtime_error("Attempting to disconnect unconnected port");
}
}

void GraphLoopChannel::disconnect_output_ports(bool thread_safe) {
mp_output_port_mapping.reset();
get_backend().set_graph_node_changes_pending();
Expand Down
1 change: 1 addition & 0 deletions src/backend/internal/GraphLoopChannel.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ class GraphLoopChannel: public HasTwoGraphNodes,

void connect_output_port(shoop_shared_ptr<GraphPort> port, bool thread_safe=true);
void connect_input_port(shoop_shared_ptr<GraphPort> port, bool thread_safe=true);
void disconnect_port(shoop_shared_ptr<GraphPort> port, bool thread_safe=true);
void disconnect_output_port(shoop_shared_ptr<GraphPort> port, bool thread_safe=true);
void disconnect_output_ports(bool thread_safe=true);
void disconnect_input_port(shoop_shared_ptr<GraphPort> port, bool thread_safe=true);
Expand Down
Loading
Loading