Loading services/camera/libcameraservice/api1/Camera2Client.cpp +11 −5 Original line number Diff line number Diff line Loading @@ -70,7 +70,9 @@ Camera2Client::Camera2Client(const sp<CameraService>& cameraService, cameraDeviceId, api1CameraId, cameraFacing, sensorOrientation, clientPid, clientUid, servicePid, overrideForPerfClass, overrideToPortrait, /*legacyClient*/ true), mParameters(api1CameraId, cameraFacing) mParameters(api1CameraId, cameraFacing), mLatestRequestIds(kMaxRequestIds), mLatestFailedRequestIds(kMaxRequestIds) { ATRACE_CALL(); Loading Loading @@ -1843,7 +1845,7 @@ void Camera2Client::notifyError(int32_t errorCode, (hardware::camera2::ICameraDeviceCallbacks::ERROR_CAMERA_RESULT == errorCode)) { Mutex::Autolock al(mLatestRequestMutex); mLatestFailedRequestId = resultExtras.requestId; mLatestFailedRequestIds.add(resultExtras.requestId); mLatestRequestSignal.signal(); } mCaptureSequencer->notifyError(errorCode, resultExtras); Loading Loading @@ -2418,7 +2420,10 @@ status_t Camera2Client::waitUntilCurrentRequestIdLocked() { status_t Camera2Client::waitUntilRequestIdApplied(int32_t requestId, nsecs_t timeout) { Mutex::Autolock l(mLatestRequestMutex); while ((mLatestRequestId != requestId) && (mLatestFailedRequestId != requestId)) { while ((std::find(mLatestRequestIds.begin(), mLatestRequestIds.end(), requestId) == mLatestRequestIds.end()) && (std::find(mLatestFailedRequestIds.begin(), mLatestFailedRequestIds.end(), requestId) == mLatestFailedRequestIds.end())) { nsecs_t startTime = systemTime(); auto res = mLatestRequestSignal.waitRelative(mLatestRequestMutex, timeout); Loading @@ -2427,13 +2432,14 @@ status_t Camera2Client::waitUntilRequestIdApplied(int32_t requestId, nsecs_t tim timeout -= (systemTime() - startTime); } return (mLatestRequestId == requestId) ? OK : DEAD_OBJECT; return (std::find(mLatestRequestIds.begin(), mLatestRequestIds.end(), requestId) != mLatestRequestIds.end()) ? OK : DEAD_OBJECT; } void Camera2Client::notifyRequestId(int32_t requestId) { Mutex::Autolock al(mLatestRequestMutex); mLatestRequestId = requestId; mLatestRequestIds.add(requestId); mLatestRequestSignal.signal(); } Loading services/camera/libcameraservice/api1/Camera2Client.h +3 −7 Original line number Diff line number Diff line Loading @@ -22,11 +22,7 @@ #include "common/Camera2ClientBase.h" #include "api1/client2/Parameters.h" #include "api1/client2/FrameProcessor.h" //#include "api1/client2/StreamingProcessor.h" //#include "api1/client2/JpegProcessor.h" //#include "api1/client2/ZslProcessor.h" //#include "api1/client2/CaptureSequencer.h" //#include "api1/client2/CallbackProcessor.h" #include <media/RingBuffer.h> namespace android { Loading Loading @@ -263,8 +259,8 @@ private: mutable Mutex mLatestRequestMutex; Condition mLatestRequestSignal; int32_t mLatestRequestId = -1; int32_t mLatestFailedRequestId = -1; static constexpr size_t kMaxRequestIds = BufferQueueDefs::NUM_BUFFER_SLOTS; RingBuffer<int32_t> mLatestRequestIds, mLatestFailedRequestIds; status_t waitUntilRequestIdApplied(int32_t requestId, nsecs_t timeout); status_t waitUntilCurrentRequestIdLocked(); }; Loading services/camera/libcameraservice/device3/Camera3Device.cpp +8 −1 Original line number Diff line number Diff line Loading @@ -3030,6 +3030,7 @@ Camera3Device::RequestThread::RequestThread(wp<Camera3Device> parent, mNotifyPipelineDrain(false), mFrameNumber(0), mLatestRequestId(NAME_NOT_FOUND), mLatestFailedRequestId(NAME_NOT_FOUND), mCurrentAfTriggerId(0), mCurrentPreCaptureTriggerId(0), mRotateAndCropOverride(ANDROID_SCALER_ROTATE_AND_CROP_NONE), Loading Loading @@ -3281,7 +3282,7 @@ status_t Camera3Device::RequestThread::waitUntilRequestProcessed( ATRACE_CALL(); Mutex::Autolock l(mLatestRequestMutex); status_t res; while (mLatestRequestId != requestId) { while (mLatestRequestId != requestId && mLatestFailedRequestId != requestId) { nsecs_t startTime = systemTime(); res = mLatestRequestSignal.waitRelative(mLatestRequestMutex, timeout); Loading Loading @@ -4359,6 +4360,12 @@ void Camera3Device::RequestThread::cleanUpFailedRequests(bool sendRequestError) hardware::camera2::ICameraDeviceCallbacks::ERROR_CAMERA_REQUEST, captureRequest->mResultExtras); } { Mutex::Autolock al(mLatestRequestMutex); mLatestFailedRequestId = captureRequest->mResultExtras.requestId; mLatestRequestSignal.signal(); } } // Remove yet-to-be submitted inflight request from inflightMap Loading services/camera/libcameraservice/device3/Camera3Device.h +1 −0 Original line number Diff line number Diff line Loading @@ -1142,6 +1142,7 @@ class Camera3Device : Condition mLatestRequestSignal; // android.request.id for latest process_capture_request int32_t mLatestRequestId; int32_t mLatestFailedRequestId; CameraMetadata mLatestRequest; std::unordered_map<std::string, CameraMetadata> mLatestPhysicalRequest; Loading Loading
services/camera/libcameraservice/api1/Camera2Client.cpp +11 −5 Original line number Diff line number Diff line Loading @@ -70,7 +70,9 @@ Camera2Client::Camera2Client(const sp<CameraService>& cameraService, cameraDeviceId, api1CameraId, cameraFacing, sensorOrientation, clientPid, clientUid, servicePid, overrideForPerfClass, overrideToPortrait, /*legacyClient*/ true), mParameters(api1CameraId, cameraFacing) mParameters(api1CameraId, cameraFacing), mLatestRequestIds(kMaxRequestIds), mLatestFailedRequestIds(kMaxRequestIds) { ATRACE_CALL(); Loading Loading @@ -1843,7 +1845,7 @@ void Camera2Client::notifyError(int32_t errorCode, (hardware::camera2::ICameraDeviceCallbacks::ERROR_CAMERA_RESULT == errorCode)) { Mutex::Autolock al(mLatestRequestMutex); mLatestFailedRequestId = resultExtras.requestId; mLatestFailedRequestIds.add(resultExtras.requestId); mLatestRequestSignal.signal(); } mCaptureSequencer->notifyError(errorCode, resultExtras); Loading Loading @@ -2418,7 +2420,10 @@ status_t Camera2Client::waitUntilCurrentRequestIdLocked() { status_t Camera2Client::waitUntilRequestIdApplied(int32_t requestId, nsecs_t timeout) { Mutex::Autolock l(mLatestRequestMutex); while ((mLatestRequestId != requestId) && (mLatestFailedRequestId != requestId)) { while ((std::find(mLatestRequestIds.begin(), mLatestRequestIds.end(), requestId) == mLatestRequestIds.end()) && (std::find(mLatestFailedRequestIds.begin(), mLatestFailedRequestIds.end(), requestId) == mLatestFailedRequestIds.end())) { nsecs_t startTime = systemTime(); auto res = mLatestRequestSignal.waitRelative(mLatestRequestMutex, timeout); Loading @@ -2427,13 +2432,14 @@ status_t Camera2Client::waitUntilRequestIdApplied(int32_t requestId, nsecs_t tim timeout -= (systemTime() - startTime); } return (mLatestRequestId == requestId) ? OK : DEAD_OBJECT; return (std::find(mLatestRequestIds.begin(), mLatestRequestIds.end(), requestId) != mLatestRequestIds.end()) ? OK : DEAD_OBJECT; } void Camera2Client::notifyRequestId(int32_t requestId) { Mutex::Autolock al(mLatestRequestMutex); mLatestRequestId = requestId; mLatestRequestIds.add(requestId); mLatestRequestSignal.signal(); } Loading
services/camera/libcameraservice/api1/Camera2Client.h +3 −7 Original line number Diff line number Diff line Loading @@ -22,11 +22,7 @@ #include "common/Camera2ClientBase.h" #include "api1/client2/Parameters.h" #include "api1/client2/FrameProcessor.h" //#include "api1/client2/StreamingProcessor.h" //#include "api1/client2/JpegProcessor.h" //#include "api1/client2/ZslProcessor.h" //#include "api1/client2/CaptureSequencer.h" //#include "api1/client2/CallbackProcessor.h" #include <media/RingBuffer.h> namespace android { Loading Loading @@ -263,8 +259,8 @@ private: mutable Mutex mLatestRequestMutex; Condition mLatestRequestSignal; int32_t mLatestRequestId = -1; int32_t mLatestFailedRequestId = -1; static constexpr size_t kMaxRequestIds = BufferQueueDefs::NUM_BUFFER_SLOTS; RingBuffer<int32_t> mLatestRequestIds, mLatestFailedRequestIds; status_t waitUntilRequestIdApplied(int32_t requestId, nsecs_t timeout); status_t waitUntilCurrentRequestIdLocked(); }; Loading
services/camera/libcameraservice/device3/Camera3Device.cpp +8 −1 Original line number Diff line number Diff line Loading @@ -3030,6 +3030,7 @@ Camera3Device::RequestThread::RequestThread(wp<Camera3Device> parent, mNotifyPipelineDrain(false), mFrameNumber(0), mLatestRequestId(NAME_NOT_FOUND), mLatestFailedRequestId(NAME_NOT_FOUND), mCurrentAfTriggerId(0), mCurrentPreCaptureTriggerId(0), mRotateAndCropOverride(ANDROID_SCALER_ROTATE_AND_CROP_NONE), Loading Loading @@ -3281,7 +3282,7 @@ status_t Camera3Device::RequestThread::waitUntilRequestProcessed( ATRACE_CALL(); Mutex::Autolock l(mLatestRequestMutex); status_t res; while (mLatestRequestId != requestId) { while (mLatestRequestId != requestId && mLatestFailedRequestId != requestId) { nsecs_t startTime = systemTime(); res = mLatestRequestSignal.waitRelative(mLatestRequestMutex, timeout); Loading Loading @@ -4359,6 +4360,12 @@ void Camera3Device::RequestThread::cleanUpFailedRequests(bool sendRequestError) hardware::camera2::ICameraDeviceCallbacks::ERROR_CAMERA_REQUEST, captureRequest->mResultExtras); } { Mutex::Autolock al(mLatestRequestMutex); mLatestFailedRequestId = captureRequest->mResultExtras.requestId; mLatestRequestSignal.signal(); } } // Remove yet-to-be submitted inflight request from inflightMap Loading
services/camera/libcameraservice/device3/Camera3Device.h +1 −0 Original line number Diff line number Diff line Loading @@ -1142,6 +1142,7 @@ class Camera3Device : Condition mLatestRequestSignal; // android.request.id for latest process_capture_request int32_t mLatestRequestId; int32_t mLatestFailedRequestId; CameraMetadata mLatestRequest; std::unordered_map<std::string, CameraMetadata> mLatestPhysicalRequest; Loading