我无法使用DXVA2硬件加速来使用ffmpeg解码HEVC视频。适用于H.264的DXVA2工作正常。
我从ffmpeg源代码编译了一个官方示例hw_decode.c:
https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/hw_decode.c
当我调用av_send_packet()时,它执行在AVCodecContext-> get_format中分配的回调,并且仅为HEVC视频返回AV_PIX_FMT_YUV420P,而不是为所有H.264视频返回AV_PIX_FMT_DXVA2_VLD。所以硬件解码不起作用。
HEVC的软件解码没有问题。
MPC-HC使用DXVA2播放精细的HEVC视频(CPU负载较低,任务管理器显示GPU详细信息中视频解码器的工作)。我的显卡是Geforce 1060。
我通过添加功能来解决这个问题:
enum AVPixelFormat get_hw_format(AVCodecContext *ctx,
const enum AVPixelFormat *pix_fmts)
{
return AV_PIX_FMT_DXVA2_VLD;
}
上述函数的分配地址pCodecContext-> get_format = get_hw_format;