private bool safeCameraOpenInView(View view)
        {
            bool opened = false;

            releaseCameraAndPreview();
            mCamera     = getCameraInstance(CURRENTCAMERA);
            mCameraView = view;
            opened      = mCamera != null;

            if (opened)
            {
                mPreview = new CameraPreview(Activity.BaseContext, mCamera, view);
                FrameLayout preview = view.FindViewById <FrameLayout>(Resource.Id.camera_preview);
                preview.AddView(mPreview, 0);
                mPreview.StartCameraPreview();
                try
                {
                    mCamera.EnableShutterSound(false);
                }
                catch
                {
                }
            }

            return(opened);
        }
Esempio n. 2
0
        private void SetupAndStartCamera(SurfaceTexture surface = null)
        {
            try
            {
                if (_isSurfaceAvailable)
                {
                    if (_camera == null)
                    {
                        _camera = Camera.Open((int)_cameraType);
                        _camera.SetErrorCallback(this);

                        for (var ii = 0; ii < Camera.NumberOfCameras - 1; ii++)
                        {
                            var info = new Camera.CameraInfo();
                            Camera.GetCameraInfo(ii, info);
                            if (info.CanDisableShutterSound)
                            {
                                _camera.EnableShutterSound(false);
                            }
                        }

                        var parameters = _camera.GetParameters();
                        parameters.FlashMode          = Camera.Parameters.FlashModeOff;
                        parameters.VideoStabilization = false;
                        parameters.JpegQuality        = 100;
                        TurnOnContinuousFocus(parameters);

                        var landscapePictureDescendingSizes = parameters
                                                              .SupportedPictureSizes
                                                              .Where(p => p.Width > p.Height)
                                                              .OrderByDescending(p => p.Width * p.Height)
                                                              .ToList();
                        var landscapePreviewDescendingSizes = parameters
                                                              .SupportedPreviewSizes
                                                              .Where(p => p.Width > p.Height)
                                                              .OrderByDescending(p => p.Width * p.Height)
                                                              .ToList();

                        foreach (var pictureSize in landscapePictureDescendingSizes)
                        {
                            foreach (var previewSize in landscapePreviewDescendingSizes)
                            {
                                if (Math.Abs((double)pictureSize.Width / pictureSize.Height -
                                             (double)previewSize.Width / previewSize.Height) < 0.0001)
                                {
                                    _pictureSize = pictureSize;
                                    _previewSize = previewSize;
                                    break;
                                }
                            }

                            if (_pictureSize != null)
                            {
                                break;
                            }
                        }

                        if (_pictureSize == null ||
                            _previewSize == null)
                        {
                            _pictureSize = landscapePictureDescendingSizes.First();
                            _previewSize = landscapePreviewDescendingSizes.First();
                        }

                        parameters.SetPictureSize(_pictureSize.Width, _pictureSize.Height);
                        parameters.SetPreviewSize(_previewSize.Width, _previewSize.Height);

                        _camera.SetParameters(parameters);
                        _camera.SetPreviewTexture(_surfaceTexture);
                    }

                    if (surface != null)
                    {
                        _surfaceTexture = surface;
                    }

                    SetOrientation();
                    StartCamera();
                }
            }
            catch (Exception e)
            {
                _cameraModule.ErrorMessage = e.ToString();
            }
        }