资源简介
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() << program.addShaderFromSourceCode(QGLShader::Fragment
“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() << 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_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
相关资源
- mgn-mqt82.exe
- Trojan-Qt5-Windows-0.0.4.rar
- 酒店管理系统基于Qt Creator5)
- OpenGL参考手册
- vtk QT做的三维地质可视化系统2of2
- Qt局域网聊天软件
- Qt Creator opengl实现四元数鼠标控制轨迹
- QT局域网聊天系统(基于QT5.修改过)
- qt-电子点菜系统
- OpenGL文档,api大全,可直接查询函数
- C 餐厅叫号系统(QT平)
- opengl轮廓字体源代码
- MFC读三维模型obj文件
- QT 实现文件下载
- qt图像处理
- 利用OpenGL写毛笔字算法
- MFC中OpenGL面和体的绘制以及动画效果
- QT,JPEG解码源代码(已完成)
- 基于OPENGL的光线跟踪源代码368758
- VC 实现三维旋转(源码)
- 自编用openGL实现3D分形树,分形山
- OpenGL球形贴图自旋程序
- Qt 播放音频文件
- OpenGL导入贴图的Texture类
- 计算机图形学(openGL)代码
- 用OpenGL开发的机械臂运动仿真程序(
- OpenGL-3D坦克模拟
- Qt 读取16进制的data文件
- MQTT+串口(usart)透传
- 易语言QQTEA算法源码
评论
共有 条评论