Как получить внеэкранную плоскую поверхность из 'нормальной' IDirect3D9Surface

Я работаю над медиаплеером с Media Foundation. Я пытаюсь использовать постобработку с DXVA-HD. Однако, когда я пытаюсь сделать VideoProcessBltHD, используя устройство HD, он завершается неудачно с E_INVALIDARGS. Что я сомневаюсь, так это то, что он неправильно работает с ID39Surface, который я предоставляю в качестве входных данных. Я получаю поверхность ввода из IMFMediaBuffer (которую я получаю, читая образец из SourceReader).

Я извлекаю поверхность следующим образом: CHECK_HR (hr = MFGetService( video_buffer, MR_BUFFER_SERVICE, __uuidof(IDirect3DSurface9), (void**)&pSurface));

Однако в примере DXVA-HD на MSDN VideoProcessBltHD работает нормально.

Принимая во внимание, что поверхность IDirect3DSurface9 в примере кода является неэкранной плоской поверхностью. Как передать "мою поверхность" (которая содержит видеоданные) в виде неэкранной плоской поверхности в видеопроцессор и успешное выполнение операции "blt-операция"?

Любая помощь будет оценена.

Спасибо, Моц

1 ответ

Я бы предложил установить полный DirectX SDK, переключить библиотеку времени выполнения в режим отладки в панели управления DirectX, включить полную проверку, устранить ошибку и запустить приложение в режиме отладки. Таким образом, вы получите описание ошибки, понятное человеку в DirectX.

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