title: Video capturing in iOS with MonoTouch
body: <p>I have the code to create, configure and start a video capturing session in Objective-C running without problems. I'm porting the sample to C# and MonoTouch 4.0.3 and have a few problems, here is the code:</p>
  
  <pre><code>    void Initialize ()
      {   
          // Create notifier delegate class 
          captureVideoDelegate = new CaptureVideoDelegate(this);
  
          // Create capture session
          captureSession = new AVCaptureSession();
          captureSession.SessionPreset = AVCaptureSession.Preset640x480;
  
          // Create capture device
          captureDevice = AVCaptureDevice.DefaultDeviceWithMediaType(AVMediaType.Video);
  
          // Create capture device input
          NSError error;
          captureDeviceInput = new AVCaptureDeviceInput(captureDevice, out error);
          captureSession.AddInput(captureDeviceInput);
  
          // Create capture device output
          captureVideoOutput = new AVCaptureVideoDataOutput();
          captureSession.AddOutput(captureVideoOutput);
          captureVideoOutput.VideoSettings.PixelFormat = CVPixelFormatType.CV32BGRA;
          captureVideoOutput.MinFrameDuration = new CMTime(1, 30);
          //
          // ISSUE 1
          // In the original Objective-C code I was creating a dispatch_queue_t object, passing it to
          // setSampleBufferDelegate:queue message and worked, here I could not find an equivalent to 
          // the queue mechanism. Also not sure if the delegate should be used like this).
          //
          captureVideoOutput.SetSampleBufferDelegatequeue(captureVideoDelegate, ???????);
  
          // Create preview layer
          previewLayer = AVCaptureVideoPreviewLayer.FromSession(captureSession);
          previewLayer.Orientation = AVCaptureVideoOrientation.LandscapeRight;
          //
          // ISSUE 2:
          // Didn't find any VideoGravity related enumeration in MonoTouch (not sure if string will work)
          //
          previewLayer.VideoGravity = "AVLayerVideoGravityResizeAspectFill";
          previewLayer.Frame = new RectangleF(0, 0, 1024, 768);
          this.View.Layer.AddSublayer(previewLayer);
  
          // Start capture session
          captureSession.StartRunning();
  
      }
  
      #endregion
  
      public class CaptureVideoDelegate : AVCaptureVideoDataOutputSampleBufferDelegate
      {
          private VirtualDeckViewController mainViewController;
  
          public CaptureVideoDelegate(VirtualDeckViewController viewController)
          {
              mainViewController = viewController;
          }
  
          public override void DidOutputSampleBuffer (AVCaptureOutput captureOutput, CMSampleBuffer sampleBuffer, AVCaptureConnection connection)
          {
              // TODO: Implement - see: http://go-mono.com/docs/index.aspx?link=T%3aMonoTouch.Foundation.ModelAttribute
  
          }
      }
  </code></pre>
  
  <p>Issue 1:
  Not sure how to use correctly the delegate in the SetSampleBufferDelegatequeue method. Also not found an equivalent mechanism to dispatch_queue_t object that works fine in Objective-C to pass in the second parameter.</p>
  
  <p>Issue 2:
  I did not find any VideoGravity enumerations in MonoTouch libraries, not sure if passing a string with the constant value will work.</p>
  
  <p>I have look for any clue to solve this but no clear samples around. Any sample or information on how to do the same in MonoTouch would be highly appreciated.</p>
  
  <p>Many thanks.</p>