AVFoundationのセットアップ

AVFoundationを使う機会があり,そのなかでも特にセットアップがわかりにくかったのでメモに残しておく. 以下をコピペすればOKなようにしてある.

- (void)setupAVCapture
{
  NSError *error = nil;
  
  self.session = [[AVCaptureSession alloc] init];


  if ([[UIDevicecurrentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
    [_sessionsetSessionPreset:AVCaptureSessionPreset640x480];
} else {
    [_sessionsetSessionPreset:AVCaptureSessionPresetPhoto];
  }
  
  AVCaptureDevice *device = [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];
  AVCaptureDeviceInput *deviceInput = [AVCaptureDeviceInputdeviceInputWithDevice:device error:&error];
  if (error) {
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error"
                                                        message:@"message"
                                                       delegate:self
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
    [alertView show];
    return;
  }


  if ( [_sessioncanAddInput:deviceInput] ){
    [_sessionaddInput:deviceInput];
  }
  
  self.stillImageOutput = [[AVCaptureStillImageOutput alloc] init];
  if ( [_sessioncanAddOutput:_stillImageOutput] ){
    [_sessionaddOutput:_stillImageOutput];
  }
  
  self.previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_session];
  [_previewLayersetBackgroundColor:[[UIColorredColor] CGColor]];
  _previewLayer.videoGravity = AVLayerVideoGravityResizeAspect;
  
  self.cameraView = [[UIViewalloc] initWithFrame:CGRectMake(0,  0, 320, 427)];
  [self.viewinsertSubview:_cameraViewatIndex:0];
  CALayer *rootLayer = [_cameraViewlayer];
  [rootLayer setMasksToBounds:YES];
  [_previewLayersetFrame:_cameraView.frame];
  [rootLayer addSublayer:_previewLayer];
  
  [_sessionstartRunning];
}