I have both Coffee Lake and Skylake boxes here and managed to get both H264 encode/decode and H265 encode/decode working. The H265 was MFX_PROFILE_HEVC_MAIN using MFX_FOURCC_NV12, i.e. 8 bit only. Apparently you don't need to manually load a plugin to get it to work on these platforms.
Anyway I've now moved onto trying to get MFX_PROFILE_HEVC_MAIN10 with MFX_FOURCC_P010 HEVC working. I think things are somewhat different here, i.e. I need to manually load a plugin first. I'm not 100% when and where to do this however. Right now I'm loading the plugin as follows:
auto status = MFXVideoUSER_Load(*My_QSV_Session, &MFX_PLUGINID_HEVCE_HW, 1);
, if and only if the caller asks for HEVC Main10. OK, I can choose one of the following plugins:
MFX_PLUGINID_HEVCD_HW
MFX_PLUGINID_HEVCE_HW
MFX_PLUGINID_HEVCE_FEI_HW
MFX_PLUGINID_HEVC_FEI_ENCODE
MFX_PLUGINID_HEVCE_DP_GACC
Some of them don't exist, i.e. aren't in my Intel(R) Media SDK 2018 R2 Plugin folder. So my first question is where do I find them all? Secondly neither sample_encode nor my own project can successfully initialise against HEVC Main10. Is the above MFXVideoUSER_Load statement all I have to do to load a plugin? If I want the fastest hardware encode (we control customer CPU platform quite tightly, i.e. no need for CUDA-style encoding acceleration), which of the above options should I choose?
My command line with sample_encode is:
sample_encode h265 -i "..\..\gops\in_p010\1.raw" -o output.265 -w 1280 -h 720 -p010 -hw -d3d11 -CodecProfile 2
The raw frame is p010 format (verified as such) and of the correct size. I'd like -hw (hardware) and preferably -d3d11, with the Main10 profile which I believe is "2". sample_encode fails with MFX_ERR_MEMORY_ALLOC in MFXVideoENCODE::Init.
I get incompatible params from Query with -d3d11, so I reverted it to use the SysMemAllocator. Using that I get Unsupported when I come to Init my encoder. The parameters in my project were:
...mfx.CodecId = MFX_CODEC_HEVC;
...mfx.CodecProfile = MFX_PROFILE_HEVC_MAIN10;
...mfx.FrameInfo.FourCC = MFX_FOURCC_P010;
These match the ones sample_encode submits (it fails too).
What mistake have I made?