首页 > 解决方案 > GStreamer d3dvideosink 覆盖重绘闪烁

问题描述

关于d3dvideosink我有一个相当持久的问题。

我的 GStreamer 管道是使用 Qt/C++ 中的 GStreamer SDK 1.14.2 编写的,如下所示: videotestsrc -> d3dvideosink

gst_video_overlay_set_window_handle用来将接收器输出放在相应的 QWidget 上(使用WId QWidget::winId() const)。

流按预期工作,但在小部件(或任何父小部件)重新绘制时(例如,在调整大小时)时会产生闪烁。

闪烁

如何配置小部件/管道/d3dvideosink/...以消除闪烁?

PS 使用 glimagesink 而不是 d3dvideosink 可以工作,但性能会降低。

标签: qtgstreamerdirect3dflicker

解决方案


禁用窗口上的 Qt 重绘。去做这个:

  1. setAttribute(Qt::WA_PaintOnScreen);
  2. 重载paintEngine() 以返回nullptr。

推荐阅读