Cela a déjà été demandé, mais quelque chose doit avoir changé dans Swift depuis sa création. J'essaye de stocker CMSampleBuffer
objets retournés d'un AVCaptureSession
pour être traité plus tard. Après quelques expérimentations j'ai découvert que AVCaptureSession
doit réutiliser ses références . Quand j'essaye de garder plus de 15 la session se bloque. J'ai donc pensé que je ferais des copies des tampons d'échantillons. Mais je n'arrive pas à le faire fonctionner. Voici ce que je l'ai écrit:Créer une copie de CMSampleBuffer dans Swift 2.0
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)")
}
Cela ne compile pas parce qu'il dit que Variable 'bufferCopy' used before being initialized
. J'ai regardé beaucoup d'exemples et ils compileront et ne fonctionneront pas ou ils ne compileront pas.
Quelqu'un voit-il ce que je fais mal ici?
Merci pour la réponse Tim, cela semble, il peut être une bonne solution pour un clone profond. Mais je ne suis pas très familier avec la façon dont la mémoire est utilisée à ce niveau. Savez-vous où je pourrais trouver un exemple décent de la façon de créer un clone profond d'un 'CMSampleBuffer' pour la vidéo et l'audio? Apple détient apparemment un cache de 15 'CMSampleBuffer's qu'il recycle lors de l'exécution de' AVCaptureSession'. Je vais évidemment avoir besoin de cloner en profondeur pour stocker le mien. – Rob
J'ai finalement compris comment l'utiliser pour créer un clone profond. Toutes les méthodes de copie ont réutilisé les données dans le tas qui maintenaient verrouiller le 'AVCaptureSession'. J'ai donc dû extraire les données dans un objet 'NSMutableData', puis créer un nouveau buffer d'échantillons. Merci – Rob
@Rob pourriez-vous ajouter votre code pour le clonage en profondeur. J'ai le même problème et je cherche déjà une demi-journée. – ferdyyy