在开发基于 Qt 和 FFmpeg 的视频播放器时,我遇到一个常见但令人困惑的问题:在使用 VideoWidget(继承自 QOpenGLWidget)播放某些视频时,窗口右侧会出现一条白色线。这不仅影响视觉效果,还可能暴露潜在的渲染或缓冲区问题。本文将详细分析这一现象的成因,并提供经过验证的解决方案。
问题现象
在使用自定义的 VideoDecoder 和 VideoWidget 类播放视频时,大多数视频都能正常显示,但某些视频在窗口右侧会出现一条细长的白色线。这种现象通常与视频分辨率或编码格式无关,而是与渲染流程中的细节处理有关。具体表现为:
- 白色线出现在视频右侧,宽度通常为 1-4 像素。
- 调整窗口大小时,白色线宽度可能变化,但始终存在。
- 使用不同视频文件(例如 MP4、AVI)测试时,问题并非对所有文件都出现。
以下是问题相关的核心代码片段:
// VideoDecoder::loadFile
frontBuffer = QImage(codecCtx->width, codecCtx->height, QImage::Format_RGB888);
backBuffer = QImage(codecCtx->width, codecCtx->height, QImage::For