Видеопроцессор 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.

Другие вопросы по тегам