1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- #ifndef _SHADERYUV4210_H_
- #define _SHADERYUV4210_H_
- #include "ShaderBase.h"
- struct Image_YUV420P
- {
- int width; /* 宽度 */
- int height; /* 高度 */
- QByteArray yData; /* Y分量数据 */
- QByteArray uData; /* U分量数据 */
- QByteArray vData; /* V分量数据 */
- Image_YUV420P() : width(0), height(0) {}
- Image_YUV420P(Image_YUV420P&& other);
- Image_YUV420P(const Image_YUV420P& other);
- Image_YUV420P& operator=(Image_YUV420P&& other);
- Image_YUV420P& operator=(const Image_YUV420P& other);
- bool isValid() const;
- void clear();
- };
- class ShaderYUV420 : public ShaderBase
- {
- public:
- ShaderYUV420();
- ~ShaderYUV420() override;
- /* 初始化形状 */
- GLuint initShape() override;
- /* 初始化纹理对象 */
- bool initTextures() override;
- /* 绘制图形 */
- void drawShape() override;
- /* 刷新一帧 */
- bool refreshFrameYUV420(const Image_YUV420P& yuvData);
- /* 刷新一帧 */
- bool refreshFrameRGBA(const QImage& image, int textureUnit = 0);
- private:
- /* RGBA转换成YUV420 */
- bool convertRGBAToYUV420(const QImage& image, Image_YUV420P& yuvData);
- private:
- GLuint m_VAO = 0; // 顶点数组对象的ID
- GLuint m_VBO = 0; // 顶点缓冲对象的ID
- GLuint m_EBO = 0; // 索引缓冲对象的ID
- QSize m_lastSize; /* 上一张图片的大小 */
- Image_YUV420P m_yuvData; /* YUV420数据 */
- QSize m_lastYUVSize; /* 上一张YUV图片的大小 */
- const QString m_textureYName = "textureY"; // Y分量纹理名称
- const QString m_textureUName = "textureU"; // U分量纹理名称
- const QString m_textureVName = "textureV"; // V分量纹理名称
- };
- #endif // _SHADERYUV4210_H_
|