@@ -87,7 +87,44 @@ void ParameterCollection::copyParameterValuesTo (ParameterOwner* pOwner)
8787 for (auto parameter : parameters)
8888 {
8989 if (pOwner->hasParameter (parameter->getName ()))
90- pOwner->getParameter (parameter->getName ())->currentValue = parameter->getValue ();
90+ {
91+ Parameter* targetParam = pOwner->getParameter (parameter->getName ());
92+
93+ // For MaskChannelsParameter and SelectedChannelsParameter, filter the values
94+ // to only include valid channel indices for the target parameter's channel count
95+ if (parameter->getType () == Parameter::MASK_CHANNELS_PARAM)
96+ {
97+ MaskChannelsParameter* targetMaskParam = (MaskChannelsParameter*) targetParam;
98+ int targetChannelCount = targetMaskParam->getChannelCount ();
99+
100+ Array<var> filteredValues;
101+ for (int i = 0 ; i < parameter->getValue ().getArray ()->size (); i++)
102+ {
103+ int channelIndex = (int ) parameter->getValue ()[i];
104+ if (channelIndex >= 0 && channelIndex < targetChannelCount)
105+ filteredValues.add (channelIndex);
106+ }
107+ targetParam->currentValue = filteredValues;
108+ }
109+ else if (parameter->getType () == Parameter::SELECTED_CHANNELS_PARAM)
110+ {
111+ SelectedChannelsParameter* targetSelectedParam = (SelectedChannelsParameter*) targetParam;
112+ int targetChannelCount = targetSelectedParam->getChannelCount ();
113+
114+ Array<var> filteredValues;
115+ for (int i = 0 ; i < parameter->getValue ().getArray ()->size (); i++)
116+ {
117+ int channelIndex = (int ) parameter->getValue ()[i];
118+ if (channelIndex >= 0 && channelIndex < targetChannelCount)
119+ filteredValues.add (channelIndex);
120+ }
121+ targetParam->currentValue = filteredValues;
122+ }
123+ else
124+ {
125+ targetParam->currentValue = parameter->getValue ();
126+ }
127+ }
91128 }
92129}
93130
0 commit comments