diff --git a/camera/ndk/ndk_vendor/impl/ACameraDevice.cpp b/camera/ndk/ndk_vendor/impl/ACameraDevice.cpp index 529c167edc..a43d707e8e 100644 --- a/camera/ndk/ndk_vendor/impl/ACameraDevice.cpp +++ b/camera/ndk/ndk_vendor/impl/ACameraDevice.cpp @@ -31,6 +31,17 @@ #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; namespace android { @@ -151,7 +162,7 @@ CameraDevice::createCaptureRequest( return ACAMERA_ERROR_CAMERA_DISCONNECTED; } CameraMetadata rawRequest; - Status status = Status::NO_ERROR; + Status status = Status::UNKNOWN_ERROR; auto remoteRet = mRemote->createDefaultRequest( utils::convertToHidl(templateId), [&status, &rawRequest](auto s, const hidl_vec &metadata) { @@ -161,14 +172,7 @@ CameraDevice::createCaptureRequest( ALOGE("%s: Couldn't create default request", __FUNCTION__); } }); - if (!remoteRet.isOk()) { - 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); - } + CHECK_TRANSACTION_AND_RET(remoteRet, status, "createDefaultRequest()") ACaptureRequest* outReq = new ACaptureRequest(); outReq->settings = new ACameraMetadata(rawRequest.release(), ACameraMetadata::ACM_REQUEST); if (physicalCameraIdList != nullptr) { @@ -243,20 +247,15 @@ camera_status_t CameraDevice::isSessionConfigurationSupported( } bool configSupported = false; - Status status = Status::NO_ERROR; + Status status = Status::UNKNOWN_ERROR; auto remoteRet = mRemote->isSessionConfigurationSupported(sessionConfig, [&status, &configSupported](auto s, auto supported) { status = s; configSupported = supported; }); - if (status == Status::INVALID_OPERATION) { - return ACAMERA_ERROR_UNSUPPORTED_OPERATION; - } else if (!remoteRet.isOk()) { - return ACAMERA_ERROR_UNKNOWN; - } else { - return configSupported ? ACAMERA_OK : ACAMERA_ERROR_STREAM_CONFIGURE_FAIL; - } + CHECK_TRANSACTION_AND_RET(remoteRet, status, "isSessionConfigurationSupported()"); + return configSupported ? ACAMERA_OK : ACAMERA_ERROR_STREAM_CONFIGURE_FAIL; } static void addMetadataToPhysicalCameraSettings(const CameraMetadata *metadata, @@ -525,16 +524,13 @@ CameraDevice::stopRepeatingLocked() { mRepeatingSequenceId = REQUEST_ID_NONE; int64_t lastFrameNumber; - Status status = Status::NO_ERROR; + Status status = Status::UNKNOWN_ERROR; auto remoteRet = mRemote->cancelRepeatingRequest( [&status, &lastFrameNumber](Status s, auto frameNumber) { status = s; lastFrameNumber = frameNumber; }); - if (!remoteRet.isOk() || status != Status::NO_ERROR) { - ALOGE("%s: Unable to cancel active repeating request", __FUNCTION__); - return utils::convertFromHidl(status); - } + CHECK_TRANSACTION_AND_RET(remoteRet, status, "cancelRepeatingRequest()"); checkRepeatingSequenceCompleteLocked(repeatingSequenceId, lastFrameNumber); } return ACAMERA_OK; @@ -582,15 +578,12 @@ CameraDevice::flushLocked(ACameraCaptureSession* session) { } int64_t lastFrameNumber; - Status status; + Status status = Status::UNKNOWN_ERROR; auto remoteRet = mRemote->flush([&status, &lastFrameNumber](auto s, auto frameNumber) { status = s; lastFrameNumber = frameNumber; }); - if (!remoteRet.isOk() || status != Status::NO_ERROR) { - ALOGE("%s: Abort captures failed", __FUNCTION__); - return utils::convertFromHidl(status); - } + CHECK_TRANSACTION_AND_RET(remoteRet, status, "flush()") if (mRepeatingSequenceId != REQUEST_ID_NONE) { checkRepeatingSequenceCompleteLocked(mRepeatingSequenceId, lastFrameNumber); } @@ -611,10 +604,7 @@ CameraDevice::waitUntilIdleLocked() { } auto remoteRet = mRemote->waitUntilIdle(); - if (!remoteRet.isOk()) { - ALOGE("%s: Transaction waitUntilIdle failed", __FUNCTION__); - return utils::convertFromHidl(remoteRet); - } + CHECK_TRANSACTION_AND_RET(remoteRet, remoteRet, "waitUntilIdle()") return ACAMERA_OK; } @@ -689,34 +679,25 @@ CameraDevice::configureStreamsLocked(const ACaptureSessionOutputContainer* outpu mIdle = true; auto remoteRet = mRemote->beginConfigure(); - if (!remoteRet.isOk()|| remoteRet != Status::NO_ERROR) { - ALOGE("Camera device %s begin configure failed", getId()); - return utils::convertFromHidl(remoteRet); - } + CHECK_TRANSACTION_AND_RET(remoteRet, remoteRet, "beginConfigure()") // delete to-be-deleted streams for (auto streamId : deleteList) { remoteRet = mRemote->deleteStream(streamId); - if (!remoteRet.isOk() || remoteRet != Status::NO_ERROR) { - ALOGE("Camera device %s failed to remove stream %d", getId(), streamId); - return utils::convertFromHidl(remoteRet); - } + CHECK_TRANSACTION_AND_RET(remoteRet, remoteRet, "deleteStream()") mConfiguredOutputs.erase(streamId); } // add new streams for (auto outputPair : addSet) { int streamId; - Status status; + Status status = Status::UNKNOWN_ERROR; auto ret = mRemote->createStream(outputPair.second, [&status, &streamId](Status s, auto stream_id) { status = s; streamId = stream_id; }); - if (!remoteRet.isOk() || status != Status::NO_ERROR) { - ALOGE("Camera device %s failed to create stream", getId()); - return utils::convertFromHidl(status); - } + CHECK_TRANSACTION_AND_RET(ret, status, "createStream()") mConfiguredOutputs.insert(std::make_pair(streamId, outputPair)); } @@ -729,11 +710,8 @@ CameraDevice::configureStreamsLocked(const ACaptureSessionOutputContainer* outpu params.unlock(params_metadata); } remoteRet = mRemote->endConfigure(StreamConfigurationMode::NORMAL_MODE, hidlParams); - if (!remoteRet.isOk()) { - ALOGE("Transaction error: endConfigure failed %s", remoteRet.description().c_str()); - } - - return utils::convertFromHidl(remoteRet); + CHECK_TRANSACTION_AND_RET(remoteRet, remoteRet, "endConfigure()") + return ACAMERA_OK; } void