Skip to content

Commit

Permalink
Added channel offset and width to MixChain component
Browse files Browse the repository at this point in the history
  • Loading branch information
hkbinaurics committed Jun 7, 2024
1 parent 51627e2 commit a9a7dfc
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ set(LOCAL_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/src/CjvxSpNMixChainEnterLeave_output.cpp

${CMAKE_CURRENT_SOURCE_DIR}/src/CjvxSpNMixChainEnterLeave_config.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/CjvxSpNMixChainEnterLeave_props.cpp
)

set(LOCAL_LIBS
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,53 @@ SECTION PROPERTIES
ASSOCIATE_EXTERNAL = "yes";
};
};

SECTION sources_channel_routing
{
GENERATE_ENTRIES_CONFIG_FILE = "no"; // Defaults to "no" if not present
ALLOWED_STATE_MASK = {"JVX_STATE_SELECTED", "JVX_STATE_ACTIVE", "JVX_STATE_PREPARED", "JVX_STATE_PROCESSING"};
CALLBACKS = {"specify_one_definition", "remove_one_definition"};

SECTION one_new_entry
{
TYPE = "JVX_DATAFORMAT_STRING";
CALLBACK_SET_POSTHOOK = "specify_one_definition";
READ_WRITE_ACCESS = "JVX_PROPERTY_ACCESS_FULL_READ_AND_WRITE";
};
SECTION all_definitions
{
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"};
READ_WRITE_ACCESS = "JVX_PROPERTY_ACCESS_READ_AND_WRITE_CONTENT";
};
SECTION remove_entry
{
TYPE = "JVX_DATAFORMAT_BOOL";
INIT_SET = 0;
CALLBACK_SET_POSTHOOK = "remove_one_definition";
READ_WRITE_ACCESS = "JVX_PROPERTY_ACCESS_FULL_READ_AND_WRITE";
};
SECTION all_offsets
{
TYPE = "JVX_DATAFORMAT_SIZE";
READ_WRITE_ACCESS = "JVX_PROPERTY_ACCESS_FULL_READ_AND_WRITE";
ASSOCIATE_EXTERNAL = "yes";
};
SECTION all_max_chans
{
TYPE = "JVX_DATAFORMAT_SIZE";
READ_WRITE_ACCESS = "JVX_PROPERTY_ACCESS_FULL_READ_AND_WRITE";
ASSOCIATE_EXTERNAL = "yes";
};
SECTION last_error
{
TYPE = "JVX_DATAFORMAT_STRING";
INIT_SET = "";
READ_WRITE_ACCESS = "JVX_PROPERTY_ACCESS_READ_ONLY";
};
};
};
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,13 @@ CjvxSpNMixChainEnterLeave::select(IjvxObject* owner)
genMixChain::allocate__config();
genMixChain::register__config(this);

genMixChain::register_callbacks(this, set_on_config, this);
genMixChain::init__sources_channel_routing();
genMixChain::allocate__sources_channel_routing();
genMixChain::register__sources_channel_routing(this);

genMixChain::sources_channel_routing.all_definitions.value.entries.clear();

genMixChain::register_callbacks(this, set_on_config, specify_one_definition, remove_one_definition, this);

operationMode = genMixChain::translate__config__operation_mode_from();
}
Expand All @@ -47,7 +53,11 @@ CjvxSpNMixChainEnterLeave::unselect()
if (res == JVX_NO_ERROR)
{
genMixChain::unregister_callbacks(this);
genMixChain::unregister__config(this);

genMixChain::unregister__sources_channel_routing(this);
genMixChain::deallocate__sources_channel_routing();

genMixChain::unregister__config(this);
genMixChain::deallocate__config();

CjvxBareNode1ioRearrange::unselect();
Expand All @@ -68,6 +78,8 @@ CjvxSpNMixChainEnterLeave::activate()
_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);

offset_channels_to_property();

switch (operationMode)
{
case jvxOperationModeMixChain::JVX_OPERTION_MODE_MIX_CHAIN_INPUT:
Expand Down Expand Up @@ -487,43 +499,6 @@ CjvxSpNMixChainEnterLeave::process_buffers_icon(jvxSize mt_mask, jvxSize idx_sta
return res;
}

JVX_PROPERTIES_FORWARD_C_CALLBACK_EXECUTE_FULL(CjvxSpNMixChainEnterLeave, set_on_config)
{
jvxBool triggerTest = false;
if (JVX_PROPERTY_CHECK_ID_CAT_SIMPLE(genMixChain::config.number_channels_side))
{
// New number of channels, run the test function
triggerTest = true;
}
if (JVX_PROPERTY_CHECK_ID_CAT_SIMPLE(genMixChain::config.operation_mode))
{
operationMode = genMixChain::translate__config__operation_mode_from();
triggerTest = true;
}

if (JVX_PROPERTY_CHECK_ID_CAT_SIMPLE(genMixChain::config.channel_routing))
{
// Correct channel order
correct_order_channel_route(ptrChannelRoutes, szChannelRoutes);

// Update channel routings
if (szChannelRoutes)
{
memcpy(oldRouting.data(), ptrChannelRoutes, szChannelRoutes * sizeof(jvxSize));
}

operationMode = genMixChain::translate__config__operation_mode_from();
triggerTest = true;
}

if (triggerTest)
{
this->inform_chain_test();
}

return JVX_NO_ERROR;
}

void
CjvxSpNMixChainEnterLeave::correct_order_channel_route(jvxSize* ptrChannelRoutes, jvxSize szChannelRoutes)
{
Expand Down Expand Up @@ -667,12 +642,14 @@ CjvxSpNMixChainEnterLeave::return_hidden_interface(jvxInterfaceType tp, jvxHandl
return CjvxBareNode1ioRearrange::return_hidden_interface(tp, hdl);
}


bool
CjvxSpNMixChainEnterLeave::check_positive_zero_copy()
{
return (
(_common_set_ocon.theData_out.con_params.buffersize == node_inout._common_set_node_params_a_1io.buffersize) &&
(_common_set_ocon.theData_out.con_params.format == node_inout._common_set_node_params_a_1io.format) &&
(_common_set_ocon.theData_out.con_params.rate == node_inout._common_set_node_params_a_1io.samplerate));// &&
//(_common_set_ocon.theData_out.con_params.number_channels == node_inout._common_set_node_params_a_1io.number_channels));
(_common_set_ocon.theData_out.con_params.rate == node_inout._common_set_node_params_a_1io.samplerate));

// Here is the trick: we accept zero-copy even if the number of channels does not really fit and CORRECT that afterwards!!
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ enum class jvxOperationModeMixChain

class chanOffsetAndMaxChans
{
public:
jvxComponentIdentification cpId;
jvxSize idxOffset = 0;
jvxSize channel_num = 2;
};
Expand All @@ -41,6 +43,8 @@ class CjvxSpNMixChainEnterLeave : public CjvxBareNode1ioRearrange,

std::vector<jvxSize> oldRouting;

// Add entries via properties:
// <component identification>, <offset>, <max_chans>
std::map<jvxComponentIdentification, chanOffsetAndMaxChans> presets_channel_routing;

/*
Expand Down Expand Up @@ -90,6 +94,8 @@ class CjvxSpNMixChainEnterLeave : public CjvxBareNode1ioRearrange,
jvxHandle* sectionWhereToAddAllSubsections)override;

JVX_PROPERTIES_FORWARD_C_CALLBACK_DECLARE(set_on_config);
JVX_PROPERTIES_FORWARD_C_CALLBACK_DECLARE(specify_one_definition);
JVX_PROPERTIES_FORWARD_C_CALLBACK_DECLARE(remove_one_definition);

jvxErrorType report_selected_connector(CjvxSingleInputConnector* iconn) override;
void request_unique_id_start(CjvxSingleInputConnector* iconn, jvxSize* uId) override;
Expand All @@ -106,6 +112,8 @@ class CjvxSpNMixChainEnterLeave : public CjvxBareNode1ioRearrange,
static void correct_order_channel_route(jvxSize* ptrChannelRoutes, jvxSize szChannelRoutes);

bool check_positive_zero_copy()override;

void offset_channels_to_property();
};

// ============================================================================
Expand Down

0 comments on commit a9a7dfc

Please sign in to comment.