Swift 3:如何在48字节的CFData中访问matrix_float3x3的值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift 3:如何在48字节的CFData中访问matrix_float3x3的值?相关的知识,希望对你有一定的参考价值。
我想在这个answer之后访问内在矩阵。
通过运行下面的推荐,我得到了一个48字节的AnyObject,我进一步将其转换为CFData。
let camData = CMGetAttachment(sampleBuffer, kCMSampleBufferAttachmentKey_CameraIntrinsicMatrix, nil)
但是,我检查了CMSampleBuffer.h
中sampleBuffer的输出:
/*! @constant kCMSampleBufferAttachmentKey_CameraIntrinsicMatrix
@abstract Indicates the 3x3 camera intrinsic matrix applied to the current sample buffer.
@discussion Camera intrinsic matrix is a CFData containing a matrix_float3x3, which is column-major.
....
*/
CM_EXPORT const CFStringRef kCMSampleBufferAttachmentKey_CameraIntrinsicMatrix // CFData (matrix_float3x3) __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_11_0);
我应该如何从matrix_float3x3
访问CFData
中的值?
答案
这应该工作:
- 使用从
CFData
到NSData
和Data
的桥接,以及 withUnsafeBytes
方法获取所需类型的指针到数据字节,.pointee
取消引用指针。
例:
if let camData = CMGetAttachment(sampleBuffer, kCMSampleBufferAttachmentKey_CameraIntrinsicMatrix, nil) as? Data {
let matrix: matrix_float3x3 = camData.withUnsafeBytes { $0.pointee }
// ...
}
指针类型(闭包内的$0
)从上下文推断为UnsafePointer<matrix_float3x3>
。
以上是关于Swift 3:如何在48字节的CFData中访问matrix_float3x3的值?的主要内容,如果未能解决你的问题,请参考以下文章