CameraHandler* CameraHandler::initCameraConnect(const CameraCallback& callback, int cameraId, void* userData, CameraParameters* prevCameraParameters)
{
-
typedef sp<Camera> (*Android22ConnectFuncType)();
typedef sp<Camera> (*Android23ConnectFuncType)(int);
typedef sp<Camera> (*Android3DConnectFuncType)(int, int);
-
+
enum {
CAMERA_SUPPORT_MODE_2D = 0x01, /* Camera Sensor supports 2D mode. */
CAMERA_SUPPORT_MODE_3D = 0x02, /* Camera Sensor supports 3D mode. */
CAMERA_SUPPORT_MODE_NONZSL = 0x04, /* Camera Sensor in NON-ZSL mode. */
CAMERA_SUPPORT_MODE_ZSL = 0x08 /* Camera Sensor supports ZSL mode. */
};
-
+
const char Android22ConnectName[] = "_ZN7android6Camera7connectEv";
const char Android23ConnectName[] = "_ZN7android6Camera7connectEi";
const char Android3DConnectName[] = "_ZN7android6Camera7connectEii";
-
+
LOGD("CameraHandler::initCameraConnect(%p, %d, %p, %p)", callback, cameraId, userData, prevCameraParameters);
-
+
sp<Camera> camera = 0;
-
+
void* CameraHALHandle = dlopen("libcamera_client.so", RTLD_LAZY);
if (!CameraHALHandle)
LOGE("Cannot link to \"libcamera_client.so\"");
return NULL;
}
-
+
// reset errors
dlerror();
{
LOGD("Connecting to CameraService v 2.2");
camera = Android22Connect();
+ LOGD("Connection to CameraService v 2.2 established");
}
else if (Android23ConnectFuncType Android23Connect = (Android23ConnectFuncType)dlsym(CameraHALHandle, Android23ConnectName))
{
LOGD("Connecting to CameraService v 2.3");
camera = Android23Connect(cameraId);
+ LOGD("Connection to CameraService v 2.3 established");
}
else if (Android3DConnectFuncType Android3DConnect = (Android3DConnectFuncType)dlsym(CameraHALHandle, Android3DConnectName))
{
LOGD("Connecting to CameraService v 3D");
camera = Android3DConnect(cameraId, CAMERA_SUPPORT_MODE_2D);
+ LOGD("Connection to CameraService v 3D established");
}
else
{
dlclose(CameraHALHandle);
- if ( 0 == camera.get() )
+ if ( NULL == camera.get() )
{
LOGE("initCameraConnect: Unable to connect to CameraService\n");
return 0;
}
+ LOGD("Creating camera handler");
CameraHandler* handler = new CameraHandler(callback, userData);
+ LOGD("Setting camera listener");
camera->setListener(handler);
+ LOGD("Updating camera handler");
handler->camera = camera;
handler->cameraId = cameraId;
- if (prevCameraParameters != 0)
+ LOGD("Checking previous camera parameters");
+ if (NULL != prevCameraParameters)
{
LOGI("initCameraConnect: Setting paramers from previous camera handler");
camera->setParameters(prevCameraParameters->flatten());
#if !defined(ANDROID_r2_2_0)
// Set focus mode to continuous-video if supported
const char* available_focus_modes = handler->params.get(CameraParameters::KEY_SUPPORTED_FOCUS_MODES);
- if (available_focus_modes != 0)
+ if (NULL != available_focus_modes)
{
if (strstr(available_focus_modes, "continuous-video") != NULL)
{
status_t resParams = handler->camera->setParameters(handler->params.flatten());
- if (resParams != 0)
+ if (0 != resParams)
{
LOGE("initCameraConnect: failed to set autofocus mode to \"continuous-video\"");
}
{
LOGD("Preview started successfully");
}
-
+
return handler;
}
camera->disconnect();
camera.clear();
- camera=NULL;
+ camera = NULL;
// ATTENTION!!!!!!!!!!!!!!!!!!!!!!!!!!
// When we set
// camera=NULL
{
LOGD("CameraHandler::applyProperties()");
- if (ppcameraHandler == 0)
+ if (NULL == ppcameraHandler)
{
LOGE("applyProperties: Passed NULL ppcameraHandler");
return;
}
- if (*ppcameraHandler == 0)
+ if (NULL == *ppcameraHandler)
{
LOGE("applyProperties: Passed null *ppcameraHandler");
return;
}
LOGD("CameraHandler::applyProperties()");
- CameraHandler* previousCameraHandler=*ppcameraHandler;
+
+#if !defined(ANDROID_r2_2_0)
+ LOGD("Reconnect camera");
+ (*ppcameraHandler)->camera->reconnect();
+ (*ppcameraHandler)->params = (*ppcameraHandler)->camera->getParameters();
+#else
+ CameraHandler* previousCameraHandler = *ppcameraHandler;
CameraParameters curCameraParameters(previousCameraHandler->params.flatten());
- CameraCallback cameraCallback=previousCameraHandler->cameraCallback;
- void* userData=previousCameraHandler->userData;
- int cameraId=previousCameraHandler->cameraId;
+ CameraCallback cameraCallback = previousCameraHandler->cameraCallback;
+ void* userData = previousCameraHandler->userData;
+ int cameraId = previousCameraHandler->cameraId;
LOGD("CameraHandler::applyProperties(): before previousCameraHandler->closeCameraConnect");
previousCameraHandler->closeCameraConnect();
LOGD("CameraHandler::applyProperties(): after previousCameraHandler->closeCameraConnect");
-
LOGD("CameraHandler::applyProperties(): before initCameraConnect");
- CameraHandler* handler=initCameraConnect(cameraCallback, cameraId, userData, &curCameraParameters);
+ CameraHandler* handler = initCameraConnect(cameraCallback, cameraId, userData, &curCameraParameters);
LOGD("CameraHandler::applyProperties(): after initCameraConnect, handler=0x%x", (int)handler);
if (handler == NULL) {
LOGE("ERROR in applyProperties --- cannot reinit camera");
- handler=initCameraConnect(cameraCallback, cameraId, userData, NULL);
+ handler = initCameraConnect(cameraCallback, cameraId, userData, NULL);
LOGD("CameraHandler::applyProperties(): repeate initCameraConnect after ERROR, handler=0x%x", (int)handler);
if (handler == NULL) {
LOGE("ERROR in applyProperties --- cannot reinit camera AGAIN --- cannot do anything else");
}
}
- (*ppcameraHandler)=handler;
+
+ (*ppcameraHandler) = handler;
+#endif
}