資源簡介
qt opengl(after ver2.1) 渲染 nv12 qt opengl(after ver2.1) 渲染 nv12 qt opengl(after ver2.1) 渲染 nv12

代碼片段和文件信息
#include?
#include?
#include?
Gl_widget::Gl_widget(int?width?int?height?const?QString&?path?QWidget*?parent)
????:QGLWidget(QGLFormat(QGL::SampleBuffers)?parent)
?????video_width(width)
?????video_height(height)
?????y_texture(0)
?????uv_texture(0)
?????y_data(0)
?????uv_data(0)
?????file(path)
?????timer(this)
?????program(this)
{
????setFocusPolicy(Qt::StrongFocus);
????y_data?=?new?unsigned?char[(width*height*3)>>1];
????uv_data?=?y_data+(width*height);
????file.open(QIODevice::ReadOnly);
}
Gl_widget::~Gl_widget()
{
????file.close();
????glDeleteTextures(1?&y_texture);
????glDeleteTextures(1?&uv_texture);
????uv_data?=?0;
????delete?[]?y_data;
????y_data?=?0;
}
void?Gl_widget::initializeGL()
{
????qDebug()?<?????“uniform?sampler2D?y_texture;\n“
?????“uniform?sampler2D?uv_texture;\n“
?????“void?main(void)\n“
?????“{\n“
?????“???float?y?u?v?red?green?blue;\n“
?????“???y?=?texture2D(y_texture?gl_TexCoord[0].st).r?;\n“
?????“???y?=??1.1643?*?(y?-?0.0625);\n“
?????“???u?=?texture2D(uv_texture?gl_TexCoord[0].st).r?-?0.5;\n“
?????“???v?=?texture2D(uv_texture?gl_TexCoord[0].st).a?-?0.5;\n“
?????“???red?=?y+1.5958*v;\n“
?????“???green?=?y-0.39173*u-0.81290*v;\n“
?????“???blue?=?y+2.017*u;\n“
?????“???gl_FragColor?=?vec4(red?green?blue?1.0);\n“
?????“}“);
????qDebug()?<nk();
????qDebug()?<
????glGenTextures(1?&y_texture);
????glGenTextures(1?&uv_texture);
????glActiveTexture(GL_TEXTURE0);
????glBindTexture(GL_TEXTURE_2D?y_texture);
????glTexParameterf(GL_TEXTURE_2D?GL_TEXTURE_MAG_FILTER?GL_NEAREST);
????glTexParameterf(GL_TEXTURE_2D?GL_TEXTURE_MIN_FILTER?GL_NEAREST);
????glTexEnvf(GL_TEXTURE_ENVGL_TEXTURE_ENV_MODEGL_DECAL);
????glTexImage2D(GL_TEXTURE_2D?0?GL_LUMINANCE?video_width?video_height?0?GL_LUMINANCE?GL_UNSIGNED_BYTE?y_data);
????glActiveTexture(GL_TEXTURE1);
????glBindTexture(GL_TEXTURE_2D?uv_texture);
????glTexParameterf(GL_TEXTURE_2D?GL_TEXTURE_MAG_FILTER?GL_NEAREST);
????glTexParameterf(GL_TEXTURE_2D?GL_TEXTURE_MIN_FILTER?GL_NEAREST);
????glTexEnvf(GL_TEXTURE_ENVGL_TEXTURE_ENV_MODEGL_DECAL);
????glTexImage2D(GL_TEXTURE_2D?0?GL_LUMINANCE_ALPHA?video_width>>1?video_height>>1?0?GL_LUMINANCE_ALPHA?GL_UNSIGNED_BYTE?uv_data);
????program.setUniformValue(“y_texture“?0);
????program.setUniformValue(“uv_texture“?1);
????connect(&timer?SIGNAL(timeout())?this?SLOT(on_timeout()));
????timer.setInterval(25);
????timer.start();
}
void?Gl_widget::paintGL()
{
????file.read((char*)y_data?(video_width*video_height*3)>>1);
????glActiveTexture(GL_TEXTURE0);
????glTexSubImage2D(GL_TEXTURE_2D?0?0?0?video_width?video_height?GL_LUMINANCE?GL_UNSIGNED_BYTE?y_data);
????glActiveTexture(GL_TEXTURE1);
????glTexSubImage2D(GL_TEXTURE_2D?0?0?0?video_width>>1?video_height>>1?GL_LUMINANCE_ALPHA?GL_UNSIGNED_BYTE?uv_data);
????glClear(GL_COLOR_BUFFER_BIT);
????glEnable(
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-09-27?16:48??nv12_shader\
?????文件????????3605??2017-09-25?15:40??nv12_shader\gl_widget.cpp
?????文件?????????673??2017-09-25?15:40??nv12_shader\gl_widget.h
?????文件?????????280??2017-09-27?15:53??nv12_shader\main.cpp
?????文件?????????280??2017-09-27?15:53??nv12_shader\main.cpp~
?????文件?????4320000??2017-09-25?15:40??nv12_shader\test_yuv420p_320x180.yuv
?????文件?????3110400??2017-09-25?15:42??nv12_shader\videotestsrc_1920x1080.nv12
?????文件?????????363??2017-09-25?15:40??nv12_shader\yuv_shader.pro
?????文件???????44458??2017-09-25?15:40??nv12_shader\yuv_shader.pro.user
?????文件?????????315??2017-09-25?15:40??nv12_shader\yuv_window.cpp
?????文件?????????347??2017-09-25?15:40??nv12_shader\yuv_window.h
?????文件?????????433??2017-09-25?15:40??nv12_shader\yuv_window.ui
評論
共有 條評論