Loading camera/aidl/android/hardware/camera2/ICameraDeviceUser.aidl +9 −0 Original line number Diff line number Diff line Loading @@ -99,6 +99,15 @@ interface ICameraDeviceUser */ boolean isSessionConfigurationSupported(in SessionConfiguration sessionConfiguration); /** * Get the camera characteristics for a particular session configuration * * @param sessionConfiguration Specific session configuration for which the characteristics * are fetched. * @return - characteristics associated with the given session. */ CameraMetadataNative getSessionCharacteristics(in SessionConfiguration sessionConfiguration); void deleteStream(int streamId); /** Loading services/camera/libcameraservice/api2/CameraDeviceClient.cpp +54 −0 Original line number Diff line number Diff line Loading @@ -777,6 +777,60 @@ binder::Status CameraDeviceClient::isSessionConfigurationSupported( return res; } binder::Status CameraDeviceClient::getSessionCharacteristics( const SessionConfiguration& sessionConfiguration, /*out*/ hardware::camera2::impl::CameraMetadataNative* sessionCharacteristics) { ATRACE_CALL(); binder::Status res; status_t ret = OK; if (!(res = checkPidStatus(__FUNCTION__)).isOk()) return res; Mutex::Autolock icl(mBinderSerializationLock); if (!mDevice.get()) { return STATUS_ERROR(CameraService::ERROR_DISCONNECTED, "Camera device no longer alive"); } auto operatingMode = sessionConfiguration.getOperatingMode(); res = SessionConfigurationUtils::checkOperatingMode(operatingMode, mDevice->info(), mCameraIdStr); if (!res.isOk()) { return res; } camera3::metadataGetter getMetadata = [this](const std::string &id, bool /*overrideForPerfClass*/) { return mDevice->infoPhysical(id);}; ret = mProviderManager->getSessionCharacteristics(mCameraIdStr.c_str(), sessionConfiguration, mOverrideForPerfClass, getMetadata, sessionCharacteristics); switch (ret) { case OK: // Expected, do nothing. break; case INVALID_OPERATION: { std::string msg = fmt::sprintf( "Camera %s: Session characteristics query not supported!", mCameraIdStr.c_str()); ALOGD("%s: %s", __FUNCTION__, msg.c_str()); res = STATUS_ERROR(CameraService::ERROR_INVALID_OPERATION, msg.c_str()); } break; default: { std::string msg = fmt::sprintf( "Camera %s: Error: %s (%d)", mCameraIdStr.c_str(), strerror(-ret), ret); ALOGE("%s: %s", __FUNCTION__, msg.c_str()); res = STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.c_str()); } } return res; } binder::Status CameraDeviceClient::deleteStream(int streamId) { ATRACE_CALL(); ALOGV("%s (streamId = 0x%x)", __FUNCTION__, streamId); Loading services/camera/libcameraservice/api2/CameraDeviceClient.h +5 −0 Original line number Diff line number Diff line Loading @@ -109,6 +109,11 @@ public: /*out*/ bool* streamStatus) override; virtual binder::Status getSessionCharacteristics( const SessionConfiguration& sessionConfiguration, /*out*/ hardware::camera2::impl::CameraMetadataNative* sessionCharacteristics) override; // Returns -EBUSY if device is not idle or in error state virtual binder::Status deleteStream(int streamId) override; Loading services/camera/libcameraservice/common/CameraProviderManager.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -442,6 +442,23 @@ status_t CameraProviderManager::createDefaultRequest(const std::string& cameraI return OK; } status_t CameraProviderManager::getSessionCharacteristics(const std::string& id, const SessionConfiguration &configuration, bool overrideForPerfClass, metadataGetter getMetadata, CameraMetadata* sessionCharacteristics /*out*/) const { if (!flags::feature_combination_query()) { return INVALID_OPERATION; } std::lock_guard<std::mutex> lock(mInterfaceMutex); auto deviceInfo = findDeviceInfoLocked(id); if (deviceInfo == nullptr) { return NAME_NOT_FOUND; } return deviceInfo->getSessionCharacteristics(configuration, overrideForPerfClass, getMetadata, sessionCharacteristics); } status_t CameraProviderManager::getCameraIdIPCTransport(const std::string &id, IPCTransport *providerTransport) const { std::lock_guard<std::mutex> lock(mInterfaceMutex); Loading services/camera/libcameraservice/common/CameraProviderManager.h +17 −0 Original line number Diff line number Diff line Loading @@ -316,6 +316,14 @@ public: bool overrideForPerfClass, bool checkSessionParams, bool *status /*out*/) const; /** * Get session characteristics for a particular session. */ status_t getSessionCharacteristics(const std::string& id, const SessionConfiguration &configuration, bool overrideForPerfClass, camera3::metadataGetter getMetadata, CameraMetadata* sessionCharacteristics /*out*/) const; /** * Return the highest supported device interface version for this ID */ Loading Loading @@ -632,6 +640,15 @@ private: bool * /*status*/) { return INVALID_OPERATION; } virtual status_t getSessionCharacteristics( const SessionConfiguration &/*configuration*/, bool /*overrideForPerfClass*/, camera3::metadataGetter /*getMetadata*/, CameraMetadata* /*sessionCharacteristics*/) { return INVALID_OPERATION; } virtual status_t filterSmallJpegSizes() = 0; virtual void notifyDeviceStateChange(int64_t /*newState*/) {} virtual status_t createDefaultRequest( Loading Loading
camera/aidl/android/hardware/camera2/ICameraDeviceUser.aidl +9 −0 Original line number Diff line number Diff line Loading @@ -99,6 +99,15 @@ interface ICameraDeviceUser */ boolean isSessionConfigurationSupported(in SessionConfiguration sessionConfiguration); /** * Get the camera characteristics for a particular session configuration * * @param sessionConfiguration Specific session configuration for which the characteristics * are fetched. * @return - characteristics associated with the given session. */ CameraMetadataNative getSessionCharacteristics(in SessionConfiguration sessionConfiguration); void deleteStream(int streamId); /** Loading
services/camera/libcameraservice/api2/CameraDeviceClient.cpp +54 −0 Original line number Diff line number Diff line Loading @@ -777,6 +777,60 @@ binder::Status CameraDeviceClient::isSessionConfigurationSupported( return res; } binder::Status CameraDeviceClient::getSessionCharacteristics( const SessionConfiguration& sessionConfiguration, /*out*/ hardware::camera2::impl::CameraMetadataNative* sessionCharacteristics) { ATRACE_CALL(); binder::Status res; status_t ret = OK; if (!(res = checkPidStatus(__FUNCTION__)).isOk()) return res; Mutex::Autolock icl(mBinderSerializationLock); if (!mDevice.get()) { return STATUS_ERROR(CameraService::ERROR_DISCONNECTED, "Camera device no longer alive"); } auto operatingMode = sessionConfiguration.getOperatingMode(); res = SessionConfigurationUtils::checkOperatingMode(operatingMode, mDevice->info(), mCameraIdStr); if (!res.isOk()) { return res; } camera3::metadataGetter getMetadata = [this](const std::string &id, bool /*overrideForPerfClass*/) { return mDevice->infoPhysical(id);}; ret = mProviderManager->getSessionCharacteristics(mCameraIdStr.c_str(), sessionConfiguration, mOverrideForPerfClass, getMetadata, sessionCharacteristics); switch (ret) { case OK: // Expected, do nothing. break; case INVALID_OPERATION: { std::string msg = fmt::sprintf( "Camera %s: Session characteristics query not supported!", mCameraIdStr.c_str()); ALOGD("%s: %s", __FUNCTION__, msg.c_str()); res = STATUS_ERROR(CameraService::ERROR_INVALID_OPERATION, msg.c_str()); } break; default: { std::string msg = fmt::sprintf( "Camera %s: Error: %s (%d)", mCameraIdStr.c_str(), strerror(-ret), ret); ALOGE("%s: %s", __FUNCTION__, msg.c_str()); res = STATUS_ERROR(CameraService::ERROR_ILLEGAL_ARGUMENT, msg.c_str()); } } return res; } binder::Status CameraDeviceClient::deleteStream(int streamId) { ATRACE_CALL(); ALOGV("%s (streamId = 0x%x)", __FUNCTION__, streamId); Loading
services/camera/libcameraservice/api2/CameraDeviceClient.h +5 −0 Original line number Diff line number Diff line Loading @@ -109,6 +109,11 @@ public: /*out*/ bool* streamStatus) override; virtual binder::Status getSessionCharacteristics( const SessionConfiguration& sessionConfiguration, /*out*/ hardware::camera2::impl::CameraMetadataNative* sessionCharacteristics) override; // Returns -EBUSY if device is not idle or in error state virtual binder::Status deleteStream(int streamId) override; Loading
services/camera/libcameraservice/common/CameraProviderManager.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -442,6 +442,23 @@ status_t CameraProviderManager::createDefaultRequest(const std::string& cameraI return OK; } status_t CameraProviderManager::getSessionCharacteristics(const std::string& id, const SessionConfiguration &configuration, bool overrideForPerfClass, metadataGetter getMetadata, CameraMetadata* sessionCharacteristics /*out*/) const { if (!flags::feature_combination_query()) { return INVALID_OPERATION; } std::lock_guard<std::mutex> lock(mInterfaceMutex); auto deviceInfo = findDeviceInfoLocked(id); if (deviceInfo == nullptr) { return NAME_NOT_FOUND; } return deviceInfo->getSessionCharacteristics(configuration, overrideForPerfClass, getMetadata, sessionCharacteristics); } status_t CameraProviderManager::getCameraIdIPCTransport(const std::string &id, IPCTransport *providerTransport) const { std::lock_guard<std::mutex> lock(mInterfaceMutex); Loading
services/camera/libcameraservice/common/CameraProviderManager.h +17 −0 Original line number Diff line number Diff line Loading @@ -316,6 +316,14 @@ public: bool overrideForPerfClass, bool checkSessionParams, bool *status /*out*/) const; /** * Get session characteristics for a particular session. */ status_t getSessionCharacteristics(const std::string& id, const SessionConfiguration &configuration, bool overrideForPerfClass, camera3::metadataGetter getMetadata, CameraMetadata* sessionCharacteristics /*out*/) const; /** * Return the highest supported device interface version for this ID */ Loading Loading @@ -632,6 +640,15 @@ private: bool * /*status*/) { return INVALID_OPERATION; } virtual status_t getSessionCharacteristics( const SessionConfiguration &/*configuration*/, bool /*overrideForPerfClass*/, camera3::metadataGetter /*getMetadata*/, CameraMetadata* /*sessionCharacteristics*/) { return INVALID_OPERATION; } virtual status_t filterSmallJpegSizes() = 0; virtual void notifyDeviceStateChange(int64_t /*newState*/) {} virtual status_t createDefaultRequest( Loading