title: How to capture image with AVFoundation framework?
body: <p>I have following code to open the camera in UIView ,that is working right now.</p>
  
  <p>But i have two buttons like in this <a href="http://postimg.org/image/7hzbggtl9/" rel="nofollow">screen shot</a>  one for capturing photo and another one for upload photo from library.</p>
  
  <p>How do i capture photo without going to native camera ?</p>
  
  <p>Here is my .h file code</p>
  
  <pre><code>#import &lt;UIKit/UIKit.h&gt;
  #import &lt;AVFoundation/AVFoundation.h&gt;
  
  @interface bgCameraController : UIViewController&lt;AVCaptureMetadataOutputObjectsDelegate&gt;
  
  @property (weak, nonatomic) IBOutlet UIView *cam;
  @property (strong, nonatomic) IBOutlet UIImageView *imageView;
  
  - (IBAction)takePhoto:  (UIButton *)sender;
  - (IBAction)selectPhoto:(UIButton *)sender;
  @end
  </code></pre>
  
  <p>Here is my .m file code</p>
  
  <pre><code>#import "bgCameraController.h"
  
  @interface bgCameraController ()
  @property (nonatomic, strong) AVCaptureSession *captureSession;
  @property (nonatomic, strong) AVCaptureVideoPreviewLayer *videoPreviewLayer;
  @property (nonatomic, strong) AVAudioPlayer *audioPlayer;
  @property (nonatomic) BOOL isReading;
  
  -(BOOL)startReading;
  -(void)stopReading;
  -(void)loadBeepSound;
  @end
  
  @implementation bgCameraController
  
  - (void)viewDidLoad {
      [super viewDidLoad];
      [self loadBeepSound];
      [self startReading];
  
      // Do any additional setup after loading the view.
  }
  
  - (void)didReceiveMemoryWarning {
      [super didReceiveMemoryWarning];
      // Dispose of any resources that can be recreated.
  }
  
  - (BOOL)startReading {
      NSError *error;
  
      // Get an instance of the AVCaptureDevice class to initialize a device object and provide the video
      // as the media type parameter.
      AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
  
      // Get an instance of the AVCaptureDeviceInput class using the previous device object.
      AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:&amp;error];
  
      if (!input) {
          // If any error occurs, simply log the description of it and don't continue any more.
          NSLog(@"%@", [error localizedDescription]);
          return NO;
      }
  
      // Initialize the captureSession object.
      _captureSession = [[AVCaptureSession alloc] init];
      // Set the input device on the capture session.
      [_captureSession addInput:input];
  
  
      // Initialize a AVCaptureMetadataOutput object and set it as the output device to the capture session.
      AVCaptureMetadataOutput *captureMetadataOutput = [[AVCaptureMetadataOutput alloc] init];
      [_captureSession addOutput:captureMetadataOutput];
  
      // Create a new serial dispatch queue.
      dispatch_queue_t dispatchQueue;
      dispatchQueue = dispatch_queue_create("myQueue", NULL);
      [captureMetadataOutput setMetadataObjectsDelegate:self queue:dispatchQueue];
      [captureMetadataOutput setMetadataObjectTypes:[NSArray arrayWithObject:AVMetadataObjectTypeQRCode]];
  
      // Initialize the video preview layer and add it as a sublayer to the viewPreview view's layer.
      _videoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_captureSession];
      [_videoPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
      [_videoPreviewLayer setFrame:_cam.layer.bounds];
      [_cam.layer addSublayer:_videoPreviewLayer];
  
  
      // Start video capture.
      [_captureSession startRunning];
  
      return YES;
  }
  
  
  -(void)stopReading{
      // Stop video capture and make the capture session object nil.
      [_captureSession stopRunning];
      _captureSession = nil;
  
      // Remove the video preview layer from the viewPreview view's layer.
      //[_videoPreviewLayer removeFromSuperlayer];
  }
  
  
  -(void)loadBeepSound{
      // Get the path to the beep.mp3 file and convert it to a NSURL object.
      NSString *beepFilePath = [[NSBundle mainBundle] pathForResource:@"beep" ofType:@"mp3"];
      NSURL *beepURL = [NSURL URLWithString:beepFilePath];
  
      NSError *error;
  
      // Initialize the audio player object using the NSURL object previously set.
      _audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:beepURL error:&amp;error];
      if (error) {
          // If the audio player cannot be initialized then log a message.
          // NSLog(@"Could not play beep file.");
          //NSLog(@"%@", [error localizedDescription]);
      }
      else{
          // If the audio player was successfully initialized then load it in memory.
          [_audioPlayer prepareToPlay];
      }
  }
  -(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{
  
      // Check if the metadataObjects array is not nil and it contains at least one object.
      if (metadataObjects != nil &amp;&amp; [metadataObjects count] &gt; 0) {
          // Get the metadata object.
          // NSLog(@"%@",metadataObjects);
          AVMetadataMachineReadableCodeObject *metadataObj = [metadataObjects objectAtIndex:0];
          if ([[metadataObj type] isEqualToString:AVMetadataObjectTypeQRCode]) {
              // If the found metadata is equal to the QR code metadata then update the status label's text,
              // stop reading and change the bar button item's title and the flag's value.
              // Everything is done on the main thread.
              NSString *result=[metadataObj stringValue];
              [self performSelectorOnMainThread:@selector(setQRcodeValues:) withObject:result waitUntilDone:NO];
              //  [_result performSelectorOnMainThread:@selector(setText:) withObject:[metadataObj stringValue] waitUntilDone:NO];
  
              [self performSelectorOnMainThread:@selector(stopReading) withObject:nil waitUntilDone:NO];
              // [_button performSelectorOnMainThread:@selector(setTitle:) withObject:@"Start!" waitUntilDone:NO];
  
              _isReading = NO;
  
              // If the audio player is not nil, then play the sound effect.
              if (_audioPlayer) {
                  [_audioPlayer play];
              }
          }
      }
  
  
  }
  
  /*
  #pragma mark - Navigation
  
  // In a storyboard-based application, you will often want to do a little preparation before navigation
  - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
      // Get the new view controller using [segue destinationViewController].
      // Pass the selected object to the new view controller.
  }
  */
  
  @end
  </code></pre>
  
  <p>Please help me... to capture photo by clicking that button (check the link image)</p>