diff options
-rw-r--r-- | include/libcamera/internal/camera_sensor.h | 3 | ||||
-rw-r--r-- | src/libcamera/camera_sensor.cpp | 23 |
2 files changed, 13 insertions, 13 deletions
diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h index f22ffbfe..71d012f7 100644 --- a/include/libcamera/internal/camera_sensor.h +++ b/include/libcamera/internal/camera_sensor.h @@ -53,7 +53,7 @@ public: const MediaEntity *entity() const { return entity_; } const std::vector<unsigned int> &mbusCodes() const { return mbusCodes_; } const std::vector<Size> &sizes() const { return sizes_; } - const Size &resolution() const { return resolution_; } + Size resolution() const { return activeArea_.size(); } V4L2SubdeviceFormat getFormat(const std::vector<unsigned int> &mbusCodes, const Size &size) const; @@ -87,7 +87,6 @@ private: std::string id_; V4L2Subdevice::Formats formats_; - Size resolution_; std::vector<unsigned int> mbusCodes_; std::vector<Size> sizes_; diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp index 8a1b9bd2..8db6e897 100644 --- a/src/libcamera/camera_sensor.cpp +++ b/src/libcamera/camera_sensor.cpp @@ -234,12 +234,6 @@ int CameraSensor::init() sizes_.erase(last, sizes_.end()); /* - * The sizes_ vector is sorted in ascending order, the resolution is - * thus the last element of the vector. - */ - resolution_ = sizes_.back(); - - /* * VIMC is a bit special, as it does not yet support all the mandatory * requirements regular sensors have to respect. * @@ -324,14 +318,20 @@ int CameraSensor::validateSensorDriver() Rectangle rect; int ret = subdev_->getSelection(pad_, V4L2_SEL_TGT_CROP_BOUNDS, &rect); if (ret) { - rect = Rectangle(resolution()); + /* + * Default the pixel array size to the largest size supported + * by the sensor. The sizes_ vector is sorted in ascending + * order, the largest size is thus the last element. + */ + pixelArraySize_ = sizes_.back(); + LOG(CameraSensor, Warning) << "The PixelArraySize property has been defaulted to " - << rect.toString(); + << pixelArraySize_.toString(); err = -EINVAL; + } else { + pixelArraySize_ = rect.size(); } - pixelArraySize_.width = rect.width; - pixelArraySize_.height = rect.height; ret = subdev_->getSelection(pad_, V4L2_SEL_TGT_CROP_DEFAULT, &activeArea_); if (ret) { @@ -397,7 +397,8 @@ int CameraSensor::validateSensorDriver() */ void CameraSensor::initVimcDefaultProperties() { - pixelArraySize_ = resolution(); + /* Use the largest supported size. */ + pixelArraySize_ = sizes_.back(); activeArea_ = Rectangle(pixelArraySize_); } |