Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Windows Phone 8.1 camera initialization

I am aware about that there are more duplicate questions about this, but please, it is super important to me. I have hard time now with Windows Phone 8.1 C# camera initialization.

async private void InitCamera_Click(object sender, RoutedEventArgs e)
    {
        captureManager = new MediaCapture();
        await captureManager.InitializeAsync();

         try 
        {
            captureManager = new Windows.Media.Capture.MediaCapture();
            await captureManager.InitializeAsync();

            if (captureManager.MediaCaptureSettings.VideoDeviceId != "" && captureManager.MediaCaptureSettings.AudioDeviceId != "") 
            {
                System.Diagnostics.Debug.WriteLine("Init successful");


                captureManager.RecordLimitationExceeded += new Windows.Media.Capture.RecordLimitationExceededEventHandler(RecordLimitationExceeded);
                captureManager.Failed += new Windows.Media.Capture.MediaCaptureFailedEventHandler(Failed); 
            } 
            else 
            {
                System.Diagnostics.Debug.WriteLine("No Device");
            } 
        }
         catch (Exception exception)
         {
             System.Diagnostics.Debug.WriteLine("Exception raised!!!!:" + exception);
         } 
    }

this is my code to initialize camera, but for some reason it fails on Windows.Media.Capture.MediaCapture() constructor call with System.UnauthorizedAccessException on Lumia 920 and also Access Violation on emulator. I've googled about the issue, but no answers so far. Some folks told that I should enable not just webcam, but also microphone, but that did not solved my issue. Everything seems to be well set, all access were granted in app manifest. Also I want to ask you, if you have some good and working example/tutorial of taking pictures with camera, please provide.

like image 289
Citrus Avatar asked Apr 25 '26 18:04

Citrus


1 Answers

Below is my code for camera capture, which works, I have a submitted app in the store:

private MediaCapture mediaCapture = null;
private async Task StartCapture()
{
  string error = null;

  try
  {
    if (mediaCapture == null)
    {
      mediaCapture = new MediaCapture();
      mediaCapture.Failed += mediaCapture_Failed;

      var _deviceInformation = await GetCameraDeviceInfoAsync(Windows.Devices.Enumeration.Panel.Back);

      var settings = new MediaCaptureInitializationSettings();
      settings.StreamingCaptureMode = StreamingCaptureMode.Video;
      settings.PhotoCaptureSource = PhotoCaptureSource.VideoPreview;
      settings.AudioDeviceId = "";
      if (_deviceInformation != null)
          settings.VideoDeviceId = _deviceInformation.Id;

      await mediaCapture.InitializeAsync(settings);

      var focusSettings = new FocusSettings();
      focusSettings.AutoFocusRange = AutoFocusRange.FullRange;
      focusSettings.Mode = FocusMode.Auto;
      focusSettings.WaitForFocus = true;
      focusSettings.DisableDriverFallback = false;

      mediaCapture.VideoDeviceController.FocusControl.Configure(focusSettings);
      await mediaCapture.VideoDeviceController.ExposureControl.SetAutoAsync(true);

      mediaCapture.SetPreviewRotation(VideoRotation.Clockwise90Degrees);
      mediaCapture.SetRecordRotation(VideoRotation.Clockwise90Degrees);
    }

    captureReceipt.Source = mediaCapture;
    await mediaCapture.StartPreviewAsync();
  }
  catch (Exception ex)
  {
    DisposeMediaCapture();
    error = ex.Message;
  }

  if (error != null)
  {
    await (new MessageBoxImpl()).ShowMessageAsync(error);
  }
}

private static async Task<DeviceInformation> GetCameraDeviceInfoAsync(Windows.Devices.Enumeration.Panel desiredPanel)
{

  DeviceInformation device = (await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture))
      .FirstOrDefault(d => d.EnclosureLocation != null && d.EnclosureLocation.Panel == desiredPanel);

  if (device == null)
  {
    throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "No suitable devices found for the camera of type {0}.", desiredPanel));
  }
  return device;
}
like image 110
Jogy Avatar answered Apr 27 '26 09:04

Jogy



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!