From 930ccf7eff351a029c66099bb181b175c9c0bf68 Mon Sep 17 00:00:00 2001 From: Thomas BOY Date: Wed, 28 Jan 2015 14:41:05 +0100 Subject: [PATCH] =?UTF-8?q?Premi=C3=A8re=20impl=C3=A9mentation=20du=20swit?= =?UTF-8?q?ch=20camera=20->=20Marche=20de=20camera=20back=20=C3=A0=20camer?= =?UTF-8?q?a=20front=20mais=20pas=20l'inverse?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../res/drawable-hdpi/switch_camera.png | Bin 0 -> 4646 bytes .../res/layout/activity_camera_view.xml | 9 ++ .../geneanet/customcamera/CameraActivity.java | 109 ++++++++++++++++++ 3 files changed, 118 insertions(+) create mode 100644 src/android/customCamera/res/drawable-hdpi/switch_camera.png diff --git a/src/android/customCamera/res/drawable-hdpi/switch_camera.png b/src/android/customCamera/res/drawable-hdpi/switch_camera.png new file mode 100644 index 0000000000000000000000000000000000000000..7a69823276a17e267cdafdb4f87faf00ca4f82ac GIT binary patch literal 4646 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 + + 0 : off, 1 : on, 2 : auto. private int stateFlash = 0; + // Flag to know which camera is active. + private int cameraActive = getOrientationOfCamera(); public static final int DEGREE_0 = 0; public static final int DEGREE_90 = 90; @@ -890,6 +892,7 @@ public class CameraActivity extends Activity { this.setResult(3); this.finish(); } +<<<<<<< HEAD /** * Allow to enable or disable the flash of the camera. @@ -991,4 +994,110 @@ public class CameraActivity extends Activity { (supportedFlashModes.size() == 1 && supportedFlashModes.get(0).equals(Camera.Parameters.FLASH_MODE_OFF)) ); } +||||||| merged common ancestors +======= + + /** + * Check if a front camera exist. + * return boolean + */ + public boolean hasFrontCamera() { + int numCameras = Camera.getNumberOfCameras(); + for (int i = 0; i < numCameras; i++) { + Camera.CameraInfo info = new CameraInfo(); + Camera.getCameraInfo(i, info); + if (CameraInfo.CAMERA_FACING_FRONT == info.facing) { + return true; + } + } + return false; + } + + /** + * To change the active camera. + * @param view The current view. + */ + public void switchCamera(View view) { + if (hasFrontCamera()) { + System.out.println("Camera frontale OK !"); + System.out.println("Camera face : " + Camera.CameraInfo.CAMERA_FACING_FRONT); + System.out.println("Camera back : " + Camera.CameraInfo.CAMERA_FACING_BACK); + + int orientationCamera = getOrientationOfCamera(); + System.out.println("Orientation camera : " + orientationCamera); + + System.out.println("Camera Active : " + cameraActive); + +// int cameraCount = Camera.getNumberOfCameras(); +// System.out.println("nb Camera : " + cameraCount); +// for ( int camIdx = 0; camIdx < cameraCount; camIdx++ ) { +// System.out.println("ok"); +// Camera.getCameraInfo( camIdx, cameraInfo ); +// if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT ) { +// System.out.println("Je l'ai trouvé !! "); +// try { +// customCamera = Camera.open(camIdx); +// CameraPreview myPreview = new CameraPreview(this, customCamera); +// cameraPreview.addView(myPreview); +// } catch (RuntimeException e) { +// System.out.println("FAIL"); +// } +// } + ManagerCamera.clearCameraAccess(); + FrameLayout cameraPreview = (FrameLayout) findViewById(R.id.camera_preview); + cameraPreview.removeAllViews(); + if (cameraActive == Camera.CameraInfo.CAMERA_FACING_BACK) { + try { + cameraActive = 1; + customCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT); + setCameraDisplayOrientation(CameraActivity.this, 1, customCamera); + CameraPreview myPreview = new CameraPreview(this, customCamera); + cameraPreview.addView(myPreview); + } catch (RuntimeException e) { + System.out.println("FAIL"); + } + } else if (cameraActive == Camera.CameraInfo.CAMERA_FACING_FRONT) { + try { + cameraActive = 0; + customCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK); + System.out.println("J'ai réussi !! "); + CameraPreview myPreview = new CameraPreview(this, customCamera); + cameraPreview.addView(myPreview); + } catch (RuntimeException e) { + System.out.println("FAIL"); + } + } + } + } + + /** + * + * @param activity + * @param cameraId + * @param camera + */ + public static void setCameraDisplayOrientation(Activity activity, + int cameraId, android.hardware.Camera camera) { + Camera.CameraInfo info = new android.hardware.Camera.CameraInfo(); + Camera.getCameraInfo(cameraId, info); + int rotation = activity.getWindowManager().getDefaultDisplay().getRotation(); + int degrees = 0; + switch (rotation) { + case Surface.ROTATION_0: degrees = 0; break; + case Surface.ROTATION_90: degrees = 90; break; + case Surface.ROTATION_180: degrees = 180; break; + case Surface.ROTATION_270: degrees = 270; break; + default : break; + } + + int result; + if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { + result = (info.orientation + degrees) % 360; + result = (360 - result) % 360; // compensate the mirror + } else { // back-facing + result = (info.orientation - degrees + 360) % 360; + } + camera.setDisplayOrientation(result); + } +>>>>>>> Première implémentation du switch camera -> Marche de camera back à camera front mais pas l'inverse }