ffmpeg使用qsv解码碰到的问题

ffmpeg使用qsv硬解码出来的视频帧格式是AV_PIX_FMT_NV12格式的

//ffmpeg使用qsv硬解码出来的视频帧格式是AV_PIX_FMT_NV12格式的,
//在调用sws_getContext函数时第三个参数必须强制传入AV_PIX_FMT_NV12,
//否则会导致视频数据转换rgb时失败
if (bUseGPUDecoder)
{
	m_img_convert_ctx = sws_getContext(w, h, AV_PIX_FMT_NV12,
		w, h, AV_PIX_FMT_YUV420P, SWS_BICUBIC, NULL, NULL, NULL);
}
else
{
	m_img_convert_ctx = sws_getContext(w, h, m_pVideoCodecCtx->pix_fmt,
		w, h, AV_PIX_FMT_YUV420P, SWS_BICUBIC, NULL, NULL, NULL);
}

使用hevc_qsv解码器,解码数据是组成完整一帧H265,然后直接发给解码器,报错
Error during QSV decoding.: unknown error (-1)。代码如下

pkt->data = ptr; //ptr是h265裸流,且是完整一帧
pkt->size = ptr_size;
nRet = avcodec_send_packet(m_pDecodeCtx,pkt);
int  nRet =avcodec_receive_frame(m_pDecodeCtx, frame);

这个办法用在h264_qsv,h264_cuvid,hevc_cuvid都没问题,就独独在hevc_qsv这里报错崩溃。
推测问题出在ffmepg线程和自己解码线程速度匹配上有问题(帧率是25帧,但是avcodec_send_packet的时候每24帧就出现一个I帧,有一帧丢掉了)
解决办法:使用avio_alloc_context的回调函数给ffmpeg喂数据

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值