早先跟ZL讨论过WinCE6.0下使用TCPMP播放视频的问题。他认为直接写显存应该可以让视频播放更流畅。今天我在我们的平台上实际测试了一下,分别使用GDI、Direct和DirectDraw三种方式做了Benchmark,其中Direct就是他所说的直接写显存的方式。
为了让TCPMP支持Direct的方式,需要修改overlay_direct.c中的相关代码,使其能够直接访问CE设备的显存。具体方法就不再这里赘述了,请参考前一篇随笔。正如上一篇所说,这里提供的方法目前只能专款专用,针对自己的平台做一些优化。实现了Direct的方式后,可以在“选项”——“视频设置”中看见目前系统支持的几种方式,如下图所示。
测试用的视频文件是“魅族Miniplayer.mp4”,M8里自带的广告片,三种模式测试报告的对比如下。
以上是Direct和GDI的对比图。可以看到使用Direct确实比GDI快一些,前者的Average Speed比后者的高10%。
Direct和DirectDraw的对比图如下。可以看到他们两个基本上是平分秋色,不相上下。
另外,在WinCE6.0中启动TCPMP时会有一些异常的打印信息。如果看着不舒服,可以修改cpu.c的第78行代码,改为“#if !defined(TARGET_PALMOS) && !defined(TARGET_SYMBIAN) && !defined(TARGET_WINCE)”,也就是不调用CheckARM5E()等函数。