FFmpeg解码支持直接解码数据到CPU上,CPU上再对解码后的数据做颜色空间转换(非必须),再使用QT/GDI/SDL等渲染上屏,这步骤多了解码后从GPU数据拷贝到CPU以及在从CPU拷贝到Gpu渲染的过程。当然可以采用dxva2/d3d11va解码后直接上屏,减少GPU<->CPU的拷贝,在个人的文章有说明(Windows C++ 实现FFmpeg+dxva2解码并直接渲染(减少GPU->CPU的拷贝)-CSDN博客)。本文描述的是第一种。
解码跟编码不一样,解码还是比较简单的,不需要很多的参数初始化,具体流程如下:
1. 选择解码器类型,比如是否使用硬件解码器,具体的类型有:(h264/h264_qsv/h264_cuvid/hevc/hevc_qsv/hevc_cuvid)
pDecoder = avcodec_find_decoder_by_name("h264");
decoderCtx = avcodec_alloc_context3(pDecoder);
if (!decoderCtx) {
return -1;
}