Camera: Use face priority scene as default

Clients using the legacy API translation layer will
default to face priority scene in case this mode is
supported by the camera device.

Bug: 110259811
Test: Manual using application,
Camera CTS

Change-Id: I370f222c73ea6e133bb6cb334ced2e33a26bb8c5
gugelfrei
Emilian Peev 6 years ago
parent a1caa67b77
commit 53eea85dcb

@ -250,6 +250,7 @@ status_t Camera2Client::dumpClient(int fd, const Vector<String16>& args) {
switch (p.sceneMode) {
case ANDROID_CONTROL_SCENE_MODE_DISABLED:
result.append("AUTO\n"); break;
CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_FACE_PRIORITY)
CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_ACTION)
CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_PORTRAIT)
CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_LANDSCAPE)

@ -41,7 +41,8 @@ Parameters::Parameters(int cameraId,
int cameraFacing) :
cameraId(cameraId),
cameraFacing(cameraFacing),
info(NULL) {
info(NULL),
mDefaultSceneMode(ANDROID_CONTROL_SCENE_MODE_DISABLED) {
}
Parameters::~Parameters() {
@ -557,6 +558,10 @@ status_t Parameters::initialize(const CameraMetadata *info, int deviceVersion) {
noSceneModes = true;
break;
case ANDROID_CONTROL_SCENE_MODE_FACE_PRIORITY:
// Face priority can be used as alternate default if supported.
// Per API contract it shouldn't override the user set flash,
// white balance and focus modes.
mDefaultSceneMode = availableSceneModes.data.u8[i];
// Not in old API
addComma = false;
break;
@ -1760,7 +1765,7 @@ status_t Parameters::set(const String8& paramString) {
// SCENE_MODE
validatedParams.sceneMode = sceneModeStringToEnum(
newParams.get(CameraParameters::KEY_SCENE_MODE) );
newParams.get(CameraParameters::KEY_SCENE_MODE), mDefaultSceneMode);
if (validatedParams.sceneMode != sceneMode &&
validatedParams.sceneMode !=
ANDROID_CONTROL_SCENE_MODE_DISABLED) {
@ -1778,7 +1783,7 @@ status_t Parameters::set(const String8& paramString) {
}
}
bool sceneModeSet =
validatedParams.sceneMode != ANDROID_CONTROL_SCENE_MODE_DISABLED;
validatedParams.sceneMode != mDefaultSceneMode;
// FLASH_MODE
if (sceneModeSet) {
@ -2157,7 +2162,7 @@ status_t Parameters::updateRequest(CameraMetadata *request) const {
uint8_t reqSceneMode =
sceneModeActive ? sceneMode :
enableFaceDetect ? (uint8_t)ANDROID_CONTROL_SCENE_MODE_FACE_PRIORITY :
(uint8_t)ANDROID_CONTROL_SCENE_MODE_DISABLED;
mDefaultSceneMode;
res = request->update(ANDROID_CONTROL_SCENE_MODE,
&reqSceneMode, 1);
if (res != OK) return res;
@ -2589,12 +2594,12 @@ int Parameters::abModeStringToEnum(const char *abMode) {
-1;
}
int Parameters::sceneModeStringToEnum(const char *sceneMode) {
int Parameters::sceneModeStringToEnum(const char *sceneMode, uint8_t defaultSceneMode) {
return
!sceneMode ?
ANDROID_CONTROL_SCENE_MODE_DISABLED :
defaultSceneMode :
!strcmp(sceneMode, CameraParameters::SCENE_MODE_AUTO) ?
ANDROID_CONTROL_SCENE_MODE_DISABLED :
defaultSceneMode :
!strcmp(sceneMode, CameraParameters::SCENE_MODE_ACTION) ?
ANDROID_CONTROL_SCENE_MODE_ACTION :
!strcmp(sceneMode, CameraParameters::SCENE_MODE_PORTRAIT) ?

@ -326,7 +326,7 @@ struct Parameters {
static const char* wbModeEnumToString(uint8_t wbMode);
static int effectModeStringToEnum(const char *effectMode);
static int abModeStringToEnum(const char *abMode);
static int sceneModeStringToEnum(const char *sceneMode);
static int sceneModeStringToEnum(const char *sceneMode, uint8_t defaultScene);
static flashMode_t flashModeStringToEnum(const char *flashMode);
static const char* flashModeEnumToString(flashMode_t flashMode);
static focusMode_t focusModeStringToEnum(const char *focusMode);
@ -434,6 +434,7 @@ private:
Size getMaxSize(const Vector<Size>& sizes);
int mDeviceVersion;
uint8_t mDefaultSceneMode;
};
// This class encapsulates the Parameters class so that it can only be accessed

Loading…
Cancel
Save