multicampanel: move to viewerpanelbase
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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,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,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_;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user