我试图访问这个回答之后的内在矩阵。
通过运行下面的推荐,我获得了一个48字节的AnyObject,并进一步将其转换为CFData。
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中的值
发布于 2018-02-01 14:54:47
这应该是可行的:
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>。
发布于 2022-08-26 03:49:50
以下是马丁·R( Martin )的回答的更新,因为withUnsafeBytes已经被否决了:
if let camData = CMGetAttachment(sampleBuffer,
key: kCMSampleBufferAttachmentKey_CameraIntrinsicMatrix,
attachmentModeOut: nil) as? Data {
let matrix = camData.withUnsafeBytes { $0.load(as: matrix_float3x3.self) }
...
}发布于 2019-10-03 20:37:22
这是Martin R对目标-c的回答的版本:
CFTypeRef cameraIntrinsicData = CMGetAttachment(sampleBuffer, kCMSampleBufferAttachmentKey_CameraIntrinsicMatrix, nil);
if(cameraIntrinsicData != nil){
CFDataRef cfdr = (CFDataRef)(cameraIntrinsicData);
matrix_float3x3 camMatrix = (matrix_float3x3 *)(CFDataGetBytePtr(cfdr));
}https://stackoverflow.com/questions/48565286
复制相似问题