summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/libcamera/internal/camera_sensor.h3
-rw-r--r--src/libcamera/camera_sensor.cpp23
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_);
}