klte-common: Fix HDR mode
This is a follow-up to Ifb15e64b4c351d7195e5ad3f5d5315419790d0f8. The change fixed a crash upon deactivation of torch mode by removing code that forecully set or unset Zero Shutter Lag. This change results in HDR not working anymore, but SEGFAULTing the camera instead. The commit addressed this by disabling HDR entirely. The present change reinstates the removed code, but executes it conditionally only if the camera is not in torch mode. This prevents the crash upon disabling torch mode and simultaneously leaves HDR in a working condition. Torch mode can only be reliably detected when it is activated by checking whether the requested settings have a "flash-mode" of "torch" set. Deactivation simply asks to deactivate the flash, which cannot be told apart from the camera app requesting the same before taking a photo. The CameraWrapper however stores the current settings, so by checking if they contain a "flash-mode" of "torch", it is still possible to detect the mode's deactivation. The only possible problem with this approach could arise if the camera went directly from torch mode to camera mode with HDR, but this apparently does not happen. Change-Id: I71611257868b3bf86041adf7aed931cf92880ddc
This commit is contained in:
parent
5b372192ba
commit
7dff3c94cb
1 changed files with 23 additions and 2 deletions
|
@ -122,8 +122,6 @@ static char *camera_fixup_getparams(int __attribute__((unused)) id,
|
|||
ALOGV("%s: original parameters:", __FUNCTION__);
|
||||
params.dump();
|
||||
|
||||
params.set(CameraParameters::KEY_SUPPORTED_SCENE_MODES, "auto");
|
||||
|
||||
const char *recordHint = params.get(CameraParameters::KEY_RECORDING_HINT);
|
||||
bool videoMode = recordHint ? !strcmp(recordHint, "true") : false;
|
||||
|
||||
|
@ -173,8 +171,31 @@ static char *camera_fixup_setparams(int id, const char *settings)
|
|||
ALOGV("%s: original parameters:", __FUNCTION__);
|
||||
params.dump();
|
||||
|
||||
bool wasTorch = false;
|
||||
if (fixed_set_params[id]) {
|
||||
/* When torch mode is switched off, it is important not to set ZSL, to
|
||||
avoid a segmentation violation in libcameraservice.so. Hence, check
|
||||
if the last call to setparams enabled torch mode */
|
||||
CameraParameters old_params;
|
||||
old_params.unflatten(String8(fixed_set_params[id]));
|
||||
|
||||
const char *old_flashMode = old_params.get(CameraParameters::KEY_FLASH_MODE);
|
||||
wasTorch = old_flashMode && !strcmp(old_flashMode, CameraParameters::FLASH_MODE_TORCH);
|
||||
}
|
||||
|
||||
const char *recordingHint = params.get(CameraParameters::KEY_RECORDING_HINT);
|
||||
bool isVideo = recordingHint && !strcmp(recordingHint, "true");
|
||||
const char *flashMode = params.get(CameraParameters::KEY_FLASH_MODE);
|
||||
bool isTorch = flashMode && !strcmp(flashMode, CameraParameters::FLASH_MODE_TORCH);
|
||||
|
||||
if (!isTorch && !wasTorch) {
|
||||
if (isVideo) {
|
||||
params.set(CameraParameters::KEY_DIS, CameraParameters::DIS_DISABLE);
|
||||
params.set(CameraParameters::KEY_ZSL, CameraParameters::ZSL_OFF);
|
||||
} else {
|
||||
params.set(CameraParameters::KEY_ZSL, CameraParameters::ZSL_ON);
|
||||
}
|
||||
}
|
||||
|
||||
ALOGV("%s: Fixed parameters:", __FUNCTION__);
|
||||
params.dump();
|
||||
|
|
Loading…
Reference in a new issue