diff options
author | Eino-Ville Talvala <etalvala@google.com> | 2013-08-14 11:37:00 -0700 |
---|---|---|
committer | Eino-Ville Talvala <etalvala@google.com> | 2013-08-23 14:08:27 -0700 |
commit | abaa51d3ca31f0eda99e1d271e6dc64c877dbf58 (patch) | |
tree | 52f4cc1078708f7c0099fded06dcb01daf6ca6bb /services/camera/libcameraservice/device3 | |
parent | 62c1a46eec047eb5fbc4b90432ec1ce65b76fb75 (diff) | |
download | frameworks_av-abaa51d3ca31f0eda99e1d271e6dc64c877dbf58.zip frameworks_av-abaa51d3ca31f0eda99e1d271e6dc64c877dbf58.tar.gz frameworks_av-abaa51d3ca31f0eda99e1d271e6dc64c877dbf58.tar.bz2 |
Camera2: Add flush support
- On HAL2 devices, fall back to wait until idle
- On HAL3 devices, call HAL flush method
Bug: 9758581
Change-Id: Ie1c570a15f6590a1ee6c271e3b989c48079b468a
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 | 7 |
2 files changed, 25 insertions, 0 deletions
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp index 0a4a24c..7f2ec7a 100644 --- a/services/camera/libcameraservice/device3/Camera3Device.cpp +++ b/services/camera/libcameraservice/device3/Camera3Device.cpp @@ -952,6 +952,16 @@ status_t Camera3Device::pushReprocessBuffer(int reprocessStreamId, return INVALID_OPERATION; } +status_t Camera3Device::flush() { + ATRACE_CALL(); + ALOGV("%s: Camera %d: Flushing all requests", __FUNCTION__, mId); + + Mutex::Autolock l(mLock); + + mRequestThread->clear(); + return mHal3Device->ops->flush(mHal3Device); +} + /** * Camera3Device private methods */ @@ -1488,6 +1498,14 @@ status_t Camera3Device::RequestThread::clearRepeatingRequests() { return OK; } +status_t Camera3Device::RequestThread::clear() { + Mutex::Autolock l(mRequestLock); + mRepeatingRequests.clear(); + mRequestQueue.clear(); + mTriggerMap.clear(); + return OK; +} + void Camera3Device::RequestThread::setPaused(bool paused) { Mutex::Autolock l(mPauseLock); mDoPause = paused; diff --git a/services/camera/libcameraservice/device3/Camera3Device.h b/services/camera/libcameraservice/device3/Camera3Device.h index 76c08ae..99e1cc8 100644 --- a/services/camera/libcameraservice/device3/Camera3Device.h +++ b/services/camera/libcameraservice/device3/Camera3Device.h @@ -124,6 +124,8 @@ class Camera3Device : virtual status_t pushReprocessBuffer(int reprocessStreamId, buffer_handle_t *buffer, wp<BufferReleasedListener> listener); + virtual status_t flush(); + private: static const size_t kInFlightWarnLimit = 20; static const nsecs_t kShutdownTimeout = 5000000000; // 5 sec @@ -249,6 +251,11 @@ class Camera3Device : status_t queueRequest(sp<CaptureRequest> request); /** + * Remove all queued and repeating requests, and pending triggers + */ + status_t clear(); + + /** * Queue a trigger to be dispatched with the next outgoing * process_capture_request. The settings for that request only * will be temporarily rewritten to add the trigger tag/value. |