0
Posted on 上午3:27:00 by Fan Zhang and filed under , , , ,

  显卡是 ATI HD 4650,支持 ATI Avivo 技术,可以利用 GPU 编解码 H.264 等格式的视频。

  但是使用起来还需要进行设置,网上一搜就有一大堆文章,反正都不怎么好用。还说要从 PowerDVD 提取解码器,看着就觉得麻烦,而且人家是收费软件吧?还有用 KMPlayer 的,个人不是很认同违反开源协议的。

  最简单的方法就是安装一个 K-Lite Mega Codec Pack,使用里面的播放器 Media Player Classic Homecinema。设置方法如下:

  • 在菜单中选取 View -> Options -> Internal Filters
  • 勾选 Transform Filters 中的 H264/AVC (DXVA) 以及 VC1 (DXVA)

  这个时候,选择一个 H.264 视频播放,看看 CPU 占用率和之前相比,如果小了很多就说明使用了硬解,否则就是没有成功。或者在播放的时候,点右键 -> Filters -> MPC Video Decoder,是否启动了 DXVA 模式。

  经过我的测试,似乎对于某些高级编码级别无法解,显示不出图像,但是大部分显示正常。设置播放就完成了,下面再写一些资料。

  ATI Avivo 的对手是 NVIDIA PureVideo,GPU 编程我也不懂,似乎 NVIDIA 的 CUDA 架构编程更自由,CoreAVC 就是使用 CUDA 技术来发挥显卡资源的。

  微软和图形芯片厂商联合制定了一个硬件接口规范 DXVA (DirectX Video Acceleration),规定了几个硬件解码加速的级别,基本上支持的格式也就 H264 和 VC-1。而前面提到的 CUDA 就不是一回事,它是一个通用计算技术,所以更自由,可以更灵活挖掘显卡资源。

  在安装显卡驱动的时候同时安装的 ATI AVIVO Codecs 应该就是支持硬件编解码的驱动程序。在 Windows 上想要利用显卡资源,应该是通过这个驱动沟通的。

  很多人都提到的 CyberLink PowerDVD 的 H.264 解码器,搞不清楚是不是免费的,应该就是这个解码器利用上了 Avivo 等技术。而普通的 ffdshow 应该都是软解,目前还没有利用上 GPU 资源。名为 CyberLink Video/SP Decoder (PDVD9) 的 Filter 应该是解 mpeg2 的,似乎免费。

  而我使用的播放器 MPC-HC 则在程序内提供了 DXVA Support。MPC 的参与者都是大神级别的人物。有兴趣的可以去 http://www.xvidvideo.ru/ 看看。下载一个 MPCVideoDec.ax 就可以在别的播放器里面使用 MPC Video Decoder 从而开启 DXVA 模式了。

  至于编码,则要下载一个 Avivo Video Converter,不过对视频参数的设置很少,虽然快,但是质量一般,适合转换到便携设备,比如 PSP,Mobile Phone 上去。

  相关工具有一个 DXVA Checker,可以去 http://bluesky23.hp.infoseek.co.jp/ 下载。

0
Posted on 下午4:18:00 by Fan Zhang and filed under
  • CPU:AMD Phenom II X2 545,周期编号是 0922。
  • 主板:技嘉 GA-MA770T-UD3P,BIOS 版本 F2。
  • 内存:DDR3 1333 2G x 2

  主板想用 UD4P 但是没货,这款 770 南桥是 SB710,只要支持 ACC(Advanced Clock Calibration)即可,不用必须 790。

  过程很顺利,只要在 BIOS 中把 EC Firmware Selection 改成 Hybrid,并且把 Advanced Clock Calibration 设置成 Auto 即可。此时显示的 CPU 型号是 Phenom II x4 B45。

  主板的北桥温度有些偏高。

2
Posted on 下午7:04:00 by Fan Zhang and filed under ,

Trac 0.12dev 安装记录

by 晓月

参考文档


  Trac Installation Guide for 0.12dev

超简易在线安装


  因为 Trac 0.12dev 是正在开发的版本,所以它的安装过程需要注意各个组件的版本问题,以下操作在2009年7月6日是可行的,但是如果有某个组件版本升级,可能导致问题。

  1. 下载 Python 2.5.4,安装到 C:\Python25。
  2. 下载 setuptools-0.6c9.win32-py2.5.exe,直接运行安装。
  3. 下载 Setup-Subversion-1.5.6.msi,直接运行安装。
  4. 下载 svn-python-1.5.6.win32-py2.5.exe,直接运行安装。
  5. 安装 Genshi,运行:easy_install Genshi==dev
  6. 安装 Babel,运行:easy_install Babel
  7. 检出 Trac:svn export https://svn.edgewall.com/repos/trac/trunk trac
  8. 在 trac 目录运行:python setup.py compile_catalog -f
  9. 在 trac 目录运行:python setup.py install
  10. 安装完毕,此时 trac 目录可以删除。

离线安装


  在线安装虽然简单方便,但是感觉不太可控,而且重新安装起来比较慢。下面就介绍如何把依赖的包下载到本地。

  Genshi 在下载页面只有 0.51 版本,而 Trac 0.12 需要 0.6(r690以上)的版本。因此需要自己手动打包成 egg 文件。
  1. svn co http://svn.edgewall.org/repos/genshi/trunk genshi
  2. 在 genshi 目录,运行:python setup.py bdist_egg
  3. 在 genshi/dist 目录,得到相应的 egg 文件。

  Babel 使用下载页面上的 Babel-0.9.4-py2.5.egg 就行。如果从 SVN 检出最新的代码(1.0dev),配置还需要进行比较复杂的操作,参见文档:Setting up Babel from a Subversion Checkout

  Trac 需要在打包之前先编译一下翻译文件,过程类似于在线安装,就是第一步把导出改成检出(为了包含版本信息),最后一步改成打包:
  1. svn co https://svn.edgewall.com/repos/trac/trunk trac
  2. 在 trac 目录运行:python setup.py compile_catalog -f
  3. 在 trac 目录运行:python setup.py bdist_egg
  4. 在 trac/dist 目录,得到相应的 egg 文件。

  这样在安装的时候,使用如下命令即可:
  • easy_install Genshi-0.6dev_r1063-py2.5-win32.egg
  • easy_install Babel-0.9.4-py2.5.egg
  • easy_install Trac-0.12dev_r8345-py2.5.egg

SVN 版本造成的差异


  如果,SVN 使用的不是 1.5.x 版本,而是 1.6.x 版本,因为 checkout 格式发生变化,导致 setuptools 无法正确获得版本,详见 Trac Ticket #8365。这就导致安装 Genshi 以后版本号不对,在安装 Trac 会提示:

No local packages or download links found for Genshi>=0.6dev-r960
error: Could not find suitable distribution for Requirement.parse('Genshi>=0.6dev-r960')

  因此,如果使用 SVN 1.6.x,目前解决方法是手动修改 egg 包的名称和内部 EGG-INFO 的版本信息。手动版本信息从 0.6dev-r0 修改成类似 0.6dev-r1063,其中 1063 是 SVN 的版本号。或者在安装之后,修改 Python 目录下的 easy-install.pth 文件。

  SVN 1.6.3 下载:

一些说明


  有版本有"洁癖"的人,相信总喜欢用最新的版本,但是对待类似这种问题,还是老老实实用稳定的版本省心。比如 Python 3.1 都发布,但是因为其各种特性还不稳定(从 3.0-3.1 的变化就能看出),所以很多第三方库都还没有迁移,所以目前我也只能多个版本的 Python 混合使用了。

  很多扩展包使用 easy_install 方式(PEAK 开发的新的 Python 扩展包方式)会比较简单,在安装了上面的 setuptools 后在 Python 目录下的 Scripts 目录就有了。

  SVN 似乎在 Apache 2.0 和 2.2 版本上有分支,所以根据使用的 Apache 选择合适的版本下载。SVN 安装完成后要设置环境变量。比如 C:\Subversion\ 是安装目录,注意安装完检查是否设置好了环境变量:SET APR_ICONV_PATH="C:\Subversion\iconv"。

  svn-python 是 SVN 自身提供的 Python 模块,用来操作 SVN。操作 SVN 的 Python 模块还有 PySVN,不过 Trac 使用的是 svn-python。









修订记录:
2009-07-06:初稿。

0
Posted on 上午1:28:00 by Fan Zhang and filed under

  在用 DirectShow 写程序的时候,被 Renderer Filter 的问题折腾了好几次,有的问题一开始不了解还觉得莫名其妙,虽然说到现在也不是完全明白,但好歹解决了。

  我曾经遇到的问题有:

  1. 将一个解码器封装成 ActiveX 控件,但是遇到刷新问题,就是拖动窗口的时候才刷新。奇怪的是,在有的机器上就没有问题,即使配置一样,而且和 IE 版本也没什么关系。
  2. 在一个桌面播放器中同时播放4个视频,都附着到一个窗口上,但是左上角一路异常,总是打开比其他几个慢,而且拖动窗口时会反应迟缓,总之就是它特殊,但是程序中完全是一样对待的。
  3. 使用远程桌面连接的时候,看不到播放的视频。这个是小事。

  以上问题通过搜索,主要解决方法有:

  1. 折腾 OnDraw(), OnPaint(), OnEraseBkGnd() 这几个函数,要 put_owner 在窗体上,由窗体的 WM_PAINT 来刷新。
  2. 修改控件属性,添加处理消息。
  3. 不使用默认的 Renderer Filter,手动使用 VMR-9。

  也是我水平不高,还就替换 Renderer Filter 好用,手动刷新的方法在上面第二个问题的时候就不怎么好使。而且 DirectShow 提供了多个 Renderer Filter,换一个更高级的往往能解决问题。

  但是,我只是知道,比如 VMR-9 中自己管理了刷新机制,所以上述这些问题都能解决,但是如何处理的还不明白。

  DirectShow 中自带的 Renderer Filter 挺多的,甚至还有同名但是 CLSID 不同的,在 MSDN: Choosing the Right Video Renderer 中有一个较详细的介绍。通过以下 CLSID 以及 MSDN 上的资料应该能回答有关 Renderer Filter 的疑惑。

  • CLSID_OverlayMixer // {CD8743A1-3736-11d0-9E69-00C04FD7C15B}
  • CLSID_VideoRenderer // {70E102B0-5556-11CE-97C0-00AA0055595A}
  • CLSID_VideoRendererDefault // {6BC1CFFA-8FC1-4261-AC22-CFB4CC38DB50}
  • CLSID_VideoMixingRenderer // {B87BEB7B-8D29-423f-AE4D-6582C10175AC}
  • CLSID_VideoMixingRenderer9 // {51b4abf3-748f-4e3b-a276-c828330e926a}
  • CLSID_EnhancedVideoRenderer // {FA10746C-9B63-4b6c-BC49-FC300EA5F256}

  以上 CLSID 都可以在 Windows SDK 中的 uuids.h 找到。

   Overlay Mixer 不怎么用,Enhanced Video Renderer (EVR) 是 Vista 之后的,还没用过。VMR-9 最强大,如果能用(系统软硬件支持),一般能解决问题。VMR-7 以及更早的,我也分不太清楚细致的区别,其中 VMR-7 本身就有两个Filter,其中一个还和 Video Renderer Filter 的 friendly name 相同,都是 "Video Renderer"。

  因为 Renderer 接收的是 RGB/YUV 数据,然后交由显卡处理显示,所以显卡的差别会导致性能的差别。此外,VMR-9 因为有更强的功能和更好的质量,所以会占用更多的资源,在不同的显卡上,可能会有实例 (instance) 的限制,比如只能显示 7-8 个窗口,而 VMR-7 则限制小很多。

  在陆其明的书上有一些介绍,网上很多文章都是这本书上相应章节内容,搜一下"关于VMR7、VMR9、Video Renderer"就能找到。

  一句话总结,系统资源允许的情况下,使用高级的 Renderer Filter,否则就只能使用较低版本的 Renderer Filter,手动解决出现的种种问题。