summaryrefslogtreecommitdiffstats
path: root/services/camera
diff options
context:
space:
mode:
authorChien-Yu Chen <cychen@google.com>2015-06-30 11:20:58 -0700
committerChien-Yu Chen <cychen@google.com>2015-06-30 11:20:58 -0700
commitab5135b254c6f9aaac8edb816596f8823dbdb3d5 (patch)
tree493cfbff9b52250cea24491a330afc131e8d5dc6 /services/camera
parent29b7cec9a248828d2371bc8758d819308d0e84a4 (diff)
downloadframeworks_av-ab5135b254c6f9aaac8edb816596f8823dbdb3d5.zip
frameworks_av-ab5135b254c6f9aaac8edb816596f8823dbdb3d5.tar.gz
frameworks_av-ab5135b254c6f9aaac8edb816596f8823dbdb3d5.tar.bz2
Camera3-Device: Fix AE lock available
Pass whether AE lock is available when creating the request thread because when the request thread was created, its parent's info was not set yet. Bug: 20494782 Change-Id: I11ed3f99c473955c437e81f3e1d704c15a9ca1a4
Diffstat (limited to 'services/camera')
-rw-r--r--services/camera/libcameraservice/device3/Camera3Device.cpp29
-rw-r--r--services/camera/libcameraservice/device3/Camera3Device.h3
2 files changed, 16 insertions, 16 deletions
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp
index 4b55dad..9e73b5c 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.cpp
+++ b/services/camera/libcameraservice/device3/Camera3Device.cpp
@@ -164,9 +164,17 @@ status_t Camera3Device::initialize(CameraModule *module)
return res;
}
- /** Start up request queue thread */
+ bool aeLockAvailable = false;
+ camera_metadata_ro_entry aeLockAvailableEntry;
+ res = find_camera_metadata_ro_entry(info.static_camera_characteristics,
+ ANDROID_CONTROL_AE_LOCK_AVAILABLE, &aeLockAvailableEntry);
+ if (res == OK && aeLockAvailableEntry.count > 0) {
+ aeLockAvailable = (aeLockAvailableEntry.data.u8[0] ==
+ ANDROID_CONTROL_AE_LOCK_AVAILABLE_TRUE);
+ }
- mRequestThread = new RequestThread(this, mStatusTracker, device);
+ /** Start up request queue thread */
+ mRequestThread = new RequestThread(this, mStatusTracker, device, aeLockAvailable);
res = mRequestThread->run(String8::format("C3Dev-%d-ReqQueue", mId).string());
if (res != OK) {
SET_ERR_L("Unable to start request queue thread: %s (%d)",
@@ -2472,7 +2480,8 @@ CameraMetadata Camera3Device::getLatestRequestLocked() {
Camera3Device::RequestThread::RequestThread(wp<Camera3Device> parent,
sp<StatusTracker> statusTracker,
- camera3_device_t *hal3Device) :
+ camera3_device_t *hal3Device,
+ bool aeLockAvailable) :
Thread(/*canCallJava*/false),
mParent(parent),
mStatusTracker(statusTracker),
@@ -2485,19 +2494,9 @@ Camera3Device::RequestThread::RequestThread(wp<Camera3Device> parent,
mLatestRequestId(NAME_NOT_FOUND),
mCurrentAfTriggerId(0),
mCurrentPreCaptureTriggerId(0),
- mRepeatingLastFrameNumber(NO_IN_FLIGHT_REPEATING_FRAMES) {
+ mRepeatingLastFrameNumber(NO_IN_FLIGHT_REPEATING_FRAMES),
+ mAeLockAvailable(aeLockAvailable) {
mStatusId = statusTracker->addComponent();
-
- mAeLockAvailable = false;
- sp<Camera3Device> p = parent.promote();
- if (p != NULL) {
- camera_metadata_ro_entry aeLockAvailable =
- p->info().find(ANDROID_CONTROL_AE_LOCK_AVAILABLE);
- if (aeLockAvailable.count > 0) {
- mAeLockAvailable = (aeLockAvailable.data.u8[0] ==
- ANDROID_CONTROL_AE_LOCK_AVAILABLE_TRUE);
- }
- }
}
void Camera3Device::RequestThread::setNotificationListener(
diff --git a/services/camera/libcameraservice/device3/Camera3Device.h b/services/camera/libcameraservice/device3/Camera3Device.h
index bb4bcc4..31b6132 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.h
+++ b/services/camera/libcameraservice/device3/Camera3Device.h
@@ -389,7 +389,8 @@ class Camera3Device :
RequestThread(wp<Camera3Device> parent,
sp<camera3::StatusTracker> statusTracker,
- camera3_device_t *hal3Device);
+ camera3_device_t *hal3Device,
+ bool aeLockAvailable);
void setNotificationListener(NotificationListener *listener);