[{"id":11819,"web_url":"https://patchwork.libcamera.org/comment/11819/","msgid":"<20200804110822.b35hygntl3msz7vh@uno.localdomain>","date":"2020-08-04T11:08:22","subject":"Re: [libcamera-devel] [PATCH v2 10/12] android: camera_device:\n\tGenerate ResultMetadata earlier","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Kieran\n\nOn Mon, Aug 03, 2020 at 05:18:14PM +0100, Kieran Bingham wrote:\n> Generate the ResultMetadata before performing JPEG compression so that\n> JPEG specific metadata can be added to the metadata when it has been\n> processed.\n>\n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> ---\n>  src/android/camera_device.cpp | 25 ++++++++++++++-----------\n>  1 file changed, 14 insertions(+), 11 deletions(-)\n>\n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index ae52a5ca8b86..e23ab055d012 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -1138,6 +1138,8 @@ void CameraDevice::requestComplete(Request *request)\n>  \tconst std::map<Stream *, FrameBuffer *> &buffers = request->buffers();\n>  \tcamera3_buffer_status status = CAMERA3_BUFFER_STATUS_OK;\n>  \tstd::unique_ptr<CameraMetadata> resultMetadata;\n> +\tCamera3RequestDescriptor *descriptor =\n> +\t\treinterpret_cast<Camera3RequestDescriptor *>(request->cookie());\n>\n>  \tif (request->status() != Request::RequestComplete) {\n>  \t\tLOG(HAL, Error) << \"Request not successfully completed: \"\n> @@ -1145,9 +1147,18 @@ void CameraDevice::requestComplete(Request *request)\n>  \t\tstatus = CAMERA3_BUFFER_STATUS_ERROR;\n>  \t}\n>\n> +\t/*\n> +\t * \\todo The timestamp used for the metadata is currently always taken\n> +\t * from the first buffer (which may be the first stream) in the Request.\n> +\t * It might be appropriate to return a 'correct' (as determined by\n> +\t * pipeline handlers) timestamp in the Request itself.\n> +\t */\n> +\tFrameBuffer *buffer = buffers.begin()->second;\n> +\tresultMetadata = getResultMetadata(descriptor->frameNumber,\n> +\t\t\t\t\t   buffer->metadata().timestamp);\n> +\n>  \t/* Prepare to call back the Android camera stack. */\n> -\tCamera3RequestDescriptor *descriptor =\n> -\t\treinterpret_cast<Camera3RequestDescriptor *>(request->cookie());\n> +\n\nOne empty line is enough\n\n>\n>  \tcamera3_capture_result_t captureResult = {};\n>  \tcaptureResult.frame_number = descriptor->frameNumber;\n> @@ -1160,21 +1171,13 @@ void CameraDevice::requestComplete(Request *request)\n>  \tcaptureResult.output_buffers =\n>  \t\tconst_cast<const camera3_stream_buffer_t *>(descriptor->buffers);\n>\n> -\t/*\n> -\t * \\todo The timestamp used for the metadata is currently always taken\n> -\t * from the first buffer (which may be the first stream) in the Request.\n> -\t * It might be appropriate to return a 'correct' (as determined by\n> -\t * pipeline handlers) timestamp in the Request itself.\n> -\t */\n> -\tFrameBuffer *buffer = buffers.begin()->second;\n>\n>  \tif (status == CAMERA3_BUFFER_STATUS_OK) {\n>  \t\tnotifyShutter(descriptor->frameNumber,\n>  \t\t\t      buffer->metadata().timestamp);\n>\n>  \t\tcaptureResult.partial_result = 1;\n> -\t\tresultMetadata = getResultMetadata(descriptor->frameNumber,\n> -\t\t\t\t\t\t   buffer->metadata().timestamp);\n> +\n\nI would drop this one too\n\nOverall I think this is fine so far, as we generate metadata\nstatically, but going forward if we have to access the Controls\nreturned by a completed Request, we shall make sure it completed\nsuccessfully. Can we record that with a \\todo entry ?\n\nThat apart\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n  j\n\n>  \t\tcaptureResult.result = resultMetadata->get();\n>  \t}\n>\n> --\n> 2.25.1\n>\n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","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 CE8B3BD87A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  4 Aug 2020 11:04:42 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 718F66043C;\n\tTue,  4 Aug 2020 13:04:42 +0200 (CEST)","from relay9-d.mail.gandi.net (relay9-d.mail.gandi.net\n\t[217.70.183.199])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 5A8B4603C9\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  4 Aug 2020 13:04:41 +0200 (CEST)","from uno.localdomain (93-34-118-233.ip49.fastwebnet.it\n\t[93.34.118.233]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay9-d.mail.gandi.net (Postfix) with ESMTPSA id B093BFF803;\n\tTue,  4 Aug 2020 11:04:40 +0000 (UTC)"],"X-Originating-IP":"93.34.118.233","Date":"Tue, 4 Aug 2020 13:08:22 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20200804110822.b35hygntl3msz7vh@uno.localdomain>","References":"<20200803161816.107113-1-kieran.bingham@ideasonboard.com>\n\t<20200803161816.107113-11-kieran.bingham@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20200803161816.107113-11-kieran.bingham@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v2 10/12] android: camera_device:\n\tGenerate ResultMetadata earlier","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>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":11820,"web_url":"https://patchwork.libcamera.org/comment/11820/","msgid":"<3458b541-2410-ef2b-5533-8a7724cd4a9d@ideasonboard.com>","date":"2020-08-04T11:10:45","subject":"Re: [libcamera-devel] [PATCH v2 10/12] android: camera_device:\n\tGenerate ResultMetadata earlier","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Jacopo,\n\nOn 04/08/2020 12:08, Jacopo Mondi wrote:\n> Hi Kieran\n> \n> On Mon, Aug 03, 2020 at 05:18:14PM +0100, Kieran Bingham wrote:\n>> Generate the ResultMetadata before performing JPEG compression so that\n>> JPEG specific metadata can be added to the metadata when it has been\n>> processed.\n>>\n>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>> ---\n>>  src/android/camera_device.cpp | 25 ++++++++++++++-----------\n>>  1 file changed, 14 insertions(+), 11 deletions(-)\n>>\n>> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n>> index ae52a5ca8b86..e23ab055d012 100644\n>> --- a/src/android/camera_device.cpp\n>> +++ b/src/android/camera_device.cpp\n>> @@ -1138,6 +1138,8 @@ void CameraDevice::requestComplete(Request *request)\n>>  \tconst std::map<Stream *, FrameBuffer *> &buffers = request->buffers();\n>>  \tcamera3_buffer_status status = CAMERA3_BUFFER_STATUS_OK;\n>>  \tstd::unique_ptr<CameraMetadata> resultMetadata;\n>> +\tCamera3RequestDescriptor *descriptor =\n>> +\t\treinterpret_cast<Camera3RequestDescriptor *>(request->cookie());\n>>\n>>  \tif (request->status() != Request::RequestComplete) {\n>>  \t\tLOG(HAL, Error) << \"Request not successfully completed: \"\n>> @@ -1145,9 +1147,18 @@ void CameraDevice::requestComplete(Request *request)\n>>  \t\tstatus = CAMERA3_BUFFER_STATUS_ERROR;\n>>  \t}\n>>\n>> +\t/*\n>> +\t * \\todo The timestamp used for the metadata is currently always taken\n>> +\t * from the first buffer (which may be the first stream) in the Request.\n>> +\t * It might be appropriate to return a 'correct' (as determined by\n>> +\t * pipeline handlers) timestamp in the Request itself.\n>> +\t */\n>> +\tFrameBuffer *buffer = buffers.begin()->second;\n>> +\tresultMetadata = getResultMetadata(descriptor->frameNumber,\n>> +\t\t\t\t\t   buffer->metadata().timestamp);\n>> +\n>>  \t/* Prepare to call back the Android camera stack. */\n>> -\tCamera3RequestDescriptor *descriptor =\n>> -\t\treinterpret_cast<Camera3RequestDescriptor *>(request->cookie());\n>> +\n> \n> One empty line is enough\n> \n>>\n>>  \tcamera3_capture_result_t captureResult = {};\n>>  \tcaptureResult.frame_number = descriptor->frameNumber;\n>> @@ -1160,21 +1171,13 @@ void CameraDevice::requestComplete(Request *request)\n>>  \tcaptureResult.output_buffers =\n>>  \t\tconst_cast<const camera3_stream_buffer_t *>(descriptor->buffers);\n>>\n>> -\t/*\n>> -\t * \\todo The timestamp used for the metadata is currently always taken\n>> -\t * from the first buffer (which may be the first stream) in the Request.\n>> -\t * It might be appropriate to return a 'correct' (as determined by\n>> -\t * pipeline handlers) timestamp in the Request itself.\n>> -\t */\n>> -\tFrameBuffer *buffer = buffers.begin()->second;\n>>\n>>  \tif (status == CAMERA3_BUFFER_STATUS_OK) {\n>>  \t\tnotifyShutter(descriptor->frameNumber,\n>>  \t\t\t      buffer->metadata().timestamp);\n>>\n>>  \t\tcaptureResult.partial_result = 1;\n>> -\t\tresultMetadata = getResultMetadata(descriptor->frameNumber,\n>> -\t\t\t\t\t\t   buffer->metadata().timestamp);\n>> +\n> \n> I would drop this one too\n> \n> Overall I think this is fine so far, as we generate metadata\n> statically, but going forward if we have to access the Controls\n> returned by a completed Request, we shall make sure it completed\n> successfully. Can we record that with a \\todo entry ?\n> \n\nI'm not sure I fully understand your comment here, do you mean the\nlibcamera request should be completed successfully before updating the\nresultMetaData?\n\nIt will still only be assigned to the captureResult.result if the\n status == CAMERA3_BUFFER_STATUS_OK\n\ncheck passes still...\n\nYou'll see how this gets used in 12/12 of course.\n\n\n> That apart\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks,\n\n\n> \n> Thanks\n>   j\n> \n>>  \t\tcaptureResult.result = resultMetadata->get();\n>>  \t}\n>>\n>> --\n>> 2.25.1\n>>\n>> _______________________________________________\n>> libcamera-devel mailing list\n>> libcamera-devel@lists.libcamera.org\n>> https://lists.libcamera.org/listinfo/libcamera-devel","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 7DAE8BD86F\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  4 Aug 2020 11:10:54 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 1DC8E6043C;\n\tTue,  4 Aug 2020 13:10:54 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1C03A603C9\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  4 Aug 2020 13:10:53 +0200 (CEST)","from [192.168.0.20]\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id AA6C227B;\n\tTue,  4 Aug 2020 13:10:48 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"k9rJj1YO\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1596539451;\n\tbh=l0/jdOWwSWeOqZHtIoAhtvZDv62GXnn+jPJRv4WLA0Q=;\n\th=Reply-To:Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=k9rJj1YOoqa/++kThSTPpOC3XtKAFKTZZup9bO+tvtCB1EmP6KZEK1VDfoaxx12B5\n\top4pKT2GBv3tSMer0YjVlwS1mV3TUcSVo/JewY39p2jAbjJKe9lVyKaukNOSPjW8hk\n\tO8jN4e9O2ZJ0MiXF0AqN6LXynd27mr3IiokZJnuc=","To":"Jacopo Mondi <jacopo@jmondi.org>","References":"<20200803161816.107113-1-kieran.bingham@ideasonboard.com>\n\t<20200803161816.107113-11-kieran.bingham@ideasonboard.com>\n\t<20200804110822.b35hygntl3msz7vh@uno.localdomain>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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\n\tWZw01QYHU/GUV/zHJSFk","Organization":"Ideas on Board","Message-ID":"<3458b541-2410-ef2b-5533-8a7724cd4a9d@ideasonboard.com>","Date":"Tue, 4 Aug 2020 12:10:45 +0100","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101\n\tThunderbird/68.10.0","MIME-Version":"1.0","In-Reply-To":"<20200804110822.b35hygntl3msz7vh@uno.localdomain>","Content-Language":"en-GB","Subject":"Re: [libcamera-devel] [PATCH v2 10/12] android: camera_device:\n\tGenerate ResultMetadata earlier","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>","Reply-To":"kieran.bingham@ideasonboard.com","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":11825,"web_url":"https://patchwork.libcamera.org/comment/11825/","msgid":"<20200804115523.v6hfldpoi3ieefe3@uno.localdomain>","date":"2020-08-04T11:55:23","subject":"Re: [libcamera-devel] [PATCH v2 10/12] android: camera_device:\n\tGenerate ResultMetadata earlier","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Kieran,\n\nOn Tue, Aug 04, 2020 at 12:10:45PM +0100, Kieran Bingham wrote:\n> Hi Jacopo,\n>\n> On 04/08/2020 12:08, Jacopo Mondi wrote:\n> > Hi Kieran\n> >\n> > On Mon, Aug 03, 2020 at 05:18:14PM +0100, Kieran Bingham wrote:\n> >> Generate the ResultMetadata before performing JPEG compression so that\n> >> JPEG specific metadata can be added to the metadata when it has been\n> >> processed.\n> >>\n> >> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> >> ---\n> >>  src/android/camera_device.cpp | 25 ++++++++++++++-----------\n> >>  1 file changed, 14 insertions(+), 11 deletions(-)\n> >>\n> >> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> >> index ae52a5ca8b86..e23ab055d012 100644\n> >> --- a/src/android/camera_device.cpp\n> >> +++ b/src/android/camera_device.cpp\n> >> @@ -1138,6 +1138,8 @@ void CameraDevice::requestComplete(Request *request)\n> >>  \tconst std::map<Stream *, FrameBuffer *> &buffers = request->buffers();\n> >>  \tcamera3_buffer_status status = CAMERA3_BUFFER_STATUS_OK;\n> >>  \tstd::unique_ptr<CameraMetadata> resultMetadata;\n> >> +\tCamera3RequestDescriptor *descriptor =\n> >> +\t\treinterpret_cast<Camera3RequestDescriptor *>(request->cookie());\n> >>\n> >>  \tif (request->status() != Request::RequestComplete) {\n> >>  \t\tLOG(HAL, Error) << \"Request not successfully completed: \"\n> >> @@ -1145,9 +1147,18 @@ void CameraDevice::requestComplete(Request *request)\n> >>  \t\tstatus = CAMERA3_BUFFER_STATUS_ERROR;\n> >>  \t}\n> >>\n> >> +\t/*\n> >> +\t * \\todo The timestamp used for the metadata is currently always taken\n> >> +\t * from the first buffer (which may be the first stream) in the Request.\n> >> +\t * It might be appropriate to return a 'correct' (as determined by\n> >> +\t * pipeline handlers) timestamp in the Request itself.\n> >> +\t */\n> >> +\tFrameBuffer *buffer = buffers.begin()->second;\n> >> +\tresultMetadata = getResultMetadata(descriptor->frameNumber,\n> >> +\t\t\t\t\t   buffer->metadata().timestamp);\n> >> +\n> >>  \t/* Prepare to call back the Android camera stack. */\n> >> -\tCamera3RequestDescriptor *descriptor =\n> >> -\t\treinterpret_cast<Camera3RequestDescriptor *>(request->cookie());\n> >> +\n> >\n> > One empty line is enough\n> >\n> >>\n> >>  \tcamera3_capture_result_t captureResult = {};\n> >>  \tcaptureResult.frame_number = descriptor->frameNumber;\n> >> @@ -1160,21 +1171,13 @@ void CameraDevice::requestComplete(Request *request)\n> >>  \tcaptureResult.output_buffers =\n> >>  \t\tconst_cast<const camera3_stream_buffer_t *>(descriptor->buffers);\n> >>\n> >> -\t/*\n> >> -\t * \\todo The timestamp used for the metadata is currently always taken\n> >> -\t * from the first buffer (which may be the first stream) in the Request.\n> >> -\t * It might be appropriate to return a 'correct' (as determined by\n> >> -\t * pipeline handlers) timestamp in the Request itself.\n> >> -\t */\n> >> -\tFrameBuffer *buffer = buffers.begin()->second;\n> >>\n> >>  \tif (status == CAMERA3_BUFFER_STATUS_OK) {\n> >>  \t\tnotifyShutter(descriptor->frameNumber,\n> >>  \t\t\t      buffer->metadata().timestamp);\n> >>\n> >>  \t\tcaptureResult.partial_result = 1;\n> >> -\t\tresultMetadata = getResultMetadata(descriptor->frameNumber,\n> >> -\t\t\t\t\t\t   buffer->metadata().timestamp);\n> >> +\n> >\n> > I would drop this one too\n> >\n> > Overall I think this is fine so far, as we generate metadata\n> > statically, but going forward if we have to access the Controls\n> > returned by a completed Request, we shall make sure it completed\n> > successfully. Can we record that with a \\todo entry ?\n> >\n>\n> I'm not sure I fully understand your comment here, do you mean the\n> libcamera request should be completed successfully before updating the\n> resultMetaData?\n\nWhat I meant to say is that before this change the metadata buffer was\ngenerated in the\n\tif (status == CAMERA3_BUFFER_STATUS_OK)\ncase, while now, if I got this right, it's generated unconditionally.\nWhen we'll assemble it inspecting the ControlList associated with the\njust completed Request, if it has not completed succesfully, we might\ntry to access an invalid control list or a control list with unset\nvalues. If that's correct, I think it has to be recorded.\n\nThanks\n  j\n\n>\n> It will still only be assigned to the captureResult.result if the\n>  status == CAMERA3_BUFFER_STATUS_OK\n>\n> check passes still...\n>\n> You'll see how this gets used in 12/12 of course.\n>\n>\n> > That apart\n> > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n>\n> Thanks,\n>\n>\n> >\n> > Thanks\n> >   j\n> >\n> >>  \t\tcaptureResult.result = resultMetadata->get();\n> >>  \t}\n> >>\n> >> --\n> >> 2.25.1\n> >>\n> >> _______________________________________________\n> >> libcamera-devel mailing list\n> >> libcamera-devel@lists.libcamera.org\n> >> https://lists.libcamera.org/listinfo/libcamera-devel\n>\n> --\n> Regards\n> --\n> Kieran","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 92EAABD86F\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  4 Aug 2020 11:51:43 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 3335B60546;\n\tTue,  4 Aug 2020 13:51:43 +0200 (CEST)","from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net\n\t[217.70.183.194])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 12C0B6048E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  4 Aug 2020 13:51:42 +0200 (CEST)","from uno.localdomain (93-34-118-233.ip49.fastwebnet.it\n\t[93.34.118.233]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay2-d.mail.gandi.net (Postfix) with ESMTPSA id 8E48440008;\n\tTue,  4 Aug 2020 11:51:41 +0000 (UTC)"],"X-Originating-IP":"93.34.118.233","Date":"Tue, 4 Aug 2020 13:55:23 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20200804115523.v6hfldpoi3ieefe3@uno.localdomain>","References":"<20200803161816.107113-1-kieran.bingham@ideasonboard.com>\n\t<20200803161816.107113-11-kieran.bingham@ideasonboard.com>\n\t<20200804110822.b35hygntl3msz7vh@uno.localdomain>\n\t<3458b541-2410-ef2b-5533-8a7724cd4a9d@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<3458b541-2410-ef2b-5533-8a7724cd4a9d@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v2 10/12] android: camera_device:\n\tGenerate ResultMetadata earlier","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>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":11826,"web_url":"https://patchwork.libcamera.org/comment/11826/","msgid":"<00f52605-f8b6-4038-9c46-3f3c9f1650ba@ideasonboard.com>","date":"2020-08-04T11:54:04","subject":"Re: [libcamera-devel] [PATCH v2 10/12] android: camera_device:\n\tGenerate ResultMetadata earlier","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Jacopo,\n\nOn 04/08/2020 12:55, Jacopo Mondi wrote:\n> Hi Kieran,\n> \n> On Tue, Aug 04, 2020 at 12:10:45PM +0100, Kieran Bingham wrote:\n>> Hi Jacopo,\n>>\n>> On 04/08/2020 12:08, Jacopo Mondi wrote:\n>>> Hi Kieran\n>>>\n>>> On Mon, Aug 03, 2020 at 05:18:14PM +0100, Kieran Bingham wrote:\n>>>> Generate the ResultMetadata before performing JPEG compression so that\n>>>> JPEG specific metadata can be added to the metadata when it has been\n>>>> processed.\n>>>>\n>>>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>>>> ---\n>>>>  src/android/camera_device.cpp | 25 ++++++++++++++-----------\n>>>>  1 file changed, 14 insertions(+), 11 deletions(-)\n>>>>\n>>>> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n>>>> index ae52a5ca8b86..e23ab055d012 100644\n>>>> --- a/src/android/camera_device.cpp\n>>>> +++ b/src/android/camera_device.cpp\n>>>> @@ -1138,6 +1138,8 @@ void CameraDevice::requestComplete(Request *request)\n>>>>  \tconst std::map<Stream *, FrameBuffer *> &buffers = request->buffers();\n>>>>  \tcamera3_buffer_status status = CAMERA3_BUFFER_STATUS_OK;\n>>>>  \tstd::unique_ptr<CameraMetadata> resultMetadata;\n>>>> +\tCamera3RequestDescriptor *descriptor =\n>>>> +\t\treinterpret_cast<Camera3RequestDescriptor *>(request->cookie());\n>>>>\n>>>>  \tif (request->status() != Request::RequestComplete) {\n>>>>  \t\tLOG(HAL, Error) << \"Request not successfully completed: \"\n>>>> @@ -1145,9 +1147,18 @@ void CameraDevice::requestComplete(Request *request)\n>>>>  \t\tstatus = CAMERA3_BUFFER_STATUS_ERROR;\n>>>>  \t}\n>>>>\n>>>> +\t/*\n>>>> +\t * \\todo The timestamp used for the metadata is currently always taken\n>>>> +\t * from the first buffer (which may be the first stream) in the Request.\n>>>> +\t * It might be appropriate to return a 'correct' (as determined by\n>>>> +\t * pipeline handlers) timestamp in the Request itself.\n>>>> +\t */\n>>>> +\tFrameBuffer *buffer = buffers.begin()->second;\n>>>> +\tresultMetadata = getResultMetadata(descriptor->frameNumber,\n>>>> +\t\t\t\t\t   buffer->metadata().timestamp);\n>>>> +\n>>>>  \t/* Prepare to call back the Android camera stack. */\n>>>> -\tCamera3RequestDescriptor *descriptor =\n>>>> -\t\treinterpret_cast<Camera3RequestDescriptor *>(request->cookie());\n>>>> +\n>>>\n>>> One empty line is enough\n>>>\n>>>>\n>>>>  \tcamera3_capture_result_t captureResult = {};\n>>>>  \tcaptureResult.frame_number = descriptor->frameNumber;\n>>>> @@ -1160,21 +1171,13 @@ void CameraDevice::requestComplete(Request *request)\n>>>>  \tcaptureResult.output_buffers =\n>>>>  \t\tconst_cast<const camera3_stream_buffer_t *>(descriptor->buffers);\n>>>>\n>>>> -\t/*\n>>>> -\t * \\todo The timestamp used for the metadata is currently always taken\n>>>> -\t * from the first buffer (which may be the first stream) in the Request.\n>>>> -\t * It might be appropriate to return a 'correct' (as determined by\n>>>> -\t * pipeline handlers) timestamp in the Request itself.\n>>>> -\t */\n>>>> -\tFrameBuffer *buffer = buffers.begin()->second;\n>>>>\n>>>>  \tif (status == CAMERA3_BUFFER_STATUS_OK) {\n>>>>  \t\tnotifyShutter(descriptor->frameNumber,\n>>>>  \t\t\t      buffer->metadata().timestamp);\n>>>>\n>>>>  \t\tcaptureResult.partial_result = 1;\n>>>> -\t\tresultMetadata = getResultMetadata(descriptor->frameNumber,\n>>>> -\t\t\t\t\t\t   buffer->metadata().timestamp);\n>>>> +\n>>>\n>>> I would drop this one too\n>>>\n>>> Overall I think this is fine so far, as we generate metadata\n>>> statically, but going forward if we have to access the Controls\n>>> returned by a completed Request, we shall make sure it completed\n>>> successfully. Can we record that with a \\todo entry ?\n>>>\n>>\n>> I'm not sure I fully understand your comment here, do you mean the\n>> libcamera request should be completed successfully before updating the\n>> resultMetaData?\n> \n> What I meant to say is that before this change the metadata buffer was\n> generated in the\n> \tif (status == CAMERA3_BUFFER_STATUS_OK)\n> case, while now, if I got this right, it's generated unconditionally.\n> When we'll assemble it inspecting the ControlList associated with the\n> just completed Request, if it has not completed succesfully, we might\n> try to access an invalid control list or a control list with unset\n> values. If that's correct, I think it has to be recorded.\n\nNo, I don't touch any control list. The added information comes only\nfrom the generated JPEG content, which is local to the android layer,\nnot the underlying libcamera stream.\n\n--\nK\n\n> Thanks\n>   j\n> \n>>\n>> It will still only be assigned to the captureResult.result if the\n>>  status == CAMERA3_BUFFER_STATUS_OK\n>>\n>> check passes still...\n>>\n>> You'll see how this gets used in 12/12 of course.\n>>\n>>\n>>> That apart\n>>> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n>>\n>> Thanks,\n>>\n>>\n>>>\n>>> Thanks\n>>>   j\n>>>\n>>>>  \t\tcaptureResult.result = resultMetadata->get();\n>>>>  \t}\n>>>>\n>>>> --\n>>>> 2.25.1\n>>>>\n>>>> _______________________________________________\n>>>> libcamera-devel mailing list\n>>>> libcamera-devel@lists.libcamera.org\n>>>> https://lists.libcamera.org/listinfo/libcamera-devel\n>>\n>> --\n>> Regards\n>> --\n>> Kieran","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 0B323BD86F\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  4 Aug 2020 11:54:10 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9208560546;\n\tTue,  4 Aug 2020 13:54:09 +0200 (CEST)","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 A0B546048E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  4 Aug 2020 13:54:08 +0200 (CEST)","from [192.168.0.20]\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 33856277;\n\tTue,  4 Aug 2020 13:54:06 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"FyOFGboh\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1596542046;\n\tbh=bboKPy8zjmi4Ti8H3+rPr03948/45KyyHDOBe2Zk988=;\n\th=Reply-To:Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=FyOFGboh4bL85xLqy+zsm0N+D/e8OSz+zfNx4uzlzACskJj8iptl1syratdMg1Y3v\n\tcarvf72OH+p7y7kLjlq+5Bbm2Rb23w2TlnChzDdvAuQtrCMTxyzN8inh4rFPkGLwFW\n\tmTafm5p3RK27NLWiJGXbc8FudMOpaOdsRxBFq+FA=","To":"Jacopo Mondi <jacopo@jmondi.org>","References":"<20200803161816.107113-1-kieran.bingham@ideasonboard.com>\n\t<20200803161816.107113-11-kieran.bingham@ideasonboard.com>\n\t<20200804110822.b35hygntl3msz7vh@uno.localdomain>\n\t<3458b541-2410-ef2b-5533-8a7724cd4a9d@ideasonboard.com>\n\t<20200804115523.v6hfldpoi3ieefe3@uno.localdomain>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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\n\tWZw01QYHU/GUV/zHJSFk","Organization":"Ideas on Board","Message-ID":"<00f52605-f8b6-4038-9c46-3f3c9f1650ba@ideasonboard.com>","Date":"Tue, 4 Aug 2020 12:54:04 +0100","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101\n\tThunderbird/68.10.0","MIME-Version":"1.0","In-Reply-To":"<20200804115523.v6hfldpoi3ieefe3@uno.localdomain>","Content-Language":"en-GB","Subject":"Re: [libcamera-devel] [PATCH v2 10/12] android: camera_device:\n\tGenerate ResultMetadata earlier","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>","Reply-To":"kieran.bingham@ideasonboard.com","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":11828,"web_url":"https://patchwork.libcamera.org/comment/11828/","msgid":"<20200804123746.iys5veci2xvd2kig@uno.localdomain>","date":"2020-08-04T12:37:46","subject":"Re: [libcamera-devel] [PATCH v2 10/12] android: camera_device:\n\tGenerate ResultMetadata earlier","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Kieran,\n   I think we're not getting each other here :)\n\nOn Tue, Aug 04, 2020 at 12:54:04PM +0100, Kieran Bingham wrote:\n> Hi Jacopo,\n>\n\n[snip]\n\n> >>>> -\t/*\n> >>>> -\t * \\todo The timestamp used for the metadata is currently always taken\n> >>>> -\t * from the first buffer (which may be the first stream) in the Request.\n> >>>> -\t * It might be appropriate to return a 'correct' (as determined by\n> >>>> -\t * pipeline handlers) timestamp in the Request itself.\n> >>>> -\t */\n> >>>> -\tFrameBuffer *buffer = buffers.begin()->second;\n> >>>>\n> >>>>  \tif (status == CAMERA3_BUFFER_STATUS_OK) {\n> >>>>  \t\tnotifyShutter(descriptor->frameNumber,\n> >>>>  \t\t\t      buffer->metadata().timestamp);\n> >>>>\n> >>>>  \t\tcaptureResult.partial_result = 1;\n> >>>> -\t\tresultMetadata = getResultMetadata(descriptor->frameNumber,\n> >>>> -\t\t\t\t\t\t   buffer->metadata().timestamp);\n> >>>> +\n> >>>\n> >>> I would drop this one too\n> >>>\n> >>> Overall I think this is fine so far, as we generate metadata\n> >>> statically, but going forward if we have to access the Controls\n> >>> returned by a completed Request, we shall make sure it completed\n> >>> successfully. Can we record that with a \\todo entry ?\n> >>>\n> >>\n> >> I'm not sure I fully understand your comment here, do you mean the\n> >> libcamera request should be completed successfully before updating the\n> >> resultMetaData?\n> >\n> > What I meant to say is that before this change the metadata buffer was\n> > generated in the\n> > \tif (status == CAMERA3_BUFFER_STATUS_OK)\n> > case, while now, if I got this right, it's generated unconditionally.\n> > When we'll assemble it inspecting the ControlList associated with the\n> > just completed Request, if it has not completed succesfully, we might\n> > try to access an invalid control list or a control list with unset\n> > values. If that's correct, I think it has to be recorded.\n>\n> No, I don't touch any control list. The added information comes only\n> from the generated JPEG content, which is local to the android layer,\n> not the underlying libcamera stream.\n\nYou don't need to for JPEG, but the metadata we -currently- return to\nthe framework is assembled with fixed values. We'll need to construct\nit inspecting the Request ControlList, and if the Request has not\nsucceeded, it might contain invalid values.\n\n>\n> --\n> K\n>\n> > Thanks\n> >   j\n> >\n> >>\n> >> It will still only be assigned to the captureResult.result if the\n> >>  status == CAMERA3_BUFFER_STATUS_OK\n> >>\n> >> check passes still...\n> >>\n> >> You'll see how this gets used in 12/12 of course.\n> >>\n> >>\n> >>> That apart\n> >>> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> >>\n> >> Thanks,\n> >>\n> >>\n> >>>\n> >>> Thanks\n> >>>   j\n> >>>\n> >>>>  \t\tcaptureResult.result = resultMetadata->get();\n> >>>>  \t}\n> >>>>\n> >>>> --\n> >>>> 2.25.1\n> >>>>\n> >>>> _______________________________________________\n> >>>> libcamera-devel mailing list\n> >>>> libcamera-devel@lists.libcamera.org\n> >>>> https://lists.libcamera.org/listinfo/libcamera-devel\n> >>\n> >> --\n> >> Regards\n> >> --\n> >> Kieran\n>\n> --\n> Regards\n> --\n> Kieran","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 47B3CBD86F\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  4 Aug 2020 12:34:08 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id DFC8E60495;\n\tTue,  4 Aug 2020 14:34:07 +0200 (CEST)","from relay4-d.mail.gandi.net (relay4-d.mail.gandi.net\n\t[217.70.183.196])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 839896048E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  4 Aug 2020 14:34:06 +0200 (CEST)","from uno.localdomain (93-34-118-233.ip49.fastwebnet.it\n\t[93.34.118.233]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay4-d.mail.gandi.net (Postfix) with ESMTPSA id ABE5AE000B;\n\tTue,  4 Aug 2020 12:34:05 +0000 (UTC)"],"X-Originating-IP":"93.34.118.233","Date":"Tue, 4 Aug 2020 14:37:46 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20200804123746.iys5veci2xvd2kig@uno.localdomain>","References":"<20200803161816.107113-1-kieran.bingham@ideasonboard.com>\n\t<20200803161816.107113-11-kieran.bingham@ideasonboard.com>\n\t<20200804110822.b35hygntl3msz7vh@uno.localdomain>\n\t<3458b541-2410-ef2b-5533-8a7724cd4a9d@ideasonboard.com>\n\t<20200804115523.v6hfldpoi3ieefe3@uno.localdomain>\n\t<00f52605-f8b6-4038-9c46-3f3c9f1650ba@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<00f52605-f8b6-4038-9c46-3f3c9f1650ba@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v2 10/12] android: camera_device:\n\tGenerate ResultMetadata earlier","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>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":11829,"web_url":"https://patchwork.libcamera.org/comment/11829/","msgid":"<4c62132a-7eb3-ce3a-c684-7b721db4fd4a@ideasonboard.com>","date":"2020-08-04T12:46:50","subject":"Re: [libcamera-devel] [PATCH v2 10/12] android: camera_device:\n\tGenerate ResultMetadata earlier","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Jacopo,\n\nOn 04/08/2020 13:37, Jacopo Mondi wrote:\n> Hi Kieran,\n>    I think we're not getting each other here :)\n\nMaybe ;-)\n\n> On Tue, Aug 04, 2020 at 12:54:04PM +0100, Kieran Bingham wrote:\n>> Hi Jacopo,\n>>\n> \n> [snip]\n> \n>>>>>> -\t/*\n>>>>>> -\t * \\todo The timestamp used for the metadata is currently always taken\n>>>>>> -\t * from the first buffer (which may be the first stream) in the Request.\n>>>>>> -\t * It might be appropriate to return a 'correct' (as determined by\n>>>>>> -\t * pipeline handlers) timestamp in the Request itself.\n>>>>>> -\t */\n>>>>>> -\tFrameBuffer *buffer = buffers.begin()->second;\n>>>>>>\n>>>>>>  \tif (status == CAMERA3_BUFFER_STATUS_OK) {\n>>>>>>  \t\tnotifyShutter(descriptor->frameNumber,\n>>>>>>  \t\t\t      buffer->metadata().timestamp);\n>>>>>>\n>>>>>>  \t\tcaptureResult.partial_result = 1;\n>>>>>> -\t\tresultMetadata = getResultMetadata(descriptor->frameNumber,\n>>>>>> -\t\t\t\t\t\t   buffer->metadata().timestamp);\n>>>>>> +\n>>>>>\n>>>>> I would drop this one too\n>>>>>\n>>>>> Overall I think this is fine so far, as we generate metadata\n>>>>> statically, but going forward if we have to access the Controls\n>>>>> returned by a completed Request, we shall make sure it completed\n>>>>> successfully. Can we record that with a \\todo entry ?\n>>>>>\n>>>>\n>>>> I'm not sure I fully understand your comment here, do you mean the\n>>>> libcamera request should be completed successfully before updating the\n>>>> resultMetaData?\n>>>\n>>> What I meant to say is that before this change the metadata buffer was\n>>> generated in the\n>>> \tif (status == CAMERA3_BUFFER_STATUS_OK)\n>>> case, while now, if I got this right, it's generated unconditionally.\n>>> When we'll assemble it inspecting the ControlList associated with the\n>>> just completed Request, if it has not completed succesfully, we might\n>>> try to access an invalid control list or a control list with unset\n>>> values. If that's correct, I think it has to be recorded.\n>>\n>> No, I don't touch any control list. The added information comes only\n>> from the generated JPEG content, which is local to the android layer,\n>> not the underlying libcamera stream.\n> \n> You don't need to for JPEG, but the metadata we -currently- return to\n> the framework is assembled with fixed values. We'll need to construct\n> it inspecting the Request ControlList, and if the Request has not\n> succeeded, it might contain invalid values.\n\n\nBut if the request fails, then in CameraDevice::requestComplete(), the\nrequest status is checked:\n\nif (request->status() != Request::RequestComplete) {\n\tLOG(HAL, Error) << \"Request not successfully completed: \"\n\t\t\t<< request->status();\n\tstatus = CAMERA3_BUFFER_STATUS_ERROR;\n}\n\n\nSo status is set to error:\n\n\nWhich means, the metadata will never be assigned anyway...\n\nif (status == CAMERA3_BUFFER_STATUS_OK) {\n\tnotifyShutter(descriptor->frameNumber,\n\t\t      buffer->metadata().timestamp);\n\n\tcaptureResult.partial_result = 1;\n\tcaptureResult.result = resultMetadata->get();\n}\n\n\n\nAnd thus notifyError would get called:\n\nif (status == CAMERA3_BUFFER_STATUS_ERROR || !captureResult.result) {\n\tnotifyError(descriptor->frameNumber,\n\t\t    descriptor->buffers[0].stream);\n}\n\n\nSo I'm not sure what todo to add, as we already ensure that the metadata\nisn't added to the captureResult if there is an error in either case,\nand if we parse controls which depend on the request being successfully\ncompleted ... well then it's up to that code to decide to only parse the\nrequest if it was successful.\n\nIf you'd still like a specific todo adding - let me know the text and\nwhere, and I'll paste it in.\n\n--\nKieran\n\n\n> \n>>\n>> --\n>> K\n>>\n>>> Thanks\n>>>   j\n>>>\n>>>>\n>>>> It will still only be assigned to the captureResult.result if the\n>>>>  status == CAMERA3_BUFFER_STATUS_OK\n>>>>\n>>>> check passes still...\n>>>>\n>>>> You'll see how this gets used in 12/12 of course.\n>>>>\n>>>>\n>>>>> That apart\n>>>>> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n>>>>\n>>>> Thanks,\n>>>>\n>>>>\n>>>>>\n>>>>> Thanks\n>>>>>   j\n>>>>>\n>>>>>>  \t\tcaptureResult.result = resultMetadata->get();\n>>>>>>  \t}\n>>>>>>\n>>>>>> --\n>>>>>> 2.25.1\n>>>>>>\n>>>>>> _______________________________________________\n>>>>>> libcamera-devel mailing list\n>>>>>> libcamera-devel@lists.libcamera.org\n>>>>>> https://lists.libcamera.org/listinfo/libcamera-devel\n>>>>\n>>>> --\n>>>> Regards\n>>>> --\n>>>> Kieran\n>>\n>> --\n>> Regards\n>> --\n>> Kieran","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 73E5DBD87A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  4 Aug 2020 12:46:55 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 1045460495;\n\tTue,  4 Aug 2020 14:46:55 +0200 (CEST)","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 323926048E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  4 Aug 2020 14:46:53 +0200 (CEST)","from [192.168.0.20]\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 85DF5277;\n\tTue,  4 Aug 2020 14:46:52 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"hcWCpPFd\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1596545212;\n\tbh=S5JBPQdM4/FUq5E6MHIo0dFsLz7qksF16MHf9NRGQp8=;\n\th=Reply-To:Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=hcWCpPFdT74IMs3wf76np3PO1PItSdtXLuTLpw0GxLSTdRqNloZDzqSrM3CdeYRvG\n\tNMTacQdoJS4/b5CjgEYrNQezDeeyGCZfu/91UPQytmaV8wm8udIU+QX3eQwvspleCf\n\tV0diuDB8xXyFSqFoWaf+liUdSqJv1jq2lZCz5wK0=","To":"Jacopo Mondi <jacopo@jmondi.org>","References":"<20200803161816.107113-1-kieran.bingham@ideasonboard.com>\n\t<20200803161816.107113-11-kieran.bingham@ideasonboard.com>\n\t<20200804110822.b35hygntl3msz7vh@uno.localdomain>\n\t<3458b541-2410-ef2b-5533-8a7724cd4a9d@ideasonboard.com>\n\t<20200804115523.v6hfldpoi3ieefe3@uno.localdomain>\n\t<00f52605-f8b6-4038-9c46-3f3c9f1650ba@ideasonboard.com>\n\t<20200804123746.iys5veci2xvd2kig@uno.localdomain>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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\n\tWZw01QYHU/GUV/zHJSFk","Organization":"Ideas on Board","Message-ID":"<4c62132a-7eb3-ce3a-c684-7b721db4fd4a@ideasonboard.com>","Date":"Tue, 4 Aug 2020 13:46:50 +0100","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101\n\tThunderbird/68.10.0","MIME-Version":"1.0","In-Reply-To":"<20200804123746.iys5veci2xvd2kig@uno.localdomain>","Content-Language":"en-GB","Subject":"Re: [libcamera-devel] [PATCH v2 10/12] android: camera_device:\n\tGenerate ResultMetadata earlier","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>","Reply-To":"kieran.bingham@ideasonboard.com","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]