@@ -92,6 +92,14 @@ void ParameterCollection::copyParameterValuesTo(InfoObject* obj)
9292
9393void ParameterCollection::copyParametersTo (InfoObject* obj)
9494{
95+ int channelCount = -1 ;
96+
97+ if (obj->getType () == InfoObject::DATASTREAM_INFO)
98+ {
99+ DataStream* s = (DataStream*)obj;
100+ channelCount = s->getChannelCount ();
101+ }
102+
95103 obj->parameters .clear ();
96104
97105 for (auto parameter : parameters)
@@ -117,13 +125,21 @@ void ParameterCollection::copyParametersTo(InfoObject* obj)
117125 else if (parameter->getType () == Parameter::SELECTED_CHANNELS_PARAM)
118126 {
119127 SelectedChannelsParameter* p = (SelectedChannelsParameter*) parameter;
128+
129+ if (channelCount != -1 )
130+ p->setChannelCount (channelCount);
131+
120132 obj->addParameter (new SelectedChannelsParameter (*p));
121133 setParameterOwner (p, obj);
122134
123135 }
124136 else if (parameter->getType () == Parameter::MASK_CHANNELS_PARAM)
125137 {
126138 MaskChannelsParameter* p = (MaskChannelsParameter*) parameter;
139+
140+ if (channelCount != -1 )
141+ p->setChannelCount (channelCount);
142+
127143 obj->addParameter (new MaskChannelsParameter (*p));
128144 setParameterOwner (p, obj);
129145
@@ -261,10 +277,17 @@ void ParameterCollection::copyParametersFrom(InfoObject* obj)
261277
262278void ParameterCollection::addParameter (Parameter* p)
263279{
264- parameters.add (p);
265-
266- // std::cout << "Adding parameter to " << p->getStreamId() << ": " << p->getName() << std::endl;
280+
281+ if (parameterMap.find (p->getName ()) != parameterMap.end ()) {
282+ for (int i = 0 ; i < parameters.size (); i++) {
283+ if (parameters[i]->getName () == p->getName ()) {
284+ parameters.remove (i);
285+ break ;
286+ }
287+ }
288+ }
267289
290+ parameters.add (p);
268291 parameterMap[p->getName ()] = p;
269292}
270293
0 commit comments