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