CameraParameters JordanCameraWrapper::getParameters() const { CameraParameters ret = mMotoInterface->getParameters(); if (mCameraType == CAM_SOC) { /* the original zoom ratio string is '100,200,300,400,500,600', but 500 and 600 are broken for the SOC camera, so limiting it here */ ret.set(CameraParameters::KEY_MAX_ZOOM, "3"); ret.set(CameraParameters::KEY_ZOOM_RATIOS, "100,200,300,400"); } /* Motorola uses mot-exposure-offset instead of exposure-compensation for whatever reason -> adapt the values. The limits used here are taken from the lib, we surely also could parse it, but it's likely not worth the hassle */ float exposure = ret.getFloat("mot-exposure-offset"); int exposureParam = (int) round(exposure * 3); ret.set(CameraParameters::KEY_EXPOSURE_COMPENSATION, exposureParam); ret.set(CameraParameters::KEY_MAX_EXPOSURE_COMPENSATION, "9"); ret.set(CameraParameters::KEY_MIN_EXPOSURE_COMPENSATION, "-9"); ret.set(CameraParameters::KEY_EXPOSURE_COMPENSATION_STEP, "0.3333333333333"); ret.set("cam-mode", mVideoMode ? "1" : "0"); return ret; }
static bool getCameraParam(const CameraParameters& parameters, const char* parameterKey, float* outValue) { const char* value = parameters.get(parameterKey); if (value) { *outValue = parameters.getFloat(parameterKey); return true; } return false; }
CameraParameters MotoCameraWrapper::getParameters() const { CameraParameters ret = mMotoInterface->getParameters(); if (mCameraType == CAM_SOC) { /* the original zoom ratio string is '100,200,300,400,500,600', but 500 and 600 are broken for the SOC camera, so limiting it here */ ret.set(CameraParameters::KEY_MAX_ZOOM, "3"); ret.set(CameraParameters::KEY_ZOOM_RATIOS, "100,200,300,400"); } /* cut down supported effects to values supported by framework */ ret.set(CameraParameters::KEY_SUPPORTED_EFFECTS, "none,mono,sepia,negative,solarize,red-tint,green-tint,blue-tint"); /* Motorola uses mot-exposure-offset instead of exposure-compensation for whatever reason -> adapt the values. The limits used here are taken from the lib, we surely also could parse it, but it's likely not worth the hassle */ float exposure = ret.getFloat("mot-exposure-offset"); int exposureParam = (int) round(exposure * 3); ret.set(CameraParameters::KEY_EXPOSURE_COMPENSATION, exposureParam); ret.set(CameraParameters::KEY_MAX_EXPOSURE_COMPENSATION, "9"); ret.set(CameraParameters::KEY_MIN_EXPOSURE_COMPENSATION, "-9"); ret.set(CameraParameters::KEY_EXPOSURE_COMPENSATION_STEP, "0.3333333333333"); ret.set(CameraParameters::KEY_VIDEO_FRAME_FORMAT, CameraParameters::PIXEL_FORMAT_YUV422I); ret.set(CameraParameters::KEY_PREVIEW_FRAME_RATE, "24"); /* Device specific options */ switch (mCameraType) { case DROIDX: case DROID2: case DROID2WE: case DROIDPRO: /* God knows what I'm about to break here, but this should keep Droid cameras from crashing and reinitializing the HAL */ ret.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FPS_RANGE, "15000,30000"); ret.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, "15000,30000"); break; case CAM_SOC: case CAM_BAYER: ret.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FPS_RANGE, "1000,24000"); ret.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, "1000,24000"); break; default: break; } ret.set("cam-mode", mVideoMode ? "1" : "0"); return ret; }
double CameraHandler::getProperty(int propIdx) { LOGD("CameraHandler::getProperty(%d)", propIdx); switch (propIdx) { case ANDROID_CAMERA_PROPERTY_FRAMEWIDTH: { int w,h; params.getPreviewSize(&w, &h); return w; } case ANDROID_CAMERA_PROPERTY_FRAMEHEIGHT: { int w,h; params.getPreviewSize(&w, &h); return h; } case ANDROID_CAMERA_PROPERTY_SUPPORTED_PREVIEW_SIZES_STRING: { cameraPropertySupportedPreviewSizesString = params.get(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES); union {const char* str;double res;} u; memset(&u.res, 0, sizeof(u.res)); u.str = cameraPropertySupportedPreviewSizesString.c_str(); return u.res; } case ANDROID_CAMERA_PROPERTY_PREVIEW_FORMAT_STRING: { const char* fmt = params.get(CameraParameters::KEY_PREVIEW_FORMAT); if (fmt == CameraParameters::PIXEL_FORMAT_YUV422SP) fmt = "yuv422sp"; else if (fmt == CameraParameters::PIXEL_FORMAT_YUV420SP) fmt = "yuv420sp"; else if (fmt == CameraParameters::PIXEL_FORMAT_YUV422I) fmt = "yuv422i"; else if (fmt == CameraParameters::PIXEL_FORMAT_RGB565) fmt = "rgb565"; else if (fmt == CameraParameters::PIXEL_FORMAT_JPEG) fmt = "jpeg"; cameraPropertyPreviewFormatString = fmt; union {const char* str;double res;} u; memset(&u.res, 0, sizeof(u.res)); u.str = cameraPropertyPreviewFormatString.c_str(); return u.res; } case ANDROID_CAMERA_PROPERTY_EXPOSURE: { int exposure = params.getInt(CameraParameters::KEY_EXPOSURE_COMPENSATION); return exposure; } case ANDROID_CAMERA_PROPERTY_FPS: { return params.getPreviewFrameRate(); } case ANDROID_CAMERA_PROPERTY_FLASH_MODE: { int flash_mode = getModeNum(CameraHandler::flashModesNames, ANDROID_CAMERA_FLASH_MODES_NUM, params.get(CameraParameters::KEY_FLASH_MODE)); return flash_mode; } case ANDROID_CAMERA_PROPERTY_FOCUS_MODE: { int focus_mode = getModeNum(CameraHandler::focusModesNames, ANDROID_CAMERA_FOCUS_MODES_NUM, params.get(CameraParameters::KEY_FOCUS_MODE)); return focus_mode; } case ANDROID_CAMERA_PROPERTY_WHITE_BALANCE: { int white_balance = getModeNum(CameraHandler::whiteBalanceModesNames, ANDROID_CAMERA_WHITE_BALANCE_MODES_NUM, params.get(CameraParameters::KEY_WHITE_BALANCE)); return white_balance; } case ANDROID_CAMERA_PROPERTY_ANTIBANDING: { int antibanding = getModeNum(CameraHandler::antibandingModesNames, ANDROID_CAMERA_ANTIBANDING_MODES_NUM, params.get(CameraParameters::KEY_ANTIBANDING)); return antibanding; } case ANDROID_CAMERA_PROPERTY_FOCAL_LENGTH: { float focal_length = params.getFloat(CameraParameters::KEY_FOCAL_LENGTH); return focal_length; } case ANDROID_CAMERA_PROPERTY_FOCUS_DISTANCE_NEAR: { return getFocusDistance(ANDROID_CAMERA_FOCUS_DISTANCE_NEAR_INDEX); } case ANDROID_CAMERA_PROPERTY_FOCUS_DISTANCE_OPTIMAL: { return getFocusDistance(ANDROID_CAMERA_FOCUS_DISTANCE_OPTIMAL_INDEX); } case ANDROID_CAMERA_PROPERTY_FOCUS_DISTANCE_FAR: { return getFocusDistance(ANDROID_CAMERA_FOCUS_DISTANCE_FAR_INDEX); } default: LOGW("CameraHandler::getProperty - Unsupported property."); }; return -1; }