videoMinFrameDuration已弃用

mon*_*faw 2 xcode objective-c gpuimage ios7

当我将Xcode从4.6更新为5.1时,'iM7中不推荐使用videoMinnFrameDuration'

- (void)setFrameRate:(NSInteger)frameRate;
 {
_frameRate = frameRate;

if (_frameRate > 0)
{
    for (AVCaptureConnection *connection in videoOutput.connections)
    {

        if ([connection respondsToSelector:@selector(setVideoMinFrameDuration:)])
            connection.videoMinFrameDuration = CMTimeMake(1,_frameRate);
Run Code Online (Sandbox Code Playgroud)

Bra*_*son 5

首先,你使用的是过时版本的GPUImage,因为这已经在框架代码中修复了近一年了.更新本地框架版本.

我在GPUImage中解决这个问题的方法,因为我仍然需要在旧的iOS版本中使用此方法,是禁用相关代码的弃用检查:

    if ([_inputCamera respondsToSelector:@selector(setActiveVideoMinFrameDuration:)] &&
        [_inputCamera respondsToSelector:@selector(setActiveVideoMaxFrameDuration:)]) {

        NSError *error;
        [_inputCamera lockForConfiguration:&error];
        if (error == nil) {
#if defined(__IPHONE_7_0)
            [_inputCamera setActiveVideoMinFrameDuration:CMTimeMake(1, _frameRate)];
            [_inputCamera setActiveVideoMaxFrameDuration:CMTimeMake(1, _frameRate)];
#endif
        }
        [_inputCamera unlockForConfiguration];

    } else {

        for (AVCaptureConnection *connection in videoOutput.connections)
        {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
            if ([connection respondsToSelector:@selector(setVideoMinFrameDuration:)])
                connection.videoMinFrameDuration = CMTimeMake(1, _frameRate);

            if ([connection respondsToSelector:@selector(setVideoMaxFrameDuration:)])
                connection.videoMaxFrameDuration = CMTimeMake(1, _frameRate);
#pragma clang diagnostic pop
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果新属性(activeVideoMinFrameDuration)可用,我们使用它.如果没有,它将回退到现在已弃用的方法.由于我们知道它已被弃用,因此没有必要让编译器向我们发出警告.