mocked up a prototype of decoding data into the node graph
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
|
||||
#include <QOpenGLTexture>
|
||||
|
||||
#include "decoder/decoder.h"
|
||||
#include "node/node.h"
|
||||
|
||||
/**
|
||||
@@ -52,7 +53,9 @@ private:
|
||||
|
||||
NodeOutput* texture_output_;
|
||||
|
||||
QOpenGLTexture* texture_;
|
||||
GLuint texture_;
|
||||
|
||||
Decoder* decoder_;
|
||||
};
|
||||
|
||||
#endif // IMAGE_H
|
||||
|
||||
Reference in New Issue
Block a user