Skip to content

Commit c614cac

Browse files
committed
Update RecordNode to manage sync line and main stream relationships
1 parent 84f1b11 commit c614cac

3 files changed

Lines changed: 60 additions & 16 deletions

File tree

Source/Processors/RecordNode/RecordNode.cpp

Lines changed: 53 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Source/Processors/Synchronizer/Synchronizer.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -375,9 +375,11 @@ void Synchronizer::finishedUpdate()
375375
}
376376
}
377377
}
378+
379+
reset();
378380
}
379381

380-
void Synchronizer::addDataStream (String streamKey, float expectedSampleRate, bool generatesTimestamps)
382+
void Synchronizer::addDataStream (String streamKey, float expectedSampleRate, int syncLine, bool generatesTimestamps)
381383
{
382384
LOGD ("Synchronizer adding ", streamKey, " with sample rate ", expectedSampleRate);
383385

@@ -391,14 +393,14 @@ void Synchronizer::addDataStream (String streamKey, float expectedSampleRate, bo
391393
//std::cout << "Creating new Stream object" << std::endl;
392394
dataStreamObjects.add (new SyncStream (streamKey, expectedSampleRate, this, generatesTimestamps));
393395
streams[streamKey] = dataStreamObjects.getLast();
394-
setSyncLine (streamKey, generatesTimestamps ? -1 : 0); // if the stream generates its own timestamps, set sync line to -1 (no sync line), otherwise set it to 0
396+
streams[streamKey]->syncLine = syncLine;
395397

396398
streamCount++;
397399
}
398400

399401
void Synchronizer::setMainDataStream (String streamKey)
400402
{
401-
if (streams.count (streamKey) == 0)
403+
if (streamKey.isNotEmpty() && streams.count (streamKey) == 0)
402404
{
403405
LOGD ("Cannot set ", streamKey, " as main data stream. Stream not found.");
404406
return;

Source/Processors/Synchronizer/Synchronizer.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -224,9 +224,8 @@ class PLUGIN_API Synchronizer : public HighResolutionTimer
224224
/** Sets main stream ID to 0 and stream count to 0*/
225225
void prepareForUpdate();
226226

227-
/** Adds a new data stream with an expected sample rate
228-
* If the stream already exists, */
229-
void addDataStream (String streamKey, float expectedSampleRate, bool generatesTimestamps = false);
227+
/** Adds a new data stream with an expected sample rate, a synchronization line, and a flag indicating whether it generates its own timestamps */
228+
void addDataStream (String streamKey, float expectedSampleRate, int synLine = 0, bool generatesTimestamps = false);
230229

231230
/** Checks if there is only one stream */
232231
void finishedUpdate();

0 commit comments

Comments
 (0)