FFmpeg example 使用硬件加速来解码视频

在hw_decode.c示例中,ffmpeg展示了如何使用硬件加速来解码视频,我们来分析一下是怎么实现的。

硬件加速设备类型

展示所有可用的硬件加速方法, 在mac上只找到了videotoolbox加速的方式。


查看 AVHWDeviceType的定义,发现别的平台可以使用cuda,opencl, mediacodec,vulkan等来实现硬件加速。


源码分析

调用该示例程序。


  1. 参数videotoolbox 指定使用的硬件加速方式,mac平台只找到这一种
  2. /tmp/test.mp4 指定要解封装的文件,从文件中读取h264进行解码
  3. /tmp/test.yuv 指定解码后写入的文件路径

C++音视频开发学习资料:点击领取→音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)

main 函数


  1. 验证我们设置的加速器是否正确
  2. 打开文件,解封装,读取视频流,解码器信息
  3. 获取解码器支持的硬件配置信息,遍历,找到我们设置的类型,保存目标颜色格式
  4. 创建解码器上下文,填充解码参数,通过get_format告知解码器目标颜色格式
  5. 创建加速器实例,告诉解码器使用我们创建的加速器实例
  6. 从文件中读视频帧,送入解码器
  7. 从解码器中读取frame,判断颜色格式,处理数据从GPU复制到CPU
  8. 去掉frame的字节对齐,写入输出文件中

硬件加速器目标像素格式


告诉解码器,我们希望输出像素格式


get_hw_format


创建并设置加速器

C++音视频开发学习资料:点击领取→音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)


解码,数据从GPU到CPU


总结:

  1. 解码器配置的时候,需要告诉解码器我们使用的硬件加速器
  2. 与解码器商量输出的颜色格式
  3. 解码后处理,处理从GPU到CPU拷贝的内存拷贝

来源:音视频开发老舅

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年7月6日
下一篇 2022年7月6日

相关推荐