Создайте копию 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 {
    // ...
}
Другие вопросы по тегам