Нужно из .Net-потока передать видео в DirectShow. Одно из возможных нелучших решений:
unsafe
{
byte* p = (byte*)ip;
for (int i = 0; i < iSize; i++, p++)
*p = (byte)p_stream.ReadByte();
}
Но читать по байтам, да ещё с обратным преобразованием int в byte — явно не самый оптимальный вариант. А вот как сделать оптимальнее — вопрос: Marshal вроде не имеет метода для размещения массива именно по заданному адресу. GCHandle не будет работать с неуправляемой памятью (проверено — происходит ошибка). А все результаты поиска содержат эти варианты. Как объявить указатель на массив или преобразовать двойной указатель к массиву — разобраться мне не удалось. Класс Stream не имеет указателя на адрес потока, поэтому неуправляемыми функциями через extern воспользоваться не получается.
Подскажите, пожалуйста, как можно выполнить это действие оптимальнее.
Подскажи
Здравствуйте, Ilya81, Вы писали:
I>Нужно из .Net-потока передать видео в DirectShow. Одно из возможных нелучших решений:
Есть штатный метод:
Marshal.Copy