[{"id":33076,"web_url":"https://patchwork.libcamera.org/comment/33076/","msgid":"<173688986954.716543.7528650271024478159@ping.linuxembedded.co.uk>","date":"2025-01-14T21:24:29","subject":"Re: [PATCH] libcamera: meson: Fix libyuv detection","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Kieran Bingham (2025-01-14 21:19:35)\n> From: Dylan Aïssi <daissi@debian.org>\n> \n> We already fall back to a subproject to support the libyuv package when\n> it can not be discovered through the usual dependency() mechanism.\n> \n> Unfortunately libyuv may be packaged without any corresponding\n> pkg-config support as can be seen at [0], so further extend the\n> dependency search by using an explicit cc.find_library() call.\n> \n> [0] https://packages.debian.org/bookworm/amd64/libyuv-dev/filelist\n> \n> Signed-off-by: Dylan Aïssi <dylan.aissi@collabora.com>\n\nI've posted this patch on Dylan's behalf from\nhttps://salsa.debian.org/multimedia-team/libcamera/-/commit/685482827a0e6fe5dfe19778e633ab95b703cef4\nthough I have reworded the commit message and comment inline, but the\ncore functional change is direct from Dylan's patch...\n\n\nOn Ubuntu 22.04.5 LTS:\n\n$ sudo apt install libyuv-dev\n\n...\nlibcamera$ meson setup ...\n...\nFound pkg-config: YES (/usr/bin/pkg-config) 0.29.2\nFound CMake: /usr/bin/cmake (3.22.1)\nRun-time dependency libyuv found: NO (tried pkgconfig and cmake)\nLibrary yuv found: YES\nLibrary atomic found: YES\n...\n\n(Based on the second Library yuv found: YES)\n\nTested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> ---\n>  src/meson.build | 11 ++++++++---\n>  1 file changed, 8 insertions(+), 3 deletions(-)\n> \n> diff --git a/src/meson.build b/src/meson.build\n> index 76198e9535db..0a9cdff8e7dc 100644\n> --- a/src/meson.build\n> +++ b/src/meson.build\n> @@ -27,10 +27,15 @@ else\n>      ipa_sign_module = false\n>  endif\n>  \n> -# libyuv, used by the Android adaptation layer and the virtual pipeline handler.\n> -# Fallback to a subproject if libyuv isn't found, as it's typically not provided\n> -# by distributions.\n> +# libyuv, used by the Android adaptation layer and the virtual pipeline\n> +# handler. Fallback to a subproject if libyuv isn't found, as it's typically\n> +# not provided by distributions. Where libyuv is provided by a distribution, it\n> +# may not always supply a pkg-config implementation, requiring cc.find_library()\n> +# to search for it.\n>  libyuv_dep = dependency('libyuv', required : false)\n> +if not libyuv_dep.found()\n> +    libyuv_dep = cc.find_library('yuv', required: false)\n> +endif\n>  \n>  if (pipelines.contains('virtual') or get_option('android').allowed()) and \\\n>     not libyuv_dep.found()\n> -- \n> 2.47.1\n>","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 04C91C3301\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 14 Jan 2025 21:24:34 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 3883D684E4;\n\tTue, 14 Jan 2025 22:24:34 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id C5719607D6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 14 Jan 2025 22:24:32 +0100 (CET)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 3FB7ABEB;\n\tTue, 14 Jan 2025 22:23:35 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"saIbyy+s\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1736889815;\n\tbh=tjpUIIO00Zb97aTj3pp3tJ6DUSVXsgSGOVb6jh1L17U=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=saIbyy+s661Nd08W+ZhFO406dzKyCnc64FSGr0UqroRtrzgfY14Q+3f+IMcStDB2z\n\tHmFZ7CJ0fAKeoAqGRrQpq90+MEAJfqvDt6Eu7qt1xwGGWgG2o5BcXKhDjADut8VI44\n\tbe9mBc0GBoXkJY9NqwXiT6p5zNbB0MK2bQjOyaA8=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20250114211935.715028-1-kieran.bingham@ideasonboard.com>","References":"<20250114211935.715028-1-kieran.bingham@ideasonboard.com>","Subject":"Re: [PATCH] libcamera: meson: Fix libyuv detection","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Dylan =?utf-8?b?QcOvc3Np?= <daissi@debian.org>, Dylan\n\t=?utf-8?b?QcOvc3Np?= <dylan.aissi@collabora.com>","To":"libcamera devel <libcamera-devel@lists.libcamera.org>","Date":"Tue, 14 Jan 2025 21:24:29 +0000","Message-ID":"<173688986954.716543.7528650271024478159@ping.linuxembedded.co.uk>","User-Agent":"alot/0.10","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>"}},{"id":33077,"web_url":"https://patchwork.libcamera.org/comment/33077/","msgid":"<173688999825.716543.6334654053361381737@ping.linuxembedded.co.uk>","date":"2025-01-14T21:26:38","subject":"Re: [PATCH] libcamera: meson: Fix libyuv detection","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Kieran Bingham (2025-01-14 21:19:35)\n> From: Dylan Aïssi <daissi@debian.org>\n> \n> We already fall back to a subproject to support the libyuv package when\n> it can not be discovered through the usual dependency() mechanism.\n> \n> Unfortunately libyuv may be packaged without any corresponding\n> pkg-config support as can be seen at [0], so further extend the\n> dependency search by using an explicit cc.find_library() call.\n> \n> [0] https://packages.debian.org/bookworm/amd64/libyuv-dev/filelist\n> \n> Signed-off-by: Dylan Aïssi <dylan.aissi@collabora.com>\n\nDylan, I've taken this tag from \n\nhttps://salsa.debian.org/multimedia-team/libcamera/-/commit/685482827a0e6fe5dfe19778e633ab95b703cef4\n\nHowever it doesn't match the author of that patch so it will fail our\nCI.\n\nCan you confirm who should be the author+signoff for this please?\n\nIf daissi@debian.org is correct, just replying with the correct SoB will\nlet patchwork pick up the tag.\n\n--\nKieran\n\n\n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> ---\n>  src/meson.build | 11 ++++++++---\n>  1 file changed, 8 insertions(+), 3 deletions(-)\n> \n> diff --git a/src/meson.build b/src/meson.build\n> index 76198e9535db..0a9cdff8e7dc 100644\n> --- a/src/meson.build\n> +++ b/src/meson.build\n> @@ -27,10 +27,15 @@ else\n>      ipa_sign_module = false\n>  endif\n>  \n> -# libyuv, used by the Android adaptation layer and the virtual pipeline handler.\n> -# Fallback to a subproject if libyuv isn't found, as it's typically not provided\n> -# by distributions.\n> +# libyuv, used by the Android adaptation layer and the virtual pipeline\n> +# handler. Fallback to a subproject if libyuv isn't found, as it's typically\n> +# not provided by distributions. Where libyuv is provided by a distribution, it\n> +# may not always supply a pkg-config implementation, requiring cc.find_library()\n> +# to search for it.\n>  libyuv_dep = dependency('libyuv', required : false)\n> +if not libyuv_dep.found()\n> +    libyuv_dep = cc.find_library('yuv', required: false)\n> +endif\n>  \n>  if (pipelines.contains('virtual') or get_option('android').allowed()) and \\\n>     not libyuv_dep.found()\n> -- \n> 2.47.1\n>","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 8DCEAC3301\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 14 Jan 2025 21:26:42 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id E5B1E68541;\n\tTue, 14 Jan 2025 22:26:41 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E6FDC684E4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 14 Jan 2025 22:26:40 +0100 (CET)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 8F14BD77;\n\tTue, 14 Jan 2025 22:25:43 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"lutGiNEv\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1736889943;\n\tbh=zprrsn4lAU7yMxRxgl4WFsCfYEM8uc1bxceohOnow1I=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=lutGiNEvX3lZQ/8zA4UTndGnvKvbbXrZvb+v8nt7gvDvfkQdtoh4imRH+P8Z1kQFt\n\t9FPKUMOBDi81LXHAc8GI0ejqBsmJVCLsJuEsZF8DrdUiXFL3opUQzReIvS35pLwBVz\n\tU/XbicNLyHwRO5kCUqIwTsmGf2RYZOWUgsJRZIUg=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20250114211935.715028-1-kieran.bingham@ideasonboard.com>","References":"<20250114211935.715028-1-kieran.bingham@ideasonboard.com>","Subject":"Re: [PATCH] libcamera: meson: Fix libyuv detection","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Dylan =?utf-8?b?QcOvc3Np?= <daissi@debian.org>, Dylan\n\t=?utf-8?b?QcOvc3Np?= <dylan.aissi@collabora.com>","To":"libcamera devel <libcamera-devel@lists.libcamera.org>","Date":"Tue, 14 Jan 2025 21:26:38 +0000","Message-ID":"<173688999825.716543.6334654053361381737@ping.linuxembedded.co.uk>","User-Agent":"alot/0.10","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>"}},{"id":33078,"web_url":"https://patchwork.libcamera.org/comment/33078/","msgid":"<Ow9IKbU3bztMg6y9xKvL5l1gwGD85iPZKBOZy4xF1TbVoyMnYdFUsfDTX8xZ-hvVcJo_xufKquBk35rL_Bi0bvC1O7UG8IzqFN9IJEmXZds=@protonmail.com>","date":"2025-01-14T21:39:40","subject":"Re: [PATCH] libcamera: meson: Fix libyuv detection","submitter":{"id":133,"url":"https://patchwork.libcamera.org/api/people/133/","name":"Pőcze Barnabás","email":"pobrn@protonmail.com"},"content":"Hi\n\n\n2025. január 14., kedd 22:24 keltezéssel, Kieran Bingham <kieran.bingham@ideasonboard.com> írta:\n\n> Quoting Kieran Bingham (2025-01-14 21:19:35)\n> > From: Dylan Aïssi <daissi@debian.org>\n> >\n> > We already fall back to a subproject to support the libyuv package when\n> > it can not be discovered through the usual dependency() mechanism.\n> >\n> > Unfortunately libyuv may be packaged without any corresponding\n> > pkg-config support as can be seen at [0], so further extend the\n> > dependency search by using an explicit cc.find_library() call.\n> >\n> > [0] https://packages.debian.org/bookworm/amd64/libyuv-dev/filelist\n> >\n> > Signed-off-by: Dylan Aïssi <dylan.aissi@collabora.com>\n> \n> I've posted this patch on Dylan's behalf from\n> https://salsa.debian.org/multimedia-team/libcamera/-/commit/685482827a0e6fe5dfe19778e633ab95b703cef4\n> though I have reworded the commit message and comment inline, but the\n> core functional change is direct from Dylan's patch...\n> \n> \n> On Ubuntu 22.04.5 LTS:\n> \n> $ sudo apt install libyuv-dev\n> \n> ...\n> libcamera$ meson setup ...\n> ...\n> Found pkg-config: YES (/usr/bin/pkg-config) 0.29.2\n> Found CMake: /usr/bin/cmake (3.22.1)\n> Run-time dependency libyuv found: NO (tried pkgconfig and cmake)\n> Library yuv found: YES\n> Library atomic found: YES\n> ...\n> \n> (Based on the second Library yuv found: YES)\n> \n> Tested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\nThis is the change I have locally to achieve the same:\n\ndiff --git a/src/meson.build b/src/meson.build\nindex 76198e953..8cb4af61a 100644\n--- a/src/meson.build\n+++ b/src/meson.build\n@@ -30,7 +30,20 @@ endif\n # libyuv, used by the Android adaptation layer and the virtual pipeline handler.\n # Fallback to a subproject if libyuv isn't found, as it's typically not provided\n # by distributions.\n-libyuv_dep = dependency('libyuv', required : false)\n+\n+if not get_option('force_fallback_for').contains('libyuv')\n+    libyuv_dep = dependency('libyuv', required : false)\n+\n+    if not libyuv_dep.found()\n+        libyuv_dep = cxx.find_library(\n+            'yuv',\n+            required : false,\n+            has_headers : 'libyuv.h',\n+        )\n+    endif\n+else\n+    libyuv_dep = dependency('', required : false)\n+endif\n \n if (pipelines.contains('virtual') or get_option('android').allowed()) and \\\n    not libyuv_dep.found()\n\nThis has two advantages in my opinion:\n  * the `force_fallback_for=libyuv` meson option works;\n  * the presence of at least `libyuv.h` is checked\n    (I imagine this may be relevant for distributions where the development files\n     are placed in different packages).\n\n`meson` has recently added experimental cmake wraps:\nhttps://mesonbuild.com/Wrap-dependency-system-manual.html#cmake-wraps\nI think this could make the dependency lookup simpler, but it is probably too new.\n\nOr potentially `libyuv` could be added to the meson wrapdb,\nwhich could also enable some simplification.\n\n\nRegards,\nBarnabás Pőcze\n\n\n> \n> > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> > ---\n> >  src/meson.build | 11 ++++++++---\n> >  1 file changed, 8 insertions(+), 3 deletions(-)\n> >\n> > diff --git a/src/meson.build b/src/meson.build\n> > index 76198e9535db..0a9cdff8e7dc 100644\n> > --- a/src/meson.build\n> > +++ b/src/meson.build\n> > @@ -27,10 +27,15 @@ else\n> >      ipa_sign_module = false\n> >  endif\n> >\n> > -# libyuv, used by the Android adaptation layer and the virtual pipeline handler.\n> > -# Fallback to a subproject if libyuv isn't found, as it's typically not provided\n> > -# by distributions.\n> > +# libyuv, used by the Android adaptation layer and the virtual pipeline\n> > +# handler. Fallback to a subproject if libyuv isn't found, as it's typically\n> > +# not provided by distributions. Where libyuv is provided by a distribution, it\n> > +# may not always supply a pkg-config implementation, requiring cc.find_library()\n> > +# to search for it.\n> >  libyuv_dep = dependency('libyuv', required : false)\n> > +if not libyuv_dep.found()\n> > +    libyuv_dep = cc.find_library('yuv', required: false)\n> > +endif\n> >\n> >  if (pipelines.contains('virtual') or get_option('android').allowed()) and \\\n> >     not libyuv_dep.found()\n> > --\n> > 2.47.1\n> >\n>","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 8E99AC3301\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 14 Jan 2025 21:39:47 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C8C9868541;\n\tTue, 14 Jan 2025 22:39:46 +0100 (CET)","from mail-10628.protonmail.ch (mail-10628.protonmail.ch\n\t[79.135.106.28])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D145E607D6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 14 Jan 2025 22:39:45 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=protonmail.com header.i=@protonmail.com\n\theader.b=\"s+KNlhis\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;\n\ts=protonmail3; t=1736890784; x=1737149984;\n\tbh=SH+HwSUCdDL6w2xXoxjaRaqHVEgTed8lnyRpX1jFNTo=;\n\th=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:\n\tFeedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:\n\tMessage-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;\n\tb=s+KNlhisyw88SeF8U9SRc/RvqRzPCHv6l1fdvRA16mjqG6AmxTMV+MzL5u/CquZE+\n\t88ewAmXF/g8KkjdR6hcKcNRLr1ie/I7K0FvRc6qy/t2zktQGFw2g/uDJg+BXZm1SBz\n\t66oUfOo4GNWNQBswb5Fr8wcMJuYzvj5YaOnVBfXV4xG5nU5Gr01ljh365DOzbLmjC1\n\tU+zDHmCY/oxwXlWzyMhUcclqDtak2GmC/WTCQKM4RT3iVdI2YUAWD7PwD+65vM4Nf7\n\tHmjSU46LQ4dIvk8IM/UXbhhy3/oCeFOzx6/67074BSMmzh8f8/bIBuzsVV/MGKNysu\n\tDW8IbMg93LBdw==","Date":"Tue, 14 Jan 2025 21:39:40 +0000","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <pobrn@protonmail.com>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>, =?utf-8?q?Dylan?=\n\t=?utf-8?q?_A=C3=AFssi?= <daissi@debian.org>, =?utf-8?q?Dylan_A=C3=AFssi?=\n\t<dylan.aissi@collabora.com>","Subject":"Re: [PATCH] libcamera: meson: Fix libyuv detection","Message-ID":"<Ow9IKbU3bztMg6y9xKvL5l1gwGD85iPZKBOZy4xF1TbVoyMnYdFUsfDTX8xZ-hvVcJo_xufKquBk35rL_Bi0bvC1O7UG8IzqFN9IJEmXZds=@protonmail.com>","In-Reply-To":"<173688986954.716543.7528650271024478159@ping.linuxembedded.co.uk>","References":"<20250114211935.715028-1-kieran.bingham@ideasonboard.com>\n\t<173688986954.716543.7528650271024478159@ping.linuxembedded.co.uk>","Feedback-ID":"20568564:user:proton","X-Pm-Message-ID":"aee01611cc8ac510422d8db5347e1a06f072cd7d","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Transfer-Encoding":"quoted-printable","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>"}},{"id":33079,"web_url":"https://patchwork.libcamera.org/comment/33079/","msgid":"<173689142310.3771432.2921155858030733850@ping.linuxembedded.co.uk>","date":"2025-01-14T21:50:23","subject":"Re: [PATCH] libcamera: meson: Fix libyuv detection","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Barnabás Pőcze (2025-01-14 21:39:40)\n> Hi\n> \n> \n> 2025. január 14., kedd 22:24 keltezéssel, Kieran Bingham <kieran.bingham@ideasonboard.com> írta:\n> \n> > Quoting Kieran Bingham (2025-01-14 21:19:35)\n> > > From: Dylan Aïssi <daissi@debian.org>\n> > >\n> > > We already fall back to a subproject to support the libyuv package when\n> > > it can not be discovered through the usual dependency() mechanism.\n> > >\n> > > Unfortunately libyuv may be packaged without any corresponding\n> > > pkg-config support as can be seen at [0], so further extend the\n> > > dependency search by using an explicit cc.find_library() call.\n> > >\n> > > [0] https://packages.debian.org/bookworm/amd64/libyuv-dev/filelist\n> > >\n> > > Signed-off-by: Dylan Aïssi <dylan.aissi@collabora.com>\n> > \n> > I've posted this patch on Dylan's behalf from\n> > https://salsa.debian.org/multimedia-team/libcamera/-/commit/685482827a0e6fe5dfe19778e633ab95b703cef4\n> > though I have reworded the commit message and comment inline, but the\n> > core functional change is direct from Dylan's patch...\n> > \n> > \n> > On Ubuntu 22.04.5 LTS:\n> > \n> > $ sudo apt install libyuv-dev\n> > \n> > ...\n> > libcamera$ meson setup ...\n> > ...\n> > Found pkg-config: YES (/usr/bin/pkg-config) 0.29.2\n> > Found CMake: /usr/bin/cmake (3.22.1)\n> > Run-time dependency libyuv found: NO (tried pkgconfig and cmake)\n> > Library yuv found: YES\n> > Library atomic found: YES\n> > ...\n> > \n> > (Based on the second Library yuv found: YES)\n> > \n> > Tested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> \n> This is the change I have locally to achieve the same:\n> \n> diff --git a/src/meson.build b/src/meson.build\n> index 76198e953..8cb4af61a 100644\n> --- a/src/meson.build\n> +++ b/src/meson.build\n> @@ -30,7 +30,20 @@ endif\n>  # libyuv, used by the Android adaptation layer and the virtual pipeline handler.\n>  # Fallback to a subproject if libyuv isn't found, as it's typically not provided\n>  # by distributions.\n> -libyuv_dep = dependency('libyuv', required : false)\n> +\n> +if not get_option('force_fallback_for').contains('libyuv')\n> +    libyuv_dep = dependency('libyuv', required : false)\n> +\n> +    if not libyuv_dep.found()\n> +        libyuv_dep = cxx.find_library(\n\nI guess using cxx is the toolchain we're compiling the rest of the\nproject with so that likely makes sense.\n\n> +            'yuv',\n> +            required : false,\n> +            has_headers : 'libyuv.h',\n> +        )\n> +    endif\n> +else\n> +    libyuv_dep = dependency('', required : false)\n\nis the '' intentional ? What does that do or how does it work ?\n\n> +endif\n>  \n>  if (pipelines.contains('virtual') or get_option('android').allowed()) and \\\n>     not libyuv_dep.found()\n> \n> This has two advantages in my opinion:\n>   * the `force_fallback_for=libyuv` meson option works;\n\nDo we need to repeat all of this for gtest and libyaml too as\nsubprojects? Or are they already handled correctly ?\n\n>   * the presence of at least `libyuv.h` is checked\n\nthe has_headers check is a very good addition also.\n\n>     (I imagine this may be relevant for distributions where the development files\n>      are placed in different packages).\n> \n> `meson` has recently added experimental cmake wraps:\n> https://mesonbuild.com/Wrap-dependency-system-manual.html#cmake-wraps\n> I think this could make the dependency lookup simpler, but it is probably too new.\n> \n> Or potentially `libyuv` could be added to the meson wrapdb,\n> which could also enable some simplification.\n\nPerhaps adding it to the wrapdb sounds good, but I don't know how to go\nabout that.\n\nOur subprojects/libyuv.wrap probably needs an update too - it's still\nset at a revision by 9109bcf22c7f (\"subprojects: Add libyuv and built if\n-Dandroid=enabled\") in 2021 ... so must be quite dated!\n\n> \n> \n> Regards,\n> Barnabás Pőcze\n> \n> \n> > \n> > > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> > > ---\n> > >  src/meson.build | 11 ++++++++---\n> > >  1 file changed, 8 insertions(+), 3 deletions(-)\n> > >\n> > > diff --git a/src/meson.build b/src/meson.build\n> > > index 76198e9535db..0a9cdff8e7dc 100644\n> > > --- a/src/meson.build\n> > > +++ b/src/meson.build\n> > > @@ -27,10 +27,15 @@ else\n> > >      ipa_sign_module = false\n> > >  endif\n> > >\n> > > -# libyuv, used by the Android adaptation layer and the virtual pipeline handler.\n> > > -# Fallback to a subproject if libyuv isn't found, as it's typically not provided\n> > > -# by distributions.\n> > > +# libyuv, used by the Android adaptation layer and the virtual pipeline\n> > > +# handler. Fallback to a subproject if libyuv isn't found, as it's typically\n> > > +# not provided by distributions. Where libyuv is provided by a distribution, it\n> > > +# may not always supply a pkg-config implementation, requiring cc.find_library()\n> > > +# to search for it.\n> > >  libyuv_dep = dependency('libyuv', required : false)\n> > > +if not libyuv_dep.found()\n> > > +    libyuv_dep = cc.find_library('yuv', required: false)\n> > > +endif\n> > >\n> > >  if (pipelines.contains('virtual') or get_option('android').allowed()) and \\\n> > >     not libyuv_dep.found()\n> > > --\n> > > 2.47.1\n> > >\n> >","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 D6315C3304\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 14 Jan 2025 21:50:28 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 0BFB868521;\n\tTue, 14 Jan 2025 22:50:28 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 780F0607D6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 14 Jan 2025 22:50:26 +0100 (CET)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id E7556842;\n\tTue, 14 Jan 2025 22:49:28 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"F95LaSMk\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1736891369;\n\tbh=j+HUJr+oB4h1I+lMOWLozBXYsu8VQ9z4gZGOJuh+6MU=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=F95LaSMkXkBQfjOGvZvw3wdl2gUgI8Vo+polthBrXtdbVJXKgkx9V5fK2O8AxSXQn\n\t8cHoLGNeAtSRdYL+GFb/ah9cIN7sT8DBvg1QhHwNACxyTwsqjR3/GPKXEYXEWlWtWY\n\tGFLPtAPjMyCf99gK6e/MoKtxSR0wVXpbS+j/3ESE=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<Ow9IKbU3bztMg6y9xKvL5l1gwGD85iPZKBOZy4xF1TbVoyMnYdFUsfDTX8xZ-hvVcJo_xufKquBk35rL_Bi0bvC1O7UG8IzqFN9IJEmXZds=@protonmail.com>","References":"<20250114211935.715028-1-kieran.bingham@ideasonboard.com>\n\t<173688986954.716543.7528650271024478159@ping.linuxembedded.co.uk>\n\t<Ow9IKbU3bztMg6y9xKvL5l1gwGD85iPZKBOZy4xF1TbVoyMnYdFUsfDTX8xZ-hvVcJo_xufKquBk35rL_Bi0bvC1O7UG8IzqFN9IJEmXZds=@protonmail.com>","Subject":"Re: [PATCH] libcamera: meson: Fix libyuv detection","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>, Dylan\n\t=?utf-8?b?QcOvc3Np?= <daissi@debian.org>, Dylan =?utf-8?b?QcOvc3Np?=\n\t<dylan.aissi@collabora.com>","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <pobrn@protonmail.com>","Date":"Tue, 14 Jan 2025 21:50:23 +0000","Message-ID":"<173689142310.3771432.2921155858030733850@ping.linuxembedded.co.uk>","User-Agent":"alot/0.10","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>"}},{"id":33081,"web_url":"https://patchwork.libcamera.org/comment/33081/","msgid":"<9TbjwyOUZO7pSY-kTZWzttvY_KLIwuPF3kIn4lzoi1f9TEOdjfFkJSxs5n7Xg2aF6kyCkpzYUGjtMF99Q3TjQeShQxYJvmgw4N6m6KDCu60=@protonmail.com>","date":"2025-01-14T22:19:54","subject":"Re: [PATCH] libcamera: meson: Fix libyuv detection","submitter":{"id":133,"url":"https://patchwork.libcamera.org/api/people/133/","name":"Pőcze Barnabás","email":"pobrn@protonmail.com"},"content":"2025. január 14., kedd 22:50 keltezéssel, Kieran Bingham <kieran.bingham@ideasonboard.com> írta:\n\n> Quoting Barnabás Pőcze (2025-01-14 21:39:40)\n> > Hi\n> >\n> >\n> > 2025. január 14., kedd 22:24 keltezéssel, Kieran Bingham <kieran.bingham@ideasonboard.com> írta:\n> >\n> > > Quoting Kieran Bingham (2025-01-14 21:19:35)\n> > > > From: Dylan Aïssi <daissi@debian.org>\n> > > >\n> > > > We already fall back to a subproject to support the libyuv package when\n> > > > it can not be discovered through the usual dependency() mechanism.\n> > > >\n> > > > Unfortunately libyuv may be packaged without any corresponding\n> > > > pkg-config support as can be seen at [0], so further extend the\n> > > > dependency search by using an explicit cc.find_library() call.\n> > > >\n> > > > [0] https://packages.debian.org/bookworm/amd64/libyuv-dev/filelist\n> > > >\n> > > > Signed-off-by: Dylan Aïssi <dylan.aissi@collabora.com>\n> > >\n> > > I've posted this patch on Dylan's behalf from\n> > > https://salsa.debian.org/multimedia-team/libcamera/-/commit/685482827a0e6fe5dfe19778e633ab95b703cef4\n> > > though I have reworded the commit message and comment inline, but the\n> > > core functional change is direct from Dylan's patch...\n> > >\n> > >\n> > > On Ubuntu 22.04.5 LTS:\n> > >\n> > > $ sudo apt install libyuv-dev\n> > >\n> > > ...\n> > > libcamera$ meson setup ...\n> > > ...\n> > > Found pkg-config: YES (/usr/bin/pkg-config) 0.29.2\n> > > Found CMake: /usr/bin/cmake (3.22.1)\n> > > Run-time dependency libyuv found: NO (tried pkgconfig and cmake)\n> > > Library yuv found: YES\n> > > Library atomic found: YES\n> > > ...\n> > >\n> > > (Based on the second Library yuv found: YES)\n> > >\n> > > Tested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> >\n> > This is the change I have locally to achieve the same:\n> >\n> > diff --git a/src/meson.build b/src/meson.build\n> > index 76198e953..8cb4af61a 100644\n> > --- a/src/meson.build\n> > +++ b/src/meson.build\n> > @@ -30,7 +30,20 @@ endif\n> >  # libyuv, used by the Android adaptation layer and the virtual pipeline handler.\n> >  # Fallback to a subproject if libyuv isn't found, as it's typically not provided\n> >  # by distributions.\n> > -libyuv_dep = dependency('libyuv', required : false)\n> > +\n> > +if not get_option('force_fallback_for').contains('libyuv')\n> > +    libyuv_dep = dependency('libyuv', required : false)\n> > +\n> > +    if not libyuv_dep.found()\n> > +        libyuv_dep = cxx.find_library(\n> \n> I guess using cxx is the toolchain we're compiling the rest of the\n> project with so that likely makes sense.\n> \n> > +            'yuv',\n> > +            required : false,\n> > +            has_headers : 'libyuv.h',\n> > +        )\n> > +    endif\n> > +else\n> > +    libyuv_dep = dependency('', required : false)\n> \n> is the '' intentional ? What does that do or how does it work ?\n\nIt is a never found dependency: https://mesonbuild.com/Reference-manual_functions.html#dependency\n\n  If dependency_name is '', the dependency is always not found.\n\nIt is used to make the `not libyuv_dep.found()` part of the condition below true.\n\n\n> \n> > +endif\n> >\n> >  if (pipelines.contains('virtual') or get_option('android').allowed()) and \\\n> >     not libyuv_dep.found()\n> >\n> > This has two advantages in my opinion:\n> >   * the `force_fallback_for=libyuv` meson option works;\n> \n> Do we need to repeat all of this for gtest and libyaml too as\n> subprojects? Or are they already handled correctly ?\n\n`gtest` is from the wrapdb, so no. But `libyaml` seems to be the same situation,\nhowever `libyaml` is available in the wrapdb, so switching to that may not be unreasonable.\n\n\n> \n> >   * the presence of at least `libyuv.h` is checked\n> \n> the has_headers check is a very good addition also.\n> \n> >     (I imagine this may be relevant for distributions where the development files\n> >      are placed in different packages).\n> >\n> > `meson` has recently added experimental cmake wraps:\n> > https://mesonbuild.com/Wrap-dependency-system-manual.html#cmake-wraps\n> > I think this could make the dependency lookup simpler, but it is probably too new.\n> >\n> > Or potentially `libyuv` could be added to the meson wrapdb,\n> > which could also enable some simplification.\n> \n> Perhaps adding it to the wrapdb sounds good, but I don't know how to go\n> about that.\n\nEssentially one needs to write meson build files for the project and\nsubmit them to https://github.com/mesonbuild/wrapdb .\n( https://mesonbuild.com/Adding-new-projects-to-wrapdb.html )\n\n\n> \n> Our subprojects/libyuv.wrap probably needs an update too - it's still\n> set at a revision by 9109bcf22c7f (\"subprojects: Add libyuv and built if\n> -Dandroid=enabled\") in 2021 ... so must be quite dated!\n\nUnfortunately, as things stand, libyuv breaks since a6135cfe0fc8a3102273b83f129c8175fb5e4d88\n( https://chromium.googlesource.com/libyuv/libyuv.git/+/a6135cfe0fc8a3102273b83f129c8175fb5e4d88 )\nbecause of an issue in meson's cmake module: https://github.com/mesonbuild/meson/issues/10764\n\nRegards,\nBarnabás Pőcze\n\n\n> \n> >\n> >\n> > Regards,\n> > Barnabás Pőcze\n> >\n> >\n> > >\n> > > > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> > > > ---\n> > > >  src/meson.build | 11 ++++++++---\n> > > >  1 file changed, 8 insertions(+), 3 deletions(-)\n> > > >\n> > > > diff --git a/src/meson.build b/src/meson.build\n> > > > index 76198e9535db..0a9cdff8e7dc 100644\n> > > > --- a/src/meson.build\n> > > > +++ b/src/meson.build\n> > > > @@ -27,10 +27,15 @@ else\n> > > >      ipa_sign_module = false\n> > > >  endif\n> > > >\n> > > > -# libyuv, used by the Android adaptation layer and the virtual pipeline handler.\n> > > > -# Fallback to a subproject if libyuv isn't found, as it's typically not provided\n> > > > -# by distributions.\n> > > > +# libyuv, used by the Android adaptation layer and the virtual pipeline\n> > > > +# handler. Fallback to a subproject if libyuv isn't found, as it's typically\n> > > > +# not provided by distributions. Where libyuv is provided by a distribution, it\n> > > > +# may not always supply a pkg-config implementation, requiring cc.find_library()\n> > > > +# to search for it.\n> > > >  libyuv_dep = dependency('libyuv', required : false)\n> > > > +if not libyuv_dep.found()\n> > > > +    libyuv_dep = cc.find_library('yuv', required: false)\n> > > > +endif\n> > > >\n> > > >  if (pipelines.contains('virtual') or get_option('android').allowed()) and \\\n> > > >     not libyuv_dep.found()\n> > > > --\n> > > > 2.47.1\n> > > >\n> > >\n>","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 A5B0DC3304\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 14 Jan 2025 22:20:02 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B060D684E4;\n\tTue, 14 Jan 2025 23:20:01 +0100 (CET)","from mail-4322.protonmail.ch (mail-4322.protonmail.ch\n\t[185.70.43.22])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id DD8A8607D6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 14 Jan 2025 23:19:58 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=protonmail.com header.i=@protonmail.com\n\theader.b=\"Ym1ZBJzf\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;\n\ts=protonmail3; t=1736893197; x=1737152397;\n\tbh=+c8y2CA+/Pa2tZMBBQRKZYP60/sUyEk01DdvwpFP2cw=;\n\th=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:\n\tFeedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:\n\tMessage-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;\n\tb=Ym1ZBJzffVjeJbDDq/Usxjhu/ugKPFdECT4YKzi0HLwQ+29FtJOoPIX/2B5gzyskP\n\tRKMklJp9eMUQgdglIkKg/Eeb0PJJJ+WAXarvO+nXQ0/LNPQPr5EM2zxySatx4TCEhF\n\ts6xIiKcCTf9wLw5JeVLEDklVjdVwZB7tDI75pzjomScPxtx470rgPAbROgn4FIR+Wb\n\tdjuVhEPOPVv8Ul+fwLCGjL0FYQxai7gepjnBY6YWr66s1Nd9AqW4NjhKDV2ISh5DDF\n\tVzjtFZ8eoFBhgHgL9UKlNwc1G3+Ohk1PbXa1E+OsNsUGhnkd0vEtb6ed+LbwXiS814\n\tKlBoLGTHpD0Fw==","Date":"Tue, 14 Jan 2025 22:19:54 +0000","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <pobrn@protonmail.com>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>, =?utf-8?q?Dylan?=\n\t=?utf-8?q?_A=C3=AFssi?= <daissi@debian.org>, =?utf-8?q?Dylan_A=C3=AFssi?=\n\t<dylan.aissi@collabora.com>","Subject":"Re: [PATCH] libcamera: meson: Fix libyuv detection","Message-ID":"<9TbjwyOUZO7pSY-kTZWzttvY_KLIwuPF3kIn4lzoi1f9TEOdjfFkJSxs5n7Xg2aF6kyCkpzYUGjtMF99Q3TjQeShQxYJvmgw4N6m6KDCu60=@protonmail.com>","In-Reply-To":"<173689142310.3771432.2921155858030733850@ping.linuxembedded.co.uk>","References":"<20250114211935.715028-1-kieran.bingham@ideasonboard.com>\n\t<173688986954.716543.7528650271024478159@ping.linuxembedded.co.uk>\n\t<Ow9IKbU3bztMg6y9xKvL5l1gwGD85iPZKBOZy4xF1TbVoyMnYdFUsfDTX8xZ-hvVcJo_xufKquBk35rL_Bi0bvC1O7UG8IzqFN9IJEmXZds=@protonmail.com>\n\t<173689142310.3771432.2921155858030733850@ping.linuxembedded.co.uk>","Feedback-ID":"20568564:user:proton","X-Pm-Message-ID":"dc393581aefe342b3fd3ea1e14706187ba9c98fa","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Transfer-Encoding":"quoted-printable","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>"}}]