summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/libcamera/internal/v4l2_subdevice.h3
-rw-r--r--src/libcamera/camera_sensor.cpp1
-rw-r--r--src/libcamera/pipeline/ipu3/cio2.cpp7
-rw-r--r--src/libcamera/pipeline/simple/simple.cpp8
-rw-r--r--src/libcamera/v4l2_subdevice.cpp15
5 files changed, 28 insertions, 6 deletions
diff --git a/include/libcamera/internal/v4l2_subdevice.h b/include/libcamera/internal/v4l2_subdevice.h
index a6873b67..58d1e511 100644
--- a/include/libcamera/internal/v4l2_subdevice.h
+++ b/include/libcamera/internal/v4l2_subdevice.h
@@ -8,12 +8,14 @@
#pragma once
#include <memory>
+#include <optional>
#include <string>
#include <vector>
#include <libcamera/base/class.h>
#include <libcamera/base/log.h>
+#include <libcamera/color_space.h>
#include <libcamera/geometry.h>
#include "libcamera/internal/formats.h"
@@ -27,6 +29,7 @@ class MediaDevice;
struct V4L2SubdeviceFormat {
uint32_t mbus_code;
Size size;
+ std::optional<ColorSpace> colorSpace;
const std::string toString() const;
uint8_t bitsPerPixel() const;
diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp
index 7bb39b1e..c3999d35 100644
--- a/src/libcamera/camera_sensor.cpp
+++ b/src/libcamera/camera_sensor.cpp
@@ -642,6 +642,7 @@ V4L2SubdeviceFormat CameraSensor::getFormat(const std::vector<unsigned int> &mbu
V4L2SubdeviceFormat format{
.mbus_code = bestCode,
.size = *bestSize,
+ .colorSpace = ColorSpace::Raw,
};
return format;
diff --git a/src/libcamera/pipeline/ipu3/cio2.cpp b/src/libcamera/pipeline/ipu3/cio2.cpp
index 59dda56b..f4e8c663 100644
--- a/src/libcamera/pipeline/ipu3/cio2.cpp
+++ b/src/libcamera/pipeline/ipu3/cio2.cpp
@@ -322,10 +322,9 @@ V4L2SubdeviceFormat CIO2Device::getSensorFormat(const std::vector<unsigned int>
return {};
}
- V4L2SubdeviceFormat format{
- .mbus_code = bestCode,
- .size = bestSize,
- };
+ V4L2SubdeviceFormat format{};
+ format.mbus_code = bestCode;
+ format.size = bestSize;
return format;
}
diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
index fdff4ebd..8aa36306 100644
--- a/src/libcamera/pipeline/simple/simple.cpp
+++ b/src/libcamera/pipeline/simple/simple.cpp
@@ -457,7 +457,9 @@ int SimpleCameraData::init()
* formats on the video node.
*/
for (unsigned int code : sensor_->mbusCodes()) {
- V4L2SubdeviceFormat format{ code, sensor_->resolution() };
+ V4L2SubdeviceFormat format{};
+ format.mbus_code = code;
+ format.size = sensor_->resolution();
ret = setupFormats(&format, V4L2Subdevice::TryFormat);
if (ret < 0) {
@@ -908,7 +910,9 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c)
return ret;
const SimpleCameraData::Configuration *pipeConfig = config->pipeConfig();
- V4L2SubdeviceFormat format{ pipeConfig->code, data->sensor_->resolution() };
+ V4L2SubdeviceFormat format{};
+ format.mbus_code = pipeConfig->code;
+ format.size = data->sensor_->resolution();
ret = data->setupFormats(&format, V4L2Subdevice::ActiveFormat);
if (ret < 0)
diff --git a/src/libcamera/v4l2_subdevice.cpp b/src/libcamera/v4l2_subdevice.cpp
index 61e15b69..b782325a 100644
--- a/src/libcamera/v4l2_subdevice.cpp
+++ b/src/libcamera/v4l2_subdevice.cpp
@@ -170,6 +170,21 @@ const std::map<uint32_t, V4L2SubdeviceFormatInfo> formatInfoMap = {
*/
/**
+ * \var V4L2SubdeviceFormat::colorSpace
+ * \brief The color space of the pixels
+ *
+ * The color space of the image. When setting the format this may be
+ * unset, in which case the driver gets to use its default color space.
+ * After being set, this value should contain the color space that
+ * was actually used. If this value is unset, then the color space chosen
+ * by the driver could not be represented by the ColorSpace class (and
+ * should probably be added).
+ *
+ * It is up to the pipeline handler or application to check if the
+ * resulting color space is acceptable.
+ */
+
+/**
* \brief Assemble and return a string describing the format
* \return A string describing the V4L2SubdeviceFormat
*/