红联Linux门户
Linux帮助

FC6上修改MPlayer播放器vo_setwindow BUG

发布时间:2008-08-13 09:51:40来源:红联作者:Fzzd
  原创者:徐成国

  Linux上的MPlayer播放器是我见过的解码功能最强的播放器,很多微软播放器、REAL播放器、暴风影音播不出来的文件,用它都可以播出来,所以即使在WINDOWS上,我也会装上这个播放器以备不时之需。MPlayer的Firefox插件甚至可以让你在LINUX上在线试听百度的MP3歌曲,我们学校内部的视频站还可以用Linux直接在线看REAL格式的资料片。

  我用的Linux是红帽子的,红帽子上没有现成的安装包,从MPlayer网站上下载的源码,在RH9和FC5上都可以顺利编译通过,但是在FC6上,GUI界面部分却不能通过编译,编译时报告Gui/interface.c里面这行代码是错的:

  vo_setwindow( appMPlayer.subWindow.WindowID, appMPlayer.subWindow.wGC );

  我到网上搜,但是无论国外网站还是国内网站上都没人提供解决办法,MPlayer网站上到现在仍然没有提供新的源码包,看来是“国际问题”。入世了,我们会发现“国际问题”原来是如此平常,有时候得我们自己去解决。

  我试着把这行出问题的代码注释掉,一编译,居然通过了!但是,显示有问题,播放视频的时候,本应该是播放视频的窗口没有放视频,这回却多出个视频窗口来,用这个多出来的窗口播视频,原来的窗口成了摆设,很别扭。

  而且,还有个问题,在我家里电脑上这么改可以用,在我单位电脑上就行不通了,根本播不了视频,一播就报错,不知道是为什么,我猜测是跟显卡有关。

  既然注释掉那一行代码后多出个窗口来,说明那段代码还是有用的,不应该被注释掉,看来是别的地方需要改,于是又开始查源码。既然我在RH9和FC5上可以编译GUI部分,现在我用的是更高版本的FC6,没理由不通过。找来找去,最终,在libvo/x11_common.c里面找到了问题所在,看这一段代码:

  #ifdef HAVE_NEW_GUI
  void vo_setwindow(Window w, GC g)
  {
     vo_window = w;
     vo_gc = g;
   }
    #endif

  显然,高版本的FC6上肯定已经HAVE_NEW_GUI了,这个定义如果不能通过,编译肯定就要失败。我试着在这里加入调试信息,果然,这个定义没有通过,这几行看起来微不足道的代码就没有生效。既然我已经HAVE_NEW_GUI了,干脆把ifdef去了吧,于是就把#ifdef HAVE_NEW_GUI和#endif这两行前面加了两个“//”给注释掉了。最后,编译,一切就OK乐!

  编译之后运行的时候,gmplayer还是会报错,说缺~/.mplayer/subfont.ttf文件,这个文件是个字体文件,MPlayer需要这个字体文件,这个问题很容易解决,你可以从Windows里面找个字体拷过去,不过FC6上有现成的,直接拷一个就行了:

  cp /usr/share/fonts/chinese/TrueType/uming.ttf /root/.mplayer/subfont.ttf

  这个问题仍然可以通过修改源码来解决,但是相比之下,直接拷贝字体文件更容易些。
文章评论

共有 0 条评论