开发者

Anyway of having captureOutput callback on a Background Thread?

Is there anyway to have the OS callback the delegate

   开发者_运维百科      - (void) captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)psampleBuffer fromConnection:(AVCaptureConnection *)pconnection

on a background thread instead of the main thread? The issue is the time that it is taking to copy off the data is affecting the UI. This seems to have to be done on the main thread since the captureOutput seems to be gone if trying to copy it in a background thread, etc... Am I missing something here?

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


I use CVPixelBuffer functions to lock/unlock the buffer and get image format information. I use memcpy to copy the data (while the buffer is locked) and call performSelectorInBackground to process the data.


For a good answer, this seems to get the location to fix the callback thread

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

Just need to change the queue.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜