[{"id":25256,"web_url":"https://patchwork.libcamera.org/comment/25256/","msgid":"<46aa5753-0f91-ec08-95d5-ed70915e12ea@oss.nxp.com>","date":"2022-10-04T11:41:09","subject":"Re: [libcamera-devel] [PATCH 2/2] pipeline: rkisp1: Use\n\tutils::Cleaner to simplify error handling in start","submitter":{"id":107,"url":"https://patchwork.libcamera.org/api/people/107/","name":"Xavier Roumegue","email":"xavier.roumegue@oss.nxp.com"},"content":"Hi Laurent,\n\nThanks for your patch.\n\nOn 10/4/22 04:18, Laurent Pinchart wrote:\n> Error handling in the PipelineHandlerRkISP1::start() function is\n> cumbersome. Simplify it using the utils::Cleaner class.\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>   src/libcamera/pipeline/rkisp1/rkisp1.cpp | 31 +++++++++---------------\n>   1 file changed, 11 insertions(+), 20 deletions(-)\n> \n> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> index 455ee2a0a711..33f3b0c5ab00 100644\n> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> @@ -823,69 +823,60 @@ int PipelineHandlerRkISP1::freeBuffers(Camera *camera)\n>   int PipelineHandlerRkISP1::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n>   {\n>   \tRkISP1CameraData *data = cameraData(camera);\n> +\tutils::Cleaner cleaner;\n>   \tint ret;\n>   \n>   \t/* Allocate buffers for internal pipeline usage. */\n>   \tret = allocateBuffers(camera);\n>   \tif (ret)\n>   \t\treturn ret;\n> +\tcleaner.defer([&]() { freeBuffers(camera); });\n>   \n>   \tret = data->ipa_->start();\n>   \tif (ret) {\n> -\t\tfreeBuffers(camera);\n>   \t\tLOG(RkISP1, Error)\n>   \t\t\t<< \"Failed to start IPA \" << camera->id();\n>   \t\treturn ret;\n>   \t}\n> +\tcleaner.defer([&]() { data->ipa_->stop(); });\n>   \n>   \tdata->frame_ = 0;\n>   \n>   \tret = param_->streamOn();\n>   \tif (ret) {\n> -\t\tdata->ipa_->stop();\n> -\t\tfreeBuffers(camera);\n>   \t\tLOG(RkISP1, Error)\n>   \t\t\t<< \"Failed to start parameters \" << camera->id();\n>   \t\treturn ret;\n>   \t}\n> +\tcleaner.defer([&]() { param_->streamOff(); });\n>   \n>   \tret = stat_->streamOn();\n>   \tif (ret) {\n> -\t\tparam_->streamOff();\n> -\t\tdata->ipa_->stop();\n> -\t\tfreeBuffers(camera);\n>   \t\tLOG(RkISP1, Error)\n>   \t\t\t<< \"Failed to start statistics \" << camera->id();\n>   \t\treturn ret;\n>   \t}\n> +\tcleaner.defer([&]() { stat_->streamOff(); });\n>   \n>   \tif (data->mainPath_->isEnabled()) {\n>   \t\tret = mainPath_.start();\n> -\t\tif (ret) {\n> -\t\t\tparam_->streamOff();\n> -\t\t\tstat_->streamOff();\n> -\t\t\tdata->ipa_->stop();\n> -\t\t\tfreeBuffers(camera);\n> +\t\tif (ret)\n>   \t\t\treturn ret;\n> -\t\t}\n> +\t\tcleaner.defer([&]() { mainPath_.stop(); });\n>   \t}\n>   \n>   \tif (hasSelfPath_ && data->selfPath_->isEnabled()) {\n>   \t\tret = selfPath_.start();\n> -\t\tif (ret) {\n> -\t\t\tmainPath_.stop();\n> -\t\t\tparam_->streamOff();\n> -\t\t\tstat_->streamOff();\n> -\t\t\tdata->ipa_->stop();\n> -\t\t\tfreeBuffers(camera);\n> +\t\tif (ret)\n>   \t\t\treturn ret;\n> -\t\t}\n>   \t}\n>   \n>   \tisp_->setFrameStartEnabled(true);\n>   \n>   \tactiveCamera_ = camera;\n> -\treturn ret;\n> +\n> +\tcleaner.clear();\n> +\treturn 0;\n>   }\n>   \n>   void PipelineHandlerRkISP1::stopDevice(Camera *camera)\n\nReviewed-by: Xavier Roumegue <xavier.roumegue@oss.nxp.com>","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 E5EBFBD16B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  4 Oct 2022 11:41:14 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2FA1860AA1;\n\tTue,  4 Oct 2022 13:41:14 +0200 (CEST)","from EUR02-AM5-obe.outbound.protection.outlook.com\n\t(mail-eopbgr00089.outbound.protection.outlook.com [40.107.0.89])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id A0A52601C7\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  4 Oct 2022 13:41:12 +0200 (CEST)","from PAXPR04MB8703.eurprd04.prod.outlook.com\n\t(2603:10a6:102:21e::22)\n\tby AM9PR04MB8067.eurprd04.prod.outlook.com (2603:10a6:20b:3e5::9)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.28;\n\tTue, 4 Oct 2022 11:41:10 +0000","from PAXPR04MB8703.eurprd04.prod.outlook.com\n\t([fe80::4f72:a35a:8c60:63f1]) by\n\tPAXPR04MB8703.eurprd04.prod.outlook.com\n\t([fe80::4f72:a35a:8c60:63f1%6]) with mapi id 15.20.5676.028;\n\tTue, 4 Oct 2022 11:41:10 +0000"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1664883674;\n\tbh=5Z3QrEYCuTqIHqTCUTrAUKwsPC/M31jLxNwwNv2v7Io=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:\n\tFrom;\n\tb=hr8Ez80nZusQn2H9QnJ5PSjSjDslTnCM7vpL96sJVEXaQL6v0g0T336APoTY1wR8I\n\tBiFSdyo1w+6zXDpfvnB6Kdf9mLPihYIGiZySgAQii0YdS7JZ2hJ1hp0sHCsq3xbPvz\n\tjTJr4DNItC26D+TjT6u/5ngzCXgfK8spRgZEYEzIzPLLXcOGiJP2hlJ7stJiJPoN4D\n\t3312uFWikrbcuLrVpkA/ZxLVK97J5yJesdH6ABMXxhghwFE1eUSEwcuVFmNfcuYRr4\n\tOp9l6LA5e+nled/ne8Adu77kcilVHzpGVic5tZtzRqD9st0tjFSQw9TcKkNoMcHDa2\n\tC7eNGto8XZTag==","v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com;\n\ts=selector2-NXP1-onmicrosoft-com;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=hDgQhf1DxfsJXO2trHqPPQh9B5HqHN2kMSxVEiuzTRM=;\n\tb=N+Hx8T12Id4GldkU/iSxEbcAVHxY0XQFdGS7h9LC4miCUZ8jgxKGqPjZbd0RyF1xR4D25lYjUa8BYgZBYs+tVfU7QudMZj5+CV9k3UKK4HrSIqa6+1ZXMH/i9CuKAVzNZqtG8lYY/KA7p7npQKMldYgRUMFoAZwF00QTXv+2uMo="],"Authentication-Results":["lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=NXP1.onmicrosoft.com\n\theader.i=@NXP1.onmicrosoft.com\n\theader.b=\"N+Hx8T12\"; dkim-atps=neutral","dkim=none (message not signed)\n\theader.d=none;dmarc=none action=none header.from=oss.nxp.com;"],"ARC-Seal":"i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n\tb=O6zDfoSOPr+72rGR+sizc9M/DlpPSncLJeNHNR+Fbr5ZICNXxH+sqo2R0WDZPlXVwphNkLJ5qwgQjkP2sOiBYBHP2tLTGTA5oQ3ecYozTLM3NEJe+CjmsbvYYNEEzFdpHLRcOcWs5oyNlQY9y8vF7ROeCpCzXZy1JNQQfpgLxjCaUX4D2vL2N3bBrq9gvY/JCpXxCEec19hpNPtXbSq6cddW0aRnvB/KFzcoXkvj6Fqw5Q4lWR8ounuk+Lkwcj+VStExuipIMU3LOAgkM+gY/1zuGRnQiR8ylHIINZcmxCDtk2XpajEDzAAGmfpTP6du0jqBDSgb+2EgLw25+NobMg==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n\ts=arcselector9901;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n\tbh=hDgQhf1DxfsJXO2trHqPPQh9B5HqHN2kMSxVEiuzTRM=;\n\tb=l/nYvNoIxXb6m/sKlKNUWzBdLCq0KJf2VQlyfzI5uipT+PesIGgbK+VKr8CIkTCwIWuX8+32lI58xr6psWkuHs7zPX6BAam2vwVZsRo36YPGK8F9zikCH7alHxnzXUBrkO87Nba0jWK0y0OuXzuoC0Fdjg9JqFw4NmhtiRdNjn9h1Xtkxjdt5Pszqq/khc8yXaJoe6COySi19mdxoS6Lw8ZxPG5/500pF1UVTUHGQs6Od53Eao3G4P6WjrqRM0mW0BPhm+ZgsKiX0fF6QieCSRmPE/rNkHaD1yM5GWg0DMGL2RmwGPTKdyscvBK7DmTi9VsSe1BPiChYJiOwElz9yg==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass\n\tsmtp.mailfrom=oss.nxp.com;\n\tdmarc=pass action=none header.from=oss.nxp.com; \n\tdkim=pass header.d=oss.nxp.com; arc=none","Message-ID":"<46aa5753-0f91-ec08-95d5-ed70915e12ea@oss.nxp.com>","Date":"Tue, 4 Oct 2022 13:41:09 +0200","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101\n\tThunderbird/102.3.1","Content-Language":"en-US, fr","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20221004021842.6345-1-laurent.pinchart@ideasonboard.com>\n\t<20221004021842.6345-3-laurent.pinchart@ideasonboard.com>","In-Reply-To":"<20221004021842.6345-3-laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","X-ClientProxiedBy":"PA7P264CA0014.FRAP264.PROD.OUTLOOK.COM\n\t(2603:10a6:102:2d3::20) To PAXPR04MB8703.eurprd04.prod.outlook.com\n\t(2603:10a6:102:21e::22)","MIME-Version":"1.0","X-MS-Exchange-MessageSentRepresentingType":"1","X-MS-PublicTrafficType":"Email","X-MS-TrafficTypeDiagnostic":"PAXPR04MB8703:EE_|AM9PR04MB8067:EE_","X-MS-Office365-Filtering-Correlation-Id":"24103dc7-d6ff-4870-8242-08daa5fd5585","X-MS-Exchange-SharedMailbox-RoutingAgent-Processed":"True","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"BCL:0;","X-Microsoft-Antispam-Message-Info":"zaKdIRvIZOiq/pQDU4WNZmCELQpuyik6N5SveVCkG/KrMIKlYP02xZuuOtWfyBAb70vAWDfCaz9A1E0PWpdP9U7uLD8C65FjOC+bBG5cKn3few9YlzzmhFQ/P1/OLc2r/gyEB/hzNMWGY7eSRG9fykcKy5IT1XmRmQcsHbnjqdIxVpvZDa0nRnAK9UtRnhJc1SiEtwr63AqIfsED1SnVSAnz8f9LY3Z6xuLxiS9xCbe0lY3T3a/yW0e0j8lChBRl7S7MfOUoF5tXoLadJD/zbPac/lwAauHfmcQA0A3zAjTkGNRENkhF2p2eYN1ksntge7nsi7h0JsP0TQ6mIrZbG7bOpwcZe1nWgV7bjEis8EqaMuZCBQuk4LcPraq8uUQ66KVpTwu2Hfip9KlQNuEcEV2LVwq7gl9nR0JQHfTN7v0d1GeKoKa0YOW9tH9pISNy47YAJFiv2kHKzpPmHLpwH4ZvJe/QZ8u1zbEw/GJsIB2tX9wr4LvHbRNqaoqLTZlD1vjNLCkAo9+f5x4NegT3ly9Y8PiMC+o0gzY7yCgj63oSedqytX2DEaxknlx15QXDgaUyqUibzhBMpSVddkizxTJU4V8pJHNayGNKPKLTgy9ZGSEx2OjJ4rqeE+ECGbHXoTN2+pyVhWM+abMwF2E97jOPSrPi7ZcrYRTjc3EjAvWzitjx196EqEnScHSeH/FE214gkK/cGfssmJghoWLVUAzTgvwJwWWrqbfHItrqvqbieGqaci3BH+fGjmrTFdXCkx1vKPinxb9a4Es/cf6i11Gc2q92EcI9Xk9J/B6fx40=","X-Forefront-Antispam-Report":"CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n\tIPV:NLI; SFV:NSPM; H:PAXPR04MB8703.eurprd04.prod.outlook.com; PTR:;\n\tCAT:NONE; \n\tSFS:(13230022)(4636009)(346002)(376002)(39860400002)(396003)(366004)(136003)(451199015)(86362001)(83380400001)(31686004)(5660300002)(2616005)(6512007)(66946007)(6486002)(53546011)(52116002)(8936002)(6506007)(316002)(8676002)(66556008)(31696002)(186003)(41300700001)(66476007)(2906002)(478600001)(38100700002)(43740500002)(45980500001);\n\tDIR:OUT; SFP:1101; ","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"=?utf-8?q?pl8FohJGnvXbrCTMzWjbXMjJG?=\n\t=?utf-8?q?4JR50xQ2FJ/KF8NKbbgikwoFTA3h84QagUnBfcI2tbw8P1dsoXjzBLsi?=\n\t=?utf-8?q?6WOXlN+W13lU23Nyu6IrfzIIVXGlhXeWTfq+PfaTwVcGvqkB/Uhbuykf?=\n\t=?utf-8?q?Ua8FqE9rrPcPO7leIgzHCso3oBxAGZA9TLPqXSWh++2Q3oBRNWTt4Q+v?=\n\t=?utf-8?q?MwVD2MM0gjvnoupbhqNAW71MPbRes3wSlT3PJ2KBWH26yK2XF2M3CUW5?=\n\t=?utf-8?q?UiKfnXs93ntzamELryxUsDjsMPQXWUpVV7UnebAx5wJhEYPqd6R9i4PX?=\n\t=?utf-8?q?VHunSIzePtwJyUdftvEn7d6eg5vLmuI7p6tsToDqPUgYTvt1lqLVQzoZ?=\n\t=?utf-8?q?JJWe8ec+rpbHq4iX4TFCwMI6tPvlrhcoD3OWS54aTFiE2Er4kelcXY4o?=\n\t=?utf-8?q?lDZs7bxFY8AJQj2Wd0bDGjuIYh68zirhoCwjPlkp3czeKLlKucJJ9fIH?=\n\t=?utf-8?q?MRoGgVFk2uvlv2Uq9fh+z4gSUokm7csLT5Gah55vlSPbN0P3aqR9mZRb?=\n\t=?utf-8?q?8YLn450XoAY17B0K4Qgo6opn0R5qlGs3uIwRrrhYxo1oXTgLKpVBBMre?=\n\t=?utf-8?q?zuoG8RRJjwnuENyft9fqi+5ZYRbYbDA6xjdmv8I/RZ9TWjNcKtYpYfSj?=\n\t=?utf-8?q?2P17GzDDM4of+Tva7BXWxq+IkuUk1V4/M30Ccw0tFHGbawWvP8PVfjlu?=\n\t=?utf-8?q?HauzeoAmuk1Y1sAIBXLszp1cdQUHEAVXRa3S1GH/wy3bt2ds8OMLG/PX?=\n\t=?utf-8?q?YkbAOossm0CXYG3yay8DM8/MAlsDaKZKpWnOMQhCu6Wx1kgEozyoQiHa?=\n\t=?utf-8?q?YBmQoB4dWt990Fj8MNQUNoYcgS8TcRK7TXojKFiGMZhoZOKRiQB1HaNi?=\n\t=?utf-8?q?nJ39XBsNFOPWyApEJKIpWvuExX/g7lzlnO1zl0HqVJL60Chua4xt9pch?=\n\t=?utf-8?q?H8PKmBNGhen9lg0ttmy1IXPUyTkHQ95Ke32YVaKduxTDTQxiB3/Zzi6Q?=\n\t=?utf-8?q?uMhxTtrmYHXwNs2dteHj+ocnOIUvFPRpYYAyXqXQ/4ypMcfwGgmvMo9P?=\n\t=?utf-8?q?rMdqXBpWaA6TDm7bigTEPa5Cff5wBSjK8MJtvw/341oWmFKiJRv6Lz8G?=\n\t=?utf-8?q?+RzR711u4MNBfz1+VXzOfjTUyVu58F6Ihhx/6HOBZogCBdT3i3fvdQsN?=\n\t=?utf-8?q?x1tsrfTLJfQ7H1ArnINYlSlaXe4ieT//zPApa+W97uy4vuQEYOngNhql?=\n\t=?utf-8?q?n0yppZSISDqt0ok09VUtpTKMCfiNNi6NZnkdkFKp8eSUADmY2A1Nhazq?=\n\t=?utf-8?q?nzCJt42GSnHIc+ljRaT/htimkbIsPO8rGT76kTq2Sj4G+BJtdcHvvdyw?=\n\t=?utf-8?q?MUKPNrCRRyJnMcjursO7aRlHpAYxjVd54rYGQEXqyrQT9MvD30oEYpzZ?=\n\t=?utf-8?q?QDIktECSOGfyq9wDxy9+1xl/g3ytCABtiw1NJEiHpOsW97FLPAZ3t8Il?=\n\t=?utf-8?q?QRR7Q7xZYbzzoXj2ivKNtwsLHaZHMLpNLUynLrcpR5P/uB3X+L9Abplv?=\n\t=?utf-8?q?lnyyekiLxe7TVzxNqi21EdQrvFgB1PL1ord5syiUZLYT87PtHRcRAcwj?=\n\t=?utf-8?q?p2bgAAgM+lpxIGTPcBflU+b67DjAF8A5bD/sgMVqU49/wqK+pk1NaRRW?=\n\t=?utf-8?q?2iY9eWkKd69YbRI9p8Y3f+Q9kRQi5cl6U4+ls4gRO0SaOnAcrGRjVREi?=\n\t=?utf-8?q?HhbHAG/Z8kee61YGUP4W2ZSq/cf79+g3+1QtA=3D=3D?=","X-OriginatorOrg":"oss.nxp.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"24103dc7-d6ff-4870-8242-08daa5fd5585","X-MS-Exchange-CrossTenant-AuthSource":"PAXPR04MB8703.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"04 Oct 2022 11:41:10.8030\n\t(UTC)","X-MS-Exchange-CrossTenant-FromEntityHeader":"Hosted","X-MS-Exchange-CrossTenant-Id":"686ea1d3-bc2b-4c6f-a92c-d99c5c301635","X-MS-Exchange-CrossTenant-MailboxType":"HOSTED","X-MS-Exchange-CrossTenant-UserPrincipalName":"UZI8KqBwHDX9ek6vwjYwDst6FTQmO8OfcG5joKTHhnnQhqskA+AxGakRKV2VeQ7ZJL6scA22UjLQqUfMOT+ALA==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"AM9PR04MB8067","Subject":"Re: [libcamera-devel] [PATCH 2/2] pipeline: rkisp1: Use\n\tutils::Cleaner to simplify error handling in start","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>","From":"\"Xavier Roumegue \\(OSS\\) via libcamera-devel\"\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"\"Xavier Roumegue \\(OSS\\)\" <xavier.roumegue@oss.nxp.com>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":25486,"web_url":"https://patchwork.libcamera.org/comment/25486/","msgid":"<20221020054656.GB3874866@pyrite.rasen.tech>","date":"2022-10-20T05:46:56","subject":"Re: [libcamera-devel] [PATCH 2/2] pipeline: rkisp1: Use\n\tutils::Cleaner to simplify error handling in start","submitter":{"id":97,"url":"https://patchwork.libcamera.org/api/people/97/","name":"Nicolas Dufresne via libcamera-devel","email":"libcamera-devel@lists.libcamera.org"},"content":"On Tue, Oct 04, 2022 at 05:18:42AM +0300, Laurent Pinchart via libcamera-devel wrote:\n> Error handling in the PipelineHandlerRkISP1::start() function is\n> cumbersome. Simplify it using the utils::Cleaner class.\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n\n> ---\n>  src/libcamera/pipeline/rkisp1/rkisp1.cpp | 31 +++++++++---------------\n>  1 file changed, 11 insertions(+), 20 deletions(-)\n> \n> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> index 455ee2a0a711..33f3b0c5ab00 100644\n> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> @@ -823,69 +823,60 @@ int PipelineHandlerRkISP1::freeBuffers(Camera *camera)\n>  int PipelineHandlerRkISP1::start(Camera *camera, [[maybe_unused]] const ControlList *controls)\n>  {\n>  \tRkISP1CameraData *data = cameraData(camera);\n> +\tutils::Cleaner cleaner;\n>  \tint ret;\n>  \n>  \t/* Allocate buffers for internal pipeline usage. */\n>  \tret = allocateBuffers(camera);\n>  \tif (ret)\n>  \t\treturn ret;\n> +\tcleaner.defer([&]() { freeBuffers(camera); });\n>  \n>  \tret = data->ipa_->start();\n>  \tif (ret) {\n> -\t\tfreeBuffers(camera);\n>  \t\tLOG(RkISP1, Error)\n>  \t\t\t<< \"Failed to start IPA \" << camera->id();\n>  \t\treturn ret;\n>  \t}\n> +\tcleaner.defer([&]() { data->ipa_->stop(); });\n>  \n>  \tdata->frame_ = 0;\n>  \n>  \tret = param_->streamOn();\n>  \tif (ret) {\n> -\t\tdata->ipa_->stop();\n> -\t\tfreeBuffers(camera);\n>  \t\tLOG(RkISP1, Error)\n>  \t\t\t<< \"Failed to start parameters \" << camera->id();\n>  \t\treturn ret;\n>  \t}\n> +\tcleaner.defer([&]() { param_->streamOff(); });\n>  \n>  \tret = stat_->streamOn();\n>  \tif (ret) {\n> -\t\tparam_->streamOff();\n> -\t\tdata->ipa_->stop();\n> -\t\tfreeBuffers(camera);\n>  \t\tLOG(RkISP1, Error)\n>  \t\t\t<< \"Failed to start statistics \" << camera->id();\n>  \t\treturn ret;\n>  \t}\n> +\tcleaner.defer([&]() { stat_->streamOff(); });\n>  \n>  \tif (data->mainPath_->isEnabled()) {\n>  \t\tret = mainPath_.start();\n> -\t\tif (ret) {\n> -\t\t\tparam_->streamOff();\n> -\t\t\tstat_->streamOff();\n> -\t\t\tdata->ipa_->stop();\n> -\t\t\tfreeBuffers(camera);\n> +\t\tif (ret)\n>  \t\t\treturn ret;\n> -\t\t}\n> +\t\tcleaner.defer([&]() { mainPath_.stop(); });\n>  \t}\n>  \n>  \tif (hasSelfPath_ && data->selfPath_->isEnabled()) {\n>  \t\tret = selfPath_.start();\n> -\t\tif (ret) {\n> -\t\t\tmainPath_.stop();\n> -\t\t\tparam_->streamOff();\n> -\t\t\tstat_->streamOff();\n> -\t\t\tdata->ipa_->stop();\n> -\t\t\tfreeBuffers(camera);\n> +\t\tif (ret)\n>  \t\t\treturn ret;\n> -\t\t}\n>  \t}\n>  \n>  \tisp_->setFrameStartEnabled(true);\n>  \n>  \tactiveCamera_ = camera;\n> -\treturn ret;\n> +\n> +\tcleaner.clear();\n> +\treturn 0;\n>  }\n>  \n>  void PipelineHandlerRkISP1::stopDevice(Camera *camera)\n> -- \n> Regards,\n> \n> Laurent Pinchart\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 5FBE4C0DA4\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 20 Oct 2022 05:47:06 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 0FE4F62E8F;\n\tThu, 20 Oct 2022 07:47:06 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id AB1AE62E75\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 20 Oct 2022 07:47:04 +0200 (CEST)","from pyrite.rasen.tech (h175-177-042-159.catv02.itscom.jp\n\t[175.177.42.159])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 56156570;\n\tThu, 20 Oct 2022 07:47:03 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1666244826;\n\tbh=kZbVcPN4+lACW9oqXNq5kfng0S6a/KLYtui1mJ2p27Y=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=vrnnt8Pkr/sozuE65lUl/HSXMJAupW2DWxL6f6kyTBUqsMtX8Sqm3vUTJw7un2ZP6\n\t5PX0ZsZ/5gLJLWaTB6SBJiPmS9d0+5KZBVPY6QCs54ECl0aAnV8zRuBGbjaW6Estmg\n\tsZLVZU2D+HrUf1rPownLCPGISUKmYmZ/8iH3a0oqQt6bSagT+S+H1LqEKK3lMystZQ\n\tNif6dxplNCmXLPYng28KHK+AxNuko8sbmSxTTTOf3vbC7ysqWXaLPCf1WBxjk7q8sf\n\t2usyAKBM2peveb06u8MAVFPZ60KAadU2I0OLPDemVbdnFikQD8UilGWVVFu11MAxlf\n\tmWro6Yj/Tj8cQ==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1666244824;\n\tbh=kZbVcPN4+lACW9oqXNq5kfng0S6a/KLYtui1mJ2p27Y=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=BlzpQBWCWjcI4/9HNdHjc9vTP7/78Fs3377gZ7WUM8LyDT+O8P4ZyxdtQLbAZGQYc\n\tXSNVD31msAYGgTYd7+pjZUYorXXFpCrGindAk9dIMfsGgRXFoC6XsKchH+ri8QKwxn\n\tNfQzq3ic7SLsbglN8YPOjkzJp+PNG4HOGYB3whH0="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"BlzpQBWC\"; dkim-atps=neutral","Date":"Thu, 20 Oct 2022 14:46:56 +0900","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<20221020054656.GB3874866@pyrite.rasen.tech>","References":"<20221004021842.6345-1-laurent.pinchart@ideasonboard.com>\n\t<20221004021842.6345-3-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20221004021842.6345-3-laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH 2/2] pipeline: rkisp1: Use\n\tutils::Cleaner to simplify error handling in start","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>","From":"Paul Elder via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"paul.elder@ideasonboard.com","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]