无法更改AVCaptureConnection方向

时间:2013-05-18 09:33:36

标签: iphone ios

我想改变前置摄像头的视频方向, 所以我选择了previewLayer.orientation,它确实有效。 由于该方法已从IOS6弃用,因此我收到使用previewLayer.connection.videoOrientation的警告 但我无法从previewLayer

访问连接属性
- (void)addDeviceInput {
    [session beginConfiguration];
    [session removeInput:videoInput];
    [self setVideoInput:nil];
    AVCaptureDeviceInput *newDeviceInput = [[AVCaptureDeviceInput alloc] initWithDevice:[self frontFacingCamera] error:nil];
    if ([session canAddInput:newDeviceInput]) {
        [session addInput:newDeviceInput];
        [self setVideoInput:newDeviceInput];
    }
    newDeviceInput = nil;
    if (previewLayer) {
        [previewLayer removeFromSuperlayer];
        [previewLayer release];
        previewLayer = nil;
    }
    [session commitConfiguration];

}

- (id)setupCameraSession {
    if (!(self = [super init])) {
        return nil;
     }
    self.frameRate = 0;
    session = [[AVCaptureSession alloc] init];
    [session beginConfiguration];
    [session setSessionPreset:AVCaptureSessionPreset352x288];

    [self addDeviceInput]; //invoke previous method 
    AVCaptureVideoDataOutput * newVideoDataOutput = [[AVCaptureVideoDataOutput alloc] init];
    newVideoDataOutput.videoSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                                    [NSNumber numberWithInt:kCVPixelFormatType_32BGRA],
                                    kCVPixelBufferPixelFormatTypeKey,nil];
    newVideoDataOutput.alwaysDiscardsLateVideoFrames = YES;
    if ([session canAddOutput:newVideoDataOutput]) {
        [session addOutput:newVideoDataOutput];
        [self setVideoOutput:newVideoDataOutput];
    }
    [newVideoDataOutput release];
    self.frameRate = VIDEO_FRAME_RATE;
    [session commitConfiguration];

    AVCaptureVideoPreviewLayer * newPreviewLayer =
    [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
    //[newPreviewLayer setSession:session]; //it doesn't work? and get error 

    [self setPreviewLayer:newPreviewLayer];
    [newPreviewLayer release];

    [session startRunning];
    return self;
}

我收到错误

  

错误:执行被中断,原因:尝试取消引用无效的ObjC对象或向其发送无法识别的选择器。

0 个答案:

没有答案