mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-20 13:33:13 -07:00
Add Double-Buffering Frame Uploader
This commit is contained in:
parent
c6a15bcfae
commit
3358759aab
5 changed files with 178 additions and 53 deletions
|
@ -19,6 +19,7 @@
|
|||
#define CHIAKI_AVOPENGLWIDGET_H
|
||||
|
||||
#include <QOpenGLWidget>
|
||||
#include <QMutex>
|
||||
|
||||
extern "C"
|
||||
{
|
||||
|
@ -26,6 +27,16 @@ extern "C"
|
|||
}
|
||||
|
||||
class VideoDecoder;
|
||||
class AVOpenGLFrameUploader;
|
||||
|
||||
struct AVOpenGLFrame
|
||||
{
|
||||
GLuint tex[3];
|
||||
unsigned int width;
|
||||
unsigned int height;
|
||||
|
||||
bool Update(AVFrame *frame);
|
||||
};
|
||||
|
||||
class AVOpenGLWidget: public QOpenGLWidget
|
||||
{
|
||||
|
@ -37,13 +48,18 @@ class AVOpenGLWidget: public QOpenGLWidget
|
|||
GLuint program;
|
||||
GLuint vbo;
|
||||
GLuint vao;
|
||||
GLuint tex[3];
|
||||
unsigned int frame_width, frame_height;
|
||||
|
||||
void UpdateTextures(AVFrame *frame);
|
||||
AVOpenGLFrame frames[2];
|
||||
int frame_fg;
|
||||
QMutex frames_mutex;
|
||||
AVOpenGLFrameUploader *frame_uploader;
|
||||
|
||||
public:
|
||||
explicit AVOpenGLWidget(VideoDecoder *decoder, QWidget *parent = nullptr);
|
||||
~AVOpenGLWidget() override;
|
||||
|
||||
void SwapFrames();
|
||||
AVOpenGLFrame *GetBackgroundFrame() { return &frames[1 - frame_fg]; }
|
||||
|
||||
protected:
|
||||
void initializeGL() override;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue