diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h index bbe2696e..36bf1cbb 100644 --- a/include/libcamera/camera.h +++ b/include/libcamera/camera.h @@ -50,6 +50,7 @@ private: friend class PipelineHandler; void disconnect(); + int exclusiveAccess(); std::shared_ptr pipe_; std::string name_; diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp index e8dab6f0..62291d2c 100644 --- a/src/libcamera/camera.cpp +++ b/src/libcamera/camera.cpp @@ -240,6 +240,23 @@ Camera::streamConfiguration(std::vector &streams) * \retval -EINVAL The configuration is not valid */ int Camera::configureStreams(std::map &config) +{ + int ret; + + ret = exclusiveAccess(); + if (ret) + return ret; + + if (!config.size()) { + LOG(Camera, Error) + << "Can't configure streams without a configuration"; + return -EINVAL; + } + + return pipe_->configureStreams(this, config); +} + +int Camera::exclusiveAccess() { if (disconnected_) return -ENODEV; @@ -247,10 +264,7 @@ int Camera::configureStreams(std::map &config) if (!acquired_) return -EACCES; - if (!config.size()) - return -EINVAL; - - return pipe_->configureStreams(this, config); + return 0; } } /* namespace libcamera */