[{"id":37350,"web_url":"https://patchwork.libcamera.org/comment/37350/","msgid":"<85v7ibpf7g.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","date":"2025-12-12T21:23:15","subject":"Re: [PATCH v8 21/26] ipa: libipa: module: Add\n\tcreateSelfEnumeratingAlgorithm","submitter":{"id":177,"url":"https://patchwork.libcamera.org/api/people/177/","name":"Milan Zamazal","email":"mzamazal@redhat.com"},"content":"Bryan O'Donoghue <bryan.odonoghue@linaro.org> writes:\n\n> Create an algorithm without having YAML data input.\n>\n> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>\n\nThe patch looks OK to me now, but my suggestion from the preceding patch\nabout postponing this (as well as the followup patches) applies.\n\n> ---\n>  src/ipa/libipa/module.cpp | 34 ++++++++++++++++++++++++++++\n>  src/ipa/libipa/module.h   | 47 +++++++++++++++++++++++++++++----------\n>  2 files changed, 69 insertions(+), 12 deletions(-)\n>\n> diff --git a/src/ipa/libipa/module.cpp b/src/ipa/libipa/module.cpp\n> index a95dca696..41235f902 100644\n> --- a/src/ipa/libipa/module.cpp\n> +++ b/src/ipa/libipa/module.cpp\n> @@ -83,6 +83,40 @@ namespace ipa {\n>   * \\return The list of instantiated algorithms\n>   */\n>  \n> +/**\n> + * \\fn int Module::createSelfEnumeratingAlgorithm(Context &context, const std::string &name)\n> + * \\brief Create and initialise a self-enumerating algorithm by name\n> + *\n> + * This function creates an algorithm instance from the registered algorithm\n> + * factories using only the algorithm name, without requiring YAML configuration\n> + * data.\n> + *\n> + * This is useful for algorithms that don't require external configuration\n> + * parameters and can self-configure or use default values.\n> + *\n> + * \\param[in] context The IPA context to pass to the algorithm's init function\n> + * \\param[in] name The name of the algorithm to instantiate\n> + *\n> + * \\return 0 on success, negative errno value on failure:\n> + *         -EINVAL if the algorithm is not found in the factory registry\n> + *         Other negative values if algorithm initialisation fails\n> + */\n> +\n> +/**\n> + * \\fn int Module::createAlgorithmCommon(Context &context, const YamlObject &algoData, const std::string &name)\n> + * \\brief Common helper fucntion to allow createSelfEnumeratingAlgorithm and createAlgorithm share code\n> + *\n> + * Worker method which allows sharing of common code in the Yaml and self-initialising algorithm case\n> + *\n> + * \\param[in] context The IPA context to pass to the algorithm's init function\n> + * \\param[in] algoData Yaml object.\n> + * \\param[in] name The name of the algorithm to instantiate\n> + *\n> + * \\return 0 on success, negative errno value on failure:\n> + *         -EINVAL if the algorithm is not found in the factory registry\n> + *         Other negative values if algorithm initialisation fails\n> + */\n> +\n>  /**\n>   * \\fn Module::createAlgorithms()\n>   * \\brief Create algorithms from YAML configuration data\n> diff --git a/src/ipa/libipa/module.h b/src/ipa/libipa/module.h\n> index c27af7718..5ab6afc18 100644\n> --- a/src/ipa/libipa/module.h\n> +++ b/src/ipa/libipa/module.h\n> @@ -70,22 +70,26 @@ public:\n>  \t\tfactories().push_back(factory);\n>  \t}\n>  \n> -private:\n> -\tint createAlgorithm(Context &context, const YamlObject &data)\n> +\tint createSelfEnumeratingAlgorithm(Context &context, const std::string &name)\n>  \t{\n> -\t\tconst auto &[name, algoData] = *data.asDict().begin();\n> +\t\tYamlObject dummy;\n>  \n> -\t\t/*\n> -\t\t * Optionally, algorithms can be disabled via the tuning file\n> -\t\t * by including enabled: false as a parameter within the\n> -\t\t * algorithm tuning data. This is not an error, so we return 0.\n> -\t\t */\n> -\t\tif (!algoData[\"enabled\"].get<bool>(true)) {\n> -\t\t\tLOG(IPAModuleAlgo, Info)\n> -\t\t\t\t<< \"Algorithm '\" << name << \"' disabled via tuning file\";\n> -\t\t\treturn 0;\n> +\t\tstd::unique_ptr<Algorithm<Module>> algo = createAlgorithm(name);\n> +\t\tif (!algo) {\n> +\t\t\tLOG(IPAModuleAlgo, Error)\n> +\t\t\t\t<< \"Algorithm '\" << name << \"' not found\";\n> +\t\t\treturn -EINVAL;\n>  \t\t}\n>  \n> +\t\tcontext.selfInitialising = true;\n> +\n> +\t\treturn createAlgorithmCommon(context, dummy, name);\n> +\t}\n> +\n> +private:\n> +\n> +\tint createAlgorithmCommon(Context &context, const YamlObject &algoData, const std::string &name)\n> +\t{\n>  \t\tstd::unique_ptr<Algorithm<Module>> algo = createAlgorithm(name);\n>  \t\tif (!algo) {\n>  \t\t\tLOG(IPAModuleAlgo, Error)\n> @@ -104,9 +108,28 @@ private:\n>  \t\t\t<< \"Instantiated algorithm '\" << name << \"'\";\n>  \n>  \t\talgorithms_.push_back(std::move(algo));\n> +\n>  \t\treturn 0;\n>  \t}\n>  \n> +\tint createAlgorithm(Context &context, const YamlObject &data)\n> +\t{\n> +\t\tconst auto &[name, algoData] = *data.asDict().begin();\n> +\n> +\t\t/*\n> +\t\t * Optionally, algorithms can be disabled via the tuning file\n> +\t\t * by including enabled: false as a parameter within the\n> +\t\t * algorithm tuning data. This is not an error, so we return 0.\n> +\t\t */\n> +\t\tif (!algoData[\"enabled\"].get<bool>(true)) {\n> +\t\t\tLOG(IPAModuleAlgo, Info)\n> +\t\t\t\t<< \"Algorithm '\" << name << \"' disabled via tuning file\";\n> +\t\t\treturn 0;\n> +\t\t}\n> +\n> +\t\treturn createAlgorithmCommon(context, algoData, name);\n> +\t}\n> +\n>  \tstatic std::unique_ptr<Algorithm<Module>> createAlgorithm(const std::string &name)\n>  \t{\n>  \t\tfor (const AlgorithmFactoryBase<Module> *factory : factories()) {","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 68921BD1F1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 12 Dec 2025 21:23:23 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 197BF61893;\n\tFri, 12 Dec 2025 22:23:23 +0100 (CET)","from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.133.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 622C06142F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 12 Dec 2025 22:23:21 +0100 (CET)","from mail-wm1-f72.google.com (mail-wm1-f72.google.com\n\t[209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS\n\t(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n\tus-mta-82-qzyuwN0dMvOLYVjco8Ylqg-1; Fri, 12 Dec 2025 16:23:19 -0500","by mail-wm1-f72.google.com with SMTP id\n\t5b1f17b1804b1-4779981523fso13304565e9.2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 12 Dec 2025 13:23:18 -0800 (PST)","from mzamazal-thinkpadp1gen7.tpbc.csb\n\t(ip-77-48-47-2.net.vodafone.cz. [77.48.47.2])\n\tby smtp.gmail.com with ESMTPSA id\n\t5b1f17b1804b1-47a8f39ed88sm50081985e9.4.2025.12.12.13.23.16\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tFri, 12 Dec 2025 13:23:16 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"P4ORzdwX\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1765574600;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\tto:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\tin-reply-to:in-reply-to:references:references;\n\tbh=6NxdatVmTecr7iNYTP5rVvS6nTOzb5XEHiVpqaKytfs=;\n\tb=P4ORzdwX6h2Wf9iUgKK0uYbf8DkUkP16KPTNs+ec4rAoVopEeaa6yZX31mJLupeGOgqFfE\n\t2V2zKm5AguamoEoRVi7XQnjCPfnXDFlcZIWgLWN8//zyqKMPDEeKA7y813MHwO/lBxRzqJ\n\tMRwUheeBbj1STnHUoSIUwjy+3J9re8k=","X-MC-Unique":"qzyuwN0dMvOLYVjco8Ylqg-1","X-Mimecast-MFC-AGG-ID":"qzyuwN0dMvOLYVjco8Ylqg_1765574598","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1765574597; x=1766179397;\n\th=mime-version:user-agent:message-id:date:references:in-reply-to\n\t:subject:cc:to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject\n\t:date:message-id:reply-to;\n\tbh=6NxdatVmTecr7iNYTP5rVvS6nTOzb5XEHiVpqaKytfs=;\n\tb=S6lSRLNzaxkDjloniftDzJboCzrARhG/y+loRI8uMl8d+zj9uXtsjqu+fkTwksjLC2\n\tLafMjp1LAMnTb7nF+fZ5taUSyK+aIJY++V/cTCcWvlYSyv/seBMLEbJwvO61vrSLzlEc\n\tOPjnZOYNixp5ZlKfjsFmlOWGHwkFGYV37JN7rGgYDmRFF9aQXSJ8AnbL+tfGhKOJ3Lg+\n\tbDenJPhqJD6kWs52VfQpokQhHzDdnfB9y2G2BaBZtaTRaPO+bYyXFMAoeiz/52ckMYSg\n\tiY2RwPw2oVs+0fg3FBzHgW9+0xA+oAbpHcaKsbu0p01n7vhVpV349mPoMqfF9douN4+w\n\t4kRA==","X-Gm-Message-State":"AOJu0YyJVFpO5COK2UUp/tfTWT7MR8TIrEluZob9wC70vlI2Ef4cC+gD\n\t+z8z0r3W/51iJfN2dNEZRVBwGe0seGKVK+c28AVsoYq0r1GLODlsSF5XvdO6Vn7eZHai0venYiJ\n\t8sLBCvRd3D++jovF/Tu36L/tZ42GJ8nco2KLVfBkY+fUAyadapzZ0JoNzW5TxyUABEI0L9X8F6P\n\thZ5cHF3i8=","X-Gm-Gg":"AY/fxX6bN9HJRd1wIa9caVdbfBoQpYs1TtAy8+tRn9LIrCxEB1+9FK5wiJQv3HDT2Mj\n\tBsvonIk0g8GGzgr++QVo/KTHwzkXtdksK8RFYUxxkMf4hhYZhaVEnKQapGtPU8dyecpGJqdGo5h\n\ti4U4Dgo6WJrWFZg+nuA7rMI/n6Rnijdk2JOUn20oZ1MCd7hPpWWRoL0m3ACue4FiDpp/7fciNvY\n\t4VgBoSJOIputtQaBV//Jstbut4a46a8PMcL218GpeSvqOZmWpmy759uxWsPOeX+kjdiUlH73WhA\n\t3wS9tRDy6w2tG8tqIUDGI9XCwnzyK0uUh5vjjr8onRoHqvoqPsUmliWksOJT88ZzZ5b5X14zTaA\n\toBzcBrCWUf4te1oqjZUm1MxgpCRwWBheFjK+2jz3zzArLTsHUXrUAwy5yOjjfxA8=","X-Received":["by 2002:a05:600c:444b:b0:477:9b4a:a82 with SMTP id\n\t5b1f17b1804b1-47a8f91561cmr33602645e9.35.1765574597322; \n\tFri, 12 Dec 2025 13:23:17 -0800 (PST)","by 2002:a05:600c:444b:b0:477:9b4a:a82 with SMTP id\n\t5b1f17b1804b1-47a8f91561cmr33602435e9.35.1765574596877; \n\tFri, 12 Dec 2025 13:23:16 -0800 (PST)"],"X-Google-Smtp-Source":"AGHT+IE530R5b8NZqIGj0oax2wuzt/bmxUk3Zgl+KhIrYQ7hiv+Y16rm6oWzNWqWgclaXKCNYw4jlQ==","From":"Milan Zamazal <mzamazal@redhat.com>","To":"Bryan O'Donoghue <bryan.odonoghue@linaro.org>","Cc":"libcamera-devel@lists.libcamera.org,  pavel@ucw.cz","Subject":"Re: [PATCH v8 21/26] ipa: libipa: module: Add\n\tcreateSelfEnumeratingAlgorithm","In-Reply-To":"<20251212002937.3118-22-bryan.odonoghue@linaro.org> (Bryan\n\tO'Donoghue's message of \"Fri, 12 Dec 2025 00:29:32 +0000\")","References":"<20251212002937.3118-1-bryan.odonoghue@linaro.org>\n\t<20251212002937.3118-22-bryan.odonoghue@linaro.org>","Date":"Fri, 12 Dec 2025 22:23:15 +0100","Message-ID":"<85v7ibpf7g.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","User-Agent":"Gnus/5.13 (Gnus v5.13)","MIME-Version":"1.0","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"cAUrWde4Z_OjYkC-_NBmOHJFRTGi6aqpFMDN24JabX0_1765574598","X-Mimecast-Originator":"redhat.com","Content-Type":"text/plain","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":37373,"web_url":"https://patchwork.libcamera.org/comment/37373/","msgid":"<85jyyof2lm.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","date":"2025-12-15T10:42:29","subject":"Re: [PATCH v8 21/26] ipa: libipa: module: Add\n\tcreateSelfEnumeratingAlgorithm","submitter":{"id":177,"url":"https://patchwork.libcamera.org/api/people/177/","name":"Milan Zamazal","email":"mzamazal@redhat.com"},"content":"Milan Zamazal <mzamazal@redhat.com> writes:\n\n> Bryan O'Donoghue <bryan.odonoghue@linaro.org> writes:\n>\n>> Create an algorithm without having YAML data input.\n>>\n>> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>\n>\n> The patch looks OK to me now, but my suggestion from the preceding patch\n> about postponing this (as well as the followup patches) applies.\n\nReviewed-by: Milan Zamazal <mzamazal@redhat.com>\n\n>> ---\n>>  src/ipa/libipa/module.cpp | 34 ++++++++++++++++++++++++++++\n>>  src/ipa/libipa/module.h   | 47 +++++++++++++++++++++++++++++----------\n>>  2 files changed, 69 insertions(+), 12 deletions(-)\n>>\n>> diff --git a/src/ipa/libipa/module.cpp b/src/ipa/libipa/module.cpp\n>> index a95dca696..41235f902 100644\n>> --- a/src/ipa/libipa/module.cpp\n>> +++ b/src/ipa/libipa/module.cpp\n>> @@ -83,6 +83,40 @@ namespace ipa {\n>>   * \\return The list of instantiated algorithms\n>>   */\n>>  \n>> +/**\n>> + * \\fn int Module::createSelfEnumeratingAlgorithm(Context &context, const std::string &name)\n>> + * \\brief Create and initialise a self-enumerating algorithm by name\n>> + *\n>> + * This function creates an algorithm instance from the registered algorithm\n>> + * factories using only the algorithm name, without requiring YAML configuration\n>> + * data.\n>> + *\n>> + * This is useful for algorithms that don't require external configuration\n>> + * parameters and can self-configure or use default values.\n>> + *\n>> + * \\param[in] context The IPA context to pass to the algorithm's init function\n>> + * \\param[in] name The name of the algorithm to instantiate\n>> + *\n>> + * \\return 0 on success, negative errno value on failure:\n>> + *         -EINVAL if the algorithm is not found in the factory registry\n>> + *         Other negative values if algorithm initialisation fails\n>> + */\n>> +\n>> +/**\n>> + * \\fn int Module::createAlgorithmCommon(Context &context, const YamlObject &algoData, const std::string &name)\n>> + * \\brief Common helper fucntion to allow createSelfEnumeratingAlgorithm and createAlgorithm share code\n>> + *\n>> + * Worker method which allows sharing of common code in the Yaml and self-initialising algorithm case\n>> + *\n>> + * \\param[in] context The IPA context to pass to the algorithm's init function\n>> + * \\param[in] algoData Yaml object.\n>> + * \\param[in] name The name of the algorithm to instantiate\n>> + *\n>> + * \\return 0 on success, negative errno value on failure:\n>> + *         -EINVAL if the algorithm is not found in the factory registry\n>> + *         Other negative values if algorithm initialisation fails\n>> + */\n>> +\n>>  /**\n>>   * \\fn Module::createAlgorithms()\n>>   * \\brief Create algorithms from YAML configuration data\n>> diff --git a/src/ipa/libipa/module.h b/src/ipa/libipa/module.h\n>> index c27af7718..5ab6afc18 100644\n>> --- a/src/ipa/libipa/module.h\n>> +++ b/src/ipa/libipa/module.h\n>> @@ -70,22 +70,26 @@ public:\n>>  \t\tfactories().push_back(factory);\n>>  \t}\n>>  \n>> -private:\n>> -\tint createAlgorithm(Context &context, const YamlObject &data)\n>> +\tint createSelfEnumeratingAlgorithm(Context &context, const std::string &name)\n>>  \t{\n>> -\t\tconst auto &[name, algoData] = *data.asDict().begin();\n>> +\t\tYamlObject dummy;\n>>  \n>> -\t\t/*\n>> -\t\t * Optionally, algorithms can be disabled via the tuning file\n>> -\t\t * by including enabled: false as a parameter within the\n>> -\t\t * algorithm tuning data. This is not an error, so we return 0.\n>> -\t\t */\n>> -\t\tif (!algoData[\"enabled\"].get<bool>(true)) {\n>> -\t\t\tLOG(IPAModuleAlgo, Info)\n>> -\t\t\t\t<< \"Algorithm '\" << name << \"' disabled via tuning file\";\n>> -\t\t\treturn 0;\n>> +\t\tstd::unique_ptr<Algorithm<Module>> algo = createAlgorithm(name);\n>> +\t\tif (!algo) {\n>> +\t\t\tLOG(IPAModuleAlgo, Error)\n>> +\t\t\t\t<< \"Algorithm '\" << name << \"' not found\";\n>> +\t\t\treturn -EINVAL;\n>>  \t\t}\n>>  \n>> +\t\tcontext.selfInitialising = true;\n>> +\n>> +\t\treturn createAlgorithmCommon(context, dummy, name);\n>> +\t}\n>> +\n>> +private:\n>> +\n>> +\tint createAlgorithmCommon(Context &context, const YamlObject &algoData, const std::string &name)\n>> +\t{\n>>  \t\tstd::unique_ptr<Algorithm<Module>> algo = createAlgorithm(name);\n>>  \t\tif (!algo) {\n>>  \t\t\tLOG(IPAModuleAlgo, Error)\n>> @@ -104,9 +108,28 @@ private:\n>>  \t\t\t<< \"Instantiated algorithm '\" << name << \"'\";\n>>  \n>>  \t\talgorithms_.push_back(std::move(algo));\n>> +\n>>  \t\treturn 0;\n>>  \t}\n>>  \n>> +\tint createAlgorithm(Context &context, const YamlObject &data)\n>> +\t{\n>> +\t\tconst auto &[name, algoData] = *data.asDict().begin();\n>> +\n>> +\t\t/*\n>> +\t\t * Optionally, algorithms can be disabled via the tuning file\n>> +\t\t * by including enabled: false as a parameter within the\n>> +\t\t * algorithm tuning data. This is not an error, so we return 0.\n>> +\t\t */\n>> +\t\tif (!algoData[\"enabled\"].get<bool>(true)) {\n>> +\t\t\tLOG(IPAModuleAlgo, Info)\n>> +\t\t\t\t<< \"Algorithm '\" << name << \"' disabled via tuning file\";\n>> +\t\t\treturn 0;\n>> +\t\t}\n>> +\n>> +\t\treturn createAlgorithmCommon(context, algoData, name);\n>> +\t}\n>> +\n>>  \tstatic std::unique_ptr<Algorithm<Module>> createAlgorithm(const std::string &name)\n>>  \t{\n>>  \t\tfor (const AlgorithmFactoryBase<Module> *factory : factories()) {","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 278D6BD7D8\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 15 Dec 2025 10:42:37 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id BF44E61973;\n\tMon, 15 Dec 2025 11:42:36 +0100 (CET)","from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.133.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 55131606D5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 15 Dec 2025 11:42:35 +0100 (CET)","from mail-wm1-f70.google.com (mail-wm1-f70.google.com\n\t[209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS\n\t(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n\tus-mta-690-8rdrapWyP12vSIC7QLPiUg-1; Mon, 15 Dec 2025 05:42:32 -0500","by mail-wm1-f70.google.com with SMTP id\n\t5b1f17b1804b1-477964c22e0so22716015e9.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 15 Dec 2025 02:42:32 -0800 (PST)","from mzamazal-thinkpadp1gen7.tpbc.csb\n\t(ip-77-48-47-2.net.vodafone.cz. [77.48.47.2])\n\tby smtp.gmail.com with ESMTPSA id\n\t5b1f17b1804b1-47a8f3a1b17sm64443535e9.2.2025.12.15.02.42.30\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tMon, 15 Dec 2025 02:42:30 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"JIQZzgMV\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1765795354;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\tto:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\tin-reply-to:in-reply-to:references:references;\n\tbh=rD1DC7oV3cngGioeRsCG3P8kD5HcPzMmn/psidfV2vI=;\n\tb=JIQZzgMVcYJh209THbThshWtd6QAiSHKUIoN7DGxmYz3WI9rSMDQakmIijCLItijvhUTDH\n\tzuUKpE96F0x3O4bRDLHpUWrr2S+52y6h2JvobjOPw6c4ZgRO1QnES9L4PfXZhLTFBmdTO0\n\tsDwqKFdmBYUqh4EVJ+gggvIuyeg+zYw=","X-MC-Unique":"8rdrapWyP12vSIC7QLPiUg-1","X-Mimecast-MFC-AGG-ID":"8rdrapWyP12vSIC7QLPiUg_1765795351","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1765795351; x=1766400151;\n\th=mime-version:user-agent:message-id:date:references:in-reply-to\n\t:subject:cc:to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject\n\t:date:message-id:reply-to;\n\tbh=rD1DC7oV3cngGioeRsCG3P8kD5HcPzMmn/psidfV2vI=;\n\tb=k2alPR055ym0u0o7tJFJCd1R5QxptPlD0eC9nuDIsErFGP/y47DNm92NsrJFca/4k6\n\tbW/M5LH2SPQDkkfqCPH9PWYqUG87+6HJnyoLOj/c24l2Eeb/GePcd3/sSKw65HfKpJRQ\n\tSyCANbirQpAPwqxGrI6aEPlOm/puU3rBetErgW2uAW96Lj99jrmn01iDuBaM6G54BPWw\n\tbxkXrQHvPFgasRtKoneyhXR705TbwJiamZ4YlDFWA0ZcQv11qQECy/1RpAro6e+v2Z1o\n\tFmvjYBrFCdbz8osdVUM3u4eQFmIPv/ISxokKj5qehEOrwgGpT35vvzXnohnY7DSIrP2R\n\tK3ZA==","X-Gm-Message-State":"AOJu0Yy08J9Cl2r3abIlLVoaM1YaGldzPgngKdBpIvIu1Y4ffxL5OxHg\n\tHBWotl0atYq484qQJLIr9/LQqzghZo5L3YlRABFk/bHcE+iJC0fh1oYzCJWZgF84z6DBpBWiHA6\n\twIi43tEidGJ3LHKOqFjbiD7A3z4lSB9efI4grhfsM2f4VXcRmh35v2tfmSzOfC5pz+zE06U+47J\n\t4=","X-Gm-Gg":"AY/fxX4/uADbSj/udJyni6xgFJKiH9YmZV0xwECeYelAVTrKwRIjoY6pn53m1Crbqzf\n\t3gnBD9D+T69Gud8NU97UWiD0PwgSkA/QMjrcRecbeHdfLOk6IHxtvTjg1JBNdm+sY03x+lfoR/b\n\te0Xc4+TDQCJEAjppEWYkg2Xwi/1zPmKTTWAi+S6XuPqdlC0bfcRf1wmmKBtKrbRSVWIwICpznOE\n\tfdwCy6DKHQ0it7+aNGXQyZU4e50XTd73eTIYyiwzZPj238iYXkiVDGMgcKLmVdFoHQtjmANhHD3\n\t5xusfTaMDnliZSJAlDLxcEufFYlmGdAqs6PIVIofrxe911cWDzyvQGYRBGrpf0UuyeL88L/HpYI\n\tsLLTjet9BHe7qVnjyDRG3ZhjZFw6v7kK3nY+xJJAnIS/BQjKfD2ZlnS47YXuh6Kg=","X-Received":["by 2002:a05:600c:444a:b0:46e:59bd:f7e2 with SMTP id\n\t5b1f17b1804b1-47a8f1c20e1mr100378725e9.11.1765795351180; \n\tMon, 15 Dec 2025 02:42:31 -0800 (PST)","by 2002:a05:600c:444a:b0:46e:59bd:f7e2 with SMTP id\n\t5b1f17b1804b1-47a8f1c20e1mr100378525e9.11.1765795350778; \n\tMon, 15 Dec 2025 02:42:30 -0800 (PST)"],"X-Google-Smtp-Source":"AGHT+IEepHDCS+YPLEOSiwklSucUcapYLm7+nWDq8JmFTMcMK7FP6PoTZOaqfc5KvBxzHOJGKVeV0A==","From":"Milan Zamazal <mzamazal@redhat.com>","To":"Bryan O'Donoghue <bryan.odonoghue@linaro.org>","Cc":"libcamera-devel@lists.libcamera.org,  pavel@ucw.cz","Subject":"Re: [PATCH v8 21/26] ipa: libipa: module: Add\n\tcreateSelfEnumeratingAlgorithm","In-Reply-To":"<85v7ibpf7g.fsf@mzamazal-thinkpadp1gen7.tpbc.csb> (Milan\n\tZamazal's message of \"Fri, 12 Dec 2025 22:23:15 +0100\")","References":"<20251212002937.3118-1-bryan.odonoghue@linaro.org>\n\t<20251212002937.3118-22-bryan.odonoghue@linaro.org>\n\t<85v7ibpf7g.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","Date":"Mon, 15 Dec 2025 11:42:29 +0100","Message-ID":"<85jyyof2lm.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","User-Agent":"Gnus/5.13 (Gnus v5.13)","MIME-Version":"1.0","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"nbQq8XEzYp6qpUotfNNnrCm3zZlAjhKOd_2-ZGjSfX0_1765795351","X-Mimecast-Originator":"redhat.com","Content-Type":"text/plain","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>"}}]