Copia profunda de audio CMSampleBuffer
Estoy tratando de crear una copia de un CMSampleBuffer devuelto por captureOutput en unAVCaptureAudioDataOutputSampleBufferDelegate
.
El problema que tengo es que mis marcos provienen del método delegadocaptureOutput:didOutputSampleBuffer:fromConnection:
ser dejado caer después de retenerlos enCFArray
por un largo tiempo.
Obviamente, necesito crear copias profundas de los buffers entrantes para su posterior procesamiento. Yo tambien se queCMSampleBufferCreateCopy
solo crea copias superficiales.
Hay pocas preguntas relacionadas que se hicieron en SO:
Extraer datos de un CMSampleBuffer para crear una copia profundaCrear una copia de CMSampleBuffer en Swift devuelve OSStatus -12743 (Formato de medios no válido)Copia profunda de CMImageBuffer o CVImageBufferPero ninguno de ellos me ayuda a usar correctamenteCMSampleBufferCreate función con 12 parámetros:
CMSampleBufferRef copyBuffer;
CMBlockBufferRef data = CMSampleBufferGetDataBuffer(sampleBuffer);
CMFormatDescriptionRef formatDescription = CMSampleBufferGetFormatDescription(sampleBuffer);
CMItemCount itemCount = CMSampleBufferGetNumSamples(sampleBuffer);
CMTime duration = CMSampleBufferGetDuration(sampleBuffer);
CMTime presentationStamp = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
CMSampleTimingInfo timingInfo;
timingInfo.duration = duration;
timingInfo.presentationTimeStamp = presentationStamp;
timingInfo.decodeTimeStamp = CMSampleBufferGetDecodeTimeStamp(sampleBuffer);
size_t sampleSize = CMBlockBufferGetDataLength(data);
CMBlockBufferRef sampleData;
if (CMBlockBufferCopyDataBytes(data, 0, sampleSize, &sampleData) != kCMBlockBufferNoErr) {
VLog(@"error during copying sample buffer");
}
// Here I tried data and sampleData CMBlockBuffer instance, but no success
OSStatus status = CMSampleBufferCreate(kCFAllocatorDefault, data, isDataReady, nil, nil, formatDescription, itemCount, 1, &timingInfo, 1, &sampleSize, ©Buffer);
if (!self.sampleBufferArray) {
self.sampleBufferArray = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
//EXC_BAD_ACCESS crash when trying to add sampleBuffer to the array
CFArrayAppendValue(self.sampleBufferArray, copyBuffer);
} else {
CFArrayAppendValue(self.sampleBufferArray, copyBuffer);
}
¿Cómo se copia en profundidad Audio CMSampleBuffer? Siéntase libre de usar cualquier lenguaje (rápido / objetivo-c) en sus respuestas.