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