2010-03-15 39 views
1

我目前正在C#包裝器上使用Dallmeier通用API指示燈。
參見上發帖:C# wrapper and Callbacks三個指針數組的C#包裝器

我已經得到了幾乎所有「包裹」,但我卡在包裝包含的三分&的整數數組的數組回調:

dlm_setYUVDataCllback

int(int SessionHandle, void (*callback) (long IPlayerID, unsigned char** yuvData, 
    int* pitch, int width, int height, int64_t ts, char* extData)) 

功能設置回調,接收當前的YUV圖像。
參數 SessionHandle:處理當前會話。
返回 PlayerID(請參閱回調)。
回調 - IPlayerId:ID發送到播放器對象
- yuvData:的三分,Y,U和圖像
使用的YUV格式的第五部分陣列YUV420平面(未包裝)。
char * y = yuvData [0];
char * u = yuvData [1];
char * v = yuvData [2];
- pitch:圖像的Y,U和V部分的間距整數陣列
- 寬度:圖像的內部寬度。
- 高度
- TS:當前幀的時間戳
- 擴展數據:額外的數據幀

如何去用C#包裝呢?

任何幫助,非常感謝。

回答

0

unsigned char** yuvData應該被定義爲[MarshalAs(UnmanagedType.ByValArray,SizeConst=3)] IntPtr[] yuvData

那麼您將獲得3個IntPtrs陣列。您可以使用Marshal.Read或Marshal.Copy閱讀實際數據。

+0

謝謝logicnp。只是對此進行了跟蹤,我已經創建了一個帶有上述參數的結構,但是應該在c#中使用'Int64_t',並且對於'pitch'使用相同的MashalAs,它也是一個整數數組,例如。 [MarshalAs(UnmanagedType.ByValArray,SizeConst = 1)] IntPtr [] pitch – fergs 2010-03-16 02:08:44

+0

int64_t應該被定義爲long(在c#中也是64位)。 對於音高,如果「音高」是一維數組,則您的定義是正確的。 – logicnp 2010-03-16 03:05:10

+0

如何和我是否使用Marshal.Read或Marshal.Copy – fergs 2010-03-19 06:47:57