Создайте копию CMSampleBuffer в Swift 2.0
Об этом уже спрашивали, но в Swift что-то изменилось с тех пор, как его спросили. Я пытаюсь хранить CMSampleBuffer
объекты, возвращенные из AVCaptureSession
будет обработано позже. После некоторых экспериментов я обнаружил, что AVCaptureSession
должен повторно использовать его CMSampleBuffer
Рекомендации. Когда я пытаюсь сохранить больше 15, сессия зависает. Поэтому я думал, что сделаю копии буферов сэмплов. Но я не могу заставить его работать. Вот что я написал:
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
, Я просмотрел много примеров, и они либо скомпилируются, либо не сработают, либо не скомпилируются.
Кто-нибудь видит, что я здесь делаю не так?
2 ответа
Буквально вы пытаетесь использовать переменную bufferCopy до ее инициализации.
Вы объявили тип для него, но не выделили память, на которую он указывает.
Вместо этого вы должны создать CMSampleBuffers, используя следующий вызов https://developer.apple.com/library/tvos/documentation/CoreMedia/Reference/CMSampleBuffer/index.html
Тогда вы сможете скопировать в него буфер (если формат буфера совпадает с форматом, из которого вы копируете).
Вы можете просто передать CMSampleBuffer?
переменная (которая, как необязательная, неявно инициализируется с nil
) в качестве аргумента&
:
var bufferCopy : CMSampleBuffer?
let err = CMSampleBufferCreateCopy(kCFAllocatorDefault, buffer, &bufferCopy)
if err == noErr {
// ...
}