Guest User

Untitled

a guest
Nov 2nd, 2012
373
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.      * Camera management
  3.      */
  4.  
  5.     /**
  6.      * Selects the last used camera or a front-facing one
  7.      */
  8.     public void selectCamera()
  9.     {
  10.         int cameraID = preferences.getInt("cameraID", -1);
  11.         if (cameraID == -1)
  12.         {
  13.             // no camera was selected previously, select a front-facing one
  14.             int nCameras = Camera.getNumberOfCameras();
  15.  
  16.             CameraInfo cameraInfo = new CameraInfo();
  17.             for (int i = 0; i < nCameras; i++)
  18.             {
  19.                 Camera.getCameraInfo(i, cameraInfo);
  20.                 if (cameraInfo.facing == CameraInfo.CAMERA_FACING_FRONT)
  21.                 {
  22.                     cameraID = i;
  23.                 }
  24.             }
  25.  
  26.             // there's no front camera
  27.             if (cameraID == -1)
  28.             {
  29.                 cameraID = 0;
  30.             }
  31.         }
  32.  
  33.         setPreviewSurface(previewSurface);
  34.         setupCamera(cameraID);
  35.     }
  36.  
  37.     /**
  38.      * Sets the camera used for face detection
  39.      *
  40.      * @param cameraID the ID of the camera to use
  41.      */
  42.     public void setupCamera(int cameraID)
  43.     {
  44.         // release previous one
  45.         if (camera != null)
  46.         {
  47.             camera.release();
  48.             camera = null;
  49.         }
  50.  
  51.         // save selection
  52.         Editor editor = preferences.edit();
  53.         editor.putInt("cameraID", cameraID);
  54.         editor.commit();
  55.  
  56.         try
  57.         {
  58.             // open camera
  59.             camera = Camera.open(cameraID);
  60.  
  61.             // get smallest available preview size
  62.             Parameters params = camera.getParameters();
  63.             List<Size> psizes = params.getSupportedPreviewSizes();
  64.             Collections.sort(psizes, new Comparator<Size>()
  65.             {
  66.                 @Override
  67.                 public int compare(Size size1, Size size2)
  68.                 {
  69.                     long pixels1 = size1.height * size1.width;
  70.                     long pixels2 = size2.height * size2.width;
  71.  
  72.                     return (pixels1 < pixels2) ? -1 : (pixels1 > pixels2) ? 1 : 0;
  73.                 }
  74.             });
  75.             Size smallest = psizes.get(0);
  76.             params.setPreviewSize(smallest.width, smallest.height);
  77.  
  78.             // set preferred preview format
  79.             params.setPreviewFormat(ImageFormat.NV21);
  80.  
  81.             // save parameters
  82.             camera.setParameters(params);
  83.  
  84.             // set preview display
  85.             camera.setPreviewDisplay(previewSurface.getHolder());
  86.  
  87.             // set orientation
  88.             CameraInfo info = new CameraInfo();
  89.             Camera.getCameraInfo(cameraID, info);
  90.             WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
  91.             int _rotation = wm.getDefaultDisplay().getRotation();
  92.             int degrees = 0;
  93.             switch (_rotation)
  94.             {
  95.                 case Surface.ROTATION_0:
  96.                     degrees = 0;
  97.                     break;
  98.                 case Surface.ROTATION_90:
  99.                     degrees = 90;
  100.                     break;
  101.                 case Surface.ROTATION_180:
  102.                     degrees = 180;
  103.                     break;
  104.                 case Surface.ROTATION_270:
  105.                     degrees = 270;
  106.                     break;
  107.             }
  108.  
  109.             int result = (360 + info.orientation - degrees) % 360;
  110.             rotation = degrees;
  111.  
  112.             camera.setDisplayOrientation(result);
  113.             swapMetrics = (result % 180 == 0);
  114.  
  115.             // set camera in imageprocessor
  116.             if (processor != null)
  117.                 processor.setCamera(camera, result);
  118.  
  119.             calculator.loadSettings();
  120.            
  121.             // start preview
  122.             camera.startPreview();
  123.         }
  124.         catch (Exception e)
  125.         {
  126.             // TODO Auto-generated catch block
  127.             e.printStackTrace();
  128.         }
  129.     }
RAW Paste Data