首页 > 解决方案 > 如何在 Xamarin.iOS 中将 ARGB8888 转换为 420Yp8_CbCr8?

问题描述

我正在使用 AVFoundation 录制视频,并且视频输出配置为提供像素格式的帧:CVPixelFormatType.CV32BGRA。

我之所以选择这种格式,是因为在这种格式上进行裁剪和其他转换比在 yuv420p 帧上更容易。但是最终格式需要是 CVPixelFormatType.CV420YpCbCr8BiPlanarVideoRange,因此我现在尝试使用 vImageConvert 中的以下方法,但我无法正确绑定它。

我正在尝试从 Xamarin 访问 vImageConvert_ARGB8888To420Yp8_CbCr8 C 函数,但它不受支持或至少未绑定。

我尝试了以下方法:

[DllImport("/System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/vImage")]
extern static vImageError vImageConvert_ARGB8888To420Yp8_CbCr8(ref vImageBuffer src, ref vImageBuffer destYp, ref vImageBuffer destCbCr, vImage_ARGBToYpCbCr info, [MarshalAs(UnmanagedType.LPArray)]uint[] permuteMap, vImageFlags flags);

但是我找不到 info 参数的正确类型。它应该只是 IntPtr 吗?如果我需要调用这个外部静态方法时如何解析正确的类型?

我在关注这个 SO 问题:How to convert BGRA to RGBA in Xamarin.iOS? 但现在我被困在 info 参数的类型上。

谢谢。

标签: xamarinyuv

解决方案


推荐阅读