Как конвертировать byte [] в IMediaSample на C # - PullRequest
0 голосов
/ 18 марта 2012

После некоторых примеров, которые я видел на этом сайте, я пробую следующий код:

var byteArray = new byte[m.Length -10];
myMemoryStream.Position = 10;
myMemoryStream.Read(byteArray,0,(int)myMemoryStream.Length-10);

GCHandle pinnedArray = GCHandle.Alloc(byteArray, GCHandleType.Pinned);
IntPtr pointer = pinnedArray.AddrOfPinnedObject();

IMediaSample pSample  = null;

Marshal.PtrToStructure( pointer,pSample);

pinnedArray.Free();

Но я получаю «NullArgumentException» при вызове Marshal.PtrToStructure (указатель, pSample).

Конечно, я знаю причину этой ошибки, и я хотел бы знать, как правильно это сделать.

Если вам нужна дополнительная информация, сообщите мне, и я добавлю ее как можно быстрее.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 11 июля 2012

Вам необходимо создать фактическую структуру, которая также реализует интерфейс IMediaSample.

public struct IMediaSampleStructure : IMediaSample
{
    // Implementation.
}

Затем вы можете сделать что-то вроде этого:

IMediaSample pSample = new IMediaSampleStructure();
Marshal.PtrToStructure(pointer, (IMediaSampleStructure)pSample);
...