Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Camera management
- */
- /**
- * Selects the last used camera or a front-facing one
- */
- public void selectCamera()
- {
- int cameraID = preferences.getInt("cameraID", -1);
- if (cameraID == -1)
- {
- // no camera was selected previously, select a front-facing one
- int nCameras = Camera.getNumberOfCameras();
- CameraInfo cameraInfo = new CameraInfo();
- for (int i = 0; i < nCameras; i++)
- {
- Camera.getCameraInfo(i, cameraInfo);
- if (cameraInfo.facing == CameraInfo.CAMERA_FACING_FRONT)
- {
- cameraID = i;
- }
- }
- // there's no front camera
- if (cameraID == -1)
- {
- cameraID = 0;
- }
- }
- setPreviewSurface(previewSurface);
- setupCamera(cameraID);
- }
- /**
- * Sets the camera used for face detection
- *
- * @param cameraID the ID of the camera to use
- */
- public void setupCamera(int cameraID)
- {
- // release previous one
- if (camera != null)
- {
- camera.release();
- camera = null;
- }
- // save selection
- Editor editor = preferences.edit();
- editor.putInt("cameraID", cameraID);
- editor.commit();
- try
- {
- // open camera
- camera = Camera.open(cameraID);
- // get smallest available preview size
- Parameters params = camera.getParameters();
- List<Size> psizes = params.getSupportedPreviewSizes();
- Collections.sort(psizes, new Comparator<Size>()
- {
- @Override
- public int compare(Size size1, Size size2)
- {
- long pixels1 = size1.height * size1.width;
- long pixels2 = size2.height * size2.width;
- return (pixels1 < pixels2) ? -1 : (pixels1 > pixels2) ? 1 : 0;
- }
- });
- Size smallest = psizes.get(0);
- params.setPreviewSize(smallest.width, smallest.height);
- // set preferred preview format
- params.setPreviewFormat(ImageFormat.NV21);
- // save parameters
- camera.setParameters(params);
- // set preview display
- camera.setPreviewDisplay(previewSurface.getHolder());
- // set orientation
- CameraInfo info = new CameraInfo();
- Camera.getCameraInfo(cameraID, info);
- WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
- int _rotation = wm.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;
- }
- int result = (360 + info.orientation - degrees) % 360;
- rotation = degrees;
- camera.setDisplayOrientation(result);
- swapMetrics = (result % 180 == 0);
- // set camera in imageprocessor
- if (processor != null)
- processor.setCamera(camera, result);
- calculator.loadSettings();
- // start preview
- camera.startPreview();
- }
- catch (Exception e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement