Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 53eea85d authored by Emilian Peev's avatar Emilian Peev
Browse files

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
parent a1caa67b
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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)
+12 −7
Original line number Diff line number Diff line
@@ -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) ?
+2 −1
Original line number Diff line number Diff line
@@ -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