diff --git a/sources/jvxComponents/jvxAudioNodes/jvxAuNForwardBuffer/codeGen/exports_node.pcg b/sources/jvxComponents/jvxAudioNodes/jvxAuNForwardBuffer/codeGen/exports_node.pcg index 440de37b..6e2cf7bf 100644 --- a/sources/jvxComponents/jvxAudioNodes/jvxAuNForwardBuffer/codeGen/exports_node.pcg +++ b/sources/jvxComponents/jvxAudioNodes/jvxAuNForwardBuffer/codeGen/exports_node.pcg @@ -52,6 +52,13 @@ SECTION PROPERTIES INIT_SET = 0; READ_WRITE_ACCESS = "JVX_PROPERTY_ACCESS_FULL_READ_AND_WRITE"; }; + + SECTION enable_zero_delay_output + { + TYPE = "JVX_DATAFORMAT_BOOL"; + INIT_SET = 0; + READ_WRITE_ACCESS = "JVX_PROPERTY_ACCESS_FULL_READ_AND_WRITE"; + }; }; SECTION monitor diff --git a/sources/jvxComponents/jvxAudioTechnologies/jvxAuTGenericWrapper/src/CjvxGenericWrapperDevice.cpp b/sources/jvxComponents/jvxAudioTechnologies/jvxAuTGenericWrapper/src/CjvxGenericWrapperDevice.cpp index 78605057..24861094 100644 --- a/sources/jvxComponents/jvxAudioTechnologies/jvxAuTGenericWrapper/src/CjvxGenericWrapperDevice.cpp +++ b/sources/jvxComponents/jvxAudioTechnologies/jvxAuTGenericWrapper/src/CjvxGenericWrapperDevice.cpp @@ -1434,7 +1434,7 @@ CjvxGenericWrapperDevice::transfer_backward_ocon(jvxLinkDataTransferType tp, jvx { jvxErrorType res = JVX_NO_ERROR; jvxLinkDataDescriptor* theLocDescr = NULL; - jvx::propertyCallCompactList* propCallCompact = nullptr; + jvx::propertyCallCompactRefList* propCallCompact = nullptr; jvxSize idx = 0; local_proc_params params; switch (tp) diff --git a/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNAsyncIo/src/CjvxSPAsyncIo.cpp b/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNAsyncIo/src/CjvxSPAsyncIo.cpp index 4ead2c92..82d3f540 100644 --- a/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNAsyncIo/src/CjvxSPAsyncIo.cpp +++ b/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNAsyncIo/src/CjvxSPAsyncIo.cpp @@ -742,25 +742,25 @@ JVX_ASYNCIO_CLASSNAME::transfer_backward_ocon_ntask(jvxLinkDataTransferType tp, { jvxLinkDataDescriptor* ld = (jvxLinkDataDescriptor*)data; jvxBool thereismismatch = false; - jvx::propertyCallCompactList* propCallCompact = nullptr; + jvx::propertyCallCompactRefList* propCallCompact = nullptr; std::string txt; switch (tp) { case JVX_LINKDATA_TRANSFER_REQUEST_GET_PROPERTIES: - propCallCompact = (jvx::propertyCallCompactList*)data; + propCallCompact = (jvx::propertyCallCompactRefList*)data; if (propCallCompact) { jvxBool forwardChain = false; for (auto& elm : propCallCompact->propReqs) { - if (elm->resCall == JVX_ERROR_ELEMENT_NOT_FOUND) + if (elm.resCall == JVX_ERROR_ELEMENT_NOT_FOUND) { - elm->resCall = this->get_property((elm->callMan), elm->rawPtr, - elm->ident, elm->detail); + elm.resCall = this->get_property((elm.callMan), elm.rawPtr, + elm.ident, elm.detail); } - if (elm->resCall == JVX_ERROR_ELEMENT_NOT_FOUND) + if (elm.resCall == JVX_ERROR_ELEMENT_NOT_FOUND) { forwardChain = true; } @@ -892,24 +892,24 @@ JVX_ASYNCIO_CLASSNAME::transfer_forward_icon_ntask(jvxLinkDataTransferType tp, j { if (idCtxt == JVX_DEFAULT_CON_VAR_OFF) { - jvx::propertyCallCompactList* propCallCompact = nullptr; + jvx::propertyCallCompactRefList* propCallCompact = nullptr; switch (tp) { case JVX_LINKDATA_TRANSFER_REQUEST_GET_PROPERTIES: - propCallCompact = (jvx::propertyCallCompactList*)data; + propCallCompact = (jvx::propertyCallCompactRefList*)data; if (propCallCompact) { jvxBool forwardChain = false; for (auto& elm : propCallCompact->propReqs) { - if (elm->resCall == JVX_ERROR_ELEMENT_NOT_FOUND) + if (elm.resCall == JVX_ERROR_ELEMENT_NOT_FOUND) { - elm->resCall = this->get_property((elm->callMan), elm->rawPtr, - elm->ident, elm->detail); + elm.resCall = this->get_property((elm.callMan), elm.rawPtr, + elm.ident, elm.detail); } - if (elm->resCall == JVX_ERROR_ELEMENT_NOT_FOUND) + if (elm.resCall == JVX_ERROR_ELEMENT_NOT_FOUND) { forwardChain = true; } diff --git a/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNMixChainEnterLeave/codeGen/exports_node.pcg b/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNMixChainEnterLeave/codeGen/exports_node.pcg index efdf7b9b..87ed6582 100644 --- a/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNMixChainEnterLeave/codeGen/exports_node.pcg +++ b/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNMixChainEnterLeave/codeGen/exports_node.pcg @@ -43,6 +43,7 @@ SECTION PROPERTIES READ_WRITE_ACCESS = "JVX_PROPERTY_ACCESS_FULL_READ_AND_WRITE"; ASSOCIATE_EXTERNAL = "yes"; }; + }; SECTION sources_channel_routing @@ -93,19 +94,27 @@ SECTION PROPERTIES READ_WRITE_ACCESS = "JVX_PROPERTY_ACCESS_READ_ONLY"; }; }; - SECTION display + + SECTION display_input { GENERATE_ENTRIES_CONFIG_FILE = "no"; // Defaults to "no" if not present ALLOWED_STATE_MASK = {"JVX_STATE_ACTIVE", "JVX_STATE_PREPARED", "JVX_STATE_PROCESSING"}; SECTION channel_names { - TYPE = "JVX_DATAFORMAT_SELECTION_LIST"; - CONTENT_DECODER_TYPE = "JVX_PROPERTY_DECODER_SINGLE_SELECTION"; - ONLY_SELECTION_TO_CONFIG = "yes"; - SELECTION_LIST_NAMES = {"to-be-filled"}; - SELECTION_LIST_SELECTED = {"yes"}; - SELECTION_LIST_EXCLUSIVE = {"yes"}; + ID = "jvx_selection_output_channels_sellist"; + READ_WRITE_ACCESS = "JVX_PROPERTY_ACCESS_READ_ONLY"; + }; + }; + + SECTION display_output + { + GENERATE_ENTRIES_CONFIG_FILE = "no"; // Defaults to "no" if not present + ALLOWED_STATE_MASK = {"JVX_STATE_ACTIVE", "JVX_STATE_PREPARED", "JVX_STATE_PROCESSING"}; + + SECTION channel_names + { + ID = "jvx_selection_input_channels_sellist"; READ_WRITE_ACCESS = "JVX_PROPERTY_ACCESS_READ_ONLY"; }; }; diff --git a/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNMixChainEnterLeave/src/CjvxSpNMixChainEnterLeave.cpp b/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNMixChainEnterLeave/src/CjvxSpNMixChainEnterLeave.cpp index e77cb231..c9134ec6 100644 --- a/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNMixChainEnterLeave/src/CjvxSpNMixChainEnterLeave.cpp +++ b/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNMixChainEnterLeave/src/CjvxSpNMixChainEnterLeave.cpp @@ -75,10 +75,6 @@ CjvxSpNMixChainEnterLeave::activate() CjvxConnectorFactory::oneInputConnectorElement elmIn; CjvxConnectorFactory::oneOutputConnectorElement elmOut; - genMixChain::init__display(); - genMixChain::allocate__display(); - genMixChain::register__display(this); - _update_property_access_type(JVX_PROPERTY_ACCESS_READ_ONLY, genMixChain::config.number_channels_side); _update_property_access_type(JVX_PROPERTY_ACCESS_READ_ONLY, genMixChain::config.operation_mode); @@ -87,6 +83,10 @@ CjvxSpNMixChainEnterLeave::activate() switch (operationMode) { case jvxOperationModeMixChain::JVX_OPERTION_MODE_MIX_CHAIN_INPUT: + genMixChain::init__display_input(); + genMixChain::allocate__display_input(); + genMixChain::register__display_input(this); + CjvxConnectorCollection::conName = "mix-in"; JVX_SAFE_ALLOCATE_OBJECT((CjvxConnectorCollection::extra_iocon_gen), CjvxSingleInputConnectorMulti(true)); @@ -98,6 +98,10 @@ CjvxSpNMixChainEnterLeave::activate() _common_set_conn_factory.input_connectors[CjvxConnectorCollection::extra_iocon_gen] = elmIn; break; case jvxOperationModeMixChain::JVX_OPERTION_MODE_MIX_CHAIN_OUTPUT: + genMixChain::init__display_output(); + genMixChain::allocate__display_output(); + genMixChain::register__display_output(this); + CjvxConnectorCollection < CjvxSingleOutputConnector, CjvxSingleOutputConnectorMulti>::conName = "mix-out"; JVX_SAFE_ALLOCATE_OBJECT((CjvxConnectorCollection::extra_iocon_gen), CjvxSingleOutputConnectorMulti(true)); CjvxConnectorCollection::extra_iocon_gen->activate(this, this, @@ -132,6 +136,9 @@ CjvxSpNMixChainEnterLeave::deactivate() CjvxConnectorCollection::extra_iocon_gen->deactivate(); JVX_SAFE_DELETE_OBJECT((CjvxConnectorCollection::extra_iocon_gen)); + + genMixChain::unregister__display_input(this); + genMixChain::deallocate__display_input(); break; case jvxOperationModeMixChain::JVX_OPERTION_MODE_MIX_CHAIN_OUTPUT: @@ -145,14 +152,14 @@ CjvxSpNMixChainEnterLeave::deactivate() CjvxConnectorCollection::extra_iocon_gen->deactivate(); JVX_SAFE_DELETE_OBJECT((CjvxConnectorCollection::extra_iocon_gen)); + + genMixChain::unregister__display_output(this); + genMixChain::deallocate__display_output(); break; } _undo_update_property_access_type(genMixChain::config.number_channels_side); _undo_update_property_access_type(genMixChain::config.operation_mode); - genMixChain::unregister__display(this); - genMixChain::deallocate__display(); - res = CjvxBareNode1ioRearrange::deactivate(); } return res; @@ -169,6 +176,7 @@ CjvxSpNMixChainEnterLeave::test_connect_icon(JVX_CONNECTION_FEEDBACK_TYPE(fdb)) node_inout._common_set_node_params_a_1io.number_channels); if (numChansMax != szChannelRoutes) { + jvxSize cnt = 0; jvxSize i; jvxSize* fldNew = nullptr; jvxSize fldNewSz = numChansMax; @@ -229,18 +237,24 @@ CjvxSpNMixChainEnterLeave::test_connect_icon(JVX_CONNECTION_FEEDBACK_TYPE(fdb)) genMixChain::associate__config(this, ptrChannelRoutes, szChannelRoutes); - genMixChain::display.channel_names.value.entries.clear(); switch (operationMode) { case jvxOperationModeMixChain::JVX_OPERTION_MODE_MIX_CHAIN_INPUT: + genMixChain::display_input.channel_names.value.entries.clear(); + jvx_bitFClear(genMixChain::display_input.channel_names.value.selection(0)); + cnt = 0; for (i = 0; i < node_inout._common_set_node_params_a_1io.number_channels; i++) { - genMixChain::display.channel_names.value.entries.push_back("Primary Input #" + jvx_size2String(i)); + genMixChain::display_input.channel_names.value.entries.push_back("Primary Input #" + jvx_size2String(i)); + jvx_bitSet(genMixChain::display_input.channel_names.value.selection(0), cnt); + cnt++; } for (i = 0; i < genMixChain::config.number_channels_side.value; i++) { - genMixChain::display.channel_names.value.entries.push_back("Secondary Input #" + jvx_size2String(i)); + genMixChain::display_input.channel_names.value.entries.push_back("Secondary Input #" + jvx_size2String(i)); + jvx_bitSet(genMixChain::display_input.channel_names.value.selection(0), cnt); + cnt++; } for (auto& elm : presets_channel_routing) @@ -248,21 +262,28 @@ CjvxSpNMixChainEnterLeave::test_connect_icon(JVX_CONNECTION_FEEDBACK_TYPE(fdb)) for (i = 0; i < elm.second.channel_num; i++) { jvxSize posi = node_inout._common_set_node_params_a_1io.number_channels + elm.second.idxOffset + i; - if (posi < genMixChain::display.channel_names.value.entries.size()) + if (posi < genMixChain::display_input.channel_names.value.entries.size()) { - genMixChain::display.channel_names.value.entries[posi] = elm.second.deviceChannelPrefix + jvx_size2String(i); + genMixChain::display_input.channel_names.value.entries[posi] = elm.second.deviceChannelPrefix + jvx_size2String(i); } } } break; case jvxOperationModeMixChain::JVX_OPERTION_MODE_MIX_CHAIN_OUTPUT: + genMixChain::display_output.channel_names.value.entries.clear(); + jvx_bitFClear(genMixChain::display_output.channel_names.value.selection(0)); + cnt = 0; for (i = 0; i < node_output._common_set_node_params_a_1io.number_channels; i++) { - genMixChain::display.channel_names.value.entries.push_back("Primary Output #" + jvx_size2String(i)); + genMixChain::display_output.channel_names.value.entries.push_back("Primary Output #" + jvx_size2String(i)); + jvx_bitSet(genMixChain::display_output.channel_names.value.selection(0), cnt); + cnt++; } for (i = 0; i < genMixChain::config.number_channels_side.value; i++) { - genMixChain::display.channel_names.value.entries.push_back("Secondary Output #" + jvx_size2String(i)); + genMixChain::display_output.channel_names.value.entries.push_back("Secondary Output #" + jvx_size2String(i)); + jvx_bitSet(genMixChain::display_output.channel_names.value.selection(0), cnt); + cnt++; } for (auto& elm : presets_channel_routing) @@ -270,9 +291,9 @@ CjvxSpNMixChainEnterLeave::test_connect_icon(JVX_CONNECTION_FEEDBACK_TYPE(fdb)) for (i = 0; i < elm.second.channel_num; i++) { jvxSize posi = node_output._common_set_node_params_a_1io.number_channels + elm.second.idxOffset + i; - if (posi < genMixChain::display.channel_names.value.entries.size()) + if (posi < genMixChain::display_output.channel_names.value.entries.size()) { - genMixChain::display.channel_names.value.entries[posi] = elm.second.deviceChannelPrefix + jvx_size2String(i); + genMixChain::display_output.channel_names.value.entries[posi] = elm.second.deviceChannelPrefix + jvx_size2String(i); } } } diff --git a/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNMixChainEnterLeave/src/CjvxSpNMixChainEnterLeave.h b/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNMixChainEnterLeave/src/CjvxSpNMixChainEnterLeave.h index 897234bb..43c32cb1 100644 --- a/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNMixChainEnterLeave/src/CjvxSpNMixChainEnterLeave.h +++ b/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNMixChainEnterLeave/src/CjvxSpNMixChainEnterLeave.h @@ -118,6 +118,10 @@ class CjvxSpNMixChainEnterLeave : public CjvxBareNode1ioRearrange, void offset_channels_to_property(); jvxErrorType check_preset_channels(CjvxConnectorOffsetAndMaxChans& conParams, jvxComponentIdentification cpId); + + jvxErrorType transfer_backward_ocon(jvxLinkDataTransferType tp, jvxHandle* data, JVX_CONNECTION_FEEDBACK_TYPE(fdb))override; + jvxErrorType transfer_forward_icon(jvxLinkDataTransferType tp, jvxHandle* data JVX_CONNECTION_FEEDBACK_TYPE_A(fdb))override; + }; // ============================================================================ diff --git a/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNMixChainEnterLeave/src/CjvxSpNMixChainEnterLeave_output.cpp b/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNMixChainEnterLeave/src/CjvxSpNMixChainEnterLeave_output.cpp index 5e65eb98..63c94866 100644 --- a/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNMixChainEnterLeave/src/CjvxSpNMixChainEnterLeave_output.cpp +++ b/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNMixChainEnterLeave/src/CjvxSpNMixChainEnterLeave_output.cpp @@ -103,4 +103,34 @@ CjvxSpNMixChainEnterLeave::report_process_buffers(CjvxSingleOutputConnector* oco // bufferPtrs: Target buffers as memcpy(bufsOut[i], bufsIn[i + oconn->chanSetting.idxOffset], jvxDataFormat_getsize(datOutThisConnector.con_params.format) * datOutThisConnector.con_params.buffersize); } -} \ No newline at end of file +} + +jvxErrorType +CjvxSpNMixChainEnterLeave::transfer_backward_ocon(jvxLinkDataTransferType tp, jvxHandle* data, JVX_CONNECTION_FEEDBACK_TYPE(fdb)) +{ + if ( + (tp == JVX_LINKDATA_TRANSFER_REQUEST_GET_PROPERTIES) && + (operationMode == jvxOperationModeMixChain::JVX_OPERTION_MODE_MIX_CHAIN_INPUT)) + { + if (!jvx::helper::translate_transfer_chain_get_properties((jvx::propertyCallCompactRefList*)data, this)) + { + return JVX_NO_ERROR; + } + } + return CjvxBareNode1ioRearrange::transfer_backward_ocon(tp, data JVX_CONNECTION_FEEDBACK_CALL_A(fdb)); +} + +jvxErrorType +CjvxSpNMixChainEnterLeave::transfer_forward_icon(jvxLinkDataTransferType tp, jvxHandle* data JVX_CONNECTION_FEEDBACK_TYPE_A(fdb)) +{ + if ( + (tp == JVX_LINKDATA_TRANSFER_REQUEST_GET_PROPERTIES) && + (operationMode == jvxOperationModeMixChain::JVX_OPERTION_MODE_MIX_CHAIN_OUTPUT)) + { + if (!jvx::helper::translate_transfer_chain_get_properties((jvx::propertyCallCompactRefList*)data, this)) + { + return JVX_NO_ERROR; + } + } + return CjvxBareNode1ioRearrange::transfer_forward_icon(tp, data JVX_CONNECTION_FEEDBACK_CALL_A(fdb)); +} diff --git a/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNSynchronize/src/CjvxSpNSynchronize.h b/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNSynchronize/src/CjvxSpNSynchronize.h index 8730124f..060019d3 100644 --- a/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNSynchronize/src/CjvxSpNSynchronize.h +++ b/sources/jvxComponents/jvxSignalProcessingNodes/jvxSpNSynchronize/src/CjvxSpNSynchronize.h @@ -44,48 +44,7 @@ class CjvxSpNSynchronize : public CjvxBareNode1ioRearrange, public genSynchroniz void fwd_report_process_buffers(jvxLinkDataDescriptor& datLink, jvxSize idx); jvxErrorType prepare_connect_icon(JVX_CONNECTION_FEEDBACK_TYPE(fdb)) override; - /* - - virtual void from_input_to_output() override; - jvxErrorType accept_negotiate_output(jvxLinkDataTransferType tp, jvxLinkDataDescriptor* preferredByOutput JVX_CONNECTION_FEEDBACK_TYPE_A(fdb)); - - // Processing - virtual jvxErrorType JVX_CALLINGCONVENTION prepare_connect_icon(JVX_CONNECTION_FEEDBACK_TYPE(fdb)) override; - virtual jvxErrorType JVX_CALLINGCONVENTION postprocess_connect_icon(JVX_CONNECTION_FEEDBACK_TYPE(fdb))override; - - jvxErrorType set_manipulate_value(jvxSize id, jvxVariant* varray) override; - jvxErrorType get_manipulate_value(jvxSize id, jvxVariant* varray) override; - - jvxErrorType request_hidden_interface(jvxInterfaceType tp, jvxHandle** hdl) override; - jvxErrorType return_hidden_interface(jvxInterfaceType tp, jvxHandle* hdl) override; - - virtual jvxErrorType JVX_CALLINGCONVENTION put_configuration(jvxCallManagerConfiguration* callMan, - IjvxConfigProcessor* processor, - jvxHandle* sectionToContainAllSubsectionsForMe, - const char* filename, - jvxInt32 lineno)override; - - virtual jvxErrorType JVX_CALLINGCONVENTION get_configuration(jvxCallManagerConfiguration* callMan, - IjvxConfigProcessor* processor, - jvxHandle* sectionWhereToAddAllSubsections)override; - - JVX_PROPERTIES_FORWARD_C_CALLBACK_DECLARE(set_on_config); - - jvxErrorType report_selected_connector(CjvxSingleInputConnector* iconn) override; - void request_unique_id_start(CjvxSingleInputConnector* iconn, jvxSize* uId) override; - void release_unique_id_stop(CjvxSingleInputConnector* iconn, jvxSize uId) override; - void report_process_buffers(CjvxSingleInputConnector* iconn, jvxHandle** bufferPtrs, const jvxLinkDataDescriptor_con_params& params) override; - - // ============================================================================= - - jvxErrorType report_selected_connector(CjvxSingleOutputConnector* iconn) override; - void request_unique_id_start(CjvxSingleOutputConnector* iconn, jvxSize* uId) override; - void release_unique_id_stop(CjvxSingleOutputConnector* iconn, jvxSize uId) override; - virtual void report_process_buffers(CjvxSingleOutputConnector* oconn, jvxHandle** bufferPtrs, const jvxLinkDataDescriptor_con_params& params) override; - - static void correct_order_channel_route(jvxSize* ptrChannelRoutes, jvxSize szChannelRoutes); - */ }; // ============================================================================ diff --git a/sources/jvxLibraries/jvx-component-templates-base/src/jvxAudioTechnologies/CjvxAudioDevice.cpp b/sources/jvxLibraries/jvx-component-templates-base/src/jvxAudioTechnologies/CjvxAudioDevice.cpp index ab41794f..aef12380 100644 --- a/sources/jvxLibraries/jvx-component-templates-base/src/jvxAudioTechnologies/CjvxAudioDevice.cpp +++ b/sources/jvxLibraries/jvx-component-templates-base/src/jvxAudioTechnologies/CjvxAudioDevice.cpp @@ -981,20 +981,20 @@ CjvxAudioDevice::transfer_backward_ocon(jvxLinkDataTransferType tp, jvxHandle* d jvxSize i; jvxErrorType res = JVX_NO_ERROR; jvxLinkDataDescriptor* tryThis = reinterpret_cast(data); - jvx::propertyCallCompactList* propCallCompact = nullptr; + jvx::propertyCallCompactRefList* propCallCompact = nullptr; switch (tp) { case JVX_LINKDATA_TRANSFER_REQUEST_GET_PROPERTIES: - propCallCompact = (jvx::propertyCallCompactList*)data; + propCallCompact = (jvx::propertyCallCompactRefList*)data; if (propCallCompact) { jvxBool forwardChain = false; for (auto& elm : propCallCompact->propReqs) { - if (elm->resCall == JVX_ERROR_ELEMENT_NOT_FOUND) + if (elm.resCall == JVX_ERROR_ELEMENT_NOT_FOUND) { - elm->resCall = this->get_property((elm->callMan), elm->rawPtr, - elm->ident, elm->detail); + elm.resCall = this->get_property((elm.callMan), elm.rawPtr, + elm.ident, elm.detail); } } return JVX_NO_ERROR; @@ -1008,21 +1008,21 @@ jvxErrorType CjvxAudioDevice::transfer_forward_icon(jvxLinkDataTransferType tp, jvxHandle* data JVX_CONNECTION_FEEDBACK_TYPE_A(fdb)) { jvxErrorType res = JVX_NO_ERROR; - jvx::propertyCallCompactList* propCallCompact = nullptr; + jvx::propertyCallCompactRefList* propCallCompact = nullptr; switch (tp) { case JVX_LINKDATA_TRANSFER_REQUEST_GET_PROPERTIES: - propCallCompact = (jvx::propertyCallCompactList*)data; + propCallCompact = (jvx::propertyCallCompactRefList*)data; if (propCallCompact) { jvxBool forwardChain = false; for (auto& elm : propCallCompact->propReqs) { - if (elm->resCall == JVX_ERROR_ELEMENT_NOT_FOUND) + if (elm.resCall == JVX_ERROR_ELEMENT_NOT_FOUND) { - elm->resCall = this->get_property((elm->callMan), elm->rawPtr, - elm->ident, elm->detail); + elm.resCall = this->get_property((elm.callMan), elm.rawPtr, + elm.ident, elm.detail); } } return JVX_NO_ERROR; diff --git a/sources/jvxLibraries/jvx-component-templates-product/src/jvxAudioNodes/CjvxAuN2AudioMixer_test.cpp b/sources/jvxLibraries/jvx-component-templates-product/src/jvxAudioNodes/CjvxAuN2AudioMixer_test.cpp index 0be0f87e..e6524bf4 100644 --- a/sources/jvxLibraries/jvx-component-templates-product/src/jvxAudioNodes/CjvxAuN2AudioMixer_test.cpp +++ b/sources/jvxLibraries/jvx-component-templates-product/src/jvxAudioNodes/CjvxAuN2AudioMixer_test.cpp @@ -126,37 +126,30 @@ CjvxAuN2AudioMixer::update_channels_on_test(const jvxLinkDataDescriptor* datIn, i = 0; // Check current input channel selection - jvx::propertyCallCompactList cptTrans; + jvx::propertyCallCompactRefList cptTrans; - jvxCallManagerProperties callManChans; - callManChans.access_protocol = jvxAccessProtocol::JVX_ACCESS_PROTOCOL_NO_CALL; jvxSelectionList selLst; - jPRG rawPtrChans = jvx::propertyRawPointerType::CjvxRawPointerTypeObject(selLst); - jPAD identChans("/system/sel_input_channels"); - jPD detailChans; - jvx::propertyCallCompactElement cptElmChans(callManChans, rawPtrChans, identChans, detailChans); + jvx::propertyCallCompactElement cptElmChans( + jvx::propertyRawPointerType::CjvxRawPointerTypeObject(selLst), + jPAD ("/system/sel_input_channels"), jPD()); - cptTrans.propReqs.push_back(&cptElmChans); + cptTrans.propReqs.push_back(cptElmChans.toRefElement()); - jvxCallManagerProperties callManSrc; - callManSrc.access_protocol = jvxAccessProtocol::JVX_ACCESS_PROTOCOL_NO_CALL; - jvxApiString srcName; - jPRG rawPtrSrc = jvx::propertyRawPointerType::CjvxRawPointerTypeObject(srcName); - jPAD identSrc("/system/src_name"); - jPD detailSrc; - jvx::propertyCallCompactElement cptElmSrc(callManSrc, rawPtrSrc, identSrc, detailSrc); - cptTrans.propReqs.push_back(&cptElmSrc); + jvxApiString srcName; + jvx::propertyCallCompactElement< jPRG, jPAD, jPD> cptElmSrc( + jvx::propertyRawPointerType::CjvxRawPointerTypeObject(srcName), jPAD("/system/src_name"), jPD()); + cptTrans.propReqs.push_back(cptElmSrc.toRefElement()); jvxBool channelsFound = false; jvxErrorType resL = datIn->con_link.connect_from->transfer_backward_ocon(jvxLinkDataTransferType::JVX_LINKDATA_TRANSFER_REQUEST_GET_PROPERTIES, reinterpret_cast(&cptTrans) JVX_CONNECTION_FEEDBACK_CALL_A_NULL); if (resL == JVX_NO_ERROR) { - if ((cptElmSrc.resCall == JVX_NO_ERROR) && (callManSrc.access_protocol == jvxAccessProtocol::JVX_ACCESS_PROTOCOL_OK)) + if ((cptElmSrc.resCall == JVX_NO_ERROR) && (cptElmSrc.callMan.access_protocol == jvxAccessProtocol::JVX_ACCESS_PROTOCOL_OK)) { nmMaster = srcName.std_str(); } - if ((cptElmSrc.resCall == JVX_NO_ERROR) && (callManChans.access_protocol == jvxAccessProtocol::JVX_ACCESS_PROTOCOL_OK)) + if ((cptElmSrc.resCall == JVX_NO_ERROR) && (cptElmChans.callMan.access_protocol == jvxAccessProtocol::JVX_ACCESS_PROTOCOL_OK)) { for (i = 0; i < selLst.strList.ll(); i++) { @@ -264,35 +257,29 @@ CjvxAuN2AudioMixer::update_channels_on_test(const jvxLinkDataDescriptor* datIn, i = 0; // Check current input channel selection - jvx::propertyCallCompactList cptTrans; + jvx::propertyCallCompactRefList cptTrans; - jvxCallManagerProperties callManChans; - callManChans.access_protocol = jvxAccessProtocol::JVX_ACCESS_PROTOCOL_NO_CALL; jvxSelectionList selLst; - jPRG rawPtrChans = jvx::propertyRawPointerType::CjvxRawPointerTypeObject(selLst); - jPAD identChans("/system/sel_output_channels"); - jPD detailChans; - jvx::propertyCallCompactElement cptElmChans(callManChans, rawPtrChans, identChans, detailChans); + jvx::propertyCallCompactElement< jPRG, jPAD, jPD> cptElmChans( + jvx::propertyRawPointerType::CjvxRawPointerTypeObject(selLst), + jPAD("/system/sel_output_channels"), jPD()); - cptTrans.propReqs.push_back(&cptElmChans); + cptTrans.propReqs.push_back(cptElmChans.toRefElement()); - jvxCallManagerProperties callManSrc; - callManSrc.access_protocol = jvxAccessProtocol::JVX_ACCESS_PROTOCOL_NO_CALL; jvxApiString srcName; - jPRG rawPtrSrc = jvx::propertyRawPointerType::CjvxRawPointerTypeObject(srcName); - jPAD identSrc("/system/snk_name"); - jPD detailSrc; - jvx::propertyCallCompactElement cptElmSrc(callManSrc, rawPtrSrc, identSrc, detailSrc); - cptTrans.propReqs.push_back(&cptElmSrc); + jvx::propertyCallCompactElement< jPRG, jPAD, jPD> cptElmSrc( + jvx::propertyRawPointerType::CjvxRawPointerTypeObject(srcName), + jPAD("/system/snk_name"), jPD()); + cptTrans.propReqs.push_back(cptElmSrc.toRefElement()); jvxErrorType resL = datOut->con_link.connect_to->transfer_forward_icon(jvxLinkDataTransferType::JVX_LINKDATA_TRANSFER_REQUEST_GET_PROPERTIES, reinterpret_cast(&cptTrans) JVX_CONNECTION_FEEDBACK_CALL_A_NULL); - if ((cptElmSrc.resCall == JVX_NO_ERROR) && (callManSrc.access_protocol == jvxAccessProtocol::JVX_ACCESS_PROTOCOL_OK)) + if ((cptElmSrc.resCall == JVX_NO_ERROR) && (cptElmSrc.callMan.access_protocol == jvxAccessProtocol::JVX_ACCESS_PROTOCOL_OK)) { nmMaster = srcName.std_str(); } - if ((cptElmSrc.resCall == JVX_NO_ERROR) && (callManChans.access_protocol == jvxAccessProtocol::JVX_ACCESS_PROTOCOL_OK)) + if ((cptElmSrc.resCall == JVX_NO_ERROR) && (cptElmChans.callMan.access_protocol == jvxAccessProtocol::JVX_ACCESS_PROTOCOL_OK)) { for (i = 0; i < selLst.strList.ll(); i++) { diff --git a/sources/jvxLibraries/jvx-helpers/include/HjvxMisc.h b/sources/jvxLibraries/jvx-helpers/include/HjvxMisc.h index d9a68ca4..63b3fc23 100644 --- a/sources/jvxLibraries/jvx-helpers/include/HjvxMisc.h +++ b/sources/jvxLibraries/jvx-helpers/include/HjvxMisc.h @@ -644,6 +644,8 @@ namespace jvx { jvxErrorType genericDataBufferConvert(jvxHandle** bufsIn, jvxDataFormat formIn, jvxHandle** bufsOut, jvxDataFormat formOut, jvxSize nChans, jvxSize numElms); jvxBool checkAllowTypeChange(jvxComponentType tpOld, jvxComponentType tpNew); + + jvxBool translate_transfer_chain_get_properties(jvx::propertyCallCompactRefList* propCallCompact, IjvxProperties* prop_ptr); } namespace align { diff --git a/sources/jvxLibraries/jvx-helpers/src/HjvxMisc.cpp b/sources/jvxLibraries/jvx-helpers/src/HjvxMisc.cpp index b2e05209..4329fdfa 100644 --- a/sources/jvxLibraries/jvx-helpers/src/HjvxMisc.cpp +++ b/sources/jvxLibraries/jvx-helpers/src/HjvxMisc.cpp @@ -4819,7 +4819,31 @@ namespace jvx { break; } return res; - } + } + + jvxBool translate_transfer_chain_get_properties(jvx::propertyCallCompactRefList* propCallCompact, IjvxProperties* prop_ptr) + { + jvxBool atLeastOnePropertyIsOpen = false; + + // propCallCompact = (jvx::propertyCallCompactList*)data; + if (propCallCompact) + { + + for (auto& elm : propCallCompact->propReqs) + { + if (elm.resCall == JVX_ERROR_ELEMENT_NOT_FOUND) + { + elm.resCall = prop_ptr->get_property((elm.callMan), elm.rawPtr, + elm.ident, elm.detail); + } + if (elm.resCall == JVX_ERROR_ELEMENT_NOT_FOUND) + { + atLeastOnePropertyIsOpen = true; + } + } + } + return atLeastOnePropertyIsOpen; + } } namespace align { diff --git a/sources/jvxLibraries/jvx-system-base/include/typedefs/TjvxPropertyCompact.h b/sources/jvxLibraries/jvx-system-base/include/typedefs/TjvxPropertyCompact.h index e114f72e..41a3898e 100644 --- a/sources/jvxLibraries/jvx-system-base/include/typedefs/TjvxPropertyCompact.h +++ b/sources/jvxLibraries/jvx-system-base/include/typedefs/TjvxPropertyCompact.h @@ -3,26 +3,47 @@ namespace jvx { - class propertyCallCompactElement + class propertyCallCompactElementRef { public: jvxCallManagerProperties& callMan; const propertyRawPointerType::IjvxRawPointerType& rawPtr; const propertyAddress::IjvxPropertyAddress& ident; const propertyDetail::CjvxTranferDetail& detail; - jvxErrorType resCall = JVX_ERROR_ELEMENT_NOT_FOUND; + jvxErrorType& resCall; - propertyCallCompactElement(jvxCallManagerProperties& callManArg, + propertyCallCompactElementRef(jvxCallManagerProperties& callManArg, const propertyRawPointerType::IjvxRawPointerType& rawPtrArg, const propertyAddress::IjvxPropertyAddress& identArg, - const propertyDetail::CjvxTranferDetail& detailArg) : - callMan(callManArg), rawPtr(rawPtrArg), ident(identArg), detail(detailArg) {}; + const propertyDetail::CjvxTranferDetail& detailArg, + jvxErrorType& resCallArg) : + callMan(callManArg), rawPtr(rawPtrArg), ident(identArg), detail(detailArg), resCall(resCallArg) {}; + }; + + template class propertyCallCompactElement + { + public: + jvxCallManagerProperties callMan; + T1 rawPtrt1; + T2 identt1; + T3 detailt1; + jvxErrorType resCall = JVX_ERROR_ELEMENT_NOT_FOUND; + + propertyCallCompactElement(const T1& rawPtr, const T2& ident, const T3& detail) : + rawPtrt1(rawPtr), identt1(ident), detailt1(detail) + { + callMan.access_protocol = jvxAccessProtocol::JVX_ACCESS_PROTOCOL_NO_CALL; + }; + propertyCallCompactElementRef toRefElement() + { + return propertyCallCompactElementRef(callMan, rawPtrt1, identt1, detailt1, resCall); + } }; - class propertyCallCompactList + class propertyCallCompactRefList { public: - std::list propReqs; + std::list propReqs; }; }