关于ffmpeg硬解码后cpu依然占用高的问题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

最近使用ffmpeg的api对视频流进行硬解码时遇到了一个这样的问题:

采用ffmpeg官方的例子进行硬解码(dev/examples下hw_decode.c),解码后与软解码时的cpu占用率没有什么差别,依然很高。


一、解决办法

这个问题困扰了我很长时间,于是就设个断点debug了一下,发现av_hwframe_transfer_data之前调用的avcodec_receive_frame最开始是返回-11的,也就是AVERROR(EAGAIN)(原因可能是ffmpeg内部的缓冲区里面的视频帧还不足以输出,与h264算法有关)。于是加了一个容错判断,cpu的占用率居然降下来了。具体什么原因还没有深究,但是猜测之前应该是处理无效的frame时产生了大的空间开销。

二、代码示例

代码如下(示例):

re = avcodec_receive_frame(codec, frame);
if(re != 0){
 mux.unlock();
    av_frame_free(&frame);
    av_frame_free(&sw_frame);
    return NULL;
}
mux.unlock();
av_hwframe_transfer_data(sw_frame, frame, 0);
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值