在hw_decode.c示例中,ffmpeg展示了如何使用硬件加速来解码视频,我们来分析一下是怎么实现的。
硬件加速设备类型
展示所有可用的硬件加速方法, 在mac上只找到了videotoolbox加速的方式。
查看 AVHWDeviceType的定义,发现别的平台可以使用cuda,opencl, mediacodec,vulkan等来实现硬件加速。
源码分析
调用该示例程序。
- 参数videotoolbox 指定使用的硬件加速方式,mac平台只找到这一种
- /tmp/test.mp4 指定要解封装的文件,从文件中读取h264进行解码
- /tmp/test.yuv 指定解码后写入的文件路径
C++音视频开发学习资料:点击领取→音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)
main 函数
- 验证我们设置的加速器是否正确
- 打开文件,解封装,读取视频流,解码器信息
- 获取解码器支持的硬件配置信息,遍历,找到我们设置的类型,保存目标颜色格式
- 创建解码器上下文,填充解码参数,通过get_format告知解码器目标颜色格式
- 创建加速器实例,告诉解码器使用我们创建的加速器实例
- 从文件中读视频帧,送入解码器
- 从解码器中读取frame,判断颜色格式,处理数据从GPU复制到CPU
- 去掉frame的字节对齐,写入输出文件中
硬件加速器目标像素格式
告诉解码器,我们希望输出像素格式
get_hw_format
创建并设置加速器
C++音视频开发学习资料:点击领取→音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)
解码,数据从GPU到CPU
总结:
- 解码器配置的时候,需要告诉解码器我们使用的硬件加速器
- 与解码器商量输出的颜色格式
- 解码后处理,处理从GPU到CPU拷贝的内存拷贝
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!