|
|
#ifndef QYUVOPENGLWIDGET_H
|
|
|
#define QYUVOPENGLWIDGET_H
|
|
|
#include <QOpenGLBuffer>
|
|
|
#include <QOpenGLFunctions>
|
|
|
#include <QOpenGLShaderProgram>
|
|
|
#include <QOpenGLWidget>
|
|
|
|
|
|
class QYUVOpenGLWidget
|
|
|
: public QOpenGLWidget
|
|
|
, protected QOpenGLFunctions
|
|
|
{
|
|
|
Q_OBJECT
|
|
|
public:
|
|
|
explicit QYUVOpenGLWidget(QWidget *parent = nullptr);
|
|
|
virtual ~QYUVOpenGLWidget() override;
|
|
|
|
|
|
QSize minimumSizeHint() const override;
|
|
|
QSize sizeHint() const override;
|
|
|
|
|
|
void setFrameSize(const QSize &frameSize);
|
|
|
const QSize &frameSize();
|
|
|
void updateTextures(quint8 *dataY, quint8 *dataU, quint8 *dataV, quint32 linesizeY, quint32 linesizeU, quint32 linesizeV);
|
|
|
|
|
|
protected:
|
|
|
void initializeGL() override;
|
|
|
void paintGL() override;
|
|
|
void resizeGL(int width, int height) override;
|
|
|
|
|
|
private:
|
|
|
void initShader();
|
|
|
void initTextures();
|
|
|
void deInitTextures();
|
|
|
void updateTexture(GLuint texture, quint32 textureType, quint8 *pixels, quint32 stride);
|
|
|
|
|
|
private:
|
|
|
// 视频帧尺寸
|
|
|
QSize m_frameSize = { -1, -1 };
|
|
|
bool m_needUpdate = false;
|
|
|
bool m_textureInited = false;
|
|
|
|
|
|
// 顶点缓冲对象(Vertex Buffer Objects, VBO):默认即为VertexBuffer(GL_ARRAY_BUFFER)类型
|
|
|
QOpenGLBuffer m_vbo;
|
|
|
|
|
|
// 着色器程序:编译链接着色器
|
|
|
QOpenGLShaderProgram m_shaderProgram;
|
|
|
|
|
|
// YUV纹理,用于生成纹理贴图
|
|
|
GLuint m_texture[3] = { 0 };
|
|
|
};
|
|
|
|
|
|
#endif // QYUVOPENGLWIDGET_H
|