最近因为需求以及一直以来觉得CPU解码太傻X,研究了一波硬解码。通过连续三四天不间断的挖坑填坑,大抵总结了网上资料给出的三种操作:
1. 用FFMPEG硬解码完从显存拷回内存,然后就没有然后了,存起来了事。
优点:十分简单,FFMPEG本身就给出了例子,跑就行了。
缺点:从显存拷贝回内存,大多数情况下不如直接用CPU解码,饶了一大圈费力不讨好。
改进方向:研究下显存的处理操作,将显存的数据在显存中处理完后通过D2D、D3D或OpenGL直接显示出来。研究FFMPEG源码的“av_hwframe_transfer_data”函数来实现这一操作应该是个比较好的思路。
2. 用FFMPEG硬解码完从显存拷到D3D中进行显示。
优点:第1种操作的前进方向,性能有质的飞跃。
缺点:
-
资料相当少,可以说有用的就是这位老哥给出的操作以及其他抄作业的老哥给出的修修补补。
-
由于该老哥的文章是两三年前写的,用到的FFMPEG版