之前已經提到過這個問題,但是自問題出現以來,Swift肯定發生了一些變化。我試圖存儲CMSampleBuffer
從AVCaptureSession
返回的對象稍後處理。經過一些實驗後,我發現AVCaptureSession
必須重用其參考文獻CMSampleBuffer
。當我試圖保持超過15個會話掛起。所以我想我會製作樣本緩衝區的副本。但我似乎無法讓它工作。這裏是我寫的:在Swift 2.0中創建一個CMSampleBuffer的副本
var allocator: Unmanaged<CFAllocator>! = CFAllocatorGetDefault()
var bufferCopy: UnsafeMutablePointer<CMSampleBuffer?>
let err = CMSampleBufferCreateCopy(allocator.takeRetainedValue(), sampleBuffer, bufferCopy)
if err == noErr {
bufferArray.append(bufferCopy.memory!)
} else {
NSLog("Failed to copy buffer. Error: \(err)")
}
這將不會編譯,因爲它說Variable 'bufferCopy' used before being initialized
。我看了很多例子,他們會編譯或不工作,否則他們不會編譯。
有人看到我在這裏做錯了嗎?
感謝您的響應添,這似乎是它可以是一個很好的解決方案,以深入克隆。但我並不熟悉在這個級別使用內存的方式。你知道我在哪裏可以找到一個體面的例子,說明如何爲視頻和音頻創建一個'CMSampleBuffer'深層克隆? Apple顯然擁有一個15'CMSampleBuffer'的緩存,可以在運行'AVCaptureSession'時回收它。我顯然需要深入克隆來存儲我自己的。 – Rob
我終於想出瞭如何使用它來創建一個深層克隆。所有的複製方法都會重用堆中保存的數據來鎖定'AVCaptureSession'。所以我不得不將數據拉出到一個「NSMutableData」對象中,然後創建一個新的樣本緩衝區。謝謝 – Rob
@Rob你可以添加你的代碼來進行深度克隆。我有同樣的問題,並且已經搜索了半天。 – ferdyyy