Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f53da41c authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Camera: Check for failing request ids when syncing with device" into rvc-dev am: c166ca1e

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/av/+/12003730

Change-Id: Iae760af3e7b33f03e22b433274bac7968c1f1b3a
parents 971bb030 c166ca1e
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -1777,6 +1777,14 @@ void Camera2Client::notifyError(int32_t errorCode,
        case hardware::camera2::ICameraDeviceCallbacks::ERROR_CAMERA_BUFFER:
            ALOGW("%s: Received recoverable error %d from HAL - ignoring, requestId %" PRId32,
                    __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);
            return;
        default:
@@ -2303,7 +2311,7 @@ status_t Camera2Client::waitUntilCurrentRequestIdLocked() {

status_t Camera2Client::waitUntilRequestIdApplied(int32_t requestId, nsecs_t timeout) {
    Mutex::Autolock l(mLatestRequestMutex);
    while (mLatestRequestId != requestId) {
    while ((mLatestRequestId != requestId) && (mLatestFailedRequestId != requestId)) {
        nsecs_t startTime = systemTime();

        auto res = mLatestRequestSignal.waitRelative(mLatestRequestMutex, timeout);
@@ -2312,7 +2320,7 @@ status_t Camera2Client::waitUntilRequestIdApplied(int32_t requestId, nsecs_t tim
        timeout -= (systemTime() - startTime);
    }

    return OK;
    return (mLatestRequestId == requestId) ? OK : DEAD_OBJECT;
}

void Camera2Client::notifyRequestId(int32_t requestId) {
+1 −0
Original line number Diff line number Diff line
@@ -237,6 +237,7 @@ private:
    mutable Mutex mLatestRequestMutex;
    Condition mLatestRequestSignal;
    int32_t mLatestRequestId = -1;
    int32_t mLatestFailedRequestId = -1;
    status_t waitUntilRequestIdApplied(int32_t requestId, nsecs_t timeout);
    status_t waitUntilCurrentRequestIdLocked();
};