Я использую видеопроцессор 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);
Задача ещё не решена.