protected override void OnElementChanged(ElementChangedEventArgs <CameraPreview> e) { base.OnElementChanged(e); if (Control == null) { uiCameraPreview = new UICameraPreview(e.NewElement.Camera); SetNativeControl(uiCameraPreview); } if (e.OldElement != null) { // Unsubscribe uiCameraPreview.Tapped -= OnCameraPreviewTapped; } if (e.NewElement != null) { // Subscribe uiCameraPreview.Tapped += OnCameraPreviewTapped; } e.NewElement.StartRecordingEvent += (sender, args) => { // cameraPreview.Preview.StopPreview(); // cameraPreview.Preview.Release(); var cameraOption = cameraOptions.Equals(CameraOptions.Front) ? CameraOptions.Front : CameraOptions.Rear; var dcimPath = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures); var filename = $"PocketPro - Test.mp4"; var dcimFilePath = System.IO.Path.Combine(dcimPath, filename); videoFilePath = dcimFilePath; }; }
protected override void OnElementChanged(ElementChangedEventArgs <PocketPro.CameraPreview> e) { base.OnElementChanged(e); if (Control == null) { cameraPreview = new CameraPreview(Context); cameraPreview.OnPictureReturn = e.NewElement.OnPictureReturn; cameraPreview.OnVideoStarted = e.NewElement.OnVideoStarted; cameraPreview.OnVideoFinished = e.NewElement.OnVideoFinished; SetNativeControl(cameraPreview); } if (e.OldElement != null) { // Unsubscribe cameraPreview.Click -= OnCameraPreviewClicked; } if (e.NewElement != null) { Camera camera = null; e.NewElement.TakePhotoEvent += (sender, args) => { if (cameraPreview.Preview != null) { cameraPreview.OnPictureReturn = ((PocketPro.CameraPreview)(sender)).OnPictureReturn; cameraPreview.OnVideoStarted = ((PocketPro.CameraPreview)(sender)).OnVideoStarted; cameraPreview.OnVideoFinished = ((PocketPro.CameraPreview)(sender)).OnVideoFinished; //cameraPreview.Preview.AutoFocus(new AutofocusCallBack(cameraPreview) //{ // isTakePhoto = true //}); cameraPreview.camera.EnableShutterSound(false); cameraPreview.camera.TakePicture(new ShutterCallback(), null, new JpegCallback(this.cameraPreview)); //} //else camera.AutoFocus(new AutofocusCallBack(cameraPreview)); // TODO: Verify No Memory Leak On Failure } else { } }; e.NewElement.StartRecordingEvent += (sender, args) => { cameraPreview.Preview.StopPreview(); cameraPreview.Preview.Release(); var cameraOption = cameraOptions.Equals(CameraOptions.Front) ? CameraOptions.Front : CameraOptions.Rear; var dcimPath = Android.OS.Environment.GetExternalStoragePublicDirectory(Environment.DirectoryMovies).Path; var sdf = new SimpleDateFormat("yyyyMMdd_HHmmss"); var currentDateandTime = sdf.Format(new Date()); var filename = $"PocketPro - {currentDateandTime}.mp4"; var dcimFilePath = System.IO.Path.Combine(dcimPath, filename); videoFilePath = dcimFilePath; camera = Camera.Open((int)cameraOption); cameraOptions = cameraOption; cameraPreview.Preview = camera; camera.Unlock(); try { mRecorder = new MediaRecorder(); mRecorder.SetCamera(camera); mRecorder.SetVideoSource(VideoSource.Camera); mRecorder.SetAudioSource(AudioSource.Mic); mRecorder.SetOutputFormat(OutputFormat.Mpeg4); mRecorder.SetVideoEncoder(VideoEncoder.H264); mRecorder.SetAudioEncoder(AudioEncoder.Aac); mRecorder.SetOutputFile(dcimFilePath); mRecorder.SetOrientationHint(0); mRecorder.SetVideoFrameRate(30); // mRecorder.SetVideoEncodingBitRate(512 * 1000); mRecorder.SetVideoSize(1920, 1080); mRecorder.SetPreviewDisplay(cameraPreview.holder.Surface); mRecorder.Prepare(); mRecorder.Start(); } catch (Exception exception) { Console.WriteLine(exception.Message); } }; e.NewElement.StopRecordingEvent += (sender, args) => { mRecorder.Stop(); mRecorder.Reset(); mRecorder.Release(); //camera = Camera.Open((int)cameraOption); //cameraOptions = cameraOption; //camera.Unlock(); var dcimPath = Android.OS.Environment.GetExternalStoragePublicDirectory(Environment.DirectoryMovies).Path; var fileBase = System.IO.Path.GetFileNameWithoutExtension(videoFilePath); var dcimFilePath = System.IO.Path.Combine(dcimPath, $"{fileBase}.png"); var brightnessService = DependencyService.Get <IRateApplication>(); var thumb = brightnessService.GenerateThumbImage(videoFilePath, 1000); System.IO.File.WriteAllBytes(dcimFilePath, thumb); }; e.NewElement.ToggleCamera += (sender, args) => { cameraPreview.Preview.StopPreview(); cameraPreview.Preview.Release(); var cameraOption = cameraOptions.Equals(CameraOptions.Front) ? CameraOptions.Front : CameraOptions.Rear; camera = Camera.Open((int)cameraOption); cameraOptions = cameraOption; cameraPreview.Preview = camera; cameraPreview.Preview.StartPreview(); cameraPreview = new CameraPreview(Context); cameraPreview.OnPictureReturn = e.OldElement.OnPictureReturn; cameraPreview.OnVideoStarted = e.OldElement.OnVideoStarted; cameraPreview.OnVideoFinished = e.OldElement.OnVideoFinished; SetNativeControl(cameraPreview); Control.Preview = camera; Control.Preview.StartPreview(); }; e.NewElement.AutoFocusEvent += (sender, args) => { cameraPreview.Preview.AutoFocus(new AutofocusCallBack(cameraPreview)); }; e.NewElement.EnableTorchEvent += (sender, args) => { var parameters = cameraPreview.Preview.GetParameters(); parameters.FlashMode = Camera.Parameters.FlashModeTorch; //cameraPreview.Preview.StopPreview(); cameraPreview.Preview.SetParameters(parameters); }; e.NewElement.DisableTorchEvent += (sender, args) => { var parameters = cameraPreview.Preview.GetParameters(); parameters.FlashMode = Camera.Parameters.FlashModeOff; //cameraPreview.Preview.StartPreview(); cameraPreview.Preview.SetParameters(parameters); }; // Subscribe cameraPreview.Click += OnCameraPreviewClicked; try { if (camera == null) { Control.Preview = Camera.Open((int)e.NewElement.Camera); } } catch (Exception cameraException) { Console.WriteLine(cameraException.Message); } } }