利用Qt + OpenGL 渲染 YUV数据,播放视频 mac版

最近利用Qt渲染YUV数据,折腾了很久,最开始使用FFmpeg将YUV数据转换成RGB数据后在用qt绘制,很快得到了成功,但是cpu占用率太大,最后放弃了。

在这先感谢来自文章http://blog.csdn.net/su_vast/article/details/52214642的作者,使用他的代码我实现了Windows上的YUV数据渲染。但是移植到mac上渲染不出来,经过折腾及对OpenGL的了解,发现问题出在OpenGL版本问题上,不同版本OpenGL的shader编写使用有些不同,资料来源于http://blog.csdn.net/ym19860303/article/details/44115135。


下面是我写的代码,有什么不完善的地方请读者反馈,相互学习。

renderview.h

#ifndef RENDERVIEW_H
#define RENDERVIEW_H

#include 
#include 
#include 
#include 
#include 
#include "global.h"

class RenderView : public QOpenGLWidget
{
    Q_OBJECT

public:
    RenderView(QWidget* parent = 0);
    ~RenderView();

    void Render(unsigned char* buffer,int w, int h);
protected:
    //virtual void paintEvent(QPaintEvent *event);
    virtual void initializeGL();
    virtual void resizeGL( int w, int h );
    virtual void paintGL();
    
    
private:
    GLuint prepareShaderProgram();
    
private:
    GLuint m_shader;
    GLuint m_vertexBuffer;
    GLuint textureUniformY;
    GLuint textureUniformU;
    GLuint textureUniformV;
    GLuint vertexBuffer;
    GLuint vertextAttribute;
    GLuint textureAttribute;
    
    GLuint id_y;
    GLuint id_u;
    GLuint id_v;
    
    int m_nVideoW;
    int m_nVideoH;
    int m_nViewW;
    int m_nViewH;
    unsigned char* m_pBufYuv420p;
    unsigned char* m_pBuffer;
    bool m_bStartPlay;
};

#endif // RENDERVIEW_H


renderview.cpp


#include "renderview.h"
#include 
#include 
#include 
#include 
#include 
#include "DecoderCtrl/MainConcept.h"

#define BUFFER_MAX_SIZE 1920*1080+1024


const char *vsrc =
"#version 410\n"
"in vec4 vertexIn;\n"
"in vec2 textureIn;\n"
"out vec2 textureOut;\n"
"void ma

你可能感兴趣的:(OpenGL,Qt,Qt,3D,C/C++)