是否有操作系统回调代理
- (void) captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)psampleBuffer fromConnection:(AVCaptureConnection *)pconnection
在后台线程而不是主线程?问题是复制数据所花费的时间正在影响UI。这似乎必须在主线程上完成,因为如果尝试在后台线程中复制它,captureOutput似乎已经消失了......我在这里遗漏了什么?
CMFormatDescriptionRef format;
format = CMSampleBufferGetFormatDescription(sampleBuffer);
bufSize = CMSampleBufferGetNumSamples(sampleBuffer);
sampleSize = CMSampleBufferGetSampleSize(sampleBuffer,0);
sampleLength = CMSampleBufferGetTotalSampleSize(sampleBuffer);
blockbuff = CMSampleBufferGetDataBuffer(sampleBuffer);
CMBlockBufferCopyDataBytes(blockbuff, 0, tocopy*_depth, buffInUse+(offset*2));
答案 0 :(得分:1)
我使用CVPixelBuffer函数来锁定/解锁缓冲区并获取图像格式信息。我使用memcpy复制数据(当缓冲区被锁定时)并调用performSelectorInBackground来处理数据。
答案 1 :(得分:0)
为了得到一个好的答案,这似乎得到了修复回调线程的位置
[audioOutput setSampleBufferDelegate:self queue:dispatch_get_main_queue()];
只需要更改队列。