qt opengl(after ver2.1) 渲染 nv12 qt opengl(after ver2.1) 渲染 nv12 qt opengl(after ver2.1) 渲染 nv12
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-09-27 16:48 nv12_shader
文件 3605 2017-09-25 15:40 nv12_shadergl_widget.cpp
文件 673 2017-09-25 15:40 nv12_shadergl_widget.h
文件 280 2017-09-27 15:53 nv12_shadermain.cpp
文件 280 2017-09-27 15:53 nv12_shadermain.cpp~
文件 4320000 2017-09-25 15:40 nv12_shader est_yuv420p_320x180.yuv
文件 3110400 2017-09-25 15:42 nv12_shadervideotestsrc_1920x1080.nv12
文件 363 2017-09-25 15:40 nv12_shaderyuv_shader.pro
文件 44458 2017-09-25 15:40 nv12_shaderyuv_shader.pro.user
文件 315 2017-09-25 15:40 nv12_shaderyuv_window.cpp
文件 347 2017-09-25 15:40 nv12_shaderyuv_window.h
文件 433 2017-09-25 15:40 nv12_shaderyuv_window.ui
#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() << program.addShaderFromSourceCode(QGLShader::Fragment
“uniform sampler2D y_texture;
“
“uniform sampler2D uv_texture;
“
“void main(void)
“
“{
“
“ float y u v red green blue;
“
“ y = texture2D(y_texture gl_TexCoord[0].st).r ;
“
“ y = 1.1643 * (y - 0.0625);
“
“ u = texture2D(uv_texture gl_TexCoord[0].st).r - 0.5;
“
“ v = texture2D(uv_texture gl_TexCoord[0].st).a - 0.5;
“
“ red = y+1.5958*v;
“
“ green = y-0.39173*u-0.81290*v;
“
“ blue = y+2.017*u;
“
“ gl_FragColor = vec4(red green blue 1.0);
“
“}“);
qDebug() << program.link();
qDebug() << program.bind();
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_shadergl_widget.cpp
文件 673 2017-09-25 15:40 nv12_shadergl_widget.h
文件 280 2017-09-27 15:53 nv12_shadermain.cpp
文件 280 2017-09-27 15:53 nv12_shadermain.cpp~
文件 4320000 2017-09-25 15:40 nv12_shader est_yuv420p_320x180.yuv
文件 3110400 2017-09-25 15:42 nv12_shadervideotestsrc_1920x1080.nv12
文件 363 2017-09-25 15:40 nv12_shaderyuv_shader.pro
文件 44458 2017-09-25 15:40 nv12_shaderyuv_shader.pro.user
文件 315 2017-09-25 15:40 nv12_shaderyuv_window.cpp
文件 347 2017-09-25 15:40 nv12_shaderyuv_window.h
文件 433 2017-09-25 15:40 nv12_shaderyuv_window.ui
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)