在qt中用opengl视频出现闪烁

qq_36756931 2017-03-30 06:11:19
qDebug()<<"gogogogo!!!";
qDebug()<<"current==============="<<pContext->makeCurrent(pwin);
int dataSize=frame->_frame->width*frame->_frame->height*3/2;
unsigned char* buf=(unsigned char*)malloc(dataSize);
int ret=avpicture_layout((AVPicture*)(frame->_frame), (AVPixelFormat)AV_PIX_FMT_YUV420P,frame->_frame->width, frame->_frame->height, buf,dataSize);
unsigned char* dy=buf;
unsigned char* u =dy+frame->_frame->height*frame->_frame->width;
unsigned char* v= u+frame->_frame->height*frame->_frame->width/4;
// glViewport(x,y,width,height);
glViewport(0,(window()->height()-window()->width()*3/4)/2,pwin->width(),pwin->width()*3/4);
// glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0,0,0,1);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, ytexture);
glTexImage2D ( GL_TEXTURE_2D, 0, GL_LUMINANCE, frame->_frame->width, frame->_frame->height, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, dy);
pShaderProgram->setUniformValue(TextureID0, 0);


glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, utexture);
glTexImage2D ( GL_TEXTURE_2D, 0, GL_LUMINANCE, frame->_frame->width/2, frame->_frame->height/2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, u);
pShaderProgram->setUniformValue(TextureID1, 1);


glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_2D, vtexture);
glTexImage2D ( GL_TEXTURE_2D, 0, GL_LUMINANCE, frame->_frame->width/2, frame->_frame->height/2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, v);
pShaderProgram->setUniformValue(TextureID2, 2);

glDisable(GL_DEPTH_TEST);//should be put before glDrawArrays
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
//pShaderProgram->release();
pContext->swapBuffers(pwin);
// update();
delete frame;
frame=NULL;
free(buf);
...全文
370 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

16,239

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧