Front/Back camera semantic support added to Android VideoCapture back-end.
authorAlexander Smorkalov <alexander.smorkalov@itseez.com>
Thu, 11 Apr 2013 10:34:20 +0000 (14:34 +0400)
committerAlexander Smorkalov <alexander.smorkalov@itseez.com>
Wed, 24 Apr 2013 06:56:16 +0000 (10:56 +0400)
24 files changed:
3rdparty/lib/armeabi-v7a/libnative_camera_r2.2.0.so
3rdparty/lib/armeabi-v7a/libnative_camera_r2.3.3.so
3rdparty/lib/armeabi-v7a/libnative_camera_r3.0.1.so
3rdparty/lib/armeabi-v7a/libnative_camera_r4.0.0.so
3rdparty/lib/armeabi-v7a/libnative_camera_r4.0.3.so
3rdparty/lib/armeabi-v7a/libnative_camera_r4.1.1.so
3rdparty/lib/armeabi-v7a/libnative_camera_r4.2.0.so
3rdparty/lib/armeabi/libnative_camera_r2.2.0.so
3rdparty/lib/armeabi/libnative_camera_r2.3.3.so
3rdparty/lib/armeabi/libnative_camera_r3.0.1.so
3rdparty/lib/armeabi/libnative_camera_r4.0.0.so
3rdparty/lib/armeabi/libnative_camera_r4.0.3.so
3rdparty/lib/armeabi/libnative_camera_r4.1.1.so
3rdparty/lib/armeabi/libnative_camera_r4.2.0.so
3rdparty/lib/mips/libnative_camera_r4.0.3.so
3rdparty/lib/mips/libnative_camera_r4.1.1.so
3rdparty/lib/mips/libnative_camera_r4.2.0.so
3rdparty/lib/x86/libnative_camera_r2.3.3.so
3rdparty/lib/x86/libnative_camera_r3.0.1.so
3rdparty/lib/x86/libnative_camera_r4.0.3.so
3rdparty/lib/x86/libnative_camera_r4.1.1.so
3rdparty/lib/x86/libnative_camera_r4.2.0.so
modules/androidcamera/camera_wrapper/camera_wrapper.cpp
modules/highgui/include/opencv2/highgui/highgui_c.h

index fb34509..f62e596 100755 (executable)
Binary files a/3rdparty/lib/armeabi-v7a/libnative_camera_r2.2.0.so and b/3rdparty/lib/armeabi-v7a/libnative_camera_r2.2.0.so differ
index fce5814..c0237c1 100755 (executable)
Binary files a/3rdparty/lib/armeabi-v7a/libnative_camera_r2.3.3.so and b/3rdparty/lib/armeabi-v7a/libnative_camera_r2.3.3.so differ
index 2498763..2c235d8 100755 (executable)
Binary files a/3rdparty/lib/armeabi-v7a/libnative_camera_r3.0.1.so and b/3rdparty/lib/armeabi-v7a/libnative_camera_r3.0.1.so differ
index 9a7047b..4872588 100755 (executable)
Binary files a/3rdparty/lib/armeabi-v7a/libnative_camera_r4.0.0.so and b/3rdparty/lib/armeabi-v7a/libnative_camera_r4.0.0.so differ
index 98e0d9e..169d97e 100755 (executable)
Binary files a/3rdparty/lib/armeabi-v7a/libnative_camera_r4.0.3.so and b/3rdparty/lib/armeabi-v7a/libnative_camera_r4.0.3.so differ
index fe14782..bdd09fb 100755 (executable)
Binary files a/3rdparty/lib/armeabi-v7a/libnative_camera_r4.1.1.so and b/3rdparty/lib/armeabi-v7a/libnative_camera_r4.1.1.so differ
index 646ae71..74bfdea 100755 (executable)
Binary files a/3rdparty/lib/armeabi-v7a/libnative_camera_r4.2.0.so and b/3rdparty/lib/armeabi-v7a/libnative_camera_r4.2.0.so differ
index a0db0d1..7c061d9 100755 (executable)
Binary files a/3rdparty/lib/armeabi/libnative_camera_r2.2.0.so and b/3rdparty/lib/armeabi/libnative_camera_r2.2.0.so differ
index 6f167cb..686bdfb 100755 (executable)
Binary files a/3rdparty/lib/armeabi/libnative_camera_r2.3.3.so and b/3rdparty/lib/armeabi/libnative_camera_r2.3.3.so differ
index 26d286a..5a5c231 100755 (executable)
Binary files a/3rdparty/lib/armeabi/libnative_camera_r3.0.1.so and b/3rdparty/lib/armeabi/libnative_camera_r3.0.1.so differ
index f29707c..694cfb8 100755 (executable)
Binary files a/3rdparty/lib/armeabi/libnative_camera_r4.0.0.so and b/3rdparty/lib/armeabi/libnative_camera_r4.0.0.so differ
index 85e0320..c6cc8ab 100755 (executable)
Binary files a/3rdparty/lib/armeabi/libnative_camera_r4.0.3.so and b/3rdparty/lib/armeabi/libnative_camera_r4.0.3.so differ
index 35c5141..94966c8 100755 (executable)
Binary files a/3rdparty/lib/armeabi/libnative_camera_r4.1.1.so and b/3rdparty/lib/armeabi/libnative_camera_r4.1.1.so differ
index 816669e..8251510 100755 (executable)
Binary files a/3rdparty/lib/armeabi/libnative_camera_r4.2.0.so and b/3rdparty/lib/armeabi/libnative_camera_r4.2.0.so differ
index 616323d..c8c9e2c 100755 (executable)
Binary files a/3rdparty/lib/mips/libnative_camera_r4.0.3.so and b/3rdparty/lib/mips/libnative_camera_r4.0.3.so differ
index 7ee4f25..6845d71 100755 (executable)
Binary files a/3rdparty/lib/mips/libnative_camera_r4.1.1.so and b/3rdparty/lib/mips/libnative_camera_r4.1.1.so differ
index 33d7745..b148d16 100755 (executable)
Binary files a/3rdparty/lib/mips/libnative_camera_r4.2.0.so and b/3rdparty/lib/mips/libnative_camera_r4.2.0.so differ
index d40409f..d940063 100755 (executable)
Binary files a/3rdparty/lib/x86/libnative_camera_r2.3.3.so and b/3rdparty/lib/x86/libnative_camera_r2.3.3.so differ
index 221b833..cf2e990 100755 (executable)
Binary files a/3rdparty/lib/x86/libnative_camera_r3.0.1.so and b/3rdparty/lib/x86/libnative_camera_r3.0.1.so differ
index 786d6dc..420ec81 100755 (executable)
Binary files a/3rdparty/lib/x86/libnative_camera_r4.0.3.so and b/3rdparty/lib/x86/libnative_camera_r4.0.3.so differ
index 8ec6cb7..5468d20 100755 (executable)
Binary files a/3rdparty/lib/x86/libnative_camera_r4.1.1.so and b/3rdparty/lib/x86/libnative_camera_r4.1.1.so differ
index 7fe74d2..9923310 100755 (executable)
Binary files a/3rdparty/lib/x86/libnative_camera_r4.2.0.so and b/3rdparty/lib/x86/libnative_camera_r4.2.0.so differ
index f6ec2f0..2d0ebc7 100644 (file)
@@ -362,6 +362,9 @@ CameraHandler* CameraHandler::initCameraConnect(const CameraCallback& callback,
     typedef sp<Camera> (*Android23ConnectFuncType)(int);
     typedef sp<Camera> (*Android3DConnectFuncType)(int, int);
 
+    const int BACK_CAMERA_INDEX = 99;
+    const int FRONT_CAMERA_INDEX = 98;
+
     enum {
     CAMERA_SUPPORT_MODE_2D = 0x01, /* Camera Sensor supports 2D mode. */
     CAMERA_SUPPORT_MODE_3D = 0x02, /* Camera Sensor supports 3D mode. */
@@ -373,7 +376,51 @@ CameraHandler* CameraHandler::initCameraConnect(const CameraCallback& callback,
     const char Android23ConnectName[] = "_ZN7android6Camera7connectEi";
     const char Android3DConnectName[] = "_ZN7android6Camera7connectEii";
 
-    LOGD("CameraHandler::initCameraConnect(%p, %d, %p, %p)", callback, cameraId, userData, prevCameraParameters);
+    int localCameraIndex = cameraId;
+
+#if !defined(ANDROID_r2_2_0)
+    if (cameraId == BACK_CAMERA_INDEX)
+    {
+        LOGD("Back camera selected");
+        for (int i = 0; i < Camera::getNumberOfCameras(); i++)
+        {
+            CameraInfo info;
+            Camera::getCameraInfo(i, &info);
+            if (info.facing == CAMERA_FACING_BACK)
+            {
+                localCameraIndex = i;
+                break;
+            }
+        }
+    }
+    else if (cameraId == FRONT_CAMERA_INDEX)
+    {
+        LOGD("Front camera selected");
+        for (int i = 0; i < Camera::getNumberOfCameras(); i++)
+        {
+            CameraInfo info;
+            Camera::getCameraInfo(i, &info);
+            if (info.facing == CAMERA_FACING_FRONT)
+            {
+                localCameraIndex = i;
+                break;
+            }
+        }
+    }
+
+    if (localCameraIndex == BACK_CAMERA_INDEX)
+    {
+        LOGE("Back camera not found!");
+        return NULL;
+    }
+    else if (localCameraIndex == FRONT_CAMERA_INDEX)
+    {
+        LOGE("Front camera not found!");
+        return NULL;
+    }
+#endif
+
+    LOGD("CameraHandler::initCameraConnect(%p, %d, %p, %p)", callback, localCameraIndex, userData, prevCameraParameters);
 
     sp<Camera> camera = 0;
 
@@ -381,8 +428,8 @@ CameraHandler* CameraHandler::initCameraConnect(const CameraCallback& callback,
 
     if (!CameraHALHandle)
     {
-    LOGE("Cannot link to \"libcamera_client.so\"");
-    return NULL;
+        LOGE("Cannot link to \"libcamera_client.so\"");
+        return NULL;
     }
 
     // reset errors
@@ -390,24 +437,24 @@ CameraHandler* CameraHandler::initCameraConnect(const CameraCallback& callback,
 
     if (Android22ConnectFuncType Android22Connect = (Android22ConnectFuncType)dlsym(CameraHALHandle, Android22ConnectName))
     {
-    LOGD("Connecting to CameraService v 2.2");
-    camera = Android22Connect();
+        LOGD("Connecting to CameraService v 2.2");
+        camera = Android22Connect();
     }
     else if (Android23ConnectFuncType Android23Connect = (Android23ConnectFuncType)dlsym(CameraHALHandle, Android23ConnectName))
     {
-    LOGD("Connecting to CameraService v 2.3");
-    camera = Android23Connect(cameraId);
+        LOGD("Connecting to CameraService v 2.3");
+        camera = Android23Connect(localCameraIndex);
     }
     else if (Android3DConnectFuncType Android3DConnect = (Android3DConnectFuncType)dlsym(CameraHALHandle, Android3DConnectName))
     {
-    LOGD("Connecting to CameraService v 3D");
-    camera = Android3DConnect(cameraId, CAMERA_SUPPORT_MODE_2D);
+        LOGD("Connecting to CameraService v 3D");
+        camera = Android3DConnect(localCameraIndex, CAMERA_SUPPORT_MODE_2D);
     }
     else
     {
-    dlclose(CameraHALHandle);
-    LOGE("Cannot connect to CameraService. Connect method was not found!");
-    return NULL;
+        dlclose(CameraHALHandle);
+        LOGE("Cannot connect to CameraService. Connect method was not found!");
+        return NULL;
     }
 
     dlclose(CameraHALHandle);
@@ -422,7 +469,7 @@ CameraHandler* CameraHandler::initCameraConnect(const CameraCallback& callback,
     camera->setListener(handler);
 
     handler->camera = camera;
-    handler->cameraId = cameraId;
+    handler->cameraId = localCameraIndex;
 
     if (prevCameraParameters != 0)
     {
index 58840cb..12be986 100644 (file)
@@ -305,6 +305,8 @@ enum
     CV_CAP_OPENNI_ASUS =910,   // OpenNI (for Asus Xtion)
 
     CV_CAP_ANDROID  =1000,  // Android
+    CV_CAP_ANDROID_BACK =CV_CAP_ANDROID+99, // Android back camera
+    CV_CAP_ANDROID_FRONT =CV_CAP_ANDROID+98, // Android front camera
 
     CV_CAP_XIAPI    =1100,   // XIMEA Camera API