multicampanel: move to viewerpanelbase

This commit is contained in:
itsmattkc
2022-09-25 18:06:02 -07:00
parent c1c2d0bc05
commit 15d786538a
5 changed files with 28 additions and 159 deletions
+3 -6
View File
@@ -2,16 +2,13 @@
namespace olive {
#define super PanelWidget
#define super ViewerPanelBase
MulticamPanel::MulticamPanel(ViewerPanelBase *sibling, QWidget *parent) :
MulticamPanel::MulticamPanel(QWidget *parent) :
super(QStringLiteral("MultiCamPanel"), parent)
{
widget_ = new MulticamWidget();
SetWidgetWithPadding(widget_);
connect(sibling, &ViewerPanelBase::ColorManagerChanged, widget_, &MulticamWidget::ConnectColorManager);
widget_->ConnectCacher(static_cast<ViewerWidget*>(sibling->GetTimeBasedWidget())->GetCacher());
SetViewerWidget(widget_);
Retranslate();
}
+2 -14
View File
@@ -3,26 +3,14 @@
#include "panel/viewer/viewerbase.h"
#include "widget/multicam/multicamwidget.h"
#include "widget/panel/panel.h"
namespace olive {
class MulticamPanel : public PanelWidget
class MulticamPanel : public ViewerPanelBase
{
Q_OBJECT
public:
MulticamPanel(ViewerPanelBase *sibling, QWidget* parent = nullptr);
void SetNode(MultiCamNode *n)
{
widget_->SetNode(n);
}
public slots:
void SetTime(const rational &t)
{
widget_->SetTime(t);
}
MulticamPanel(QWidget* parent = nullptr);
protected:
virtual void Retranslate() override;
+2 -93
View File
@@ -2,103 +2,12 @@
namespace olive {
#define super ManagedDisplayWidget
#define super ViewerWidget
MulticamWidget::MulticamWidget(QWidget *parent) :
super{parent},
node_(nullptr),
cacher_(nullptr),
tex_(nullptr)
super{parent}
{
}
void MulticamWidget::SetNode(MultiCamNode *n)
{
if (node_ == n) {
return;
}
if (node_) {
// Disconnect
}
node_ = n;
if (node_) {
// Connect
}
SetTime(time_);
}
void MulticamWidget::SetTime(const rational &r)
{
time_ = r;
if (node_) {
if (cacher_) {
int sources = node_->InputArraySize(node_->kSourcesInput);
watchers_.resize(sources);
textures_.resize(sources);
watchers_.fill(nullptr);
textures_.fill(nullptr);
for (int i=0; i<sources; i++) {
if (Node *n = node_->GetConnectedOutput(node_->kSourcesInput, 0)) {
auto w = new RenderTicketWatcher(this);
connect(w, &RenderTicketWatcher::Finished, this, &MulticamWidget::RenderedFrame);
w->SetTicket(cacher_->GetSingleFrame(n, time_, false));
watchers_[i] = w;
}
}
}
}
}
void MulticamWidget::OnInit()
{
super::OnInit();
pipeline_ = renderer()->CreateNativeShader(ShaderCode(FileFunctions::ReadFileAsString(QStringLiteral(":/shaders/multicam.frag"))));
}
void MulticamWidget::OnPaint()
{
// Clear display surface
renderer()->ClearDestination();
if (tex_) {
ColorTransformJob job;
job.SetColorProcessor(color_service());
job.SetInputTexture(tex_);
job.SetInputAlphaAssociation(kAlphaNone);
renderer()->BlitColorManaged(job, GetViewportParams());
}
}
void MulticamWidget::OnDestroy()
{
pipeline_.clear();
tex_ = nullptr;
super::OnDestroy();
}
void MulticamWidget::RenderedFrame()
{
auto watcher = static_cast<RenderTicketWatcher*>(sender());
if (watcher->HasResult()) {
int index = watchers_.indexOf(watcher);
if (index != -1) {
if ((textures_[index] = watcher->Get().value<TexturePtr>())) {
update();
}
}
}
delete watcher;
}
}
+3 -39
View File
@@ -3,54 +3,18 @@
#include "node/input/multicam/multicamnode.h"
#include "render/previewautocacher.h"
#include "widget/manageddisplay/manageddisplay.h"
#include "widget/viewer/viewer.h"
namespace olive {
class MulticamWidget : public ManagedDisplayWidget
class MulticamWidget : public ViewerWidget
{
Q_OBJECT
public:
explicit MulticamWidget(QWidget *parent = nullptr);
MANAGEDDISPLAYWIDGET_DEFAULT_DESTRUCTOR(MulticamWidget)
void SetNode(MultiCamNode *n);
void ConnectCacher(PreviewAutoCacher *c)
{
cacher_ = c;
}
public slots:
void SetTime(const rational &r);
protected slots:
virtual void OnInit() override;
virtual void OnPaint() override;
virtual void OnDestroy() override;
signals:
private:
MultiCamNode *node_;
QVariant pipeline_;
PreviewAutoCacher *cacher_;
rational time_;
TexturePtr tex_;
QVector<RenderTicketWatcher*> watchers_;
QVector<TexturePtr> textures_;
private slots:
void RenderedFrame();
//MultiCamNode *node_;
};
+18 -7
View File
@@ -87,7 +87,7 @@ MainWindow::MainWindow(QWidget *parent) :
param_panel_ = new ParamPanel(this);
curve_panel_ = new CurvePanel(this);
sequence_viewer_panel_ = new SequenceViewerPanel(this);
multicam_panel_ = new MulticamPanel(sequence_viewer_panel_, this);
multicam_panel_ = new MulticamPanel(this);
pixel_sampler_panel_ = new PixelSamplerPanel(this);
AppendProjectPanel();
tool_panel_ = new ToolPanel(this);
@@ -106,6 +106,9 @@ MainWindow::MainWindow(QWidget *parent) :
connect(param_panel_, &ParamPanel::SelectedNodesChanged, node_panel_, &NodePanel::Select);
// Connect time signals together
connect(multicam_panel_, &SequenceViewerPanel::TimeChanged, param_panel_, &ParamPanel::SetTime);
connect(multicam_panel_, &SequenceViewerPanel::TimeChanged, curve_panel_, &NodeTablePanel::SetTime);
connect(multicam_panel_, &SequenceViewerPanel::TimeChanged, sequence_viewer_panel_, &SequenceViewerPanel::SetTime);
connect(sequence_viewer_panel_, &SequenceViewerPanel::TimeChanged, param_panel_, &ParamPanel::SetTime);
connect(sequence_viewer_panel_, &SequenceViewerPanel::TimeChanged, curve_panel_, &NodeTablePanel::SetTime);
connect(sequence_viewer_panel_, &SequenceViewerPanel::TimeChanged, multicam_panel_, &MulticamPanel::SetTime);
@@ -120,6 +123,7 @@ MainWindow::MainWindow(QWidget *parent) :
sequence_viewer_panel_->ConnectTimeBasedPanel(param_panel_);
sequence_viewer_panel_->ConnectTimeBasedPanel(curve_panel_);
sequence_viewer_panel_->ConnectTimeBasedPanel(multicam_panel_);
scope_panel_->SetViewerPanel(sequence_viewer_panel_);
@@ -494,18 +498,24 @@ void MainWindow::TimelinePanelSelectionChanged(const QVector<Block *> &blocks)
if (PanelManager::instance()->CurrentlyFocused(false) == panel) {
UpdateNodePanelContextFromTimelinePanel(panel);
bool found = false;
MultiCamNode *multicam = nullptr;
for (Block *b : blocks) {
if (ClipBlock *c = dynamic_cast<ClipBlock*>(b)) {
if (MultiCamNode *m = dynamic_cast<MultiCamNode*>(c->GetConnectedOutput(c->kBufferIn))) {
multicam_panel_->SetNode(m);
found = true;
if ((multicam = dynamic_cast<MultiCamNode*>(c->GetConnectedOutput(c->kBufferIn)))) {
break;
}
}
}
if (!found) {
multicam_panel_->SetNode(nullptr);
if (multicam) {
qDebug() << "Found multicam node!";
//multicam_panel_->SetNode(multicam);
multicam_panel_->ConnectViewerNode(panel->GetConnectedViewer());
} else {
qDebug() << "Found NO multicam node";
multicam_panel_->ConnectViewerNode(nullptr);
//multicam_panel_->SetNode(nullptr);
}
}
}
@@ -624,6 +634,7 @@ TimelinePanel* MainWindow::AppendTimelinePanel()
connect(panel, &TimelinePanel::RevealViewerInFootageViewer, this, &MainWindow::RevealViewerInFootageViewer);
connect(param_panel_, &ParamPanel::TimeChanged, panel, &TimelinePanel::SetTime);
connect(curve_panel_, &ParamPanel::TimeChanged, panel, &TimelinePanel::SetTime);
connect(multicam_panel_, &SequenceViewerPanel::TimeChanged, panel, &TimelinePanel::SetTime);
connect(sequence_viewer_panel_, &SequenceViewerPanel::TimeChanged, panel, &TimelinePanel::SetTime);
sequence_viewer_panel_->ConnectTimeBasedPanel(panel);