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

Commit e27f11c8 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: I3508a546bf1818515de7eb61c32207f1f2ec29ae
parents ac2e6286 c166ca1e
Loading
Loading
Loading
Loading
+10 −2
Original line number Original line Diff line number Diff line
@@ -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:
@@ -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);
@@ -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) {
+1 −0
Original line number Original line Diff line number Diff line
@@ -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();
};
};