Изменение размера видео с помощью видеопроцессора MFT

Я использую видеопроцессор MFT для преобразования формата пикселей. Это отлично работает. Но когда я изменяю размер ввода и сохраняю вывод тем же самым, обработка ввода

hr = ColorConv->ProcessInput(0, pSample, 0);

не удается с:

The data specified for the media type is invalid, inconsistent, or not supported by this object.

Я думаю, что мне нужно сделать некоторые настройки для видео ресайзера, но я не могу понять минимальные условия. Я прочитал, что мне нужно установить SetFullCropRegion, но это не существует в MFT (это DMO)? Также настройка SetConstrictionSize не работает.

Что у меня сейчас есть

IMFTransform* ColorConv;
...
UINT32 unFlags = MFT_ENUM_FLAG_SYNCMFT |
MFT_ENUM_FLAG_SYNCMFT |
MFT_ENUM_FLAG_HARDWARE |
MFT_ENUM_FLAG_LOCALMFT |
MFT_ENUM_FLAG_SORTANDFILTER;

IMFActivate **ppMFTActive;
UINT32 cMFTActive;

hr = MFTEnumEx(MFT_CATEGORY_VIDEO_PROCESSOR, unFlags, nullptr, nullptr, &ppMFTActive, &cMFTActive);
...
ppMFTActive[0]->ActivateObject(__uuidof(IMFTransform), (void **)&ColorConv);

...

// input:
pMFTInputMediaType->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video);
pMFTInputMediaType->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_YUY2);
hr = MFSetAttributeSize(pMFTInputMediaType, MF_MT_FRAME_SIZE, 320, 240);
...
hr = ColorConv->SetInputType(0, pMFTInputMediaType, 0);

// output
pMFTOutputMediaType->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video);
pMFTOutputMediaType->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_RGB24);
hr = MFSetAttributeSize(pMFTOutputMediaType, MF_MT_FRAME_SIZE, 352, 288);
...
hr = ColorConv->SetOutputType(0, pMFTOutputMediaType, 0);

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]