@@ -161,20 +161,62 @@ void RecordNode::parameterValueChanged (Parameter* p)
161161 else if (p->getName () == " sync_line" )
162162 {
163163 LOGD (" Parameter changed: sync_line" );
164- synchronizer.setSyncLine (getDataStream (p->getStreamId ())->getKey (), ((TtlLineParameter*) p)->getSelectedLine ());
164+ int selectedLine = ((TtlLineParameter*) p)->getSelectedLine ();
165+ synchronizer.setSyncLine (getDataStream (p->getStreamId ())->getKey (), selectedLine);
166+
167+ if (selectedLine == -1 && synchronizer.mainStreamKey == getDataStream (p->getStreamId ())->getKey ())
168+ {
169+ int streamIndex = 0 ;
170+ for (auto stream : dataStreams)
171+ {
172+ if (stream->getStreamId () != p->getStreamId ()
173+ && ! synchronizer.streamGeneratesTimestamps (stream->getKey ()))
174+ {
175+ getParameter (" main_sync" )->setNextValue (streamIndex, false );
176+ return ;
177+ }
178+ streamIndex++;
179+ }
180+
181+ getParameter (" main_sync" )->setNextValue (-1 , false );
182+ }
183+ else if (selectedLine >= 0 && synchronizer.mainStreamKey .isEmpty ())
184+ {
185+ // If the sync line is set, but no main stream is set, we need to set the main stream to the one with the sync line
186+ int streamIndex = 0 ;
187+ for (auto stream : dataStreams)
188+ {
189+ if (stream->getKey () == getDataStream (p->getStreamId ())->getKey ())
190+ {
191+ getParameter (" main_sync" )->setNextValue (streamIndex, false );
192+ return ;
193+ }
194+ streamIndex++;
195+ }
196+ }
165197 }
166198 else if (p->getName () == " main_sync" )
167199 {
168200 LOGD (" Parameter changed: main_sync" );
169- Array<String> streamNames = ((SelectedStreamParameter*) p)->getStreamNames ();
170- for (auto stream : dataStreams)
201+ int streamIndex = ((SelectedStreamParameter*) p)->getSelectedIndex ();
202+
203+ if (streamIndex == -1 )
204+ {
205+ synchronizer.setMainDataStream (" " );
206+ return ;
207+ }
208+ else
171209 {
172- String key = stream->getKey ();
173- if (key == streamNames[((SelectedStreamParameter*) p)->getSelectedIndex ()]
174- && ! synchronizer.streamGeneratesTimestamps (key))
210+ Array<String> streamNames = ((SelectedStreamParameter*) p)->getStreamNames ();
211+ for (auto stream : dataStreams)
175212 {
176- synchronizer.setMainDataStream (stream->getKey ());
177- break ;
213+ String key = stream->getKey ();
214+ if (key == streamNames[streamIndex]
215+ && ! synchronizer.streamGeneratesTimestamps (key))
216+ {
217+ synchronizer.setMainDataStream (stream->getKey ());
218+ break ;
219+ }
178220 }
179221 }
180222 }
@@ -549,11 +591,13 @@ void RecordNode::updateSettings()
549591
550592 for (auto stream : dataStreams)
551593 {
594+ TtlLineParameter* syncLineParam = static_cast <TtlLineParameter*> (stream->getParameter (" sync_line" ));
552595 const uint16 streamId = stream->getStreamId ();
553596 activeStreamIds.add (streamId);
554597
555598 LOGD (" Record Node found stream: (" , streamId, " ) " , stream->getName (), " with sample rate " , stream->getSampleRate ());
556- synchronizer.addDataStream (stream->getKey (), stream->getSampleRate (), stream->generatesTimestamps ());
599+ int syncLine = syncLineParam->getSelectedLine ();
600+ synchronizer.addDataStream (stream->getKey (), stream->getSampleRate (), syncLine, stream->generatesTimestamps ());
557601
558602 fifoUsage[streamId] = 0 .0f ;
559603
@@ -567,7 +611,6 @@ void RecordNode::updateSettings()
567611 numLines = 1 ;
568612
569613 // Update the number of available lines in the sync line parameter
570- TtlLineParameter* syncLineParam = static_cast <TtlLineParameter*> (stream->getParameter (" sync_line" ));
571614 syncLineParam->setMaxAvailableLines (numLines);
572615 }
573616
0 commit comments