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

Commit c7c45c60 authored by Jayant Chowdhary's avatar Jayant Chowdhary Committed by android-build-merger
Browse files

Merge "libcamera2ndk_vendor: Don't retrieve value from failed HIDL calls." into qt-dev

am: 9c8dfd59

Change-Id: I5c98543ad04e2b007e5f91b42f992d84ac1717bd
parents e74399e4 9c8dfd59
Loading
Loading
Loading
Loading
+27 −49
Original line number Original line Diff line number Diff line
@@ -31,6 +31,17 @@


#include "ACameraCaptureSession.inc"
#include "ACameraCaptureSession.inc"


#define CHECK_TRANSACTION_AND_RET(remoteRet, status, callName) \
    if (!remoteRet.isOk()) { \
        ALOGE("%s: Transaction error during %s call %s", __FUNCTION__, callName, \
                  remoteRet.description().c_str()); \
        return ACAMERA_ERROR_UNKNOWN; \
    } \
    if (status != Status::NO_ERROR) { \
        ALOGE("%s: %s call failed", __FUNCTION__, callName); \
        return utils::convertFromHidl(status); \
    }

using namespace android;
using namespace android;


namespace android {
namespace android {
@@ -151,7 +162,7 @@ CameraDevice::createCaptureRequest(
        return ACAMERA_ERROR_CAMERA_DISCONNECTED;
        return ACAMERA_ERROR_CAMERA_DISCONNECTED;
    }
    }
    CameraMetadata rawRequest;
    CameraMetadata rawRequest;
    Status status = Status::NO_ERROR;
    Status status = Status::UNKNOWN_ERROR;
    auto remoteRet = mRemote->createDefaultRequest(
    auto remoteRet = mRemote->createDefaultRequest(
        utils::convertToHidl(templateId),
        utils::convertToHidl(templateId),
        [&status, &rawRequest](auto s, const hidl_vec<uint8_t> &metadata) {
        [&status, &rawRequest](auto s, const hidl_vec<uint8_t> &metadata) {
@@ -161,14 +172,7 @@ CameraDevice::createCaptureRequest(
                ALOGE("%s: Couldn't create default request", __FUNCTION__);
                ALOGE("%s: Couldn't create default request", __FUNCTION__);
            }
            }
        });
        });
    if (!remoteRet.isOk()) {
    CHECK_TRANSACTION_AND_RET(remoteRet, status, "createDefaultRequest()")
        ALOGE("%s: Transaction error while trying to create default request %s", __FUNCTION__,
              remoteRet.description().c_str());
        return ACAMERA_ERROR_UNKNOWN;
    }
    if (status != Status::NO_ERROR) {
        return utils::convertFromHidl(status);
    }
    ACaptureRequest* outReq = new ACaptureRequest();
    ACaptureRequest* outReq = new ACaptureRequest();
    outReq->settings = new ACameraMetadata(rawRequest.release(), ACameraMetadata::ACM_REQUEST);
    outReq->settings = new ACameraMetadata(rawRequest.release(), ACameraMetadata::ACM_REQUEST);
    if (physicalCameraIdList != nullptr) {
    if (physicalCameraIdList != nullptr) {
@@ -243,21 +247,16 @@ camera_status_t CameraDevice::isSessionConfigurationSupported(
    }
    }


    bool configSupported = false;
    bool configSupported = false;
    Status status = Status::NO_ERROR;
    Status status = Status::UNKNOWN_ERROR;
    auto remoteRet = mRemote->isSessionConfigurationSupported(sessionConfig,
    auto remoteRet = mRemote->isSessionConfigurationSupported(sessionConfig,
        [&status, &configSupported](auto s, auto supported) {
        [&status, &configSupported](auto s, auto supported) {
            status = s;
            status = s;
            configSupported = supported;
            configSupported = supported;
        });
        });


    if (status == Status::INVALID_OPERATION) {
    CHECK_TRANSACTION_AND_RET(remoteRet, status, "isSessionConfigurationSupported()");
        return ACAMERA_ERROR_UNSUPPORTED_OPERATION;
    } else if (!remoteRet.isOk()) {
        return ACAMERA_ERROR_UNKNOWN;
    } else {
    return configSupported ? ACAMERA_OK : ACAMERA_ERROR_STREAM_CONFIGURE_FAIL;
    return configSupported ? ACAMERA_OK : ACAMERA_ERROR_STREAM_CONFIGURE_FAIL;
}
}
}


static void addMetadataToPhysicalCameraSettings(const CameraMetadata *metadata,
static void addMetadataToPhysicalCameraSettings(const CameraMetadata *metadata,
        const std::string &cameraId, PhysicalCameraSettings *physicalCameraSettings) {
        const std::string &cameraId, PhysicalCameraSettings *physicalCameraSettings) {
@@ -525,16 +524,13 @@ CameraDevice::stopRepeatingLocked() {
        mRepeatingSequenceId = REQUEST_ID_NONE;
        mRepeatingSequenceId = REQUEST_ID_NONE;


        int64_t lastFrameNumber;
        int64_t lastFrameNumber;
        Status status = Status::NO_ERROR;
        Status status = Status::UNKNOWN_ERROR;
        auto remoteRet = mRemote->cancelRepeatingRequest(
        auto remoteRet = mRemote->cancelRepeatingRequest(
                [&status, &lastFrameNumber](Status s, auto frameNumber) {
                [&status, &lastFrameNumber](Status s, auto frameNumber) {
                    status = s;
                    status = s;
                    lastFrameNumber = frameNumber;
                    lastFrameNumber = frameNumber;
                });
                });
        if (!remoteRet.isOk() || status != Status::NO_ERROR) {
        CHECK_TRANSACTION_AND_RET(remoteRet, status, "cancelRepeatingRequest()");
            ALOGE("%s: Unable to cancel active repeating request", __FUNCTION__);
            return utils::convertFromHidl(status);
        }
        checkRepeatingSequenceCompleteLocked(repeatingSequenceId, lastFrameNumber);
        checkRepeatingSequenceCompleteLocked(repeatingSequenceId, lastFrameNumber);
    }
    }
    return ACAMERA_OK;
    return ACAMERA_OK;
@@ -582,15 +578,12 @@ CameraDevice::flushLocked(ACameraCaptureSession* session) {
    }
    }


    int64_t lastFrameNumber;
    int64_t lastFrameNumber;
    Status status;
    Status status = Status::UNKNOWN_ERROR;
    auto remoteRet = mRemote->flush([&status, &lastFrameNumber](auto s, auto frameNumber) {
    auto remoteRet = mRemote->flush([&status, &lastFrameNumber](auto s, auto frameNumber) {
                                        status = s;
                                        status = s;
                                        lastFrameNumber = frameNumber;
                                        lastFrameNumber = frameNumber;
                                    });
                                    });
    if (!remoteRet.isOk() || status != Status::NO_ERROR) {
    CHECK_TRANSACTION_AND_RET(remoteRet, status, "flush()")
        ALOGE("%s: Abort captures failed", __FUNCTION__);
        return utils::convertFromHidl(status);
    }
    if (mRepeatingSequenceId != REQUEST_ID_NONE) {
    if (mRepeatingSequenceId != REQUEST_ID_NONE) {
        checkRepeatingSequenceCompleteLocked(mRepeatingSequenceId, lastFrameNumber);
        checkRepeatingSequenceCompleteLocked(mRepeatingSequenceId, lastFrameNumber);
    }
    }
@@ -611,10 +604,7 @@ CameraDevice::waitUntilIdleLocked() {
    }
    }


    auto remoteRet = mRemote->waitUntilIdle();
    auto remoteRet = mRemote->waitUntilIdle();
    if (!remoteRet.isOk()) {
    CHECK_TRANSACTION_AND_RET(remoteRet, remoteRet, "waitUntilIdle()")
        ALOGE("%s: Transaction waitUntilIdle failed", __FUNCTION__);
        return utils::convertFromHidl(remoteRet);
    }
    return ACAMERA_OK;
    return ACAMERA_OK;
}
}


@@ -689,34 +679,25 @@ CameraDevice::configureStreamsLocked(const ACaptureSessionOutputContainer* outpu
    mIdle = true;
    mIdle = true;


    auto remoteRet = mRemote->beginConfigure();
    auto remoteRet = mRemote->beginConfigure();
    if (!remoteRet.isOk()|| remoteRet != Status::NO_ERROR) {
    CHECK_TRANSACTION_AND_RET(remoteRet, remoteRet, "beginConfigure()")
        ALOGE("Camera device %s begin configure failed", getId());
        return utils::convertFromHidl(remoteRet);
    }


    // delete to-be-deleted streams
    // delete to-be-deleted streams
    for (auto streamId : deleteList) {
    for (auto streamId : deleteList) {
        remoteRet = mRemote->deleteStream(streamId);
        remoteRet = mRemote->deleteStream(streamId);
        if (!remoteRet.isOk() || remoteRet != Status::NO_ERROR) {
        CHECK_TRANSACTION_AND_RET(remoteRet, remoteRet, "deleteStream()")
            ALOGE("Camera device %s failed to remove stream %d", getId(), streamId);
            return utils::convertFromHidl(remoteRet);
        }
        mConfiguredOutputs.erase(streamId);
        mConfiguredOutputs.erase(streamId);
    }
    }


    // add new streams
    // add new streams
    for (auto outputPair : addSet) {
    for (auto outputPair : addSet) {
        int streamId;
        int streamId;
        Status status;
        Status status = Status::UNKNOWN_ERROR;
        auto ret = mRemote->createStream(outputPair.second,
        auto ret = mRemote->createStream(outputPair.second,
                                         [&status, &streamId](Status s, auto stream_id) {
                                         [&status, &streamId](Status s, auto stream_id) {
                                             status = s;
                                             status = s;
                                             streamId = stream_id;
                                             streamId = stream_id;
                                         });
                                         });
        if (!remoteRet.isOk() || status != Status::NO_ERROR) {
        CHECK_TRANSACTION_AND_RET(ret, status, "createStream()")
            ALOGE("Camera device %s failed to create stream", getId());
            return utils::convertFromHidl(status);
        }
        mConfiguredOutputs.insert(std::make_pair(streamId, outputPair));
        mConfiguredOutputs.insert(std::make_pair(streamId, outputPair));
    }
    }


@@ -729,11 +710,8 @@ CameraDevice::configureStreamsLocked(const ACaptureSessionOutputContainer* outpu
        params.unlock(params_metadata);
        params.unlock(params_metadata);
    }
    }
    remoteRet = mRemote->endConfigure(StreamConfigurationMode::NORMAL_MODE, hidlParams);
    remoteRet = mRemote->endConfigure(StreamConfigurationMode::NORMAL_MODE, hidlParams);
    if (!remoteRet.isOk()) {
    CHECK_TRANSACTION_AND_RET(remoteRet, remoteRet, "endConfigure()")
        ALOGE("Transaction error: endConfigure failed %s", remoteRet.description().c_str());
    return ACAMERA_OK;
    }

    return utils::convertFromHidl(remoteRet);
}
}


void
void