Qt 如何修复使用mplayer on frame buffer播放的电影周围的视频闪烁?

Qt 如何修复使用mplayer on frame buffer播放的电影周围的视频闪烁?,qt,embedded-linux,mplayer,Qt,Embedded Linux,Mplayer,我正在运行一个qt嵌入式应用程序和mplayer,它们都在帧缓冲区上 当我开始通过mplayer播放视频时,我会在电影周围看到很多闪烁 请看以下电影: 如何修复?对于使用QWS的qt4,用于直接写入帧缓冲区的嵌入式linux图形子系统,在调用mplayer之前,您可以在-QWS服务器的GUI线程中运行以下命令: QWSServer *server = QWSServer::instance(); if(server) server->enablePainting(false);

我正在运行一个qt嵌入式应用程序和mplayer,它们都在帧缓冲区上

当我开始通过mplayer播放视频时,我会在电影周围看到很多闪烁

请看以下电影:


如何修复?

对于使用QWSqt4,用于直接写入帧缓冲区的嵌入式linux图形子系统,在调用
mplayer
之前,您可以在-QWS服务器的GUI线程中运行以下命令:

QWSServer *server = QWSServer::instance(); 
if(server) 
   server->enablePainting(false); // Suspend Qt's drawing. 
您可以使用SIGCHLD或其他工具来确定
mplayer
何时完成并重新绘制。另一种方法是定位
mplayer的
输出窗口,并使用命令告诉Qt不要在那里绘制


QWS
mplayer
都打开帧缓冲区并直接绘制到它。无法封送对显示设备的访问。QWS子系统允许多个Qt应用程序同时绘制到屏幕上。但是,它无法控制访问帧缓冲区的其他进程。因此,可以使用X11或其他显示管理器,如etc。这通常是在Qt5中使用的方法。对不起,我将Qt4.7.4与QWS一起使用。你的指示并不能解决这个问题。问题的根源可能与其他事情有关。我想你可能不理解我的评论,所以我留下了答案。我很确定这是你的问题;我也有同样的问题,我看过你的视频。您也可以只循环
fbv
或其他内容,然后看到同样的情况发生。我认为你屏幕上的一些QWidget正在周期性地重新绘制。由于
mplayer
以大约30倍/秒的速度绘制,因此在绘制和重新绘制时,您会看到一个闪光。您可以为
mplayer
提供视频大小参数,这也可以解决您的问题。您可以使用
fbdump
捕获屏幕截图,或者类似于
ddif=/dev/fb0 of=test.scr bs=480 count=320的内容