一定条件后重启委托方法

时间:2014-04-16 07:45:04

标签: ios objective-c opencv

在此doc中,OpenCV在cap_ios.h中定义了一个用于视频处理的委托方法。宣言如下:

@class CvVideoCamera;

@protocol CvVideoCameraDelegate <NSObject>

#ifdef __cplusplus
// delegate method for processing image frames
- (void)processImage:(cv::Mat&)image;
#endif

@end

并且,我将用于视频处理的代码放在(void)processImage:(cv::Mat&)image;中的函数ViewController.mm中。

OpenCV + C ++ 中处理视频帧时,我使用do-while循环来处理相机捕获的每一帧。在循环中,代码不会继续,但如果某些条件为真,则从头开始重新启动。代码如下:

do {
    captureAndDoSomething();

    if (condition) {
        continue;     // To capture a new frame
    }

    doSomething();
} while(...);

那么,我的问题是如何在iOS编码中重启函数(void)processImage:(cv::Mat&)image?现在没有循环,我不能再使用continue

- (void)processImage:(cv::Mat&)image {
    doSomething();    // Capturing is done by delegate I think

    if (condition) {
                      // How to restart and capture a new frame now?
    }     

    doSomething();
}

1 个答案:

答案 0 :(得分:0)

我找到了错误的地方并使用goto来解决我的问题。实际上它不是关于委托方法。

One thing to beware

  

在代码中使用goto关键字时。你一定要确定   变量不应在goto关键字下方和标签上方声明   它指出了它的范围。

否则,您将收到goto into protected scope错误。对于我的情况,代码应该是:

- (void)processImage:(cv::Mat&)image {
    doSomething();    
    initialize();         // Method 1: variables declared before goto

    if (condition) {
        goto fin;
    }     

    doSomething();
    if (1) {
        initialize()      // Method 2: variables declared in its scope
    }

fin:
    lastAction();
}

方法1 方法2 都有效。