Loading services/camera/libcameraservice/device3/Camera3Device.cpp +20 −12 Original line number Diff line number Diff line Loading @@ -3649,19 +3649,18 @@ bool Camera3Device::RequestThread::threadLoop() { cleanUpFailedRequests(/*sendRequestError*/ true); // Check if any stream is abandoned. checkAndStopRepeatingRequest(); // Inform waitUntilRequestProcessed thread of a failed request ID wakeupLatestRequest(/*failedRequestId*/true, latestRequestId); return true; } else if (res != OK) { cleanUpFailedRequests(/*sendRequestError*/ false); // Inform waitUntilRequestProcessed thread of a failed request ID wakeupLatestRequest(/*failedRequestId*/true, latestRequestId); return false; } // Inform waitUntilRequestProcessed thread of a new request ID { Mutex::Autolock al(mLatestRequestMutex); mLatestRequestId = latestRequestId; mLatestRequestSignal.signal(); } wakeupLatestRequest(/*failedRequestId*/false, latestRequestId); // Submit a batch of requests to HAL. // Use flush lock only when submitting multilple requests in a batch. Loading Loading @@ -4393,12 +4392,7 @@ void Camera3Device::RequestThread::cleanUpFailedRequests(bool sendRequestError) hardware::camera2::ICameraDeviceCallbacks::ERROR_CAMERA_REQUEST, captureRequest->mResultExtras); } { Mutex::Autolock al(mLatestRequestMutex); mLatestFailedRequestId = captureRequest->mResultExtras.requestId; mLatestRequestSignal.signal(); } wakeupLatestRequest(/*failedRequestId*/true, captureRequest->mResultExtras.requestId); } // Remove yet-to-be submitted inflight request from inflightMap Loading Loading @@ -5060,6 +5054,20 @@ status_t Camera3Device::RequestThread::setHalInterface( return OK; } void Camera3Device::RequestThread::wakeupLatestRequest( bool latestRequestFailed, int32_t latestRequestId) { Mutex::Autolock al(mLatestRequestMutex); if (latestRequestFailed) { mLatestFailedRequestId = latestRequestId; } else { mLatestRequestId = latestRequestId; } mLatestRequestSignal.signal(); } /** * PreparerThread inner class methods */ Loading services/camera/libcameraservice/device3/Camera3Device.h +5 −0 Original line number Diff line number Diff line Loading @@ -1026,6 +1026,11 @@ class Camera3Device : const sp<CaptureRequest> &request, const CameraMetadata& injectedSessionParams); /** * signal mLatestRequestmutex **/ void wakeupLatestRequest(bool latestRequestFailed, int32_t latestRequestId); protected: virtual bool threadLoop(); Loading Loading
services/camera/libcameraservice/device3/Camera3Device.cpp +20 −12 Original line number Diff line number Diff line Loading @@ -3649,19 +3649,18 @@ bool Camera3Device::RequestThread::threadLoop() { cleanUpFailedRequests(/*sendRequestError*/ true); // Check if any stream is abandoned. checkAndStopRepeatingRequest(); // Inform waitUntilRequestProcessed thread of a failed request ID wakeupLatestRequest(/*failedRequestId*/true, latestRequestId); return true; } else if (res != OK) { cleanUpFailedRequests(/*sendRequestError*/ false); // Inform waitUntilRequestProcessed thread of a failed request ID wakeupLatestRequest(/*failedRequestId*/true, latestRequestId); return false; } // Inform waitUntilRequestProcessed thread of a new request ID { Mutex::Autolock al(mLatestRequestMutex); mLatestRequestId = latestRequestId; mLatestRequestSignal.signal(); } wakeupLatestRequest(/*failedRequestId*/false, latestRequestId); // Submit a batch of requests to HAL. // Use flush lock only when submitting multilple requests in a batch. Loading Loading @@ -4393,12 +4392,7 @@ void Camera3Device::RequestThread::cleanUpFailedRequests(bool sendRequestError) hardware::camera2::ICameraDeviceCallbacks::ERROR_CAMERA_REQUEST, captureRequest->mResultExtras); } { Mutex::Autolock al(mLatestRequestMutex); mLatestFailedRequestId = captureRequest->mResultExtras.requestId; mLatestRequestSignal.signal(); } wakeupLatestRequest(/*failedRequestId*/true, captureRequest->mResultExtras.requestId); } // Remove yet-to-be submitted inflight request from inflightMap Loading Loading @@ -5060,6 +5054,20 @@ status_t Camera3Device::RequestThread::setHalInterface( return OK; } void Camera3Device::RequestThread::wakeupLatestRequest( bool latestRequestFailed, int32_t latestRequestId) { Mutex::Autolock al(mLatestRequestMutex); if (latestRequestFailed) { mLatestFailedRequestId = latestRequestId; } else { mLatestRequestId = latestRequestId; } mLatestRequestSignal.signal(); } /** * PreparerThread inner class methods */ Loading
services/camera/libcameraservice/device3/Camera3Device.h +5 −0 Original line number Diff line number Diff line Loading @@ -1026,6 +1026,11 @@ class Camera3Device : const sp<CaptureRequest> &request, const CameraMetadata& injectedSessionParams); /** * signal mLatestRequestmutex **/ void wakeupLatestRequest(bool latestRequestFailed, int32_t latestRequestId); protected: virtual bool threadLoop(); Loading