Swift 3:如何访问48字节CFData中matrix_float3x3的值?

2024-06-19

我正在尝试访问内在矩阵answer https://stackoverflow.com/a/48159895/9296667.

通过运行下面的命令,我能够得到一个 48 字节的任意对象 https://developer.apple.com/documentation/swift/anyobject,我进一步将其转换为CFData https://developer.apple.com/documentation/corefoundation/cfdata-rv9.

let camData = CMGetAttachment(sampleBuffer, kCMSampleBufferAttachmentKey_CameraIntrinsicMatrix, nil)

但是,我检查了sampleBuffer的输出CMSampleBuffer.h:

/*! @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 to NSData to Data, and
  • the withUnsafeBytes方法来获取所需的指针 输入数据字节,
  • .pointee取消引用指针。

Example:

if let camData = CMGetAttachment(sampleBuffer, kCMSampleBufferAttachmentKey_CameraIntrinsicMatrix, nil) as? Data {
    let matrix: matrix_float3x3 = camData.withUnsafeBytes { $0.pointee }

    // ...

}

指针类型($0在闭包内)是从上下文推断出来的 作为UnsafePointer<matrix_float3x3>.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 3:如何访问48字节CFData中matrix_float3x3的值? 的相关文章

随机推荐