MSDN Video Processor MFT表示它可用于颜色空间转换。所以,我试图使用这个MFT从NV12格式转换为I420格式。
当我尝试将输出媒体类型设置为I420时,我收到“MF_E_UNSUPPORTED_D3D_TYPE”错误(其余所有其他属性与输入相同)。
CComPtr<IMFMediaType> outputVideoType;
hr = createVideoTypeFromSource(inputMediaType, MFVideoFormat_I420, TRUE, TRUE, &outputVideoType);
ERROR_CHECK(hr);
hr = vpTransform->SetOutputType(0, outputVideoType, 0); // this gives error
但如果我将输出格式设置为NV12,则不会返回任何错误。在这里,我正在尝试使用Microsoft Direct3D 11进行GPU加速视频处理。
这里要注意的另一点是,当我使用下面的代码查询时返回的可用输出类型不是NV12。但它返回“MFVideoFormat_RGB32”
IMFMediaType* pMediaTypeOutput = NULL;
hr = MFCreateMediaType(&pMediaTypeOutput);
if (FAILED(hr)) return hr;
hr = vpTransform->GetOutputAvailableType(0, 0, &pMediaTypeOutput);
GUID majorType;
hr = pMediaTypeOutput->GetMajorType(&majorType);
if (IsEqualGUID(majorType, MFMediaType_Video))
{
GUID subtype;
hr = pMediaTypeOutput->GetGUID(MF_MT_SUBTYPE, &subtype);
if (subtype == MFVideoFormat_IYUV)
{
printf("Format: IYUV\n");
}
else if (subtype == MFVideoFormat_NV12)
{
printf("Format: NV12\n");
}
else if (subtype == MFVideoFormat_I420)
{
printf("Format: I420\n");
}
}
基于D3D11的VP MFT为什么不支持NV12到I420的颜色转换?或者在我申请此功能之前是否还有其他事情需要配置?
最初我尝试使用VP MFT和D3D9,它不支持GPU加速。在这种情况下,NV12到I420的转换很好。由于D3D9没有使用GPU加速,我正在尝试迁移到D3D11。
答案 0 :(得分:0)
您的GPU可能无法处理NV12到I420的颜色转换。
在软件模式下,通常可以(不用说总是可行),但在硬件模式(GPU)中,你的GPU可能无法做到。
首先检查您的GPU功能。