无论如何在后台线程上进行captureOutput回调?

时间:2011-10-13 19:08:17

标签: iphone audio-recording

是否有操作系统回调代理

         - (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));

2 个答案:

答案 0 :(得分:1)

我使用CVPixelBuffer函数来锁定/解锁缓冲区并获取图像格式信息。我使用memcpy复制数据(当缓冲区被锁定时)并调用performSelectorInBackground来处理数据。

答案 1 :(得分:0)

为了得到一个好的答案,这似乎得到了修复回调线程的位置

     [audioOutput setSampleBufferDelegate:self queue:dispatch_get_main_queue()];

只需要更改队列。