背黑锅的vlc(一):使用x11渲染出错

来源:互联网 发布:怎么样做淘宝网店 编辑:程序博客网 时间:2024/05/14 10:42

PC+linux桌面环境下,占用率最高的播放器非VLC莫属了。

VLC是开源播放器,它的解码大部分依赖ffmpeg开源库,在PC+linux下主要有三种渲染方式:x11(X server原生支持的), Glx(使用opengl加速), xvideo(Nvida加速)。

因为VLC依赖第三方库,很多时候,第三方库的错误也被算在VLC头上。

最近经常遇到的VLC的崩溃现象,我使用的是vlc-1.0.1版本,rhel5.5环境下。

日志如下:





打开coredump,ulimit -c unlimited,重现错误。

使用命令查看堆栈,如下

gdb ./vlc ./core.123456

bt




可以发现,错误是,Xsync()引起的。

照例,先看看新的vlc版本有没有解决。

看了一下vlc-2.0.1,新版本引入了xcb,xcb使用下面的函数,

 xcb_generic_error_t *e = xcb_request_check (sys->conn, ck);

检查显示成功与否,不成功,释放掉 pic{picture_Release (pic);},然后显示下一帧图片。

我的rhel5.5太旧了,尝试安装xcb开发环境还需要更新XFree86(X server的实现版本)。不想折腾。


再回头看看堆栈,#19是一个vlc注册进去的错误处理函数。

这个函数中,vlc调用XGetErrorText,得到详细错误信息,并打印出来了。

然后,“XSetErrorHandler(NULL);”调用了默认错误处理函数XDefaultError(),它调用了exit(),进程退出。


好了,我的想法是:

打印详细错误信息,

参考vlc-2.0.1,不调用默认错误处理函数,而是直接返回(return 0;)。

不知道这样能不能达到目的?


明天再试。

土鳖抗铁牛


原创粉丝点击