foundations for background caching

This commit is contained in:
itsmattkc
2019-08-24 22:16:01 +10:00
parent 9439494c10
commit 438e7081f9
39 changed files with 919 additions and 213 deletions
+33 -11
View File
@@ -27,17 +27,24 @@
// FIXME: Test code only
#include "decoder/ffmpeg/ffmpegdecoder.h"
#include "render/colorservice.h"
#include "node/processor/renderer/renderer.h"
#include "render/pixelservice.h"
#include "render/gl/shadergenerators.h"
#include "render/gl/functions.h"
// End test code
MediaInput::MediaInput() :
//ocio_shader_(nullptr),
decoder_(nullptr)
{
footage_input_ = new NodeInput("footage_in");
footage_input_->add_data_input(NodeInput::kFootage);
AddParameter(footage_input_);
matrix_input_ = new NodeInput("matrix_in");
matrix_input_->add_data_input(NodeInput::kMatrix);
AddParameter(matrix_input_);
texture_output_ = new NodeOutput("tex_out");
texture_output_->set_data_type(NodeOutput::kTexture);
AddParameter(texture_output_);
@@ -65,6 +72,8 @@ QString MediaInput::Description()
void MediaInput::Release()
{
buffer_.Destroy();
decoder_ = nullptr;
}
@@ -81,11 +90,17 @@ void MediaInput::SetFootage(Footage *f)
void MediaInput::Process(const rational &time)
{
// FIXME: Use OCIO for color management
// Set default texture to no texture
texture_output_->set_value(0);
// Find the current Renderer instance
RenderInstance* renderer = RendererProcessor::CurrentInstance();
// If nothing is available, don't return a texture
if (renderer == nullptr) {
return;
}
// Get currently selected Footage
Footage* footage = ValueToPtr<Footage>(footage_input_->get_value(time));
@@ -114,23 +129,30 @@ void MediaInput::Process(const rational &time)
return;
}
/*renderer->buffer()->Upload(frame->data());
texture_output_->set_value(renderer->buffer()->texture());*/
// Convert the frame to the Renderer format
//frame = PixelService::ConvertPixelFormat(frame, olive::PIX_FMT_RGBA16F);
// frame = PixelService::ConvertPixelFormat(frame, olive::PIX_FMT_RGBA16F);
// Convert the frame to the Renderer color space
//ColorService::ConvertFrame(frame);
//color_service_.ConvertFrame(frame);
// FIXME: Test code
if (tex_buf_.IsCreated()) {
tex_buf_.Upload(frame->data());
// Upload this frame to the GPU
/*if (buffer_.IsCreated()) {
buffer_.Upload(frame->data());
} else {
tex_buf_.Create(QOpenGLContext::currentContext(),
buffer_.Create(QOpenGLContext::currentContext(),
static_cast<olive::PixelFormat>(frame->format()),
frame->width(),
frame->height(),
frame->data());
}
}*/
texture_output_->set_value(tex_buf_.texture());
// Draw according to matrix
// BLIT
//texture_output_->set_value(tex_buf_.texture());
// End test code
}
+8 -4
View File
@@ -25,9 +25,11 @@
#include "decoder/decoder.h"
#include "node/node.h"
#include "render/colorservice.h"
// FIXME: Test code only
#include "render/texturebuffer.h"
#include "render/gl/shaderptr.h"
// End test code
/**
@@ -53,20 +55,22 @@ public:
void SetFootage(Footage* f);
public slots:
protected:
virtual void Process(const rational &time) override;
private:
NodeInput* footage_input_;
NodeInput* matrix_input_;
NodeOutput* texture_output_;
// FIXME: TEST CODE ONLY
TextureBuffer tex_buf_;
// END TEST CODE
TextureBuffer buffer_;
DecoderPtr decoder_;
ColorService color_service_;
};
#endif // IMAGE_H