diff options
author | Igor Murashkin <iam@google.com> | 2012-10-08 10:23:06 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-10-08 10:23:07 -0700 |
commit | 193c13fa1615ad5130b6d75dc05e50468e1c585c (patch) | |
tree | 2ad4f1423aef8c1f145e2ff8066237186d3a5cd1 | |
parent | 2b5232dd49d006a08c35ba865a6801acdb15483c (diff) | |
parent | 572bf9a00204ac91de8c5347d793891c6a4bf1d7 (diff) | |
download | frameworks_av-193c13fa1615ad5130b6d75dc05e50468e1c585c.zip frameworks_av-193c13fa1615ad5130b6d75dc05e50468e1c585c.tar.gz frameworks_av-193c13fa1615ad5130b6d75dc05e50468e1c585c.tar.bz2 |
Merge "Camera2: Report getMaxNumFocusAreas 0 for fixed focus cameras" into jb-mr1-dev
-rw-r--r-- | services/camera/libcameraservice/camera2/Parameters.cpp | 21 | ||||
-rw-r--r-- | services/camera/libcameraservice/camera2/Parameters.h | 11 |
2 files changed, 25 insertions, 7 deletions
diff --git a/services/camera/libcameraservice/camera2/Parameters.cpp b/services/camera/libcameraservice/camera2/Parameters.cpp index 1b15a1c..809768c 100644 --- a/services/camera/libcameraservice/camera2/Parameters.cpp +++ b/services/camera/libcameraservice/camera2/Parameters.cpp @@ -635,8 +635,11 @@ status_t Parameters::initialize(const CameraMetadata *info) { staticInfo(ANDROID_CONTROL_MAX_REGIONS, 1, 1); if (!max3aRegions.count) return NO_INIT; - params.set(CameraParameters::KEY_MAX_NUM_FOCUS_AREAS, - max3aRegions.data.i32[0]); + int32_t maxNumFocusAreas = 0; + if (focusMode != Parameters::FOCUS_MODE_FIXED) { + maxNumFocusAreas = max3aRegions.data.i32[0]; + } + params.set(CameraParameters::KEY_MAX_NUM_FOCUS_AREAS, maxNumFocusAreas); params.set(CameraParameters::KEY_FOCUS_AREAS, "(0,0,0,0,0)"); focusingAreas.clear(); @@ -1466,7 +1469,7 @@ status_t Parameters::set(const String8& paramString) { size_t max3aRegions = (size_t)staticInfo(ANDROID_CONTROL_MAX_REGIONS, 1, 1).data.i32[0]; if (res == OK) res = validateAreas(validatedParams.focusingAreas, - max3aRegions); + max3aRegions, AREA_KIND_FOCUS); if (res != OK) { ALOGE("%s: Requested focus areas are malformed: %s", __FUNCTION__, newParams.get(CameraParameters::KEY_FOCUS_AREAS)); @@ -1499,7 +1502,8 @@ status_t Parameters::set(const String8& paramString) { res = parseAreas(newParams.get(CameraParameters::KEY_METERING_AREAS), &validatedParams.meteringAreas); if (res == OK) { - res = validateAreas(validatedParams.meteringAreas, max3aRegions); + res = validateAreas(validatedParams.meteringAreas, max3aRegions, + AREA_KIND_METERING); } if (res != OK) { ALOGE("%s: Requested metering areas are malformed: %s", @@ -2111,7 +2115,8 @@ status_t Parameters::parseAreas(const char *areasCStr, } status_t Parameters::validateAreas(const Vector<Parameters::Area> &areas, - size_t maxRegions) { + size_t maxRegions, + AreaKind areaKind) const { // Definition of valid area can be found in // include/camera/CameraParameters.h if (areas.size() == 0) return BAD_VALUE; @@ -2125,6 +2130,12 @@ status_t Parameters::validateAreas(const Vector<Parameters::Area> &areas, return OK; } } + + // fixed focus can only set (0,0,0,0,0) focus area + if (areaKind == AREA_KIND_FOCUS && focusMode == FOCUS_MODE_FIXED) { + return BAD_VALUE; + } + if (areas.size() > maxRegions) { ALOGE("%s: Too many areas requested: %d", __FUNCTION__, areas.size()); diff --git a/services/camera/libcameraservice/camera2/Parameters.h b/services/camera/libcameraservice/camera2/Parameters.h index daae7c4..fd02744 100644 --- a/services/camera/libcameraservice/camera2/Parameters.h +++ b/services/camera/libcameraservice/camera2/Parameters.h @@ -258,8 +258,15 @@ struct Parameters { static const char* focusModeEnumToString(focusMode_t focusMode); static status_t parseAreas(const char *areasCStr, Vector<Area> *areas); - static status_t validateAreas(const Vector<Area> &areas, - size_t maxRegions); + + enum AreaKind + { + AREA_KIND_FOCUS, + AREA_KIND_METERING + }; + status_t validateAreas(const Vector<Area> &areas, + size_t maxRegions, + AreaKind areaKind) const; static bool boolFromString(const char *boolStr); // Map from camera orientation + facing to gralloc transform enum |