从上个月开始就说要做FLASH播放器,而且是用QT来做应用。虽然用QT来做UI事很简单,但是要有底层的驱动支持,所以在花一天把界面都完成后一直停下来,等待底层库的提供。今天老大终于把底层的库发给了我,所以今天又继续。
在提供库的同时附带有一个简单的DEMO,但是这个不是用QT做的,而是直接操纵帧BUFFER来完成。我看了一下,然后就在自己的上卡是编译这个库,刚开始在这个库上编译通不过,而且提示的是libcurl.a这个库有问题,但是我明明是连了这个库,网上搜了一会,众说纷纭,有的人说是库版本不对,有的说是调用冲突。我业认为是编译器版本不一样导致。最终还是咨询库编译的兄弟,它说这个库得自己移植,我晕,提供库的时候怎么说一声呢,最后还是他把这个代码用我的编译器来编译了一下,这次再连接这个库就通过了。就这样简单还花了半天的时间。
编译通过了之后就先测试要把一帧的画面数据在指定QT的控件上进行显示,而且这个数据格式是rgb565,刚开始想是不是可以直接把这个数据转为图片然后在控件上进行显示呢?就想把图片显示在控件上的道理,但是这个行不行之前没做过,所以得验证一下才知道是否可行。
所以就把一帧的数据保存在一个文件里,然后读取这个文件,转为QImage再显示在控件上,刚开始由于信息不足,所以转了一下没见显示,这下就更加怀疑了,但是还坚信这个方法应该可以,实在不行就把这个数据转换为PNG等格式的图片再显示,因为在这个之前把图片读取再显示是没问题了。所以还是一边想其他办法一边验证这个方法,最后把通过QImage imag(buffer, 320, 480, QImage::Format_rgb16);
painter->drawPixmap(image, QRect(0, 0, 320, 480), ...); 这样就可以显示了。所以这个问题终于搞定。接下来就是整个文件的显示等问题了。
以上的操作都只是在linux上的X86上实现,还得再硬件上跑一下才可以说是有成效。我编译了一个硬件版本放在硬件上跑,提示libcurl.so.4找不到,晕倒,这下得把库再拷过来,拷过来后再试,界面没显示,哪里有问题呢?是库的问题还是代码出问题了呢?刚才在linux x86还好好的,怎么回事呢?慢慢排查...