[{"id":846,"web_url":"https://patchwork.libcamera.org/comment/846/","msgid":"<20190222003424.GP3485@pendragon.ideasonboard.com>","date":"2019-02-22T00:34:24","subject":"Re: [libcamera-devel] [PATCH 1/4] cam: free allocated buffers when\n\tdone capturing","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Niklas,\n\nThank you for the patch.\n\nOn Wed, Feb 20, 2019 at 03:37:33PM +0100, Niklas Söderlund wrote:\n> The allocated buffers needs to be freed once the application is done\n> with them.\n> \n> Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nDoes this fix valgrind warnings ?\n\n> ---\n>  src/cam/main.cpp | 10 +++++++---\n>  1 file changed, 7 insertions(+), 3 deletions(-)\n> \n> diff --git a/src/cam/main.cpp b/src/cam/main.cpp\n> index 9b67ab75a6a1663e..b034eb25429abeb3 100644\n> --- a/src/cam/main.cpp\n> +++ b/src/cam/main.cpp\n> @@ -163,7 +163,8 @@ static int capture()\n>  \t\tRequest *request = camera->createRequest();\n>  \t\tif (!request) {\n>  \t\t\tstd::cerr << \"Can't create request\" << std::endl;\n> -\t\t\treturn -ENOMEM;\n> +\t\t\tret = -ENOMEM;\n> +\t\t\tgoto out;\n>  \t\t}\n>  \n>  \t\tstd::map<Stream *, Buffer *> map;\n> @@ -171,13 +172,13 @@ static int capture()\n>  \t\tret = request->setBuffers(map);\n>  \t\tif (ret < 0) {\n>  \t\t\tstd::cerr << \"Can't set buffers for request\" << std::endl;\n> -\t\t\treturn ret;\n> +\t\t\tgoto out;\n>  \t\t}\n>  \n>  \t\tret = camera->queueRequest(request);\n>  \t\tif (ret < 0) {\n>  \t\t\tstd::cerr << \"Can't queue request\" << std::endl;\n> -\t\t\treturn ret;\n> +\t\t\tgoto out;\n>  \t\t}\n>  \t}\n>  \n> @@ -187,6 +188,9 @@ static int capture()\n>  \tret = loop->exec();\n>  \n>  \tcamera->stop();\n> +out:\n> +\tcamera->freeBuffers();\n> +\n>  \treturn ret;\n>  }\n>","headers":{"Return-Path":"<laurent.pinchart@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 44BD5600FB\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 22 Feb 2019 01:34:29 +0100 (CET)","from pendragon.ideasonboard.com\n\t(dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi\n\t[IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id D2BF7255;\n\tFri, 22 Feb 2019 01:34:28 +0100 (CET)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1550795669;\n\tbh=aFLZgRPihevBQaClh1LiA6VqtXHTwiUk15o02/lAkoM=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=rZwtv8DtbhMJEWcPZ4YHcUU+enWE9Tf+kGN+QhjB1ikF42iw6jlz9AiHW80jprUOD\n\t0suEhbHUx+iPrWEH39zZF8A6iN0ZqUEKN4bMEWBjsIJDKh/SuG8JP1I5LMythD8e0O\n\tX1EzoKr89tgQ68hcJScmkQVO54F+jn9GRGOv+mRA=","Date":"Fri, 22 Feb 2019 02:34:24 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Niklas =?utf-8?q?S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20190222003424.GP3485@pendragon.ideasonboard.com>","References":"<20190220143736.529-1-niklas.soderlund@ragnatech.se>\n\t<20190220143736.529-2-niklas.soderlund@ragnatech.se>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20190220143736.529-2-niklas.soderlund@ragnatech.se>","User-Agent":"Mutt/1.10.1 (2018-07-13)","Subject":"Re: [libcamera-devel] [PATCH 1/4] cam: free allocated buffers when\n\tdone capturing","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.23","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>","X-List-Received-Date":"Fri, 22 Feb 2019 00:34:29 -0000"}},{"id":867,"web_url":"https://patchwork.libcamera.org/comment/867/","msgid":"<20190224165954.GA899@bigcity.dyn.berto.se>","date":"2019-02-24T16:59:54","subject":"Re: [libcamera-devel] [PATCH 1/4] cam: free allocated buffers when\n\tdone capturing","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"Hi Laurent,\n\nThanks for your feedback.\n\nOn 2019-02-22 02:34:24 +0200, Laurent Pinchart wrote:\n> Hi Niklas,\n> \n> Thank you for the patch.\n> \n> On Wed, Feb 20, 2019 at 03:37:33PM +0100, Niklas Söderlund wrote:\n> > The allocated buffers needs to be freed once the application is done\n> > with them.\n> > \n> > Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n> \n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nThanks.\n\n> \n> Does this fix valgrind warnings ?\n\nUnfortunately not, more work is needed to fix this. Running cam with the \n--capture option using the UVC pipeline on master.\n\n==9051== HEAP SUMMARY:\n==9051==     in use at exit: 800 bytes in 16 blocks\n==9051==   total heap usage: 572 allocs, 556 frees, 278,788 bytes \nallocated\n==9051== ==9051== LEAK SUMMARY:\n==9051==    definitely lost: 448 bytes in 4 blocks\n==9051==    indirectly lost: 352 bytes in 12 blocks\n==9051==      possibly lost: 0 bytes in 0 blocks\n==9051==    still reachable: 0 bytes in 0 blocks\n==9051==         suppressed: 0 bytes in 0 blocks\n\nWith this series applied.\n\n==9212== HEAP SUMMARY:\n==9212==     in use at exit: 800 bytes in 16 blocks\n==9212==   total heap usage: 587 allocs, 571 frees, 281,271 bytes \nallocated\n==9212== ==9212== LEAK SUMMARY:\n==9212==    definitely lost: 448 bytes in 4 blocks\n==9212==    indirectly lost: 352 bytes in 12 blocks\n==9212==      possibly lost: 0 bytes in 0 blocks\n==9212==    still reachable: 0 bytes in 0 blocks\n==9212==         suppressed: 0 bytes in 0 blocks\n\nMore work is needed to track down the last leeks, I'm tracking this and \nhope to get to the bottom of this. All I know at the moment is that the \nleaks happen in the capture call path on UVC. Need to try other \npipelines once I'm home and have access to the IPU3.\n\n> \n> > ---\n> >  src/cam/main.cpp | 10 +++++++---\n> >  1 file changed, 7 insertions(+), 3 deletions(-)\n> > \n> > diff --git a/src/cam/main.cpp b/src/cam/main.cpp\n> > index 9b67ab75a6a1663e..b034eb25429abeb3 100644\n> > --- a/src/cam/main.cpp\n> > +++ b/src/cam/main.cpp\n> > @@ -163,7 +163,8 @@ static int capture()\n> >  \t\tRequest *request = camera->createRequest();\n> >  \t\tif (!request) {\n> >  \t\t\tstd::cerr << \"Can't create request\" << std::endl;\n> > -\t\t\treturn -ENOMEM;\n> > +\t\t\tret = -ENOMEM;\n> > +\t\t\tgoto out;\n> >  \t\t}\n> >  \n> >  \t\tstd::map<Stream *, Buffer *> map;\n> > @@ -171,13 +172,13 @@ static int capture()\n> >  \t\tret = request->setBuffers(map);\n> >  \t\tif (ret < 0) {\n> >  \t\t\tstd::cerr << \"Can't set buffers for request\" << std::endl;\n> > -\t\t\treturn ret;\n> > +\t\t\tgoto out;\n> >  \t\t}\n> >  \n> >  \t\tret = camera->queueRequest(request);\n> >  \t\tif (ret < 0) {\n> >  \t\t\tstd::cerr << \"Can't queue request\" << std::endl;\n> > -\t\t\treturn ret;\n> > +\t\t\tgoto out;\n> >  \t\t}\n> >  \t}\n> >  \n> > @@ -187,6 +188,9 @@ static int capture()\n> >  \tret = loop->exec();\n> >  \n> >  \tcamera->stop();\n> > +out:\n> > +\tcamera->freeBuffers();\n> > +\n> >  \treturn ret;\n> >  }\n> >  \n> \n> -- \n> Regards,\n> \n> Laurent Pinchart","headers":{"Return-Path":"<niklas.soderlund@ragnatech.se>","Received":["from mail-lf1-x143.google.com (mail-lf1-x143.google.com\n\t[IPv6:2a00:1450:4864:20::143])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 5CCB7601E2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 24 Feb 2019 17:59:57 +0100 (CET)","by mail-lf1-x143.google.com with SMTP id p1so5093599lfk.9\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 24 Feb 2019 08:59:57 -0800 (PST)","from localhost (89-233-230-99.cust.bredband2.com. [89.233.230.99])\n\tby smtp.gmail.com with ESMTPSA id\n\tv8sm1958007lji.51.2019.02.24.08.59.55\n\t(version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256);\n\tSun, 24 Feb 2019 08:59:55 -0800 (PST)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ragnatech-se.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:content-transfer-encoding:in-reply-to\n\t:user-agent; bh=UNHiGO5AfxyMBImNb4QY0RfK2OwLFRkid0VwyTnLPUk=;\n\tb=LNadCeFvwCY1kwH8/SsYoyoptUEgSG98gKN/u7k+JIzX5ZnE4/Ue4FCNa1rWP1bO2I\n\tIlIC/1jUI/OFCmLb9peqoe897HL/KsdzzQPIvIy7Yc8a6Ztg1U2WyIjMJlrpHX6epQcb\n\trkSIdOh0ovBtt7JEIX3J4edvRJ4pZx6KISaLjLNXA2PNey8r+mZpa/uPysIi5B1cWIqG\n\tCSoOz5avRZHYcD3C/SbC/FfCPYAx1i6WG2kZIyVaV8WGSDe0R64lry9P/7dyxQCLaVuu\n\tzZTkyG6XTkEdIlR4JoXc2Guv0m9gSh+SIgsRi0ZyZDuS0W6KnAD+hMuHHmuAGkB44cOH\n\tcziA==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:content-transfer-encoding\n\t:in-reply-to:user-agent;\n\tbh=UNHiGO5AfxyMBImNb4QY0RfK2OwLFRkid0VwyTnLPUk=;\n\tb=H26T7zC+kTiaOGrzSyI/NMZvnJvNZqV61b9tu6U64lBU2qnGHQBvOb7pzCGaP7MrdY\n\tjo9dpUqFBIvY4VRgL3FxYWvwQN/Ic/XcP/U9dvmzaW1gyecoZqF/keWkVj3uBw4kSG1u\n\tceeupIQovlQUxkDwigASBiBsfGdFbinYzzHbT9P1vbsvPubXMdGguQir56uhkWxa8VcG\n\thGd0vlOfov+5xy492dUQArYGi1ZJPTZwQbusno+XRjXYOGtdWhBSoRIR3THn4Ox3azL4\n\tZEnEYxNwALCSyUZFyTT/WpT1WO9z7hkUpd+qZ1pkiBnZKrdlwp7x4zuFjd7Z/LPNcBQy\n\td/tQ==","X-Gm-Message-State":"AHQUAuYzBOh10mfK90FHEG+xl2Yuaur8mUBMxACtwghVEmtLqpLCYFVV\n\tRkN87Hv3iudbp87P6svJnxlUfQ==","X-Google-Smtp-Source":"AHgI3IaEWseO61nxSN7U/Rnfb9SC+dydhNOG23oBVrXFN4F7izzwfuy+B3w6BT1ZrGNpTdROCN6Jug==","X-Received":"by 2002:ac2:5303:: with SMTP id c3mr8462591lfh.97.1551027596358; \n\tSun, 24 Feb 2019 08:59:56 -0800 (PST)","Date":"Sun, 24 Feb 2019 17:59:54 +0100","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20190224165954.GA899@bigcity.dyn.berto.se>","References":"<20190220143736.529-1-niklas.soderlund@ragnatech.se>\n\t<20190220143736.529-2-niklas.soderlund@ragnatech.se>\n\t<20190222003424.GP3485@pendragon.ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=iso-8859-1","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20190222003424.GP3485@pendragon.ideasonboard.com>","User-Agent":"Mutt/1.10.1 (2018-07-13)","Subject":"Re: [libcamera-devel] [PATCH 1/4] cam: free allocated buffers when\n\tdone capturing","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.23","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>","X-List-Received-Date":"Sun, 24 Feb 2019 16:59:57 -0000"}},{"id":871,"web_url":"https://patchwork.libcamera.org/comment/871/","msgid":"<20190225084357.GC4387@pendragon.ideasonboard.com>","date":"2019-02-25T08:43:57","subject":"Re: [libcamera-devel] [PATCH 1/4] cam: free allocated buffers when\n\tdone capturing","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Niklas,\n\nOn Sun, Feb 24, 2019 at 05:59:54PM +0100, Niklas Söderlund wrote:\n> On 2019-02-22 02:34:24 +0200, Laurent Pinchart wrote:\n> > On Wed, Feb 20, 2019 at 03:37:33PM +0100, Niklas Söderlund wrote:\n> >> The allocated buffers needs to be freed once the application is done\n> >> with them.\n> >> \n> >> Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n> > \n> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> \n> Thanks.\n> \n> > Does this fix valgrind warnings ?\n> \n> Unfortunately not, more work is needed to fix this. Running cam with the \n> --capture option using the UVC pipeline on master.\n> \n> ==9051== HEAP SUMMARY:\n> ==9051==     in use at exit: 800 bytes in 16 blocks\n> ==9051==   total heap usage: 572 allocs, 556 frees, 278,788 bytes \n> allocated\n> ==9051== ==9051== LEAK SUMMARY:\n> ==9051==    definitely lost: 448 bytes in 4 blocks\n> ==9051==    indirectly lost: 352 bytes in 12 blocks\n> ==9051==      possibly lost: 0 bytes in 0 blocks\n> ==9051==    still reachable: 0 bytes in 0 blocks\n> ==9051==         suppressed: 0 bytes in 0 blocks\n> \n> With this series applied.\n> \n> ==9212== HEAP SUMMARY:\n> ==9212==     in use at exit: 800 bytes in 16 blocks\n> ==9212==   total heap usage: 587 allocs, 571 frees, 281,271 bytes \n> allocated\n> ==9212== ==9212== LEAK SUMMARY:\n> ==9212==    definitely lost: 448 bytes in 4 blocks\n> ==9212==    indirectly lost: 352 bytes in 12 blocks\n> ==9212==      possibly lost: 0 bytes in 0 blocks\n> ==9212==    still reachable: 0 bytes in 0 blocks\n> ==9212==         suppressed: 0 bytes in 0 blocks\n> \n> More work is needed to track down the last leeks, I'm tracking this and \n> hope to get to the bottom of this. All I know at the moment is that the \n> leaks happen in the capture call path on UVC. Need to try other \n> pipelines once I'm home and have access to the IPU3.\n\nvalgrind should give you a more detailed list of leaks if you specify a\nfew extra options I can't remember right now :-) It should tell you what\nthose options are when you run it though. There are two leaks related to\nlibudev that I believe are not our fault, apart from that the rest\nshould be fixed.\n\n> >> ---\n> >>  src/cam/main.cpp | 10 +++++++---\n> >>  1 file changed, 7 insertions(+), 3 deletions(-)\n> >> \n> >> diff --git a/src/cam/main.cpp b/src/cam/main.cpp\n> >> index 9b67ab75a6a1663e..b034eb25429abeb3 100644\n> >> --- a/src/cam/main.cpp\n> >> +++ b/src/cam/main.cpp\n> >> @@ -163,7 +163,8 @@ static int capture()\n> >>  \t\tRequest *request = camera->createRequest();\n> >>  \t\tif (!request) {\n> >>  \t\t\tstd::cerr << \"Can't create request\" << std::endl;\n> >> -\t\t\treturn -ENOMEM;\n> >> +\t\t\tret = -ENOMEM;\n> >> +\t\t\tgoto out;\n> >>  \t\t}\n> >>  \n> >>  \t\tstd::map<Stream *, Buffer *> map;\n> >> @@ -171,13 +172,13 @@ static int capture()\n> >>  \t\tret = request->setBuffers(map);\n> >>  \t\tif (ret < 0) {\n> >>  \t\t\tstd::cerr << \"Can't set buffers for request\" << std::endl;\n> >> -\t\t\treturn ret;\n> >> +\t\t\tgoto out;\n> >>  \t\t}\n> >>  \n> >>  \t\tret = camera->queueRequest(request);\n> >>  \t\tif (ret < 0) {\n> >>  \t\t\tstd::cerr << \"Can't queue request\" << std::endl;\n> >> -\t\t\treturn ret;\n> >> +\t\t\tgoto out;\n> >>  \t\t}\n> >>  \t}\n> >>  \n> >> @@ -187,6 +188,9 @@ static int capture()\n> >>  \tret = loop->exec();\n> >>  \n> >>  \tcamera->stop();\n> >> +out:\n> >> +\tcamera->freeBuffers();\n> >> +\n> >>  \treturn ret;\n> >>  }\n> >>","headers":{"Return-Path":"<laurent.pinchart@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 34BE3600FE\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 25 Feb 2019 09:44:06 +0100 (CET)","from pendragon.ideasonboard.com (85-76-109-165-nat.elisa-mobile.fi\n\t[85.76.109.165])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 3DA6867;\n\tMon, 25 Feb 2019 09:44:05 +0100 (CET)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1551084245;\n\tbh=99vBwsfarFAJe4tK1GWy232jX+/EyeMJ7sxRbvuclo0=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=Illr1+1x4wP0H/d3u8EZ3RhHFdLpVSinYVeUC2McogLaV9IR6N7jPLOeNZtDIAp+g\n\tHJ7VLjuKJ4FLKfG/k6xiciPdpnRK5hETR9aiQxEdLI9EhLaGZbSeaYFjL+hH4NnTmo\n\tljM0uBal9GOpz9K5m6PBwetEcZz/sG/Qxktf7TIw=","Date":"Mon, 25 Feb 2019 10:43:57 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Niklas =?utf-8?q?S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20190225084357.GC4387@pendragon.ideasonboard.com>","References":"<20190220143736.529-1-niklas.soderlund@ragnatech.se>\n\t<20190220143736.529-2-niklas.soderlund@ragnatech.se>\n\t<20190222003424.GP3485@pendragon.ideasonboard.com>\n\t<20190224165954.GA899@bigcity.dyn.berto.se>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20190224165954.GA899@bigcity.dyn.berto.se>","User-Agent":"Mutt/1.10.1 (2018-07-13)","Subject":"Re: [libcamera-devel] [PATCH 1/4] cam: free allocated buffers when\n\tdone capturing","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.23","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>","X-List-Received-Date":"Mon, 25 Feb 2019 08:44:06 -0000"}}]