Видеопроцессор MFT и преобразование цветов
Видеопроцессор MSDN MFT указывает, что его можно использовать для преобразования цветового пространства. Итак, я пытаюсь использовать этот MFT для преобразования из формата NV12 в формат I420.
Я получаю сообщение об ошибке "MF_E_UNSUPPORTED_D3D_TYPE" при попытке установить тип носителя для вывода на I420 (остальные все атрибуты такие же, как для ввода).
CComPtr<IMFMediaType> outputVideoType;
hr = createVideoTypeFromSource(inputMediaType, MFVideoFormat_I420, TRUE, TRUE, &outputVideoType);
ERROR_CHECK(hr);
hr = vpTransform->SetOutputType(0, outputVideoType, 0); // this gives error
Но если я установлю формат вывода как NV12, он не вернет никакой ошибки. Здесь я пытаюсь обработать видео с GPU-ускорением, используя Microsoft Direct3D 11.
Еще один момент, на который следует обратить внимание: доступный тип вывода, возвращаемый при запросе с использованием приведенного ниже фрагмента кода, не является 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");
}
}
Есть идеи, почему VP MFT на базе D3D11 не поддерживает преобразование цветов NV12 в I420? или есть еще что-то, что нужно настроить, прежде чем я запрошу эту функцию?
Фон:
Первоначально я пытался использовать VP MFT с D3D9, где он не позволяет ускорение GPU. В этом случае это было хорошо для преобразования NV12 в I420. Поскольку D3D9 не использует ускорение графического процессора, я пытаюсь перейти на D3D11.
1 ответ
Возможно, ваш графический процессор не поддерживает преобразование цветов NV12 в I420.
В программном режиме это обычно возможно (не всегда возможно), но в аппаратном режиме (GPU) возможно, что ваш GPU не сможет это сделать.
Сначала проверьте ваши возможности GPU.