Merge pull request #800 from asmorkalov:android_cam_idx_semantic
authorAndrey Pavlenko <andrey.pavlenko@itseez.com>
Mon, 29 Apr 2013 06:00:07 +0000 (10:00 +0400)
committerOpenCV Buildbot <buildbot@opencv.org>
Mon, 29 Apr 2013 06:00:08 +0000 (10:00 +0400)
1  2 
modules/java/generator/src/java/android+CameraBridgeViewBase.java
modules/java/generator/src/java/android+JavaCameraView.java

@@@ -47,10 -47,14 +47,14 @@@ public abstract class CameraBridgeViewB
      protected int mMaxWidth;
      protected float mScale = 0;
      protected int mPreviewFormat = Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA;
-     protected int mCameraIndex = -1;
+     protected int mCameraIndex = CAMERA_ID_ANY;
      protected boolean mEnabled;
      protected FpsMeter mFpsMeter = null;
  
+     public static final int CAMERA_ID_ANY   = -1;
+     public static final int CAMERA_ID_BACK  = 99;
+     public static final int CAMERA_ID_FRONT = 98;
      public CameraBridgeViewBase(Context context, int cameraId) {
          super(context);
          mCameraIndex = cameraId;
@@@ -74,7 -78,6 +78,7 @@@
          getHolder().addCallback(this);
          mMaxWidth = MAX_UNSPECIFIED;
          mMaxHeight = MAX_UNSPECIFIED;
 +        styledAttrs.recycle();
      }
  
      public interface CvCameraViewListener {
              mPreviewFormat = format;
          }
  
 -        private CvCameraViewListenerAdapter() {}
 -
          private int mPreviewFormat = Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA;
          private CvCameraViewListener mOldStyleListener;
      };
@@@ -6,6 -6,7 +6,7 @@@ import android.content.Context
  import android.graphics.ImageFormat;
  import android.graphics.SurfaceTexture;
  import android.hardware.Camera;
+ import android.hardware.Camera.CameraInfo;
  import android.hardware.Camera.PreviewCallback;
  import android.os.Build;
  import android.util.AttributeSet;
@@@ -68,7 -69,7 +69,7 @@@ public class JavaCameraView extends Cam
          synchronized (this) {
              mCamera = null;
  
-             if (mCameraIndex == -1) {
+             if (mCameraIndex == CAMERA_ID_ANY) {
                  Log.d(TAG, "Trying to open camera with old open()");
                  try {
                      mCamera = Camera.open();
                  }
              } else {
                  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
-                     Log.d(TAG, "Trying to open camera with new open(" + Integer.valueOf(mCameraIndex) + ")");
-                     try {
-                         mCamera = Camera.open(mCameraIndex);
-                     } catch (RuntimeException e) {
-                         Log.e(TAG, "Camera #" + mCameraIndex + "failed to open: " + e.getLocalizedMessage());
+                     int localCameraIndex = mCameraIndex;
+                     if (mCameraIndex == CAMERA_ID_BACK) {
+                         Log.i(TAG, "Trying to open back camera");
+                         Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
+                         for (int camIdx = 0; camIdx < Camera.getNumberOfCameras(); ++camIdx) {
+                             Camera.getCameraInfo( camIdx, cameraInfo );
+                             if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
+                                 localCameraIndex = camIdx;
+                                 break;
+                             }
+                         }
+                     } else if (mCameraIndex == CAMERA_ID_FRONT) {
+                         Log.i(TAG, "Trying to open front camera");
+                         Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
+                         for (int camIdx = 0; camIdx < Camera.getNumberOfCameras(); ++camIdx) {
+                             Camera.getCameraInfo( camIdx, cameraInfo );
+                             if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
+                                 localCameraIndex = camIdx;
+                                 break;
+                             }
+                         }
+                     }
+                     if (localCameraIndex == CAMERA_ID_BACK) {
+                         Log.e(TAG, "Back camera not found!");
+                     } else if (localCameraIndex == CAMERA_ID_FRONT) {
+                         Log.e(TAG, "Front camera not found!");
+                     } else {
+                         Log.d(TAG, "Trying to open camera with new open(" + Integer.valueOf(localCameraIndex) + ")");
+                         try {
+                             mCamera = Camera.open(localCameraIndex);
+                         } catch (RuntimeException e) {
+                             Log.e(TAG, "Camera #" + localCameraIndex + "failed to open: " + e.getLocalizedMessage());
+                         }
                      }
                  }
              }
              mRgba.release();
          }
  
 -        private JavaCameraFrame(CvCameraViewFrame obj) {
 -        }
 -
          private Mat mYuvFrameData;
          private Mat mRgba;
          private int mWidth;