2017-12-27 109 views
0

創建CMSampleBuffer我得到一個CVPixelBuffer從ARSessionDelegate:從CVPixelBuffer

func session(_ session: ARSession, didUpdate frame: ARFrame) { 
    frame.capturedImage // CVPixelBufferRef 
} 

但我的應用程序的另一部分(即我不能改變)使用CMSampleBuffer。

CMSampleBuffer是CVPixelBuffer的容器。

爲了創建一個CMSampleBuffer我可以使用此功能:

func CMSampleBufferCreateReadyWithImageBuffer(_ allocator: CFAllocator?, 
              _ imageBuffer: CVImageBuffer, 
              _ formatDescription: CMVideoFormatDescription, 
              _ sampleTiming: UnsafePointer<CMSampleTimingInfo>, 
              _ sBufOut: UnsafeMutablePointer<CMSampleBuffer?>) -> OSStatus 

唯一缺少的參數對於我來說是sampleTiming - 我怎麼能提取從CVPixelBuffer?

回答

1

的sampleTiming主要包含presentationTimeStamp,您可以通過以下代碼輕鬆創建:

let scale = CMTimeScale(NSEC_PER_SEC) 
let pts = CMTime(value: CMTimeValue(frame.timestamp * Double(scale)), 
       timescale: scale) 
var timingInfo = CMSampleTimingInfo(duration: kCMTimeInvalid, 
            presentationTimeStamp: pts, 
            decodeTimeStamp: kCMTimeInvalid) 
相關問題