Patch Detail
Show a patch.
GET /api/patches/13619/?format=api
{ "id": 13619, "url": "https://patchwork.libcamera.org/api/patches/13619/?format=api", "web_url": "https://patchwork.libcamera.org/patch/13619/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/projects/1/?format=api", "name": "libcamera", "link_name": "libcamera", "list_id": "libcamera_core", "list_email": "libcamera-devel@lists.libcamera.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20210906020100.14430-4-laurent.pinchart@ideasonboard.com>", "date": "2021-09-06T02:00:36", "name": "[libcamera-devel,v2,03/27] libcamera: v4l2_videodevice: Drop toV4L2PixelFormat()", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "67661a09dd6217ba70ed33c7667ac82fbf1ee1fc", "submitter": { "id": 2, "url": "https://patchwork.libcamera.org/api/people/2/?format=api", "name": "Laurent Pinchart", "email": "laurent.pinchart@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/13619/mbox/", "series": [ { "id": 2446, "url": "https://patchwork.libcamera.org/api/series/2446/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=2446", "date": "2021-09-06T02:00:33", "name": "libcamera: Handle fallout of FrameBuffer offset support", "version": 2, "mbox": "https://patchwork.libcamera.org/series/2446/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/13619/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/13619/checks/", "tags": {}, "headers": { "Return-Path": "<libcamera-devel-bounces@lists.libcamera.org>", "X-Original-To": "parsemail@patchwork.libcamera.org", "Delivered-To": "parsemail@patchwork.libcamera.org", "Received": [ "from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 8678DC3242\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 6 Sep 2021 02:01:26 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4686669170;\n\tMon, 6 Sep 2021 04:01:24 +0200 (CEST)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4E2DD69168\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 6 Sep 2021 04:01:22 +0200 (CEST)", "from pendragon.lan (62-78-145-57.bb.dnainternet.fi [62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id DFE9A317;\n\tMon, 6 Sep 2021 04:01:21 +0200 (CEST)" ], "Authentication-Results": "lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"ecAM9h2W\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1630893682;\n\tbh=haQutqc6PwSxhveNNoMpj+9cb863eutSY7ibo5UM+Ck=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=ecAM9h2W0PFpMicM38tH5i2hRq48tKAY63cypSv7m8T27HFoi+3eV+oXR7JCHARc0\n\t8xG28A8udULxxBUi2XCz2rq29eDoFu2yOtyUWJ1XHxc4Zkpwswqz3TCUwTMTYZ3BPp\n\tCQ8MdJet6BcrEH3aHM+tMXqQZYlfIN1TnV9y7wd8=", "From": "Laurent Pinchart <laurent.pinchart@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org", "Date": "Mon, 6 Sep 2021 05:00:36 +0300", "Message-Id": "<20210906020100.14430-4-laurent.pinchart@ideasonboard.com>", "X-Mailer": "git-send-email 2.32.0", "In-Reply-To": "<20210906020100.14430-1-laurent.pinchart@ideasonboard.com>", "References": "<20210906020100.14430-1-laurent.pinchart@ideasonboard.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [PATCH v2 03/27] libcamera: v4l2_videodevice:\n\tDrop toV4L2PixelFormat()", "X-BeenThere": "libcamera-devel@lists.libcamera.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "<libcamera-devel.lists.libcamera.org>", "List-Unsubscribe": "<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>", "List-Archive": "<https://lists.libcamera.org/pipermail/libcamera-devel/>", "List-Post": "<mailto:libcamera-devel@lists.libcamera.org>", "List-Help": "<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>", "List-Subscribe": "<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "The V4L2VideoDevice::toV4L2PixelFormat() function is incorrectly\nimplemented, as it will pick a multi-planar format if the device\nsupports the multi-planar API, even if only single-planar formats are\nsupported. This currently works because the implementation calls\nV4L2PixelFormat::fromPixelFormat(), which ignores the multiplanar\nargument and always returns a single-planar format.\n\nFixing this isn't trivial. As we don't need to support multi-planar V4L2\nformats at this point, drop the function instead of pretending\neverything is fine, and call V4L2PixelFormat::fromPixelFormat() directly\nfrom pipeline handlers. As the single-planar case is the most common,\nset the multiplanar argument to false by default to avoid long lines.\n\nSigned-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n include/libcamera/internal/v4l2_pixelformat.h | 2 +-\n include/libcamera/internal/v4l2_videodevice.h | 2 --\n src/libcamera/pipeline/ipu3/imgu.cpp | 2 +-\n .../pipeline/raspberrypi/raspberrypi.cpp | 8 ++++----\n src/libcamera/pipeline/rkisp1/rkisp1_path.cpp | 6 +++---\n src/libcamera/pipeline/simple/converter.cpp | 8 ++++----\n src/libcamera/pipeline/simple/simple.cpp | 4 ++--\n src/libcamera/pipeline/uvcvideo/uvcvideo.cpp | 6 +++---\n src/libcamera/pipeline/vimc/vimc.cpp | 8 ++++----\n src/libcamera/v4l2_videodevice.cpp | 17 -----------------\n test/libtest/buffer_source.cpp | 3 +--\n 11 files changed, 23 insertions(+), 43 deletions(-)", "diff": "diff --git a/include/libcamera/internal/v4l2_pixelformat.h b/include/libcamera/internal/v4l2_pixelformat.h\nindex 9bfd81ad6651..560c5c53c0c3 100644\n--- a/include/libcamera/internal/v4l2_pixelformat.h\n+++ b/include/libcamera/internal/v4l2_pixelformat.h\n@@ -38,7 +38,7 @@ public:\n \n \tPixelFormat toPixelFormat() const;\n \tstatic V4L2PixelFormat fromPixelFormat(const PixelFormat &pixelFormat,\n-\t\t\t\t\t bool multiplanar);\n+\t\t\t\t\t bool multiplanar = false);\n \n private:\n \tuint32_t fourcc_;\ndiff --git a/include/libcamera/internal/v4l2_videodevice.h b/include/libcamera/internal/v4l2_videodevice.h\nindex 7a145f608a5b..087ad067e37e 100644\n--- a/include/libcamera/internal/v4l2_videodevice.h\n+++ b/include/libcamera/internal/v4l2_videodevice.h\n@@ -212,8 +212,6 @@ public:\n \tstatic std::unique_ptr<V4L2VideoDevice>\n \tfromEntityName(const MediaDevice *media, const std::string &entity);\n \n-\tV4L2PixelFormat toV4L2PixelFormat(const PixelFormat &pixelFormat);\n-\n protected:\n \tstd::string logPrefix() const override;\n \ndiff --git a/src/libcamera/pipeline/ipu3/imgu.cpp b/src/libcamera/pipeline/ipu3/imgu.cpp\nindex 317e482a1498..3e1ef645ec93 100644\n--- a/src/libcamera/pipeline/ipu3/imgu.cpp\n+++ b/src/libcamera/pipeline/ipu3/imgu.cpp\n@@ -575,7 +575,7 @@ int ImgUDevice::configureVideoDevice(V4L2VideoDevice *dev, unsigned int pad,\n \t\treturn 0;\n \n \t*outputFormat = {};\n-\toutputFormat->fourcc = dev->toV4L2PixelFormat(formats::NV12);\n+\toutputFormat->fourcc = V4L2PixelFormat::fromPixelFormat(formats::NV12);\n \toutputFormat->size = cfg.size;\n \toutputFormat->planesCount = 2;\n \ndiff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\nindex b2674ac02109..0bdfa7273ce0 100644\n--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n@@ -440,14 +440,14 @@ CameraConfiguration::Status RPiCameraConfiguration::validate()\n \n \t\tV4L2VideoDevice::Formats fmts = dev->formats();\n \n-\t\tif (fmts.find(V4L2PixelFormat::fromPixelFormat(cfgPixFmt, false)) == fmts.end()) {\n+\t\tif (fmts.find(V4L2PixelFormat::fromPixelFormat(cfgPixFmt)) == fmts.end()) {\n \t\t\t/* If we cannot find a native format, use a default one. */\n \t\t\tcfgPixFmt = formats::NV12;\n \t\t\tstatus = Adjusted;\n \t\t}\n \n \t\tV4L2DeviceFormat format;\n-\t\tformat.fourcc = dev->toV4L2PixelFormat(cfg.pixelFormat);\n+\t\tformat.fourcc = V4L2PixelFormat::fromPixelFormat(cfg.pixelFormat);\n \t\tformat.size = cfg.size;\n \n \t\tint ret = dev->tryFormat(&format);\n@@ -647,7 +647,7 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)\n \t\tRPi::Stream *stream = i == maxIndex ? &data->isp_[Isp::Output0]\n \t\t\t\t\t\t : &data->isp_[Isp::Output1];\n \n-\t\tV4L2PixelFormat fourcc = stream->dev()->toV4L2PixelFormat(cfg.pixelFormat);\n+\t\tV4L2PixelFormat fourcc = V4L2PixelFormat::fromPixelFormat(cfg.pixelFormat);\n \t\tformat.size = cfg.size;\n \t\tformat.fourcc = fourcc;\n \n@@ -688,7 +688,7 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)\n \t\tmaxSize = Size(320, 240);\n \t\tformat = {};\n \t\tformat.size = maxSize;\n-\t\tformat.fourcc = V4L2PixelFormat::fromPixelFormat(formats::YUV420, false);\n+\t\tformat.fourcc = V4L2PixelFormat::fromPixelFormat(formats::YUV420);\n \t\tret = data->isp_[Isp::Output0].dev()->setFormat(&format);\n \t\tif (ret) {\n \t\t\tLOG(RPI, Error)\ndiff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp\nindex 25f482eb8d8e..f8d471204d2e 100644\n--- a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp\n+++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp\n@@ -80,7 +80,7 @@ CameraConfiguration::Status RkISP1Path::validate(StreamConfiguration *cfg)\n \tcfg->bufferCount = RKISP1_BUFFER_COUNT;\n \n \tV4L2DeviceFormat format;\n-\tformat.fourcc = video_->toV4L2PixelFormat(cfg->pixelFormat);\n+\tformat.fourcc = V4L2PixelFormat::fromPixelFormat(cfg->pixelFormat);\n \tformat.size = cfg->size;\n \n \tint ret = video_->tryFormat(&format);\n@@ -146,7 +146,7 @@ int RkISP1Path::configure(const StreamConfiguration &config,\n \n \tconst PixelFormatInfo &info = PixelFormatInfo::info(config.pixelFormat);\n \tV4L2DeviceFormat outputFormat;\n-\toutputFormat.fourcc = video_->toV4L2PixelFormat(config.pixelFormat);\n+\toutputFormat.fourcc = V4L2PixelFormat::fromPixelFormat(config.pixelFormat);\n \toutputFormat.size = config.size;\n \toutputFormat.planesCount = info.numPlanes();\n \n@@ -155,7 +155,7 @@ int RkISP1Path::configure(const StreamConfiguration &config,\n \t\treturn ret;\n \n \tif (outputFormat.size != config.size ||\n-\t outputFormat.fourcc != video_->toV4L2PixelFormat(config.pixelFormat)) {\n+\t outputFormat.fourcc != V4L2PixelFormat::fromPixelFormat(config.pixelFormat)) {\n \t\tLOG(RkISP1, Error)\n \t\t\t<< \"Unable to configure capture in \" << config.toString();\n \t\treturn -EINVAL;\ndiff --git a/src/libcamera/pipeline/simple/converter.cpp b/src/libcamera/pipeline/simple/converter.cpp\nindex b5e34c4cd0c5..9cbc6ee30ce4 100644\n--- a/src/libcamera/pipeline/simple/converter.cpp\n+++ b/src/libcamera/pipeline/simple/converter.cpp\n@@ -46,7 +46,7 @@ int SimpleConverter::Stream::configure(const StreamConfiguration &inputCfg,\n \t\t\t\t const StreamConfiguration &outputCfg)\n {\n \tV4L2PixelFormat videoFormat =\n-\t\tm2m_->output()->toV4L2PixelFormat(inputCfg.pixelFormat);\n+\t\tV4L2PixelFormat::fromPixelFormat(inputCfg.pixelFormat);\n \n \tV4L2DeviceFormat format;\n \tformat.fourcc = videoFormat;\n@@ -71,7 +71,7 @@ int SimpleConverter::Stream::configure(const StreamConfiguration &inputCfg,\n \t}\n \n \t/* Set the pixel format and size on the output. */\n-\tvideoFormat = m2m_->capture()->toV4L2PixelFormat(outputCfg.pixelFormat);\n+\tvideoFormat = V4L2PixelFormat::fromPixelFormat(outputCfg.pixelFormat);\n \tformat = {};\n \tformat.fourcc = videoFormat;\n \tformat.size = outputCfg.size;\n@@ -210,7 +210,7 @@ std::vector<PixelFormat> SimpleConverter::formats(PixelFormat input)\n \t * enumerate the conversion capabilities on its output (V4L2 capture).\n \t */\n \tV4L2DeviceFormat v4l2Format;\n-\tv4l2Format.fourcc = m2m_->output()->toV4L2PixelFormat(input);\n+\tv4l2Format.fourcc = V4L2PixelFormat::fromPixelFormat(input);\n \tv4l2Format.size = { 1, 1 };\n \n \tint ret = m2m_->output()->setFormat(&v4l2Format);\n@@ -281,7 +281,7 @@ SimpleConverter::strideAndFrameSize(const PixelFormat &pixelFormat,\n \t\t\t\t const Size &size)\n {\n \tV4L2DeviceFormat format;\n-\tformat.fourcc = m2m_->capture()->toV4L2PixelFormat(pixelFormat);\n+\tformat.fourcc = V4L2PixelFormat::fromPixelFormat(pixelFormat);\n \tformat.size = size;\n \n \tint ret = m2m_->capture()->tryFormat(&format);\ndiff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\nindex cadaf5d030ab..701fb4be0b71 100644\n--- a/src/libcamera/pipeline/simple/simple.cpp\n+++ b/src/libcamera/pipeline/simple/simple.cpp\n@@ -826,7 +826,7 @@ CameraConfiguration::Status SimpleCameraConfiguration::validate()\n \t\t\t\treturn Invalid;\n \t\t} else {\n \t\t\tV4L2DeviceFormat format;\n-\t\t\tformat.fourcc = data_->video_->toV4L2PixelFormat(cfg.pixelFormat);\n+\t\t\tformat.fourcc = V4L2PixelFormat::fromPixelFormat(cfg.pixelFormat);\n \t\t\tformat.size = cfg.size;\n \n \t\t\tint ret = data_->video_->tryFormat(&format);\n@@ -915,7 +915,7 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c)\n \t\treturn ret;\n \n \t/* Configure the video node. */\n-\tV4L2PixelFormat videoFormat = video->toV4L2PixelFormat(pipeConfig->captureFormat);\n+\tV4L2PixelFormat videoFormat = V4L2PixelFormat::fromPixelFormat(pipeConfig->captureFormat);\n \n \tV4L2DeviceFormat captureFormat;\n \tcaptureFormat.fourcc = videoFormat;\ndiff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\nindex 973ecd5b835e..264f5370cf32 100644\n--- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n+++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp\n@@ -151,7 +151,7 @@ CameraConfiguration::Status UVCCameraConfiguration::validate()\n \tcfg.bufferCount = 4;\n \n \tV4L2DeviceFormat format;\n-\tformat.fourcc = data_->video_->toV4L2PixelFormat(cfg.pixelFormat);\n+\tformat.fourcc = V4L2PixelFormat::fromPixelFormat(cfg.pixelFormat);\n \tformat.size = cfg.size;\n \n \tint ret = data_->video_->tryFormat(&format);\n@@ -207,7 +207,7 @@ int PipelineHandlerUVC::configure(Camera *camera, CameraConfiguration *config)\n \tint ret;\n \n \tV4L2DeviceFormat format;\n-\tformat.fourcc = data->video_->toV4L2PixelFormat(cfg.pixelFormat);\n+\tformat.fourcc = V4L2PixelFormat::fromPixelFormat(cfg.pixelFormat);\n \tformat.size = cfg.size;\n \n \tret = data->video_->setFormat(&format);\n@@ -215,7 +215,7 @@ int PipelineHandlerUVC::configure(Camera *camera, CameraConfiguration *config)\n \t\treturn ret;\n \n \tif (format.size != cfg.size ||\n-\t format.fourcc != data->video_->toV4L2PixelFormat(cfg.pixelFormat))\n+\t format.fourcc != V4L2PixelFormat::fromPixelFormat(cfg.pixelFormat))\n \t\treturn -EINVAL;\n \n \tcfg.setStream(&data->stream_);\ndiff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp\nindex baeb6a7e6fa6..e453091da4b2 100644\n--- a/src/libcamera/pipeline/vimc/vimc.cpp\n+++ b/src/libcamera/pipeline/vimc/vimc.cpp\n@@ -170,7 +170,7 @@ CameraConfiguration::Status VimcCameraConfiguration::validate()\n \tcfg.bufferCount = 4;\n \n \tV4L2DeviceFormat format;\n-\tformat.fourcc = data_->video_->toV4L2PixelFormat(cfg.pixelFormat);\n+\tformat.fourcc = V4L2PixelFormat::fromPixelFormat(cfg.pixelFormat);\n \tformat.size = cfg.size;\n \n \tint ret = data_->video_->tryFormat(&format);\n@@ -274,7 +274,7 @@ int PipelineHandlerVimc::configure(Camera *camera, CameraConfiguration *config)\n \t\treturn ret;\n \n \tV4L2DeviceFormat format;\n-\tformat.fourcc = data->video_->toV4L2PixelFormat(cfg.pixelFormat);\n+\tformat.fourcc = V4L2PixelFormat::fromPixelFormat(cfg.pixelFormat);\n \tformat.size = cfg.size;\n \n \tret = data->video_->setFormat(&format);\n@@ -282,7 +282,7 @@ int PipelineHandlerVimc::configure(Camera *camera, CameraConfiguration *config)\n \t\treturn ret;\n \n \tif (format.size != cfg.size ||\n-\t format.fourcc != data->video_->toV4L2PixelFormat(cfg.pixelFormat))\n+\t format.fourcc != V4L2PixelFormat::fromPixelFormat(cfg.pixelFormat))\n \t\treturn -EINVAL;\n \n \t/*\n@@ -597,7 +597,7 @@ int VimcCameraData::allocateMockIPABuffers()\n \tconstexpr unsigned int kBufCount = 2;\n \n \tV4L2DeviceFormat format;\n-\tformat.fourcc = video_->toV4L2PixelFormat(formats::BGR888);\n+\tformat.fourcc = V4L2PixelFormat::fromPixelFormat(formats::BGR888);\n \tformat.size = Size (160, 120);\n \n \tint ret = video_->setFormat(&format);\ndiff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp\nindex 4e1c2b7cef5e..84ccb97495f5 100644\n--- a/src/libcamera/v4l2_videodevice.cpp\n+++ b/src/libcamera/v4l2_videodevice.cpp\n@@ -1687,23 +1687,6 @@ V4L2VideoDevice::fromEntityName(const MediaDevice *media,\n \treturn std::make_unique<V4L2VideoDevice>(mediaEntity);\n }\n \n-/**\n- * \\brief Convert \\a PixelFormat to its corresponding V4L2 FourCC\n- * \\param[in] pixelFormat The PixelFormat to convert\n- *\n- * For multiplanar formats, the V4L2 format variant (contiguous or\n- * non-contiguous planes) is selected automatically based on the capabilities\n- * of the video device. If the video device supports the V4L2 multiplanar API,\n- * non-contiguous formats are preferred.\n- *\n- * \\return The V4L2_PIX_FMT_* pixel format code corresponding to \\a pixelFormat\n- */\n-V4L2PixelFormat V4L2VideoDevice::toV4L2PixelFormat(const PixelFormat &pixelFormat)\n-{\n-\treturn V4L2PixelFormat::fromPixelFormat(pixelFormat,\n-\t\t\t\t\t\tcaps_.isMultiplanar());\n-}\n-\n /**\n * \\class V4L2M2MDevice\n * \\brief Memory-to-Memory video device\ndiff --git a/test/libtest/buffer_source.cpp b/test/libtest/buffer_source.cpp\nindex 73563f2fc39d..64e7376ad575 100644\n--- a/test/libtest/buffer_source.cpp\n+++ b/test/libtest/buffer_source.cpp\n@@ -70,8 +70,7 @@ int BufferSource::allocate(const StreamConfiguration &config)\n \t}\n \n \tformat.size = config.size;\n-\tformat.fourcc = V4L2PixelFormat::fromPixelFormat(config.pixelFormat,\n-\t\t\t\t\t\t\t false);\n+\tformat.fourcc = V4L2PixelFormat::fromPixelFormat(config.pixelFormat);\n \tif (video->setFormat(&format)) {\n \t\tstd::cout << \"Failed to set format on output device\" << std::endl;\n \t\treturn TestFail;\n", "prefixes": [ "libcamera-devel", "v2", "03/27" ] }