2

我想改变前置摄像头的视频方向,所以我选择了 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 对象或向其发送无法识别的选择器。

4

0 回答 0