@@ -11,9 +11,11 @@
#include <queue>
#include <vector>
+#include <linux/drm_fourcc.h>
#include <linux/media-bus-format.h>
#include <libcamera/camera.h>
+#include <libcamera/formats.h>
#include <libcamera/request.h>
#include <libcamera/stream.h>
@@ -34,10 +36,10 @@ LOG_DEFINE_CATEGORY(IPU3)
class IPU3CameraData;
static const std::map<uint32_t, PixelFormat> sensorMbusToPixel = {
- { MEDIA_BUS_FMT_SBGGR10_1X10, PixelFormat(DRM_FORMAT_SBGGR10, IPU3_FORMAT_MOD_PACKED) },
- { MEDIA_BUS_FMT_SGBRG10_1X10, PixelFormat(DRM_FORMAT_SGBRG10, IPU3_FORMAT_MOD_PACKED) },
- { MEDIA_BUS_FMT_SGRBG10_1X10, PixelFormat(DRM_FORMAT_SGRBG10, IPU3_FORMAT_MOD_PACKED) },
- { MEDIA_BUS_FMT_SRGGB10_1X10, PixelFormat(DRM_FORMAT_SRGGB10, IPU3_FORMAT_MOD_PACKED) },
+ { MEDIA_BUS_FMT_SBGGR10_1X10, formats::SBGGR10_IPU3 },
+ { MEDIA_BUS_FMT_SGBRG10_1X10, formats::SGBRG10_IPU3 },
+ { MEDIA_BUS_FMT_SGRBG10_1X10, formats::SGRBG10_IPU3 },
+ { MEDIA_BUS_FMT_SRGGB10_1X10, formats::SRGGB10_IPU3 },
};
class ImgUDevice
@@ -261,7 +263,7 @@ IPU3CameraConfiguration::IPU3CameraConfiguration(Camera *camera,
void IPU3CameraConfiguration::adjustStream(StreamConfiguration &cfg, bool scale)
{
/* The only pixel format the driver supports is NV12. */
- cfg.pixelFormat = PixelFormat(DRM_FORMAT_NV12);
+ cfg.pixelFormat = formats::NV12;
if (scale) {
/*
@@ -430,7 +432,7 @@ CameraConfiguration *PipelineHandlerIPU3::generateConfiguration(Camera *camera,
StreamConfiguration cfg = {};
IPU3Stream *stream = nullptr;
- cfg.pixelFormat = PixelFormat(DRM_FORMAT_NV12);
+ cfg.pixelFormat = formats::NV12;
switch (role) {
case StreamRole::StillCapture:
@@ -1193,7 +1195,7 @@ int ImgUDevice::configureOutput(ImgUOutput *output,
return 0;
*outputFormat = {};
- outputFormat->fourcc = dev->toV4L2PixelFormat(PixelFormat(DRM_FORMAT_NV12));
+ outputFormat->fourcc = dev->toV4L2PixelFormat(formats::NV12);
outputFormat->size = cfg.size;
outputFormat->planesCount = 2;
@@ -13,12 +13,12 @@
#include <libcamera/camera.h>
#include <libcamera/control_ids.h>
+#include <libcamera/formats.h>
#include <libcamera/ipa/raspberrypi.h>
#include <libcamera/logging.h>
#include <libcamera/request.h>
#include <libcamera/stream.h>
-#include <linux/drm_fourcc.h>
#include <linux/videodev2.h>
#include "libcamera/internal/camera_sensor.h"
@@ -490,7 +490,7 @@ CameraConfiguration::Status RPiCameraConfiguration::validate()
if (fmts.find(V4L2PixelFormat::fromPixelFormat(cfgPixFmt, false)) == fmts.end()) {
/* If we cannot find a native format, use a default one. */
- cfgPixFmt = PixelFormat(DRM_FORMAT_NV12);
+ cfgPixFmt = formats::NV12;
status = Adjusted;
}
}
@@ -537,20 +537,20 @@ CameraConfiguration *PipelineHandlerRPi::generateConfiguration(Camera *camera,
break;
case StreamRole::StillCapture:
- cfg.pixelFormat = PixelFormat(DRM_FORMAT_NV12);
+ cfg.pixelFormat = formats::NV12;
/* Return the largest sensor resolution. */
cfg.size = data->sensor_->resolution();
cfg.bufferCount = 1;
break;
case StreamRole::VideoRecording:
- cfg.pixelFormat = PixelFormat(DRM_FORMAT_NV12);
+ cfg.pixelFormat = formats::NV12;
cfg.size = { 1920, 1080 };
cfg.bufferCount = 4;
break;
case StreamRole::Viewfinder:
- cfg.pixelFormat = PixelFormat(DRM_FORMAT_ARGB8888);
+ cfg.pixelFormat = formats::ARGB8888;
cfg.size = { 800, 600 };
cfg.bufferCount = 4;
break;
@@ -16,6 +16,7 @@
#include <libcamera/buffer.h>
#include <libcamera/camera.h>
#include <libcamera/control_ids.h>
+#include <libcamera/formats.h>
#include <libcamera/ipa/rkisp1.h>
#include <libcamera/request.h>
#include <libcamera/stream.h>
@@ -459,13 +460,13 @@ RkISP1CameraConfiguration::RkISP1CameraConfiguration(Camera *camera,
CameraConfiguration::Status RkISP1CameraConfiguration::validate()
{
static const std::array<PixelFormat, 8> formats{
- PixelFormat(DRM_FORMAT_YUYV),
- PixelFormat(DRM_FORMAT_YVYU),
- PixelFormat(DRM_FORMAT_VYUY),
- PixelFormat(DRM_FORMAT_NV16),
- PixelFormat(DRM_FORMAT_NV61),
- PixelFormat(DRM_FORMAT_NV21),
- PixelFormat(DRM_FORMAT_NV12),
+ formats::YUYV,
+ formats::YVYU,
+ formats::VYUY,
+ formats::NV16,
+ formats::NV61,
+ formats::NV21,
+ formats::NV12,
/* \todo Add support for 8-bit greyscale to DRM formats */
};
@@ -487,7 +488,7 @@ CameraConfiguration::Status RkISP1CameraConfiguration::validate()
if (std::find(formats.begin(), formats.end(), cfg.pixelFormat) ==
formats.end()) {
LOG(RkISP1, Debug) << "Adjusting format to NV12";
- cfg.pixelFormat = PixelFormat(DRM_FORMAT_NV12),
+ cfg.pixelFormat = formats::NV12,
status = Adjusted;
}
@@ -566,7 +567,7 @@ CameraConfiguration *PipelineHandlerRkISP1::generateConfiguration(Camera *camera
return config;
StreamConfiguration cfg{};
- cfg.pixelFormat = PixelFormat(DRM_FORMAT_NV12);
+ cfg.pixelFormat = formats::NV12;
cfg.size = data->sensor_->resolution();
config->addConfiguration(cfg);
@@ -17,6 +17,7 @@
#include <libcamera/camera.h>
#include <libcamera/control_ids.h>
#include <libcamera/controls.h>
+#include <libcamera/formats.h>
#include <libcamera/ipa/ipa_interface.h>
#include <libcamera/ipa/ipa_module_info.h>
#include <libcamera/request.h>
@@ -108,8 +109,8 @@ private:
namespace {
static const std::map<PixelFormat, uint32_t> pixelformats{
- { PixelFormat(DRM_FORMAT_RGB888), MEDIA_BUS_FMT_BGR888_1X24 },
- { PixelFormat(DRM_FORMAT_BGR888), MEDIA_BUS_FMT_RGB888_1X24 },
+ { formats::RGB888, MEDIA_BUS_FMT_BGR888_1X24 },
+ { formats::BGR888, MEDIA_BUS_FMT_RGB888_1X24 },
};
} /* namespace */
@@ -138,7 +139,7 @@ CameraConfiguration::Status VimcCameraConfiguration::validate()
const std::vector<libcamera::PixelFormat> formats = cfg.formats().pixelformats();
if (std::find(formats.begin(), formats.end(), cfg.pixelFormat) == formats.end()) {
LOG(VIMC, Debug) << "Adjusting format to BGR888";
- cfg.pixelFormat = PixelFormat(DRM_FORMAT_BGR888);
+ cfg.pixelFormat = formats::BGR888;
status = Adjusted;
}
@@ -184,7 +185,7 @@ CameraConfiguration *PipelineHandlerVimc::generateConfiguration(Camera *camera,
* but it isn't functional within the pipeline.
*/
if (data->media_->version() < KERNEL_VERSION(5, 7, 0)) {
- if (pixelformat.first != PixelFormat(DRM_FORMAT_BGR888)) {
+ if (pixelformat.first != formats::BGR888) {
LOG(VIMC, Info)
<< "Skipping unsupported pixel format "
<< pixelformat.first.toString();
@@ -201,7 +202,7 @@ CameraConfiguration *PipelineHandlerVimc::generateConfiguration(Camera *camera,
StreamConfiguration cfg(formats);
- cfg.pixelFormat = PixelFormat(DRM_FORMAT_BGR888);
+ cfg.pixelFormat = formats::BGR888;
cfg.size = { 1920, 1080 };
cfg.bufferCount = 4;
Use the new pixel format constants to replace usage of macros from drm_fourcc.h. The IPU3 pipeline handler still uses DRM FourCCs for IPU3-specific formats that are not defined in the libcamera public API. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- Changes since v1: - Use formats::S[RGB]{4}_IPU3 in the IPU3 pipeline handler --- src/libcamera/pipeline/ipu3/ipu3.cpp | 16 +++++++++------- .../pipeline/raspberrypi/raspberrypi.cpp | 10 +++++----- src/libcamera/pipeline/rkisp1/rkisp1.cpp | 19 ++++++++++--------- src/libcamera/pipeline/vimc/vimc.cpp | 11 ++++++----- 4 files changed, 30 insertions(+), 26 deletions(-)