Exemplo n.º 1
0
 /**
  * Execute a new capture request within the active session
  */
 private void TriggerImageCapture()
 {
     try
     {
         CaptureRequest.Builder captureBuilder =
             _cameraDevice.CreateCaptureRequest(CameraTemplate.StillCapture);
         captureBuilder.AddTarget(mImageReader.Surface);
         captureBuilder.Set(CaptureRequest.ControlAeMode, new Integer((int)ControlAEMode.On));
         Log.Debug(TAG, "Capture request created.");
         _captureSession.Capture(captureBuilder.Build(), new CameraCaptureCallback(this), null);
     }
     catch (CameraAccessException)
     {
         Log.Error(TAG, "Cannot trigger a capture request");
     }
 }
Exemplo n.º 2
0
 private void updateFlashMode(int flashMode, CaptureRequest.Builder builder)
 {
     //switch (flashMode)
     //{
     //    case 1:
     //        builder.Set(flashMode,FlashMode.Torch);
     //        break;
     //    case 0:
     //        builder.Set(CaptureRequest.FLASH_MODE, FlashMode.Off);
     //        break;
     //    case 2:
     //    default:
     //        builder.Set(CaptureRequest.FLASH_MODE, FlashMode.Single);
     //        break;
     //}
 }
Exemplo n.º 3
0
        /// <summary>
        /// Starts the camera previe
        /// </summary>
        public void StartPreview()
        {
            if (_cameraDevice != null && _cameraTexture.IsAvailable && _previewSize != null)
            {
                try
                {
                    var texture = _cameraTexture.SurfaceTexture;

                    // We configure the size of the default buffer to be the size of the camera preview we want
                    texture.SetDefaultBufferSize(_previewSize.Width, _previewSize.Height);

                    // This is the output Surface we need to start the preview
                    Surface surface = new Surface(texture);

                    // We set up a CaptureRequest.Builder with the output Surface
                    _previewBuilder = _cameraDevice.CreateCaptureRequest(CameraTemplate.Preview);
                    _previewBuilder.AddTarget(surface);

                    // Here, we create a CameraCaptureSession for camera preview.
                    _cameraDevice.CreateCaptureSession(new List <Surface>()
                    {
                        surface
                    },
                                                       new CameraCaptureStateListener()
                    {
                        OnConfigureFailedAction = (CameraCaptureSession session) =>
                        {
                        },
                        OnConfiguredAction = (CameraCaptureSession session) =>
                        {
                            _previewSession = session;
                            UpdatePreview();
                        }
                    },
                                                       null);
                }
                catch (Java.Lang.Exception error)
                {
                    _log.WriteLineTime(_tag + "\n" +
                                       "TakePhoto() Failed to start preview \n " +
                                       "ErrorMessage: \n" +
                                       error.Message + "\n" +
                                       "Stacktrace: \n " +
                                       error.StackTrace);
                }
            }
        }
Exemplo n.º 4
0
        public void CreateCameraPreviewSession()
        {
            try
            {
                SurfaceTexture texture = mTextureView.SurfaceTexture;
                if (texture == null)
                {
                    throw new IllegalStateException("texture is null");
                }

                // We configure the size of default buffer to be the size of camera preview we want.
                texture.SetDefaultBufferSize(mPreviewSize.Width, mPreviewSize.Height);

                // This is the output Surface we need to start preview.
                Surface surface = new Surface(texture);

                Activity.RunOnUiThread(new Runnable(() =>
                {
                    DisplayMetrics displayMetrics = new DisplayMetrics();
                    Activity.WindowManager.DefaultDisplay.GetMetrics(displayMetrics);
                    int height = displayMetrics.HeightPixels;
                    int width  = displayMetrics.WidthPixels;
                    roi.Left   = 0;
                    roi.Top    = 0;
                    roi.Right  = width;
                    roi.Bottom = height;
                }));
                ChangeScale();
                ChangeRoi();

                // We set up a CaptureRequest.Builder with the output Surface.
                mPreviewRequestBuilder = mCameraDevice.CreateCaptureRequest(CameraTemplate.Preview);
                mPreviewRequestBuilder.AddTarget(surface);

                // Here, we create a CameraCaptureSession for camera preview.
                List <Surface> surfaces = new List <Surface>();
                surfaces.Add(surface);
                surfaces.Add(mImageReader.Surface);

                mCameraDevice.CreateCaptureSession(surfaces, new CameraCaptureSessionCallback(this), null);
            }
            catch (CameraAccessException e)
            {
                e.PrintStackTrace();
            }
        }
Exemplo n.º 5
0
        //public override void OnCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result)
        //{
        //    //if (_isReady)
        //    //    TakePicture();
        //}

        private void TakePicture()
        {
            //_isReady = false;
            if (_stillImageListener.IsBusy)
            {
                return;
            }

            CaptureRequest.Builder captureRequest = _session.Device.CreateCaptureRequest(CameraTemplate.StillCapture);
            captureRequest.Set(CaptureRequest.ControlAfMode, (int)ControlAFMode.ContinuousPicture);
            captureRequest.Set(CaptureRequest.JpegOrientation, 90);

            captureRequest.AddTarget(_reader.Surface);
            CaptureRequest stillImageRequest = captureRequest.Build();

            _session.Capture(stillImageRequest, _emptyCaptureCallback, new Handler(message => { }));
        }
Exemplo n.º 6
0
        private void CreateCaptureSession()
        {
            //SurfaceTexture texture = _textureView.SurfaceTexture; //エラーになる
            //バッファのサイズをプレビューサイズに設定(画面サイズ等適当な値を入れる)
            _surfaceTexture.SetDefaultBufferSize(_previewSize.Width, _previewSize.Height);
            Surface surface = new Surface(_surfaceTexture);

            List <Surface> list = new List <Surface>();

            list.Add(surface);
            list.Add(_recorder.Surface);

            CaptureRequest.Builder captureRequest = _cameraDevice.CreateCaptureRequest(CameraTemplate.Record);
            captureRequest.AddTarget(surface);
            captureRequest.AddTarget(_recorder.Surface);
            _captureRequest = captureRequest.Build();
            _cameraDevice.CreateCaptureSession(list, new CameraCaputureSessionCallBack(_captureRequest), null);
        }
Exemplo n.º 7
0
        private void CreateCameraPreview()
        {
            SurfaceTexture surfaceTexture = TextureView.SurfaceTexture;

            surfaceTexture.SetDefaultBufferSize(_imageDimension.Width,
                                                _imageDimension.Height);

            var surface = new Surface(surfaceTexture);

            CaptureRequest.Builder requestBuilder = _cameraDevice.CreateCaptureRequest(CameraTemplate.Preview);
            requestBuilder.AddTarget(surface);

            _cameraDevice.CreateCaptureSession(new[] { surface },
                                               new CameraPreviewStateCallback(_cameraDevice,
                                                                              requestBuilder,
                                                                              _backgroundHandler),
                                               null);
        }
Exemplo n.º 8
0
        //function, this will be responsible for starting the camera stream through the TextureView
        public void StartPreview()
        {
            if (cameraDevice != null && _cameraTexture.IsAvailable && _previewSize != null)
            {
                try
                {
                    var texture = _cameraTexture.SurfaceTexture;

                    texture.SetDefaultBufferSize(_previewSize.Width, _previewSize.Height);
                    Surface surface = new Surface(texture);

                    _previewBuilder = cameraDevice.CreateCaptureRequest(CameraTemplate.Preview);
                    _previewBuilder.AddTarget(surface);

                    // Here, we create a CameraCaptureSession for camera preview.
                    cameraDevice.CreateCaptureSession(new List <Surface>()
                    {
                        surface
                    },
                                                      new CameraCaptureStateListener()
                    {
                        OnConfigureFailedAction = (CameraCaptureSession session) =>
                        {
                        },
                        OnConfiguredAction = (CameraCaptureSession session) =>
                        {
                            _previewSession = session;
                            UpdatePreview();
                        }
                    },
                                                      null);
                }
                catch (Java.Lang.Exception error)
                {
                    System.Diagnostics.Debug.WriteLine($"{error.Message} {error.StackTrace}");
                    //                    _log.WriteLineTime(_tag + "\n" +
                    //                                       "TakePhoto() Failed to start preview \n " +
                    //                                       "ErrorMessage: \n" +
                    //                                       error.Message + "\n" +
                    //                                       "Stacktrace: \n " +
                    //                                       error.StackTrace);
                }
            }
        }
Exemplo n.º 9
0
        private void StartRecordingVideo()
        {
            try
            {
                closePreviewSession();
                SetUpMediaRecorder();
                SurfaceTexture texture = textureView.SurfaceTexture;
                //Assert.IsNotNull(texture);
                //texture.SetDefaultBufferSize(previewSize.Width, previewSize.Height);
                previewBuilder = cameraDevice.CreateCaptureRequest(CameraTemplate.Record);
                var surfaces       = new List <Surface>();
                var previewSurface = new Surface(texture);
                surfaces.Add(previewSurface);
                previewBuilder.AddTarget(previewSurface);

                if (flashon)
                {
                    previewBuilder.Set(CaptureRequest.FlashMode, (int)FlashMode.Torch);
                }

                Rect sensor_rect = max;
                int  left        = sensor_rect.Width() / 2;
                int  right       = left;
                int  top         = sensor_rect.Height() / 2;
                int  bottom      = top;
                int  hwidth      = (int)(sensor_rect.Width() / (2.0 * zoomlev));
                int  hheight     = (int)(sensor_rect.Height() / (2.0 * zoomlev));
                left   -= hwidth;
                right  += hwidth;
                top    -= hheight;
                bottom += hheight;
                previewBuilder.Set(CaptureRequest.ScalerCropRegion, new Rect(left, top, right, bottom));

                var recorderSurface = mediaRecorder.Surface;
                surfaces.Add(recorderSurface);
                previewBuilder.AddTarget(recorderSurface);
                mPreviewSession = new PreviewCaptureStateCallback(this, true);
                cameraDevice.CreateCaptureSession(surfaces, mPreviewSession, backgroundHandler);
            }
            catch (IllegalStateException e)
            {
                e.PrintStackTrace();
            }
        }
Exemplo n.º 10
0
        public void StartPreview()
        {
            if (ActiveCameraDevice == null || !textureView.IsAvailable || previewSize == null)
            {
                return;
            }

            try
            {
                SurfaceTexture texture = textureView.SurfaceTexture;

                texture.SetDefaultBufferSize(previewSize.Width, previewSize.Height);

                Surface surface = new Surface(texture);

                previewBuilder = ActiveCameraDevice.CreateCaptureRequest(CameraTemplate.Preview);
                previewBuilder.AddTarget(surface);

                ActiveCameraDevice.CreateCaptureSession(new List <Surface> {
                    surface
                },
                                                        new CameraCaptureSessionStateCallback(this)
                {
                    OnConfigureFailedAction = session =>
                    {
                        if (Context != null)
                        {
                            Toast.MakeText(Context, "Failed", ToastLength.Short).Show();
                        }
                    },
                    OnConfiguredAction = session =>
                    {
                        ActiveCaptureSession = session;
                        UpdatePreview();
                    }
                },
                                                        null);
            }
            catch (CameraAccessException ex)
            {
                Log.WriteLine(LogPriority.Info, "Camera2BasicFragment", ex.StackTrace);
            }
        }
Exemplo n.º 11
0
        private void OnPreviewSessionConfigured(CameraCaptureSession session)
        {
            captureSession = session;

            previewRequestBuilder = cameraDevice.CreateCaptureRequest(CameraTemplate.Preview);
            previewRequestBuilder.AddTarget(previewSurface);

            var availableAutoFocusModes = (int[])characteristics.Get(CameraCharacteristics.ControlAfAvailableModes);

            if (availableAutoFocusModes.Any(afMode => afMode == (int)ControlAFMode.ContinuousPicture))
            {
                previewRequestBuilder.Set(CaptureRequest.ControlAfMode, (int)ControlAFMode.ContinuousPicture);
            }
            SetAutoFlash(previewRequestBuilder);

            previewRequest = previewRequestBuilder.Build();

            captureSession.SetRepeatingRequest(previewRequest, cameraCaptureCallback, backgroundHandler);
        }
        public void CreateCameraPreview()
        {
            SurfaceTexture texture = cameraPreview.SurfaceTexture;

            if (texture == null)
            {
                throw new CameraViewException("Failed to get the surface texture");
            }
            var bufferSize = GetBufferSize(new Vector <int, int>((int)Element.Width, (int)Element.Height));
            //texture.SetDefaultBufferSize(bufferSize.X, bufferSize.Y);
            Surface surface = new Surface(texture);

            CaptureRequestBuilder = CameraDevice.CreateCaptureRequest(CameraTemplate.Preview);
            CaptureRequestBuilder.AddTarget(surface);
            CameraDevice.CreateCaptureSession(new System.Collections.Generic.List <Surface>()
            {
                surface
            }, cameraCaptureSessionStateCallback, null);
        }
Exemplo n.º 13
0
        /// <summary>
        /// Starts the camera previe
        /// </summary>
        public void StartPreview()
        {
            if (_cameraDevice != null && _cameraTexture.IsAvailable && _previewSize != null)
            {
                try
                {
                    var texture = _cameraTexture.SurfaceTexture;
                    System.Diagnostics.Debug.Assert(texture != null);

                    // We configure the size of the default buffer to be the size of the camera preview we want
                    texture.SetDefaultBufferSize(_previewSize.Width, _previewSize.Height);

                    // This is the output Surface we need to start the preview
                    Surface surface = new Surface(texture);

                    // We set up a CaptureRequest.Builder with the output Surface
                    _previewBuilder = _cameraDevice.CreateCaptureRequest(CameraTemplate.Preview);
                    _previewBuilder.AddTarget(surface);

                    // Here, we create a CameraCaptureSession for camera preview.
                    _cameraDevice.CreateCaptureSession(new List <Surface>()
                    {
                        surface
                    },
                                                       new CameraCaptureStateListener()
                    {
                        OnConfigureFailedAction = (CameraCaptureSession session) =>
                        {
                        },
                        OnConfiguredAction = (CameraCaptureSession session) =>
                        {
                            _previewSession = session;
                            UpdatePreview();
                        }
                    },
                                                       null);
                }
                catch (Java.Lang.Exception error)
                {
                    Log.WriteLine(LogPriority.Error, error.Source, error.Message);
                }
            }
        }
Exemplo n.º 14
0
        public void TakePhoto()
        {
            if (_context == null || CameraDevice == null)
            {
                return;
            }

            if (_captureBuilder == null)
            {
                _captureBuilder = CameraDevice.CreateCaptureRequest(CameraTemplate.StillCapture);
            }
            _captureBuilder.AddTarget(_imageReader.Surface);
            _captureBuilder.Set(CaptureRequest.ControlAfMode, (int)ControlAFMode.ContinuousPicture);
            SetAutoFlash(_captureBuilder);

            var windowManager = _context.GetSystemService(Context.WindowService).JavaCast <IWindowManager>();
            int rotation      = (int)windowManager.DefaultDisplay.Rotation;
            int orientation   = GetOrientation(rotation);

            _captureBuilder.Set(CaptureRequest.JpegOrientation, orientation);

            _previewSession.StopRepeating();
            _previewSession.AbortCaptures();
            _previewSession.Capture(_captureBuilder.Build(),
                                    new CameraCaptureStillPictureSessionCallback
            {
                OnCaptureCompletedAction = session =>
                {
                    UnlockFocus();
                }
            }, null);
            // Play shutter sound to alert user that image was captured
            var am = (AudioManager)_context.GetSystemService(Context.AudioService);

            if (am != null && am.RingerMode == RingerMode.Normal)
            {
                var cameraSound = new MediaActionSound();
                cameraSound.Load(MediaActionSoundType.ShutterClick);
                cameraSound.Play(MediaActionSoundType.ShutterClick);
            }
        }
        //Start the camera preview
        public void startPreview()
        {
            if (null == camera_device || !texture_view.IsAvailable || null == preview_size)
            {
                return;
            }

            try {
                SurfaceTexture texture = texture_view.SurfaceTexture;
                //Assert.IsNotNull(texture);
                texture.SetDefaultBufferSize(preview_size.Width, preview_size.Height);
                preview_builder = camera_device.CreateCaptureRequest(CameraTemplate.Preview);
                Surface surface  = new Surface(texture);
                var     surfaces = new List <Surface>();
                surfaces.Add(surface);
                preview_builder.AddTarget(surface);
                camera_device.CreateCaptureSession(surfaces, new PreviewCaptureStateListener(this), null);
            } catch (CameraAccessException e) {
                e.PrintStackTrace();
            }
        }
Exemplo n.º 16
0
        public void StartPreview()
        {
            if (cameraDevice != null && autoFitTextureView.IsAvailable && previewSize != null)
            {
                try
                {
                    var texture = autoFitTextureView.SurfaceTexture;
                    System.Diagnostics.Debug.Assert(texture != null);
                    texture.SetDefaultBufferSize(previewSize.Width, previewSize.Height);

                    var surface = new Surface(texture);

                    captureRequestBuilder = cameraDevice.CreateCaptureRequest(CameraTemplate.Preview);
                    captureRequestBuilder.AddTarget(surface);

                    cameraDevice.CreateCaptureSession(new List <Surface>()
                    {
                        surface
                    },
                                                      new CameraCaptureStateListener()
                    {
                        OnConfigureFailedAction = (CameraCaptureSession session) =>
                        {
                        },
                        OnConfiguredAction = (CameraCaptureSession session) =>
                        {
                            cameraCaptureSession = session;
                            UpdatePreview();
                        }
                    },
                                                      null);
                }
                catch (Java.Lang.Exception error)
                {
                    ShowToastMessage("Failed to start preview");
                    DebugMessage("ErrorMessage: \n" + error.Message + "\n" + "Stacktrace: \n " + error.StackTrace);
                }
            }
        }
Exemplo n.º 17
0
        // Creates a new {@link CameraCaptureSession} for camera preview.
        public void CreateCameraPreviewSession()
        {
            try
            {
                if (mTextureView.IsAvailable)
                {
                    SurfaceTexture texture = mTextureView.SurfaceTexture;
                    if (texture == null)
                    {
                        throw new IllegalStateException("texture is null");
                    }

                    // We configure the size of default buffer to be the size of camera preview we want.
                    texture.SetDefaultBufferSize(mPreviewSize.Width, mPreviewSize.Height);

                    // This is the output Surface we need to start preview.
                    mSurface = new Surface(texture);

                    // We set up a CaptureRequest.Builder with the output Surface.
                    mPreviewRequestBuilder = mCameraDevice.CreateCaptureRequest(CameraTemplate.Preview);
                    DisableFlash(mPreviewRequestBuilder);
                    mPreviewRequestBuilder.AddTarget(mSurface);

                    // Here, we create a CameraCaptureSession for camera preview.
                    List <Surface> surfaces = new List <Surface>();
                    surfaces.Add(mSurface);
                    surfaces.Add(mImageReader.Surface);
                    mCameraDevice.CreateCaptureSession(surfaces, new CameraCaptureSessionCallback(this), null);
                }
                else
                {
                    //throw new IllegalStateException("texture not available");
                }
            }
            catch (CameraAccessException e)
            {
                e.PrintStackTrace();
            }
        }
Exemplo n.º 18
0
        // 拍照session
        private void captureStillPicture()
        {
            try
            {
                if (null == context || null == cameraDevice)
                {
                    return;
                }
                CaptureRequest.Builder captureBuilder =
                    cameraDevice.CreateCaptureRequest(CameraTemplate.StillCapture);
                //captureBuilder.Set(CaptureRequest.ControlAfMode,
                //        CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);

                captureBuilder.Set(CaptureRequest.JpegOrientation, getOrientation(orientation));
                updateFlashMode(this.flashMode, captureBuilder);
                //    CameraCaptureSession.CaptureCallback captureCallback =
                //            new CameraCaptureSession.CaptureCallback()
                //            {



                //            public void onCaptureCompleted(@NonNull CameraCaptureSession session,
                //                                           @NonNull CaptureRequest request,
                //                                           @NonNull TotalCaptureResult result)
                //    {
                //        unlockFocus();
                //    }
                //};

                //// 停止预览
                //captureSession.stopRepeating();
                //captureSession.capture(captureBuilder.build(), captureCallback, backgroundHandler);
                //state = STATE_PICTURE_TAKEN;
            }
            catch (CameraAccessException e)
            {
                e.PrintStackTrace();
            }
        }
Exemplo n.º 19
0
        public void StartPreview()
        {
            if (CameraDevice == null || !_cameraTexture.IsAvailable || _previewSize == null)
            {
                return;
            }

            var texture = _cameraTexture.SurfaceTexture;

            texture.SetDefaultBufferSize(_previewSize.Width, _previewSize.Height);

            var surface = new Surface(texture);

            _previewBuilder = CameraDevice.CreateCaptureRequest(CameraTemplate.Preview);
            _previewBuilder.AddTarget(surface);

            System.Diagnostics.Debug.WriteLine("Openning camera preview : " + _previewSize.Width + "x" + _previewSize.Height);

            List <Surface> surfaces = new List <Surface>();

            surfaces.Add(surface);
            surfaces.Add(_imageReader.Surface);

            // Here, we create a CameraCaptureSession for camera preview
            CameraDevice.CreateCaptureSession(surfaces,
                                              new CameraCaptureStateListener
            {
                OnConfigureFailedAction = session =>
                {
                    System.Diagnostics.Debug.WriteLine("Failed.");
                },
                OnConfiguredAction = session =>
                {
                    _previewSession = session;
                    UpdatePreview();
                }
            },
                                              _backgroundHandler);
        }
Exemplo n.º 20
0
        public void setFlash(CaptureRequest.Builder CaptureRequestBuilder)
        {
            if (mFlashSupported)
            {
                switch (mFlashMode)
                {
                case FLASH_OFF:
                    CaptureRequestBuilder.Set(CaptureRequest.ControlAeMode, (int)ControlAEMode.On);
                    CaptureRequestBuilder.Set(CaptureRequest.FlashMode, (int)Android.Hardware.Camera2.FlashMode.Off);
                    break;

                case FLASH_ON:
                    CaptureRequestBuilder.Set(CaptureRequest.ControlAeMode, (int)ControlAEMode.On);
                    CaptureRequestBuilder.Set(CaptureRequest.FlashMode, (int)Android.Hardware.Camera2.FlashMode.Single);
                    break;

                case FLASH_AUTO:
                    CaptureRequestBuilder.Set(CaptureRequest.ControlAeMode, (int)ControlAEMode.OnAutoFlash);
                    break;
                }
            }
        }
Exemplo n.º 21
0
        /// <summary>
        /// Start preview
        /// </summary>
        public void StartPreview()
        {
            if (mSurfaceTexture == null)
            {
                Log.Debug(TAG, "mSurfaceTexture is null!");
                return;
            }
            Log.Debug(TAG, "StartPreview!");
            mSurfaceTexture.SetDefaultBufferSize(mPreviewSize.Width, mPreviewSize.Height);

            if (mCameraDevice == null)
            {
                Log.Debug(TAG, "mCameraDevice is null!");
                return;
            }
            try
            {
                mCaptureRequestBuilder = mCameraDevice.CreateCaptureRequest(CameraTemplate.Preview);
                List <Surface> surfaces = new List <Surface>();
                if (mPreViewSurface != null)
                {
                    surfaces.Add(mPreViewSurface);
                }
                if (mVgaSurface != null)
                {
                    surfaces.Add(mVgaSurface);
                }
                if (mDepthSurface != null)
                {
                    surfaces.Add(mDepthSurface);
                }
                CaptureSession(surfaces);
            }
            catch (CameraAccessException e)
            {
                Log.Debug(TAG, "StartPreview error");
            }
        }
Exemplo n.º 22
0
        //create a repeat capture
        private void createCapture(List <Surface> surfaces, FlashMode flashMode, bool repeat, CaptureRequest.Builder builder)
        {
            if (mDevice == null)
            {
                return;
            }

            //Config the flash
            if (SupportFlash())
            {
                builder.Set(CaptureRequest.FlashMode, (int)flashMode);
            }

            //Set the zoom
            builder.Set(CaptureRequest.ScalerCropRegion, getRectZoom(mCameraManager, mZoom, _id));

            //Set party mode
            builder.Set(CaptureRequest.ControlSceneMode, (int)ControlSceneMode.Hdr);

            builder.Set(CaptureRequest.ControlEffectMode, (int)_selEffect);

            //Add the targets to the builder
            foreach (var surface in surfaces)
            {
                builder.AddTarget(surface);
            }

            mCaptureBuilder = builder;
            if (repeat)
            {
                mDevice.CreateCaptureSession(surfaces, mCaptureSessionStateCallBack, mHandler);
            }
            else
            {
                mDevice.CreateCaptureSession(surfaces, mSingleCaptureSessionStateCallBack, mHandler);
            }
        }
Exemplo n.º 23
0
        // Capture a still picture. This method should be called when we get a response in
        // {@link #mCaptureCallback} from both {@link #lockFocus()}.
        public void CaptureStillPicture()
        {
            try
            {
                var activity = Activity;
                if (null == activity || null == mCameraDevice)
                {
                    return;
                }
                // This is the CaptureRequest.Builder that we use to take a picture.
                if (stillCaptureBuilder == null)
                {
                    stillCaptureBuilder = mCameraDevice.CreateCaptureRequest(CameraTemplate.StillCapture);
                }

                stillCaptureBuilder.AddTarget(mImageReader.Surface);

                // Use the same AE and AF modes as the preview.
                stillCaptureBuilder.Set(CaptureRequest.ControlAfMode, (int)ControlAFMode.ContinuousPicture);
                SetAutoFlash(stillCaptureBuilder);

                // Orientation
                //int rotation = (int)activity.WindowManager.DefaultDisplay.Rotation;
                int rotation = (int)SurfaceOrientation.Rotation90;


                stillCaptureBuilder.Set(CaptureRequest.JpegOrientation, GetOrientation(rotation));

                mCaptureSession.StopRepeating();
                mCaptureSession.Capture(stillCaptureBuilder.Build(), new CameraCaptureStillPictureSessionCallback(this), null);
            }
            catch (CameraAccessException e)
            {
                e.PrintStackTrace();
            }
        }
 private void TriggerImageCapture()
 {
     try
     {
         CaptureRequest.Builder captureBuilder = CameraDevice.CreateCaptureRequest(CameraTemplate.StillCapture);
         captureBuilder.AddTarget(this.mImageReader.Surface);
         captureBuilder.Set(CaptureRequest.ControlAeMode, new Integer((int)ControlAEMode.On));
         //captureBuilder.set(CaptureRequest.ControlAwbMode, CaptureRequest.CONTROL_AWB_MODE_AUTO);
         Log.Debug(TAG, "Capture request created.");
         this.CaptureSession.Capture(captureBuilder.Build(),
                                     new CameraCaptureListener()
         {
             OnCaptureCompletedAction = (CameraCaptureSession session) => {
                 session.Close();
                 CaptureSession = null;
                 Log.Debug(TAG, "CaptureSession closed");
             }
         }, null);
     }
     catch (CameraAccessException cae)
     {
         Log.Debug(TAG, "camera capture exception");
     }
 }
Exemplo n.º 25
0
        /// <summary>
        ///  Starts preview before recording video.
        /// </summary>
        public void StartPreviewForVideo()
        {
            if (null == mCameraDevice || !mTextureView.IsAvailable || null == mPreviewSize)
            {
                return;
            }

            try
            {
                //wake up the cpu
                PowerManager powerManager = (PowerManager)_context.GetSystemService(Context.PowerService);
                wakeLock = powerManager.NewWakeLock(WakeLockFlags.Partial, "MyApp::MyWakelockTag");
                wakeLock.Acquire();
                SetUpMediaRecorder();
                SurfaceTexture texture = mTextureView.SurfaceTexture;
                //Assert.IsNotNull(texture);
                // texture.SetDefaultBufferSize(CamcorderProfile.Get(CamcorderQuality.High., CamcorderProfile.Get(Height));
                mPreviewRequestBuilder = mCameraDevice.CreateCaptureRequest(CameraTemplate.Record);
                var surfaces       = new List <Surface>();
                var previewSurface = new Surface(texture);
                surfaces.Add(previewSurface);
                mPreviewRequestBuilder.AddTarget(previewSurface);
                var recorderSurface = mediaRecorder.Surface;
                surfaces.Add(recorderSurface);
                mPreviewRequestBuilder.AddTarget(recorderSurface);
                mCameraDevice.CreateCaptureSession(surfaces, new PreviewCaptureStateCallback(this), mBackgroundHandler);
            }
            catch (CameraAccessException e)
            {
                e.PrintStackTrace();
            }
            catch (IOException e)
            {
                e.PrintStackTrace();
            }
        }
		//Start the camera preview
		public void startPreview()
		{
			if (null == cameraDevice || !textureView.IsAvailable || null == previewSize) 
				return;

			try {
				SetUpMediaRecorder();
				SurfaceTexture texture = textureView.SurfaceTexture;
				//Assert.IsNotNull(texture);
				texture.SetDefaultBufferSize(previewSize.Width,previewSize.Height);
				previewBuilder = cameraDevice.CreateCaptureRequest(CameraTemplate.Record);
				var surfaces = new List<Surface>();
				var previewSurface = new Surface(texture);
				surfaces.Add(previewSurface);
				previewBuilder.AddTarget(previewSurface);

				var recorderSurface = mediaRecorder.Surface;
				surfaces.Add(recorderSurface);
				previewBuilder.AddTarget(recorderSurface);

				cameraDevice.CreateCaptureSession(surfaces, new PreviewCaptureStateCallback(this),backgroundHandler);

			} catch(CameraAccessException e) {
				e.PrintStackTrace ();
			} catch(IOException e) {
				e.PrintStackTrace ();
			}
		}
Exemplo n.º 27
0
 /// <summary>
 /// Sets up capture request builder.
 /// </summary>
 private void SetUpCaptureRequestBuilder(CaptureRequest.Builder builder)
 {
     // In this sample, w just let the camera device pick the automatic settings
     builder.Set(CaptureRequest.ControlMode, new Java.Lang.Integer((int)ControlMode.Auto));
 }
Exemplo n.º 28
0
        private void TakePicture()
        {
            try
            {
                Activity activity = Activity;
                if (activity == null || mCameraDevice == null)
                {
                    return;
                }
                CameraManager manager = (CameraManager)activity.GetSystemService(Android.Content.Context.CameraService);

                spinner.Visibility = ViewStates.Visible;

                // Pick the best JPEG size that can be captures with this CameraDevice
                CameraCharacteristics characteristics = manager.GetCameraCharacteristics(mCameraDevice.Id);
                Android.Util.Size[]   jpegSizes       = null;
                if (characteristics != null)
                {
                    jpegSizes = ((StreamConfigurationMap)characteristics.Get(CameraCharacteristics.ScalerStreamConfigurationMap)).GetOutputSizes((int)ImageFormatType.Jpeg);
                }

                width  = 640;
                height = 480;
                int total             = width * height;
                int targetRes         = 3145728; //About 5MP
                int currentTargetDiff = System.Math.Abs((width * height) - targetRes);;

                if (jpegSizes != null && jpegSizes.Length > 0)
                {
                    foreach (Android.Util.Size size in jpegSizes)
                    {
                        int targetDiff = System.Math.Abs((size.Width * size.Height) - targetRes);
                        if (targetDiff < currentTargetDiff)
                        {
                            width             = size.Width;
                            height            = size.Height;
                            currentTargetDiff = targetDiff;
                        }
                    }
                }

                // We use an ImageReader to get a JPEG from CameraDevice
                // Here, we create a new ImageReader and prepare its Surface as an output from the camera
                ImageReader    reader         = ImageReader.NewInstance(width, height, ImageFormatType.Jpeg, 1);
                List <Surface> outputSurfaces = new List <Surface>();
                outputSurfaces.Add(reader.Surface);
                //outputSurfaces.Add(new Surface(textureView.SurfaceTexture));

                CaptureRequest.Builder captureBuilder = mCameraDevice.CreateCaptureRequest(CameraTemplate.StillCapture);
                captureBuilder.AddTarget(reader.Surface);
                SetUpCaptureRequestBuilder(captureBuilder);
                // Orientation
                SurfaceOrientation rotation = activity.WindowManager.DefaultDisplay.Rotation;
                captureBuilder.Set(CaptureRequest.JpegOrientation, new Java.Lang.Integer(ORIENTATIONS.Get((int)rotation)));

                Java.IO.File file = new Java.IO.File(activity.GetExternalFilesDir(null), "pic.jpg");

                // This listener is called when an image is ready in ImageReader
                // Right click on ImageAvailableListener in your IDE and go to its definition
                ImageAvailableListener readerListener = new ImageAvailableListener(this);

                // We create a Handler since we want to handle the resulting JPEG in a background thread
                HandlerThread thread = new HandlerThread("CameraPicture");
                thread.Start();
                Handler backgroundHandler = new Handler(thread.Looper);
                reader.SetOnImageAvailableListener(readerListener, backgroundHandler);

                //This listener is called when the capture is completed
                // Note that the JPEG data is not available in this listener, but in the ImageAvailableListener we created above
                // Right click on CameraCaptureListener in your IDE and go to its definition
                CameraCaptureListener captureListener = new CameraCaptureListener()
                {
                    Page = this
                };


                mCameraDevice.CreateCaptureSession(outputSurfaces, new CameraCaptureStateListener()
                {
                    OnConfiguredAction = (CameraCaptureSession session) => {
                        try
                        {
                            CaptureRequest capReq = captureBuilder.Build();
                            session.Capture(capReq, captureListener, backgroundHandler);
                        }
                        catch (CameraAccessException ex)
                        {
                            Log.WriteLine(LogPriority.Info, "Capture Session error: ", ex.ToString());
                        }
                    },
                    OnConfigureFailedAction = (CameraCaptureSession session) => {
                        Log.WriteLine(LogPriority.Error, "Session setup error", session.ToString());
                    }
                }, backgroundHandler);
            }
            catch (CameraAccessException ex)
            {
                Log.WriteLine(LogPriority.Info, "Taking picture error: ", ex.StackTrace);
            }
        }
		private void startRecordingVideo() {
			if (null == Activity) 
				return;


			media_recorder = new MediaRecorder ();
			File file = getVideoFile (Activity);
			try {
				//UI
				button_video.SetText (Resource.String.stop);
				is_recording_video = true;

				//Configure the MediaRecorder
				media_recorder.SetAudioSource (AudioSource.Mic);
				media_recorder.SetVideoSource (VideoSource.Surface);
				media_recorder.SetOutputFormat (OutputFormat.Mpeg4);
				media_recorder.SetOutputFile (System.IO.Path.GetFullPath (file.ToString()));
				media_recorder.SetVideoEncodingBitRate (10000000);
				media_recorder.SetVideoFrameRate (30);
				media_recorder.SetVideoSize (1440, 1080);
				media_recorder.SetVideoEncoder (VideoEncoder.H264);
				media_recorder.SetAudioEncoder (AudioEncoder.Aac);
				int rotation = (int)Activity.WindowManager.DefaultDisplay.Rotation;
				int orientation = ORIENTATIONS.Get (rotation);
				media_recorder.SetOrientationHint (orientation);
				media_recorder.Prepare ();
				Surface surface = media_recorder.Surface;

				//Set up CaptureRequest
				builder = camera_device.CreateCaptureRequest (CameraTemplate.Record);
				builder.AddTarget (surface);
				var preview_surface = new Surface (texture_view.SurfaceTexture);
				builder.AddTarget (preview_surface);
				var surface_list = new List<Surface>();
				surface_list.Add(surface);
				surface_list.Add(preview_surface);
				camera_device.CreateCaptureSession(surface_list,new RecordingCaptureStateListener(this),null);

			} catch (IOException e) {
				e.PrintStackTrace ();
			} catch (CameraAccessException e) {
				e.PrintStackTrace ();
			} catch (IllegalStateException e) {
				e.PrintStackTrace ();
			}

		}
		//Start the camera preview
		public void startPreview()
		{
			if (null == camera_device || !texture_view.IsAvailable || null == preview_size) 
				return;

			try {
				SurfaceTexture texture = texture_view.SurfaceTexture;
				//Assert.IsNotNull(texture);
				texture.SetDefaultBufferSize(preview_size.Width,preview_size.Height);
				preview_builder = camera_device.CreateCaptureRequest(CameraTemplate.Preview);
				Surface surface = new Surface(texture);
				var surfaces = new List<Surface>();
				surfaces.Add(surface);
				preview_builder.AddTarget(surface);
				camera_device.CreateCaptureSession(surfaces, new PreviewCaptureStateListener(this),null);


			} catch(CameraAccessException e) {
				e.PrintStackTrace ();
			}
		}
Exemplo n.º 31
0
        /// <summary>
        /// Takes the photo.
        /// </summary>
        public void TakePhoto()
        {
            if (_context != null && _cameraDevice != null)
            {
                try
                {
                    Busy?.Invoke(this, true);

                    if (_mediaSoundLoaded)
                    {
                        _mediaSound.Play(MediaActionSoundType.ShutterClick);
                    }

                    // Pick the best JPEG size that can be captures with this CameraDevice
                    var    characteristics = _manager.GetCameraCharacteristics(_cameraDevice.Id);
                    Size[] jpegSizes       = null;
                    if (characteristics != null)
                    {
                        jpegSizes = ((StreamConfigurationMap)characteristics.Get(CameraCharacteristics.ScalerStreamConfigurationMap)).GetOutputSizes((int)ImageFormatType.RawSensor);
                    }
                    int width  = 640;
                    int height = 480;

                    if (jpegSizes != null && jpegSizes.Length > 0)
                    {
                        width  = jpegSizes[0].Width;
                        height = jpegSizes[0].Height;
                    }

                    // We use an ImageReader to get a JPEG from CameraDevice
                    // Here, we create a new ImageReader and prepare its Surface as an output from the camera
                    var reader         = ImageReader.NewInstance(width, height, ImageFormatType.Jpeg, 1);
                    var outputSurfaces = new List <Surface>(2);
                    outputSurfaces.Add(reader.Surface);
                    outputSurfaces.Add(new Surface(_viewSurface));

                    CaptureRequest.Builder captureBuilder = _cameraDevice.CreateCaptureRequest(CameraTemplate.StillCapture);
                    captureBuilder.AddTarget(reader.Surface);
                    captureBuilder.Set(CaptureRequest.ControlMode, new Integer((int)ControlMode.Auto));

                    // Orientation
                    var windowManager           = _context.GetSystemService(Context.WindowService).JavaCast <IWindowManager>();
                    SurfaceOrientation rotation = windowManager.DefaultDisplay.Rotation;

                    captureBuilder.Set(CaptureRequest.JpegOrientation, new Integer(ORIENTATIONS.Get((int)rotation)));

                    // This listener is called when an image is ready in ImageReader
                    ImageAvailableListener readerListener = new ImageAvailableListener();

                    readerListener.ImageProcessingCompleted += (sender, e) =>
                    {
                        Photo?.Invoke(this, e);
                    };

                    // We create a Handler since we want to handle the resulting JPEG in a background thread
                    HandlerThread thread = new HandlerThread("CameraPicture");
                    thread.Start();
                    Handler backgroundHandler = new Handler(thread.Looper);
                    reader.SetOnImageAvailableListener(readerListener, backgroundHandler);

                    var captureListener = new CameraCaptureListener();

                    captureListener.PhotoComplete += (sender, e) =>
                    {
                        Busy?.Invoke(this, false);
                        StartPreview();
                    };

                    _cameraDevice.CreateCaptureSession(outputSurfaces, new CameraCaptureStateListener()
                    {
                        OnConfiguredAction = (CameraCaptureSession session) =>
                        {
                            try
                            {
                                _previewSession = session;
                                session.Capture(captureBuilder.Build(), captureListener, backgroundHandler);
                            }
                            catch (CameraAccessException ex)
                            {
                                Log.WriteLine(LogPriority.Info, "Capture Session error: ", ex.ToString());
                            }
                        }
                    }, backgroundHandler);
                }
                catch (CameraAccessException error)
                {
                    Log.WriteLine(LogPriority.Error, error.Source, error.Message);
                }
                catch (Java.Lang.Exception error)
                {
                    Log.WriteLine(LogPriority.Error, error.Source, error.Message);
                }
            }
        }
Exemplo n.º 32
0
 private void setUpCaptureRequestBuilder(CaptureRequest.Builder builder)
 {
     builder.Set(CaptureRequest.ControlMode, new Java.Lang.Integer((int)ControlMode.Auto));
 }
Exemplo n.º 33
0
        private void StartPreview()
        {
            if (mCameraDevice == null || !mTextureView.IsAvailable || mPreviewSize == null)
            {
                return;
            }
            try
            {
                SurfaceTexture texture = mTextureView.SurfaceTexture;
                System.Diagnostics.Debug.Assert( texture != null);

                texture.SetDefaultBufferSize(mPreviewSize.Width, mPreviewSize.Height);

                Surface surface = new Surface(texture);

                mPreviewBuilder = mCameraDevice.CreateCaptureRequest(CameraTemplate.Preview);

                mPreviewBuilder.AddTarget(surface);

                mCameraDevice.CreateCaptureSession(
                    new List<Surface>() {surface},

                    new CameraCaptureStateListener()
                    {
                        OnConfigureFailedAction = (CameraCaptureSession session) =>
                        {
                            Activity activity = Activity;

                            if(activity != null)
                            {
                                Toast.MakeText(activity, "Failed", ToastLength.Short).Show();
                            }
                        },
                        OnConfiguredAction = (CameraCaptureSession session) =>
                        {
                            mPreviewSession = session;
                            UpdatePreview ();
                        }
                    },
                    null);
            }
            catch(CameraAccessException ex)
            {
                Log.WriteLine (LogPriority.Info, "CameraFragment", ex.StackTrace);
            }
        }
		/// <summary>
		/// Starts the camera previe
		/// </summary>
		private void StartPreview()
		{
			if (mCameraDevice == null || !mTextureView.IsAvailable || mPreviewSize == null) {
				return;
			}
			try 
			{
				SurfaceTexture texture = mTextureView.SurfaceTexture;
				System.Diagnostics.Debug.Assert( texture != null );

				// We configure the size of the default buffer to be the size of the camera preview we want
				texture.SetDefaultBufferSize(mPreviewSize.Width, mPreviewSize.Height);

				// This is the output Surface we need to start the preview
				Surface surface = new Surface(texture);

				// We set up a CaptureRequest.Builder with the output Surface
				mPreviewBuilder = mCameraDevice.CreateCaptureRequest(CameraTemplate.Preview);
				mPreviewBuilder.AddTarget(surface);

				// Here, we create a CameraCaptureSession for camera preview.
				mCameraDevice.CreateCaptureSession(new List<Surface>() { surface }, 
					new CameraCaptureStateListener() 
					{ 
						OnConfigureFailedAction = (CameraCaptureSession session) => 
						{
							Activity activity = Activity;
							if (activity != null)
							{
								Toast.MakeText(activity, "Failed", ToastLength.Short).Show();
							}
						},
						OnConfiguredAction = (CameraCaptureSession session) =>
						{
							mPreviewSession = session;
							UpdatePreview ();
						}
					},
					null);


			}
			catch (Exception ex) {
				Log.WriteLine (LogPriority.Info, "Camera2BasicFragment", ex.StackTrace);
			}
		}
Exemplo n.º 35
0
 public CameraCaptureSessionCallbackU(CaptureRequest.Builder b)
 {
     _builder = b;
 }
Exemplo n.º 36
0
        internal void CreateCameraPreviewSession()
        {
            try
            {
                // We configure the size of default buffer to be the size of camera preview we want.
                _surface.SetDefaultBufferSize(_previewSize.Width, _previewSize.Height);

                // This is the output Surface we need to start preview.
                var surface = new Surface(_surface);

                // We set up a CaptureRequest.Builder with the output Surface.
                _previewRequestBuilder = CameraDevice.CreateCaptureRequest(CameraTemplate.Preview);
                _previewRequestBuilder.AddTarget(surface);

                // Here, we create a CameraCaptureSession for camera preview.
                CameraDevice.CreateCaptureSession(new List<Surface> { surface, _imageReader.Surface }, _captureStateCallback, null);
            }
            catch { }
        }