void MotoCameraWrapper::toggleTorchIfNeeded() { if (mCameraType == CAM_SOC) { setSocTorchMode(mFlashMode == CameraParameters::FLASH_MODE_TORCH); } }
MotoCameraWrapper::~MotoCameraWrapper() { if (mCameraType == DEFY_GREEN) { setSocTorchMode(false); mTorchThread->cancelAndWait(); mTorchThread.clear(); } }
LibCameraWrapper::~LibCameraWrapper() { if (mLastFlashMode == CameraParameters::FLASH_MODE_ON || mLastFlashMode == CameraParameters::FLASH_MODE_TORCH) { setSocTorchMode(false); } }
status_t JordanCameraWrapper::setParameters(const CameraParameters& params) { CameraParameters pars(params.flatten()); int width, height; char buf[10]; bool isWide; /* * getInt returns -1 if the value isn't present and 0 on parse failure, * so if it's larger than 0, we can be sure the value was parsed properly */ mVideoMode = pars.getInt("cam-mode") > 0; pars.remove("cam-mode"); pars.getPreviewSize(&width, &height); isWide = width == 848 && height == 480; if (isWide && !mVideoMode) { pars.setPreviewFrameRate(24); } if (mCameraType == CAM_BAYER && mVideoMode) { pars.setPreviewFrameRate(24); } if (mCameraType == CAM_SOC) { /* * libsoccamera fails to turn flash on if 16:9 recording is enabled (no matter * whether it's photo or video recording), thus we do it ourselves in that case. * Luckily libsoccamera handles the automatic flash properly also in the 16:9 case. */ const char *flashMode = pars.get(CameraParameters::KEY_FLASH_MODE); if (flashMode != NULL) { if (isWide && mLastFlashMode != flashMode) { bool shouldBeOn = strcmp(flashMode, CameraParameters::FLASH_MODE_TORCH) == 0 || strcmp(flashMode, CameraParameters::FLASH_MODE_ON) == 0; setSocTorchMode(shouldBeOn); } mLastFlashMode = flashMode; } } float exposure = pars.getFloat(CameraParameters::KEY_EXPOSURE_COMPENSATION); /* exposure-compensation comes multiplied in the -9...9 range, while we need it in the -3...3 range -> adjust for that */ exposure /= 3; /* format the setting in a way the lib understands */ bool even = (exposure - round(exposure)) < 0.05; snprintf(buf, sizeof(buf), even ? "%.0f" : "%.2f", exposure); pars.set("mot-exposure-offset", buf); /* kill off the original setting */ pars.set(CameraParameters::KEY_EXPOSURE_COMPENSATION, "0"); return mMotoInterface->setParameters(pars); }
JordanCameraWrapper::~JordanCameraWrapper() { /* mLastFlashMode is only set in the SOC case */ if (mLastFlashMode == CameraParameters::FLASH_MODE_ON || mLastFlashMode == CameraParameters::FLASH_MODE_TORCH) { setSocTorchMode(false); } }
status_t LibCameraWrapper::setParameters(const CameraParameters& params) { CameraParameters pars(params.flatten()); const char *flashMode = pars.get(CameraParameters::KEY_FLASH_MODE); if (flashMode != NULL) { if (mLastFlashMode != flashMode) { bool shouldBeOn = strcmp(flashMode, CameraParameters::FLASH_MODE_TORCH) == 0 || strcmp(flashMode, CameraParameters::FLASH_MODE_ON) == 0; setSocTorchMode(shouldBeOn); } mLastFlashMode = flashMode; } return mLibInterface->setParameters(pars); }