public void SetupCamera() { if (camera != null) { return; } PermissionsHandler.CheckCameraPermissions(context); OpenCamera(); if (camera == null) { return; } ApplyCameraSettings(); try { camera.SetPreviewDisplay(holder); var previewParameters = camera.GetParameters(); var previewSize = previewParameters.PreviewSize; var bitsPerPixel = ImageFormat.GetBitsPerPixel(previewParameters.PreviewFormat); int bufferSize = (previewSize.Width * previewSize.Height * bitsPerPixel) / 8; const int NUM_PREVIEW_BUFFERS = 5; for (uint i = 0; i < NUM_PREVIEW_BUFFERS; ++i) { using (var buffer = new FastJavaByteArray(bufferSize)) camera.AddCallbackBuffer(buffer); } camera.StartPreview(); camera.SetNonMarshalingPreviewCallback(cameraEventListener); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); return; } finally { } }