Loading services/camera/libcameraservice/api1/Camera2Client.cpp +10 −2 Original line number Original line Diff line number Diff line Loading @@ -1777,6 +1777,14 @@ void Camera2Client::notifyError(int32_t errorCode, case hardware::camera2::ICameraDeviceCallbacks::ERROR_CAMERA_BUFFER: case hardware::camera2::ICameraDeviceCallbacks::ERROR_CAMERA_BUFFER: ALOGW("%s: Received recoverable error %d from HAL - ignoring, requestId %" PRId32, ALOGW("%s: Received recoverable error %d from HAL - ignoring, requestId %" PRId32, __FUNCTION__, errorCode, resultExtras.requestId); __FUNCTION__, errorCode, resultExtras.requestId); if ((hardware::camera2::ICameraDeviceCallbacks::ERROR_CAMERA_REQUEST == errorCode) || (hardware::camera2::ICameraDeviceCallbacks::ERROR_CAMERA_RESULT == errorCode)) { Mutex::Autolock al(mLatestRequestMutex); mLatestFailedRequestId = resultExtras.requestId; mLatestRequestSignal.signal(); } mCaptureSequencer->notifyError(errorCode, resultExtras); mCaptureSequencer->notifyError(errorCode, resultExtras); return; return; default: default: Loading Loading @@ -2303,7 +2311,7 @@ status_t Camera2Client::waitUntilCurrentRequestIdLocked() { status_t Camera2Client::waitUntilRequestIdApplied(int32_t requestId, nsecs_t timeout) { status_t Camera2Client::waitUntilRequestIdApplied(int32_t requestId, nsecs_t timeout) { Mutex::Autolock l(mLatestRequestMutex); Mutex::Autolock l(mLatestRequestMutex); while (mLatestRequestId != requestId) { while ((mLatestRequestId != requestId) && (mLatestFailedRequestId != requestId)) { nsecs_t startTime = systemTime(); nsecs_t startTime = systemTime(); auto res = mLatestRequestSignal.waitRelative(mLatestRequestMutex, timeout); auto res = mLatestRequestSignal.waitRelative(mLatestRequestMutex, timeout); Loading @@ -2312,7 +2320,7 @@ status_t Camera2Client::waitUntilRequestIdApplied(int32_t requestId, nsecs_t tim timeout -= (systemTime() - startTime); timeout -= (systemTime() - startTime); } } return OK; return (mLatestRequestId == requestId) ? OK : DEAD_OBJECT; } } void Camera2Client::notifyRequestId(int32_t requestId) { void Camera2Client::notifyRequestId(int32_t requestId) { Loading services/camera/libcameraservice/api1/Camera2Client.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -237,6 +237,7 @@ private: mutable Mutex mLatestRequestMutex; mutable Mutex mLatestRequestMutex; Condition mLatestRequestSignal; Condition mLatestRequestSignal; int32_t mLatestRequestId = -1; int32_t mLatestRequestId = -1; int32_t mLatestFailedRequestId = -1; status_t waitUntilRequestIdApplied(int32_t requestId, nsecs_t timeout); status_t waitUntilRequestIdApplied(int32_t requestId, nsecs_t timeout); status_t waitUntilCurrentRequestIdLocked(); status_t waitUntilCurrentRequestIdLocked(); }; }; Loading Loading
services/camera/libcameraservice/api1/Camera2Client.cpp +10 −2 Original line number Original line Diff line number Diff line Loading @@ -1777,6 +1777,14 @@ void Camera2Client::notifyError(int32_t errorCode, case hardware::camera2::ICameraDeviceCallbacks::ERROR_CAMERA_BUFFER: case hardware::camera2::ICameraDeviceCallbacks::ERROR_CAMERA_BUFFER: ALOGW("%s: Received recoverable error %d from HAL - ignoring, requestId %" PRId32, ALOGW("%s: Received recoverable error %d from HAL - ignoring, requestId %" PRId32, __FUNCTION__, errorCode, resultExtras.requestId); __FUNCTION__, errorCode, resultExtras.requestId); if ((hardware::camera2::ICameraDeviceCallbacks::ERROR_CAMERA_REQUEST == errorCode) || (hardware::camera2::ICameraDeviceCallbacks::ERROR_CAMERA_RESULT == errorCode)) { Mutex::Autolock al(mLatestRequestMutex); mLatestFailedRequestId = resultExtras.requestId; mLatestRequestSignal.signal(); } mCaptureSequencer->notifyError(errorCode, resultExtras); mCaptureSequencer->notifyError(errorCode, resultExtras); return; return; default: default: Loading Loading @@ -2303,7 +2311,7 @@ status_t Camera2Client::waitUntilCurrentRequestIdLocked() { status_t Camera2Client::waitUntilRequestIdApplied(int32_t requestId, nsecs_t timeout) { status_t Camera2Client::waitUntilRequestIdApplied(int32_t requestId, nsecs_t timeout) { Mutex::Autolock l(mLatestRequestMutex); Mutex::Autolock l(mLatestRequestMutex); while (mLatestRequestId != requestId) { while ((mLatestRequestId != requestId) && (mLatestFailedRequestId != requestId)) { nsecs_t startTime = systemTime(); nsecs_t startTime = systemTime(); auto res = mLatestRequestSignal.waitRelative(mLatestRequestMutex, timeout); auto res = mLatestRequestSignal.waitRelative(mLatestRequestMutex, timeout); Loading @@ -2312,7 +2320,7 @@ status_t Camera2Client::waitUntilRequestIdApplied(int32_t requestId, nsecs_t tim timeout -= (systemTime() - startTime); timeout -= (systemTime() - startTime); } } return OK; return (mLatestRequestId == requestId) ? OK : DEAD_OBJECT; } } void Camera2Client::notifyRequestId(int32_t requestId) { void Camera2Client::notifyRequestId(int32_t requestId) { Loading
services/camera/libcameraservice/api1/Camera2Client.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -237,6 +237,7 @@ private: mutable Mutex mLatestRequestMutex; mutable Mutex mLatestRequestMutex; Condition mLatestRequestSignal; Condition mLatestRequestSignal; int32_t mLatestRequestId = -1; int32_t mLatestRequestId = -1; int32_t mLatestFailedRequestId = -1; status_t waitUntilRequestIdApplied(int32_t requestId, nsecs_t timeout); status_t waitUntilRequestIdApplied(int32_t requestId, nsecs_t timeout); status_t waitUntilCurrentRequestIdLocked(); status_t waitUntilCurrentRequestIdLocked(); }; }; Loading