From patchwork Sun Oct 27 23:43:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 2246 Return-Path: Received: from relay7-d.mail.gandi.net (relay7-d.mail.gandi.net [217.70.183.200]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 447E161517 for ; Mon, 28 Oct 2019 00:41:29 +0100 (CET) X-Originating-IP: 93.2.121.143 Received: from uno.localdomain (143.121.2.93.rev.sfr.net [93.2.121.143]) (Authenticated sender: jacopo@jmondi.org) by relay7-d.mail.gandi.net (Postfix) with ESMTPSA id D1CAD20002; Sun, 27 Oct 2019 23:41:28 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Date: Mon, 28 Oct 2019 00:43:10 +0100 Message-Id: <20191027234312.35284-9-jacopo@jmondi.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191027234312.35284-1-jacopo@jmondi.org> References: <20191027234312.35284-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 08/10] libcamera: pipeline: Use PixelFormat for application formats X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 27 Oct 2019 23:41:29 -0000 Use the newly defined PixelFormat, which uses the DRM_FORMAT_* fourcc for image formats provided to applications. Signed-off-by: Jacopo Mondi --- src/libcamera/pipeline/ipu3/ipu3.cpp | 7 ++++--- src/libcamera/pipeline/rkisp1/rkisp1.cpp | 25 ++++++++++++------------ src/libcamera/pipeline/uvcvideo.cpp | 4 ++-- src/libcamera/pipeline/vimc.cpp | 15 +++++++------- 4 files changed, 27 insertions(+), 24 deletions(-) diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp index 8d3ad568d16e..1c5fccf69428 100644 --- a/src/libcamera/pipeline/ipu3/ipu3.cpp +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include @@ -249,7 +250,7 @@ IPU3CameraConfiguration::IPU3CameraConfiguration(Camera *camera, void IPU3CameraConfiguration::adjustStream(StreamConfiguration &cfg, bool scale) { /* The only pixel format the driver supports is NV12. */ - cfg.pixelFormat = V4L2_PIX_FMT_NV12; + cfg.pixelFormat = DRM_FORMAT_NV12; if (scale) { /* @@ -404,7 +405,7 @@ CameraConfiguration *PipelineHandlerIPU3::generateConfiguration(Camera *camera, StreamConfiguration cfg = {}; IPU3Stream *stream = nullptr; - cfg.pixelFormat = V4L2_PIX_FMT_NV12; + cfg.pixelFormat = DRM_FORMAT_NV12; switch (role) { case StreamRole::StillCapture: @@ -1121,7 +1122,7 @@ int ImgUDevice::configureOutput(ImgUOutput *output, return 0; V4L2DeviceFormat outputFormat = {}; - outputFormat.fourcc = V4L2_PIX_FMT_NV12; + outputFormat.fourcc = dev->toV4L2Fourcc(DRM_FORMAT_NV12); outputFormat.size = cfg.size; outputFormat.planesCount = 2; diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp index 7a28b03b8d38..b21cf92435e7 100644 --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include @@ -434,14 +435,14 @@ RkISP1CameraConfiguration::RkISP1CameraConfiguration(Camera *camera, CameraConfiguration::Status RkISP1CameraConfiguration::validate() { static const std::array formats{ - V4L2_PIX_FMT_YUYV, - V4L2_PIX_FMT_YVYU, - V4L2_PIX_FMT_VYUY, - V4L2_PIX_FMT_NV16, - V4L2_PIX_FMT_NV61, - V4L2_PIX_FMT_NV21, - V4L2_PIX_FMT_NV12, - V4L2_PIX_FMT_GREY, + DRM_FORMAT_YUYV, + DRM_FORMAT_YVYU, + DRM_FORMAT_VYUY, + DRM_FORMAT_NV16, + DRM_FORMAT_NV61, + DRM_FORMAT_NV21, + DRM_FORMAT_NV12, + /* \todo Add support for 8-bit greyscale to DRM formats */ }; const CameraSensor *sensor = data_->sensor_; @@ -462,7 +463,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 = V4L2_PIX_FMT_NV12; + cfg.pixelFormat = DRM_FORMAT_NV12, status = Adjusted; } @@ -541,7 +542,7 @@ CameraConfiguration *PipelineHandlerRkISP1::generateConfiguration(Camera *camera return config; StreamConfiguration cfg{}; - cfg.pixelFormat = V4L2_PIX_FMT_NV12; + cfg.pixelFormat = DRM_FORMAT_NV12; cfg.size = data->sensor_->resolution(); config->addConfiguration(cfg); @@ -623,7 +624,7 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c) LOG(RkISP1, Debug) << "ISP output pad configured with " << format.toString(); V4L2DeviceFormat outputFormat = {}; - outputFormat.fourcc = cfg.pixelFormat; + outputFormat.fourcc = video_->toV4L2Fourcc(cfg.pixelFormat); outputFormat.size = cfg.size; outputFormat.planesCount = 2; @@ -632,7 +633,7 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c) return ret; if (outputFormat.size != cfg.size || - outputFormat.fourcc != cfg.pixelFormat) { + outputFormat.fourcc != video_->toV4L2Fourcc(cfg.pixelFormat)) { LOG(RkISP1, Error) << "Unable to configure capture in " << cfg.toString(); return -EINVAL; diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp index fae0ffc4de30..45448d6f8c05 100644 --- a/src/libcamera/pipeline/uvcvideo.cpp +++ b/src/libcamera/pipeline/uvcvideo.cpp @@ -176,7 +176,7 @@ int PipelineHandlerUVC::configure(Camera *camera, CameraConfiguration *config) int ret; V4L2DeviceFormat format = {}; - format.fourcc = cfg.pixelFormat; + format.fourcc = data->video_->toV4L2Fourcc(cfg.pixelFormat); format.size = cfg.size; ret = data->video_->setFormat(&format); @@ -184,7 +184,7 @@ int PipelineHandlerUVC::configure(Camera *camera, CameraConfiguration *config) return ret; if (format.size != cfg.size || - format.fourcc != cfg.pixelFormat) + format.fourcc != data->video_->toV4L2Fourcc(cfg.pixelFormat)) return -EINVAL; cfg.setStream(&data->stream_); diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp index c16ae4cb76b5..e6ab6a085824 100644 --- a/src/libcamera/pipeline/vimc.cpp +++ b/src/libcamera/pipeline/vimc.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include @@ -106,9 +107,9 @@ private: namespace { constexpr std::array pixelformats{ - V4L2_PIX_FMT_BGR24, - V4L2_PIX_FMT_RGB24, - V4L2_PIX_FMT_ARGB32, + DRM_FORMAT_RGB888, + DRM_FORMAT_BGR888, + DRM_FORMAT_BGRA8888, }; } /* namespace */ @@ -137,7 +138,7 @@ CameraConfiguration::Status VimcCameraConfiguration::validate() if (std::find(pixelformats.begin(), pixelformats.end(), cfg.pixelFormat) == pixelformats.end()) { LOG(VIMC, Debug) << "Adjusting format to RGB24"; - cfg.pixelFormat = V4L2_PIX_FMT_RGB24; + cfg.pixelFormat = DRM_FORMAT_BGR888; status = Adjusted; } @@ -186,7 +187,7 @@ CameraConfiguration *PipelineHandlerVimc::generateConfiguration(Camera *camera, StreamConfiguration cfg(formats.data()); - cfg.pixelFormat = V4L2_PIX_FMT_RGB24; + cfg.pixelFormat = DRM_FORMAT_BGR888; cfg.size = { 1920, 1080 }; cfg.bufferCount = 4; @@ -231,7 +232,7 @@ int PipelineHandlerVimc::configure(Camera *camera, CameraConfiguration *config) return ret; V4L2DeviceFormat format = {}; - format.fourcc = cfg.pixelFormat; + format.fourcc = data->video_->toV4L2Fourcc(cfg.pixelFormat); format.size = cfg.size; ret = data->video_->setFormat(&format); @@ -239,7 +240,7 @@ int PipelineHandlerVimc::configure(Camera *camera, CameraConfiguration *config) return ret; if (format.size != cfg.size || - format.fourcc != cfg.pixelFormat) + format.fourcc != data->video_->toV4L2Fourcc(cfg.pixelFormat)) return -EINVAL; /*