Loading camera/aidl/android/hardware/ICameraService.aidl +12 −0 Original line number Diff line number Diff line Loading @@ -148,6 +148,18 @@ interface ICameraService */ void remapCameraIds(in CameraIdRemapping cameraIdRemapping); /** * Inject Session Params into an existing camera session. * * @param cameraId the camera id session to inject session params into. Note that * if there is no active session for the input cameraid, this operation * will be a no-op. In addition, future camera sessions for cameraid will * not be affected. * @param sessionParams the session params to override for the existing session. */ void injectSessionParams(@utf8InCpp String cameraId, in CameraMetadataNative sessionParams); /** * Remove listener for changes to camera device and flashlight state. */ Loading services/camera/libcameraservice/CameraService.cpp +33 −0 Original line number Diff line number Diff line Loading @@ -1092,6 +1092,39 @@ void CameraService::remapCameraIds(const TCameraIdRemapping& cameraIdRemapping) } } Status CameraService::injectSessionParams( const std::string& cameraId, const CameraMetadata& sessionParams) { if (!checkCallingPermission(toString16(sCameraInjectExternalCameraPermission))) { const int pid = CameraThreadState::getCallingPid(); const int uid = CameraThreadState::getCallingUid(); ALOGE("%s: Permission Denial: can't inject session params pid=%d, uid=%d", __FUNCTION__, pid, uid); return STATUS_ERROR(ERROR_PERMISSION_DENIED, "Permission Denial: no permission to inject session params"); } std::unique_ptr<AutoConditionLock> serviceLockWrapper = AutoConditionLock::waitAndAcquire(mServiceLockWrapper); auto clientDescriptor = mActiveClientManager.get(cameraId); if (clientDescriptor == nullptr) { ALOGI("%s: No active client for camera id %s", __FUNCTION__, cameraId.c_str()); return STATUS_ERROR_FMT(ERROR_INVALID_OPERATION, "No active client for camera id %s", cameraId.c_str()); } sp<BasicClient> clientSp = clientDescriptor->getValue(); status_t res = clientSp->injectSessionParams(sessionParams); if (res != OK) { return STATUS_ERROR_FMT(ERROR_INVALID_OPERATION, "Error injecting session params into camera \"%s\": %s (%d)", cameraId.c_str(), strerror(-res), res); } return Status::ok(); } std::vector<std::string> CameraService::findOriginalIdsForRemappedCameraId( const std::string& inputCameraId, int clientUid) { std::string packageName = getPackageNameFromUid(clientUid); Loading services/camera/libcameraservice/CameraService.h +9 −1 Original line number Diff line number Diff line Loading @@ -234,6 +234,10 @@ public: virtual binder::Status remapCameraIds(const hardware::CameraIdRemapping& cameraIdRemapping); virtual binder::Status injectSessionParams( const std::string& cameraId, const hardware::camera2::impl::CameraMetadataNative& sessionParams); virtual binder::Status createDefaultRequest(const std::string& cameraId, int templateId, /*out*/ hardware::camera2::impl::CameraMetadataNative* request); Loading Loading @@ -412,6 +416,10 @@ public: // Stop the injection camera and restore to internal camera session. virtual status_t stopInjection() = 0; // Inject session parameters into an existing session. virtual status_t injectSessionParams( const hardware::camera2::impl::CameraMetadataNative& sessionParams) = 0; protected: BasicClient(const sp<CameraService>& cameraService, const sp<IBinder>& remoteCallback, Loading services/camera/libcameraservice/api2/CameraOfflineSessionClient.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -383,5 +383,12 @@ status_t CameraOfflineSessionClient::stopInjection() { return OK; } status_t CameraOfflineSessionClient::injectSessionParams( const hardware::camera2::impl::CameraMetadataNative& sessionParams) { ALOGV("%s: This client doesn't support the injecting session parameters camera.", __FUNCTION__); (void)sessionParams; return OK; } // ---------------------------------------------------------------------------- }; // namespace android services/camera/libcameraservice/api2/CameraOfflineSessionClient.h +2 −0 Original line number Diff line number Diff line Loading @@ -120,6 +120,8 @@ public: status_t injectCamera(const std::string& injectedCamId, sp<CameraProviderManager> manager) override; status_t stopInjection() override; status_t injectSessionParams( const hardware::camera2::impl::CameraMetadataNative& sessionParams) override; private: mutable Mutex mBinderSerializationLock; Loading Loading
camera/aidl/android/hardware/ICameraService.aidl +12 −0 Original line number Diff line number Diff line Loading @@ -148,6 +148,18 @@ interface ICameraService */ void remapCameraIds(in CameraIdRemapping cameraIdRemapping); /** * Inject Session Params into an existing camera session. * * @param cameraId the camera id session to inject session params into. Note that * if there is no active session for the input cameraid, this operation * will be a no-op. In addition, future camera sessions for cameraid will * not be affected. * @param sessionParams the session params to override for the existing session. */ void injectSessionParams(@utf8InCpp String cameraId, in CameraMetadataNative sessionParams); /** * Remove listener for changes to camera device and flashlight state. */ Loading
services/camera/libcameraservice/CameraService.cpp +33 −0 Original line number Diff line number Diff line Loading @@ -1092,6 +1092,39 @@ void CameraService::remapCameraIds(const TCameraIdRemapping& cameraIdRemapping) } } Status CameraService::injectSessionParams( const std::string& cameraId, const CameraMetadata& sessionParams) { if (!checkCallingPermission(toString16(sCameraInjectExternalCameraPermission))) { const int pid = CameraThreadState::getCallingPid(); const int uid = CameraThreadState::getCallingUid(); ALOGE("%s: Permission Denial: can't inject session params pid=%d, uid=%d", __FUNCTION__, pid, uid); return STATUS_ERROR(ERROR_PERMISSION_DENIED, "Permission Denial: no permission to inject session params"); } std::unique_ptr<AutoConditionLock> serviceLockWrapper = AutoConditionLock::waitAndAcquire(mServiceLockWrapper); auto clientDescriptor = mActiveClientManager.get(cameraId); if (clientDescriptor == nullptr) { ALOGI("%s: No active client for camera id %s", __FUNCTION__, cameraId.c_str()); return STATUS_ERROR_FMT(ERROR_INVALID_OPERATION, "No active client for camera id %s", cameraId.c_str()); } sp<BasicClient> clientSp = clientDescriptor->getValue(); status_t res = clientSp->injectSessionParams(sessionParams); if (res != OK) { return STATUS_ERROR_FMT(ERROR_INVALID_OPERATION, "Error injecting session params into camera \"%s\": %s (%d)", cameraId.c_str(), strerror(-res), res); } return Status::ok(); } std::vector<std::string> CameraService::findOriginalIdsForRemappedCameraId( const std::string& inputCameraId, int clientUid) { std::string packageName = getPackageNameFromUid(clientUid); Loading
services/camera/libcameraservice/CameraService.h +9 −1 Original line number Diff line number Diff line Loading @@ -234,6 +234,10 @@ public: virtual binder::Status remapCameraIds(const hardware::CameraIdRemapping& cameraIdRemapping); virtual binder::Status injectSessionParams( const std::string& cameraId, const hardware::camera2::impl::CameraMetadataNative& sessionParams); virtual binder::Status createDefaultRequest(const std::string& cameraId, int templateId, /*out*/ hardware::camera2::impl::CameraMetadataNative* request); Loading Loading @@ -412,6 +416,10 @@ public: // Stop the injection camera and restore to internal camera session. virtual status_t stopInjection() = 0; // Inject session parameters into an existing session. virtual status_t injectSessionParams( const hardware::camera2::impl::CameraMetadataNative& sessionParams) = 0; protected: BasicClient(const sp<CameraService>& cameraService, const sp<IBinder>& remoteCallback, Loading
services/camera/libcameraservice/api2/CameraOfflineSessionClient.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -383,5 +383,12 @@ status_t CameraOfflineSessionClient::stopInjection() { return OK; } status_t CameraOfflineSessionClient::injectSessionParams( const hardware::camera2::impl::CameraMetadataNative& sessionParams) { ALOGV("%s: This client doesn't support the injecting session parameters camera.", __FUNCTION__); (void)sessionParams; return OK; } // ---------------------------------------------------------------------------- }; // namespace android
services/camera/libcameraservice/api2/CameraOfflineSessionClient.h +2 −0 Original line number Diff line number Diff line Loading @@ -120,6 +120,8 @@ public: status_t injectCamera(const std::string& injectedCamId, sp<CameraProviderManager> manager) override; status_t stopInjection() override; status_t injectSessionParams( const hardware::camera2::impl::CameraMetadataNative& sessionParams) override; private: mutable Mutex mBinderSerializationLock; Loading