3

我需要在继承的 C++ 类中使用 Objective-C++ 代码,该类与 iPhone 摄像头的视频录制一起工作(CMSampleBufferRef通过另一个 native-objective-c 类WrapperCMSampleBufferDelegate

AVCaptureVideoOutput我有它自己的作品,dispatch_queue_t callbackQueue所以,当我想从我的Wrapper班级获得最后一帧时,我需要锁定它callbackQueue以使其等到复制完成。

据我所知,它已完成dispatch_sync,同步captureOutput.callbackQueue. 但我无法让这段代码工作:

// .mm
frame_t MyCppClass::getLastFrame()
{
    dispatch_sync(pCaptureVideoDataOutput.sampleBufferCallbackQueue, ^{ // error: no matching function for call to 'dispatch_sync'

        CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(wrapperInstance->currentBuffer);
        CVPixelBufferLockBaseAddress(imageBuffer,0);

        // doing copying frame data from buffer...

        CVPixelBufferUnlockBaseAddress(imageBuffer, 0);
    }); // error: control may reach end of non-void block

    return frame;
}

// .h
@interface Wrapper : NSObject <AVCaptureVideoDataOutputSampleBufferDelegate> {
  CMSampleBufferRef currentBuffer;
}
@end

// .mm
@implementation Wrapper
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
    // doing copying to currentBuffer
}
@end

编辑:

当我改为

dispatch_sync(pCaptureVideoDataOutput.sampleBufferCallbackQueue, (dispatch_block_t)^{

它修复了第一个错误,但第二个仍然在这里..

被困住了..任何帮助表示赞赏!

4

2 回答 2

5

我想到了!

return在街区里有一些紧急声明。我认为它会返回函数,但它返回块......所以编译器是正确的。

于 2012-10-10T15:04:30.077 回答
4

错误:

错误:没有匹配的函数调用“dispatch_sync”

表示函数原型可能不可见。确保在 .mm 文件中包含 libdispatch 的标头...

#include <dispatch/dispatch.h>

第二个错误:

错误:控制可能到达非空块的末尾

是因为您的函数被声明为返回 aframe_t但它没有返回语句。

于 2012-10-10T14:44:45.387 回答