資源簡(jiǎn)介
使用QT中的OpenGL播放YUV420和YUV444數(shù)據(jù),包內(nèi)自帶測(cè)試用例和YUV測(cè)試數(shù)據(jù),可以直接運(yùn)行。

代碼片段和文件信息
#include?“CPlay444Widget.h“
#include?
#include?
#include?
CPlay444Widget::CPlay444Widget(QWidget?*parent)?:?QOpenGLWidget(parent)
{
????textureUniformY?=?0;
????textureUniformU?=?0;
????textureUniformV?=?0;
????id_y?=?0;
????id_u?=?0;
????id_v?=?0;
????m_pBufYuv420p?=?NULL;
????m_pVSHader?=?NULL;
????m_pFSHader?=?NULL;
????m_pShaderProgram?=?NULL;
????m_pTextureY?=?NULL;
????m_pTextureU?=?NULL;
????m_pTextureV?=?NULL;
????m_pYuvFile?=?NULL;
????m_nVideoH?=?0;
????m_nVideoW?=?0;
}
CPlay444Widget::~CPlay444Widget()
{
}
void?CPlay444Widget::PlayOneframe()
{
????//函數(shù)功能讀取一張yuv圖像數(shù)據(jù)進(jìn)行顯示每單擊一次,就顯示一張圖片
????if(NULL?==?m_pYuvFile)
????{
????????//打開yuv視頻文件?注意修改文件路徑
???????//?m_pYuvFile?=?fopen(“F://OpenglYuvDemo//1920_1080.yuv“?“rb“);
?????????m_pYuvFile?=?fopen(“encode_yuv_1366_768_yuv444_frame2.yuv“?“rb“);
?????????m_nVideoW?=?1366;
?????????m_nVideoH?=?768;
????}
????int?nLen?=?m_nVideoW*m_nVideoH*3;
????if(NULL?==?m_pBufYuv420p)
????{
????????m_pBufYuv420p?=?new?unsigned?char[nLen];
????????qDebug(“CPlay444Widget::PlayOneframe?new?data?memory.?Len=%d?width=%d?height=%d\n“
???????????????nLen?m_nVideoW?m_nVideoW);
????}
????//將一幀yuv圖像讀到內(nèi)存中
????if(NULL?==?m_pYuvFile)
????{
????????qFatal(“read?yuv?file?err.may?be?path?is?wrong!\n“);
????????return;
????}
????fread(m_pBufYuv420p?1?nLen?m_pYuvFile);
????//刷新界面觸發(fā)paintGL接口
????update();
????return;
}
void?CPlay444Widget::initializeGL()
{
????initializeOpenGLFunctions();
????glEnable(GL_DEPTH_TEST);
????//現(xiàn)代opengl渲染管線依賴著色器來處理傳入的數(shù)據(jù)
????//著色器:就是使用openGL著色語言(OpenGL?Shading?Language?GLSL)編寫的一個(gè)小函數(shù)
????//???????GLSL是構(gòu)成所有OpenGL著色器的語言具體的GLSL語言的語法需要讀者查找相關(guān)資料
????//初始化頂點(diǎn)著色器?對(duì)象
????m_pVSHader?=?new?QOpenGLShader(QOpenGLShader::Vertex?this);
????//頂點(diǎn)著色器源碼
????const?char?*vsrc?=?“attribute?vec4?vertexIn;?\
????????attribute?vec2?textureIn;?\
????????varying?vec2?textureOut;??\
????????void?main(void)???????????\
????????{?????????????????????????\
????????????gl_Position?=?vertexIn;?\
????????????textureOut?=?textureIn;?\
????????}“;
????//編譯頂點(diǎn)著色器程序
????bool?bCompile?=?m_pVSHader->compileSourceCode(vsrc);
????if(!bCompile)
????{
????}
????//初始化片段著色器?功能gpu中yuv轉(zhuǎn)換成rgb
????m_pFSHader?=?new?QOpenGLShader(QOpenGLShader::Fragment?this);
????//片段著色器源碼
????const?char?*fsrc?=?“varying?vec2?textureOut;?\
????????uniform?sampler2D?tex_y;?\
????????uniform?sampler2D?tex_u;?\
????????uniform?sampler2D?tex_v;?\
????????void?main(void)?\
????????{?\
????????????vec3?yuv;?\
????????????vec3?rgb;?\
????????????vec4?c?=?vec4((texture(tex_y?textureOut).r?-?16./255.)?*?1.164);?\
????????????vec4?U?=?vec4(texture(tex_u?textureOut).r?-?128./255.);?\
????????????vec4?V?=?vec4(texture(tex_v?textureOut).r?-?128./255.);?\
????????????c?+=?V?*?vec4(1.596?-0.813?0?0);?\
????????????c?+=?U?*?vec4(0?-0.392?2.017?0);?\
????????????c.a?=?1.0;?\
????????????gl_FragColor?=?c;?\
????????}“
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-12-13?19:12??OpenGL\
?????文件????????8862??2018-12-13?19:09??OpenGL\CPlay444Widget.cpp
?????文件????????1357??2018-12-13?16:36??OpenGL\CPlay444Widget.h
?????文件????????8715??2018-12-13?19:09??OpenGL\CPlayWidget.cpp
?????文件????????1339??2018-12-13?15:43??OpenGL\CPlayWidget.h
?????文件????????3690??2018-12-05?17:30??OpenGL\GLWidget.cpp
?????文件?????????839??2018-12-01?18:54??OpenGL\GLWidget.h
?????文件?????????407??2018-11-22?17:12??OpenGL\GLWidget.ui
?????文件?????????328??2018-12-13?19:05??OpenGL\main.cpp
?????文件?????????400??2018-12-05?17:45??OpenGL\MainWindow.cpp
?????文件?????????359??2018-12-05?17:41??OpenGL\MainWindow.h
?????文件????????1698??2018-12-13?19:06??OpenGL\MainWindow.ui
?????文件?????????433??2018-12-05?18:19??OpenGL\MainWindow444.cpp
?????文件?????????386??2018-12-05?18:17??OpenGL\MainWindow444.h
?????文件????????1453??2018-12-13?19:06??OpenGL\MainWindow444.ui
?????文件?????????917??2018-12-13?19:12??OpenGL\OpenGL.pro
?????目錄???????????0??2018-12-13?19:07??OpenGL\yuv\
?????文件??????391680??2018-11-29?15:51??OpenGL\yuv\bigbuckbunny_480x272-fr
?????文件?????3147264??2018-12-12?15:58??OpenGL\yuv\encode_yuv_1366_768_yuv444_fr
- 上一篇:SPSS案例數(shù)據(jù).rar
- 下一篇:ANSYS分析集(命令流)
評(píng)論
共有 條評(píng)論