在Qt里面我们经常会用QOpengGLWidget进行YUV转RGB像素格式转换来播放视频,但如果我们在其所在的窗口中添加了如下语句:
setWindowFlags(Qt::FramelessWindowHint|Qt::Tool); //设置窗口去除边框
setAttribute(Qt::WA_TranslucentBackground); //设置窗口背景透明
则播放视频时可能会不正常。
解决方法:
如果必须使用窗口透明,则播放视频不使用QOpengGLWidget。使用QWidget,通过sws_scale进行像素格式转换,在paintEvent中使用QPainter将视频数据绘制到QWidget上去。缺点:占用比较多的CPU,开销较大。
参考文章:
《关于 QGLWidget和QOpengGLWidget透明相关问题 的解决方法》