mocked up a prototype of decoding data into the node graph

This commit is contained in:
itsmattkc
2019-08-04 14:45:17 +10:00
parent fb8d5df24b
commit 298ae2f36c
15 changed files with 178 additions and 32 deletions
+46 -7
View File
@@ -21,11 +21,16 @@
#include "media.h"
#include <QDebug>
#include <QOpenGLPixelTransferOptions>
#include "project/item/footage/footage.h"
// FIXME: Test code only
#include "decoder/ffmpeg/ffmpegdecoder.h"
// End test code
MediaInput::MediaInput() :
texture_(nullptr)
texture_(0)
{
footage_input_ = new NodeInput();
footage_input_->add_data_input(NodeInput::kFootage);
@@ -34,6 +39,10 @@ MediaInput::MediaInput() :
texture_output_ = new NodeOutput();
texture_output_->set_data_type(NodeOutput::kTexture);
AddParameter(texture_output_);
// FIXME: Test code only
decoder_ = new FFmpegDecoder(); // FIXME: Doesn't ever get free'd
// End test code
}
QString MediaInput::Name()
@@ -81,13 +90,43 @@ void MediaInput::Process(const rational &time)
// Grab frame from decoder
// FIXME: Test code
if (texture_ == nullptr) {
QImage img("/home/matt/Desktop/oof.png");
texture_ = new QOpenGLTexture(img);
if (decoder_->stream() == nullptr) {
decoder_->set_stream(footage->stream(0));
}
texture_output_->set_value(texture_->textureId());
FramePtr frame = decoder_->Retrieve(time);
if (frame == nullptr) {
texture_output_->set_value(0);
return;
}
// FIXME: Test code
if (texture_ == 0) {
glGenTextures(1, &texture_);
glBindTexture(GL_TEXTURE_2D, texture_);
// Set texture filtering to bilinear
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// Set texture wrapping to clamp
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D,
0,
GL_RGBA8,
frame->width(),
frame->height(),
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
frame->data()[0]);
}
texture_output_->set_value(texture_);
// End test code
}