multicam: refactor to heavily optimize multicam monitor retrieval

This commit is contained in:
itsmattkc
2022-09-29 17:50:09 -07:00
parent 63163ba23e
commit 6e183fe4be
25 changed files with 300 additions and 162 deletions
+8 -8
View File
@@ -43,7 +43,7 @@ PreviewAutoCacher::PreviewAutoCacher(QObject *parent) :
pause_renders_(false),
single_frame_render_(nullptr),
display_color_processor_(nullptr),
multicam_mode_(false),
multicam_(nullptr),
ignore_cache_requests_(false)
{
// Set defaults
@@ -216,6 +216,7 @@ void PreviewAutoCacher::VideoRendered()
QVector<RenderTicketPtr> tickets = video_immediate_passthroughs_.take(watcher);
foreach (RenderTicketPtr t, tickets) {
if (watcher->HasResult()) {
t->setProperty("multicam_output", watcher->GetTicket()->property("multicam_output"));
t->Finish(watcher->Get());
} else {
t->Finish();
@@ -288,13 +289,6 @@ void PreviewAutoCacher::AddNode(Node *node)
// Copy node
Node* copy = node->copy();
// Fairly hacky way of getting multicam nodes to produce a monitor rather than a single source
if (multicam_mode_) {
if (MultiCamNode *m = dynamic_cast<MultiCamNode*>(copy)) {
m->SetMonitorMode(true);
}
}
// Add to project
copy->setParent(&copied_project_);
@@ -742,6 +736,9 @@ RenderTicketWatcher* PreviewAutoCacher::RenderFrame(Node *node, const rational&
// Allow using cached images for this render job
rvp.use_cache = true;
// Multicam
rvp.multicam = static_cast<MultiCamNode*>(copy_map_.value(multicam_));
watcher->SetTicket(RenderManager::instance()->RenderFrame(rvp));
return watcher;
@@ -848,6 +845,9 @@ void PreviewAutoCacher::SetViewerNode(ViewerOutput *viewer_node)
video_cache_data_.clear();
audio_cache_data_.clear();
// Clear multicam reference
multicam_ = nullptr;
// Disconnect signals for future node additions/deletions
NodeGraph* graph = viewer_node_->parent();