diff options
author | Eino-Ville Talvala <etalvala@google.com> | 2013-11-07 15:13:16 -0800 |
---|---|---|
committer | Eino-Ville Talvala <etalvala@google.com> | 2013-11-12 10:24:42 -0800 |
commit | 184dfe4ea5e2ba33951bed2b1366007aee0ce3da (patch) | |
tree | ada678fb9d95fed7b4b25aead2615eaa4f003495 /services/camera/libcameraservice/device3 | |
parent | caee8747b7df3b1119426594d4ba1c0e300ff6db (diff) | |
download | frameworks_av-184dfe4ea5e2ba33951bed2b1366007aee0ce3da.zip frameworks_av-184dfe4ea5e2ba33951bed2b1366007aee0ce3da.tar.gz frameworks_av-184dfe4ea5e2ba33951bed2b1366007aee0ce3da.tar.bz2 |
Camera API2: Add support for partial result quirk
- Camera3Device: Include requestId in partial 3A results
- FrameProcessorBase: Add support for partial result listeners
- CameraDeviceClient: Listen and forward partial results to client
Bug: 11115603
Change-Id: If1cc6bbc32932742ac142c058688761ebf6a8024
Diffstat (limited to 'services/camera/libcameraservice/device3')
-rw-r--r-- | services/camera/libcameraservice/device3/Camera3Device.cpp | 18 | ||||
-rw-r--r-- | services/camera/libcameraservice/device3/Camera3Device.h | 3 |
2 files changed, 15 insertions, 6 deletions
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp index cb72e0e..3dbc1b0 100644 --- a/services/camera/libcameraservice/device3/Camera3Device.cpp +++ b/services/camera/libcameraservice/device3/Camera3Device.cpp @@ -1405,7 +1405,8 @@ status_t Camera3Device::registerInFlight(int32_t frameNumber, * Check if all 3A fields are ready, and send off a partial 3A-only result * to the output frame queue */ -bool Camera3Device::processPartial3AQuirk(int32_t frameNumber, +bool Camera3Device::processPartial3AQuirk( + int32_t frameNumber, int32_t requestId, const CameraMetadata& partial) { // Check if all 3A states are present @@ -1452,10 +1453,10 @@ bool Camera3Device::processPartial3AQuirk(int32_t frameNumber, if (!gotAllStates) return false; - ALOGVV("%s: Camera %d: Frame %d: AF mode %d, AWB mode %d, " + ALOGVV("%s: Camera %d: Frame %d, Request ID %d: AF mode %d, AWB mode %d, " "AF state %d, AE state %d, AWB state %d, " "AF trigger %d, AE precapture trigger %d", - __FUNCTION__, mId, frameNumber, + __FUNCTION__, mId, frameNumber, requestId, afMode, awbMode, afState, aeState, awbState, afTriggerId, aeTriggerId); @@ -1463,9 +1464,10 @@ bool Camera3Device::processPartial3AQuirk(int32_t frameNumber, // Got all states, so construct a minimal result to send // In addition to the above fields, this means adding in // android.request.frameCount + // android.request.requestId // android.quirks.partialResult - const size_t kMinimal3AResultEntries = 7; + const size_t kMinimal3AResultEntries = 10; Mutex::Autolock l(mOutputLock); @@ -1479,6 +1481,11 @@ bool Camera3Device::processPartial3AQuirk(int32_t frameNumber, return false; } + if (!insert3AResult(min3AResult, ANDROID_REQUEST_ID, + &requestId, frameNumber)) { + return false; + } + static const uint8_t partialResult = ANDROID_QUIRKS_PARTIAL_RESULT_PARTIAL; if (!insert3AResult(min3AResult, ANDROID_QUIRKS_PARTIAL_RESULT, &partialResult, frameNumber)) { @@ -1615,7 +1622,8 @@ void Camera3Device::processCaptureResult(const camera3_capture_result *result) { if (!request.partialResultQuirk.haveSent3A) { request.partialResultQuirk.haveSent3A = processPartial3AQuirk(frameNumber, - request.partialResultQuirk.collectedResult); + request.requestId, + request.partialResultQuirk.collectedResult); } } } diff --git a/services/camera/libcameraservice/device3/Camera3Device.h b/services/camera/libcameraservice/device3/Camera3Device.h index 4a24a88..468f641 100644 --- a/services/camera/libcameraservice/device3/Camera3Device.h +++ b/services/camera/libcameraservice/device3/Camera3Device.h @@ -491,7 +491,8 @@ class Camera3Device : * and if so, queue up 3A-only result to the client. Returns true if 3A * is sent. */ - bool processPartial3AQuirk(int32_t frameNumber, const CameraMetadata& partial); + bool processPartial3AQuirk(int32_t frameNumber, int32_t requestId, + const CameraMetadata& partial); // Helpers for reading and writing 3A metadata into to/from partial results template<typename T> |