diff options
Diffstat (limited to 'services')
-rw-r--r-- | services/camera/libcameraservice/device3/Camera3Device.cpp | 18 | ||||
-rw-r--r-- | services/camera/libcameraservice/device3/Camera3Device.h | 4 |
2 files changed, 22 insertions, 0 deletions
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp index 445c9c2..e2a53a2 100644 --- a/services/camera/libcameraservice/device3/Camera3Device.cpp +++ b/services/camera/libcameraservice/device3/Camera3Device.cpp @@ -2865,6 +2865,12 @@ bool Camera3Device::RequestThread::threadLoop() { nextRequest->mSettings.unlock(request.settings); } + // Unset as current request + { + Mutex::Autolock l(mRequestLock); + mNextRequest.clear(); + } + // Remove any previously queued triggers (after unlock) res = removeTriggers(mPrevRequest); if (res != OK) { @@ -2890,6 +2896,13 @@ bool Camera3Device::RequestThread::isStreamPending( sp<Camera3StreamInterface>& stream) { Mutex::Autolock l(mRequestLock); + if (mNextRequest != nullptr) { + for (const auto& s : mNextRequest->mOutputStreams) { + if (stream == s) return true; + } + if (stream == mNextRequest->mInputStream) return true; + } + for (const auto& request : mRequestQueue) { for (const auto& s : request->mOutputStreams) { if (stream == s) return true; @@ -2924,6 +2937,9 @@ void Camera3Device::RequestThread::cleanUpFailedRequest( nextRequest->mOutputStreams.editItemAt(i)->returnBuffer( outputBuffers[i], 0); } + + Mutex::Autolock l(mRequestLock); + mNextRequest.clear(); } sp<Camera3Device::CaptureRequest> @@ -3007,6 +3023,8 @@ sp<Camera3Device::CaptureRequest> nextRequest->mResultExtras.afTriggerId = mCurrentAfTriggerId; nextRequest->mResultExtras.precaptureTriggerId = mCurrentPreCaptureTriggerId; } + mNextRequest = nextRequest; + return nextRequest; } diff --git a/services/camera/libcameraservice/device3/Camera3Device.h b/services/camera/libcameraservice/device3/Camera3Device.h index 4fbcb2e..fcb5180 100644 --- a/services/camera/libcameraservice/device3/Camera3Device.h +++ b/services/camera/libcameraservice/device3/Camera3Device.h @@ -501,6 +501,10 @@ class Camera3Device : Condition mRequestSignal; RequestList mRequestQueue; RequestList mRepeatingRequests; + // The next request being prepped for submission to the HAL, no longer + // on the request queue. Read-only even with mRequestLock held, outside + // of threadLoop + sp<const CaptureRequest> mNextRequest; bool mReconfigured; |