set up encoder when setting up the exporter

This commit is contained in:
itsmattkc
2019-12-21 20:13:22 +11:00
parent 355baa893a
commit eaedd23c83
3 changed files with 38 additions and 22 deletions
+12 -1
View File
@@ -187,7 +187,18 @@ void ExportDialog::accept()
video_tab_->CurrentOCIOView(),
video_tab_->CurrentOCIOLook());
OpenGLExporter* exporter = new OpenGLExporter(viewer_node_, video_render_params, transform, color_processor);
// Set up encoder
EncodingParams encoding_params;
encoding_params.SetFilename(filename_edit_->text()); // FIXME: Validate extension
const ExportCodec& video_codec = codecs_.at(video_tab_->codec_combobox()->currentData().toInt());
encoding_params.EnableVideo(VideoRenderingParams(dest_width, dest_height, video_tab_->frame_rate().flipped(), olive::PIX_FMT_RGBA32F, olive::kOnline),
video_codec.id());
EncoderPtr encoder = Encoder::CreateFromID("ffmpeg", encoding_params);
OpenGLExporter* exporter = new OpenGLExporter(viewer_node_, video_render_params, transform, color_processor, encoder);
connect(exporter, &Exporter::ExportEnded, this, &ExportDialog::ExporterIsDone);
connect(exporter, &Exporter::ProgressChanged, progress_bar_, &QProgressBar::setValue);
+17 -16
View File
@@ -3,13 +3,14 @@
#include "render/colormanager.h"
#include "render/pixelservice.h"
Exporter::Exporter(ViewerOutput* viewer, const VideoRenderingParams& params, const QMatrix4x4 &transform, ColorProcessorPtr color_processor, QObject* parent) :
Exporter::Exporter(ViewerOutput* viewer, const VideoRenderingParams& params, const QMatrix4x4 &transform, ColorProcessorPtr color_processor, EncoderPtr encoder, QObject* parent) :
QObject(parent),
video_backend_(nullptr),
audio_backend_(nullptr),
viewer_node_(viewer),
params_(params),
color_processor_(color_processor),
encoder_(encoder),
export_status_(false),
export_msg_(tr("Export hasn't started yet"))
{
@@ -45,11 +46,13 @@ void Exporter::StartExporting()
// Connect to renderers
connect(video_backend_, SIGNAL(CachedFrameReady(const rational&, QVariant)), this, SLOT(FrameRendered(const rational&, QVariant)));
connect(video_backend_, SIGNAL(CachedTimeReady(const rational&)), this, SLOT(TimeRendered(const rational&)));
// Create renderers
waiting_for_frame_ = 0;
// Open encoder
encoder_->Open();
// Invalidate caches
video_backend_->InvalidateCache(0, viewer_node_->Length());
//viewer_node_->InvalidateCache(0, viewer_node_->Length(), viewer_node_->samples_input());
@@ -64,12 +67,14 @@ void Exporter::ExportSucceeded()
{
Cleanup();
delete video_backend_;
delete audio_backend_;
video_backend_->deleteLater();
audio_backend_->deleteLater();
export_status_ = true;
export_msg_ = tr("Export succeeded");
encoder_->Close();
emit ExportEnded();
}
@@ -80,8 +85,6 @@ void Exporter::ExportFailed()
void Exporter::FrameRendered(const rational &time, QVariant value)
{
qDebug() << "Retrieved frame" << time.toDouble() << "- waiting for frame" << waiting_for_frame_.toDouble();
if (time == waiting_for_frame_) {
bool get_cached = false;
@@ -106,26 +109,24 @@ void Exporter::FrameRendered(const rational &time, QVariant value)
// Convert color space
color_processor_->ConvertFrame(frame);
// Set frame timestamp
frame->set_timestamp(waiting_for_frame_);
// Encode (may require re-associating alpha?)
encoder_->Write(frame);
waiting_for_frame_ += viewer_node_->video_params().time_base();
// Calculate progress
int progress = qRound(100.0 * (waiting_for_frame_.toDouble() / viewer_node_->Length().toDouble()));
qDebug() << "Hello progress" << progress;
emit ProgressChanged(progress);
} while (cached_frames_.contains(waiting_for_frame_));
if (waiting_for_frame_ > viewer_node_->Length()) {
ExportSucceeded();
}
} else {
cached_frames_.insert(time, value);
}
/*if (time == viewer_node_->Length()) {
ExportSucceeded();
}*/
}
void Exporter::TimeRendered(const rational &time)
{
qDebug() << "Retrieved time rendered!" << time.toDouble();
}
+9 -5
View File
@@ -5,6 +5,7 @@
#include <QString>
#include <QObject>
#include "codec/encoder.h"
#include "node/output/viewer/viewer.h"
#include "render/backend/audiorenderbackend.h"
#include "render/backend/videorenderbackend.h"
@@ -14,7 +15,12 @@ class Exporter : public QObject
{
Q_OBJECT
public:
Exporter(ViewerOutput* viewer, const VideoRenderingParams& params, const QMatrix4x4& transform, ColorProcessorPtr color_processor, QObject* parent = nullptr);
Exporter(ViewerOutput* viewer,
const VideoRenderingParams& params,
const QMatrix4x4& transform,
ColorProcessorPtr color_processor,
EncoderPtr encoder,
QObject* parent = nullptr);
bool GetExportStatus() const;
const QString& GetExportError() const;
@@ -48,9 +54,6 @@ protected:
// Export transform
QMatrix4x4 transform_;
// Copied graph
NodeGraph copied_graph_;
private:
void ExportSucceeded();
@@ -58,6 +61,8 @@ private:
ColorProcessorPtr color_processor_;
EncoderPtr encoder_;
bool export_status_;
QString export_msg_;
@@ -68,7 +73,6 @@ private:
private slots:
void FrameRendered(const rational& time, QVariant value);
void TimeRendered(const rational& time);
};