IMediaSample (DirectShow) для IDirect3DSurface9 / IMFSample (MediaFoundation) - PullRequest
2 голосов
/ 06 февраля 2012

Я работаю над пользовательским видеоплеером. Я использую смесь DirectShow / Media Foundation в своей архитектуре. По сути, я использую DS для захвата кадров VOB (не поддерживается MF). Мне удалось получить образец из DirectShow, но я застрял при передаче его средству визуализации. В MF я получаю Direct3DSurface9 (из IMFSample) и представляю его в буферном буфере, используя IDirect3D9Device.

Используя DirectShow, я получаю IMediaSample в качестве объекта буфера данных. Я не знаю, как конвертировать и передать это как IMFSample. Я обнаружил, что другие получают растровую информацию из примера и используют GDI + для рендеринга. Но мои видеоданные не всегда могут содержать данные RGB. Я хочу получить IDirect3DSurface9 или, возможно, IMFSample из IMediaSample и передать его для рендеринга, где мне не придется беспокоиться о преобразовании цветового пространства.

Я новичок в этом. Пожалуйста, поправьте меня, если я ошибаюсь. Спасибо

1 Ответ

4 голосов
/ 07 февраля 2012

IMediaSample у вас из вышестоящего декодера в DirectShow - не что иное, как обертка над буфером с памятью. За ней нет и не может быть никакой поверхности D3D (если только вы сами не позаботитесь об этом и не предоставите специальный распределитель, в этом случае у вас не возникнет вопроса в первую очередь). Следовательно, вы должны скопировать данные из этого буфера в буфер образца MF.

Здесь вы подошли к вопросу о том, что вы хотите, чтобы форматы буферов (типы носителей) совпадали, чтобы вы могли копировать без преобразования. Один из способов - а их может быть несколько - сначала установить конвейер MF и выяснить, какой именно тип пикселя вам предлагается с буферами на видеооборудовании. Затем убедитесь, что у вас есть этот формат пикселей и тип носителя в конвейере DirectShow, используя соответствующие фильтры инициализации граббера или преобразования цветового пространства, или с помощью преобразования цветового пространства DMO / MFT.

...