Доступ к поверхностной памяти DirectDraw непосредственно в C#

У меня есть карта видеозахвата, которая работает, периодически заполняя указанный пользователем буфер (заданный адрес памяти) данными изображения. Это работает для меня в C++, потому что я могу просто дать ему адрес указателя Surface.lpSurface, и драйвер карты захвата будет автоматически заполнять его новыми данными изображения в каждом кадре, после чего я могу flip() и получить новое изображение, в результате чего хороший чистый видеопоток.

Проблема в том, что я переношу на С#, и мне нужно иметь возможность делать то же самое, но в управляемой версии DirectDraw.Surface нет метода/свойства для получения адреса памяти области поверхностной памяти. Все, что мне нужно, это этот адрес, нет ли способа получить его с помощью C #?


person PHNSys    schedule 10.02.2011    source источник


Ответы (1)


Если вы имеете в виду MDX, я давно не играл с ним, так что это может быть полной чушью, но на Surface должен быть метод «Lock», который давал бы доступ к байтам, но он может быть немного медленнее, чем вы привыкли, с прямым доступом к базовому указателю...

Возможно, вы сможете пометить свой проект/класс как «небезопасный», а затем получить доступ к собственным процедурам DX, чтобы получить указатель через pinvoke? Затем небезопасная часть вашего кода должна иметь прямой доступ к данным. Правильно?

Извините, если этот ответ - бесполезная ерунда. Как я уже сказал, я давно не играл с DirectShow/MDX. Возможно, это послужит источником информации для Google или подтолкнет вас к некоторым идеям.

person groundh0g    schedule 15.02.2011