Advertisement
Guest User

Untitled

a guest
Nov 2nd, 2012
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.17 KB | None | 0 0
  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.     }
  130.  
  131.     /**
  132.      * Sets the SurfaceView used for previewing camera images
  133.      *
  134.      * @param surface
  135.      */
  136.     public void setPreviewSurface(SurfaceView surface)
  137.     {
  138.         previewSurface = surface;
  139.  
  140.         surface.setLayoutParams(
  141.             swapMetrics
  142.             ? new LayoutParams(ImageProcessor.PREFERRED_WIDTH / 2, ImageProcessor.PREFERRED_HEIGHT / 2, Gravity.BOTTOM | Gravity.LEFT)
  143.             : new LayoutParams(ImageProcessor.PREFERRED_HEIGHT / 2, ImageProcessor.PREFERRED_WIDTH / 2, Gravity.BOTTOM | Gravity.LEFT)
  144.         );
  145.  
  146.         previewSurface.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  147.         previewSurface.getHolder().addCallback(new Callback()
  148.         {
  149.             @Override
  150.             public void surfaceDestroyed(SurfaceHolder holder)
  151.             {
  152.                 if (camera != null)
  153.                 {
  154.                     camera.stopPreview();
  155.                 }
  156.             }
  157.  
  158.             @Override
  159.             public void surfaceCreated(SurfaceHolder holder)
  160.             {
  161.                 try
  162.                 {
  163.                     if (camera != null)
  164.                     {
  165.                         camera.setPreviewDisplay(holder);
  166.                     }
  167.                 }
  168.                 catch (IOException e)
  169.                 {
  170.                     e.printStackTrace();
  171.                 }
  172.             }
  173.  
  174.             @Override
  175.             public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
  176.             {
  177.                 // if (camera != null)
  178.                 // {
  179.                 // camera.release();
  180.                 // }
  181.                 // selectCamera();
  182.             }
  183.         });
  184.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement