iPhoneカメラからのビデオ録画で動作する継承されたC++クラスでObjective-C++コードを使用する必要があります(CMSampleBufferRef
他のnative-objective-cクラスWrapper
を使用して取得しCMSampleBufferDelegate
ます)。
私が持っているものは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)^{
最初のエラーは修正されましたが、2番目のエラーはまだここにあります。
これで立ち往生しました..どんな助けも大歓迎です!