【问题标题】:C# wrapper for array of three pointers用于三个指针数组的 C# 包装器
【发布时间】:2010-03-15 02:08:57
【问题描述】:

我目前正在开发一个 C# 包装器以使用 Dallmeier Common API light。
见前贴:C# wrapper and Callbacks

我已经“包装”了几乎所有东西,但我坚持包装一个包含三个指针数组和一个整数数组的回调:

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 和 V 部分
使用的 YUV 格式是 YUV420 平面(未打包)。
char *y = yuvData[0];
字符 *u = yuvData[1];
字符 *v = yuvData[2];
- 音高:图像 Y、U 和 V 部分音高的整数数组
- 宽度:图像的固有宽度。
- 高度
- ts : 当前帧的时间戳
- extData: 帧的附加数据

如何在 c# 中包装它?

非常感谢任何帮助。

【问题讨论】:

    标签: c# arrays pointers wrapper


    【解决方案1】:

    unsigned char** yuvData 应定义为[MarshalAs(UnmanagedType.ByValArray,SizeConst=3)] IntPtr[] yuvData

    然后您将获得一个包含 3 个 IntPtrs 的数组。您可以使用 Marshal.Read 或 Marshal.Copy 读取实际数据。

    【讨论】:

    • 感谢 logicnp。只是对此的跟进,我已经创建了一个具有上述参数的结构,但是'Int64_t'在c#中应该是什么,我是否对'pitch'使用相同的MashalAs,它也是一个整数数组,例如[MarshalAs(UnmanagedType.ByValArray,SizeConst=1)] IntPtr[] 间距
    • int64_t 应定义为 long(在 c# 中也是 64 位)。对于音高,如果 'pitch' 是一维数组,则您的定义是正确的。
    • 我如何使用 Marshal.Read 或 Marshal.Copy
    • @logicnp:我认为您的意思是 UnmanagedType.LPArray。 ByValArray 仅对结构字段有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多