[{"id":32430,"web_url":"https://patchwork.libcamera.org/comment/32430/","msgid":"<xg2xuv22zhkva7ysr7g5iaxyyjqxnkiif46hfse5fh4ouapoho@tv6qcwz7tchw>","date":"2024-11-28T13:13:57","subject":"Re: [PATCH v2 3/9] android: Set StreamBuffer::srcBuffer in\n\tCameraDevice::processCaptureRequest","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hi Harvey\n\nOn Wed, Nov 27, 2024 at 09:25:53AM +0000, Harvey Yang wrote:\n> StreamBuffer::srcBuffer was set right before being processed, while it\n> was already determined when being constructed. This patch sets the value\n> in CameraDevice::processCaptureRequest.\n\nCould you explain in the commit message why is needed/better to set\nsrcBuffer ealier ? And also mention why making requestedStreams is\nrequired ?\n\n>\n> Signed-off-by: Han-Lin Chen <hanlinchen@chromium.org>\n> Co-developed-by: Harvey Yang <chenghaoyang@chromium.org>\n> Signed-off-by: Harvey Yang <chenghaoyang@chromium.org>\n> ---\n>  src/android/camera_device.cpp | 29 +++++++++++++++++++++--------\n>  1 file changed, 21 insertions(+), 8 deletions(-)\n>\n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index 4e3bdc9cc..11613fac9 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -967,9 +967,9 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques\n>  \t * to a libcamera stream. Streams of type Mapped will be handled later.\n>  \t *\n>  \t * Collect the CameraStream associated to each requested capture stream.\n> -\t * Since requestedStreams is an std:set<>, no duplications can happen.\n> +\t * Since requestedStreams is an std:map<>, no duplications can happen.\n\nSo you can now remove #include <set> ?\n\n>  \t */\n> -\tstd::set<CameraStream *> requestedStreams;\n> +\tstd::map<CameraStream *, libcamera::FrameBuffer *> requestedBuffers;\n>  \tfor (const auto &[i, buffer] : utils::enumerate(descriptor->buffers_)) {\n>  \t\tCameraStream *cameraStream = buffer.stream;\n>  \t\tcamera3_stream_t *camera3Stream = cameraStream->camera3Stream();\n> @@ -1008,6 +1008,8 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques\n>  \t\t\t\t\t\t  cameraStream->configuration().size);\n>  \t\t\tframeBuffer = buffer.frameBuffer.get();\n>  \t\t\tacquireFence = std::move(buffer.fence);\n> +\n> +\t\t\trequestedBuffers[cameraStream] = frameBuffer;\n>  \t\t\tLOG(HAL, Debug) << ss.str() << \" (direct)\";\n>  \t\t\tbreak;\n>\n> @@ -1021,6 +1023,9 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques\n>  \t\t\t */\n>  \t\t\tframeBuffer = cameraStream->getBuffer();\n>  \t\t\tbuffer.internalBuffer = frameBuffer;\n> +\t\t\tbuffer.srcBuffer = frameBuffer;\n> +\n> +\t\t\trequestedBuffers[cameraStream] = frameBuffer;\n>  \t\t\tLOG(HAL, Debug) << ss.str() << \" (internal)\";\n>\n>  \t\t\tdescriptor->pendingStreamsToProcess_.insert(\n> @@ -1036,8 +1041,6 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques\n>  \t\tauto fence = std::make_unique<Fence>(std::move(acquireFence));\n>  \t\tdescriptor->request_->addBuffer(cameraStream->stream(),\n>  \t\t\t\t\t\tframeBuffer, std::move(fence));\n> -\n> -\t\trequestedStreams.insert(cameraStream);\n\nWhy can't you\n                requestedBuffers[cameraStream] = frameBuffer;\n\nhere ?\n\nI feel like it should be done after\n\n\t\tif (!frameBuffer) {\n\t\t\tLOG(HAL, Error) << \"Failed to create frame buffer\";\n\t\t\treturn -ENOMEM;\n\t\t}\n>  \t}\n>\n>  \t/*\n> @@ -1068,8 +1071,19 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques\n>  \t\t */\n>  \t\tCameraStream *sourceStream = cameraStream->sourceStream();\n>  \t\tASSERT(sourceStream);\n> -\t\tif (requestedStreams.find(sourceStream) != requestedStreams.end())\n> +\t\tASSERT(sourceStream->type() == CameraStream::Type::Direct);\n\nIf you want to add this assertion, you can do it in one line\n\n\t\tASSERT(sourceStream && sourceStream->type() == CameraStream::Type::Direct);\n\n> +\n> +\t\t/*\n> +\t\t * If the buffer for the source stream has been requested as\n> +\t\t * Direct, use its framebuffer as the source buffer for\n> +\t\t * post-processing. No need to recycle the buffer since it's\n> +\t\t * owned by Android.\n\nWhat do you mean by \"recycle the buffer\" ?\n\n> +\t\t */\n> +\t\tauto iterDirectBuffer = requestedBuffers.find(sourceStream);\n> +\t\tif (iterDirectBuffer != requestedBuffers.end()) {\n> +\t\t\tbuffer.srcBuffer = iterDirectBuffer->second;\n>  \t\t\tcontinue;\n> +\t\t}\n>\n>  \t\t/*\n>  \t\t * If that's not the case, we need to add a buffer to the request\n> @@ -1077,11 +1091,12 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques\n>  \t\t */\n>  \t\tFrameBuffer *frameBuffer = cameraStream->getBuffer();\n>  \t\tbuffer.internalBuffer = frameBuffer;\n> +\t\tbuffer.srcBuffer = frameBuffer;\n>\n>  \t\tdescriptor->request_->addBuffer(sourceStream->stream(),\n>  \t\t\t\t\t\tframeBuffer, nullptr);\n>\n> -\t\trequestedStreams.insert(sourceStream);\n> +\t\trequestedBuffers[sourceStream] = frameBuffer;\n>  \t}\n>\n>  \t/*\n> @@ -1236,8 +1251,6 @@ void CameraDevice::requestComplete(Request *request)\n>  \t\t\tcontinue;\n>  \t\t}\n>\n> -\t\tbuffer->srcBuffer = src;\n> -\n>  \t\t++iter;\n>  \t\tint ret = stream->process(buffer);\n>  \t\tif (ret) {\n> --\n> 2.47.0.338.g60cca15819-goog\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 4144BBD78E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 28 Nov 2024 13:14:03 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id EAAA965FA9;\n\tThu, 28 Nov 2024 14:14:02 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0D51E65F8E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 28 Nov 2024 14:14:01 +0100 (CET)","from ideasonboard.com (93-61-96-190.ip145.fastwebnet.it\n\t[93.61.96.190])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 05440842;\n\tThu, 28 Nov 2024 14:13:36 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"tvIQMU4v\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1732799617;\n\tbh=2279lhdVX5SKFmQ9FK9GyQf8FLM9xNi6HkzlMIBt3T4=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=tvIQMU4vha1LJqPdFpZIsbptlJzX7RavyxmEdBosCd5Lj0aDEZfTFlqgb1oWafIif\n\tO6Q9qV1rc7qq6n7YvfUIUTiuWFBE0uRcrk/vkQHdEWXGzx3Kv0RX/Wk+MOPiflUFEB\n\tfWcG/UYgMrL4rK8kp3ZYnnzidB4j4dpkcQo9yiic=","Date":"Thu, 28 Nov 2024 14:13:57 +0100","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"Harvey Yang <chenghaoyang@chromium.org>","Cc":"libcamera-devel@lists.libcamera.org, \n\tHan-Lin Chen <hanlinchen@chromium.org>","Subject":"Re: [PATCH v2 3/9] android: Set StreamBuffer::srcBuffer in\n\tCameraDevice::processCaptureRequest","Message-ID":"<xg2xuv22zhkva7ysr7g5iaxyyjqxnkiif46hfse5fh4ouapoho@tv6qcwz7tchw>","References":"<20241127092632.3145984-1-chenghaoyang@chromium.org>\n\t<20241127092632.3145984-4-chenghaoyang@chromium.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20241127092632.3145984-4-chenghaoyang@chromium.org>","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":32454,"web_url":"https://patchwork.libcamera.org/comment/32454/","msgid":"<CAEB1ahvh9u4ADGhTMvGPz+DrEV32O0hU-2D_CKm9VAhLE8cCFA@mail.gmail.com>","date":"2024-11-29T08:46:09","subject":"Re: [PATCH v2 3/9] android: Set StreamBuffer::srcBuffer in\n\tCameraDevice::processCaptureRequest","submitter":{"id":117,"url":"https://patchwork.libcamera.org/api/people/117/","name":"Cheng-Hao Yang","email":"chenghaoyang@chromium.org"},"content":"Hi Jacopo,\n\nWill upload another version later.\n\nOn Thu, Nov 28, 2024 at 9:14 PM Jacopo Mondi\n<jacopo.mondi@ideasonboard.com> wrote:\n>\n> Hi Harvey\n>\n> On Wed, Nov 27, 2024 at 09:25:53AM +0000, Harvey Yang wrote:\n> > StreamBuffer::srcBuffer was set right before being processed, while it\n> > was already determined when being constructed. This patch sets the value\n> > in CameraDevice::processCaptureRequest.\n>\n> Could you explain in the commit message why is needed/better to set\n> srcBuffer ealier ? And also mention why making requestedStreams is\n> required ?\n\nUpdated. Please take another look.\n\n>\n> >\n> > Signed-off-by: Han-Lin Chen <hanlinchen@chromium.org>\n> > Co-developed-by: Harvey Yang <chenghaoyang@chromium.org>\n> > Signed-off-by: Harvey Yang <chenghaoyang@chromium.org>\n> > ---\n> >  src/android/camera_device.cpp | 29 +++++++++++++++++++++--------\n> >  1 file changed, 21 insertions(+), 8 deletions(-)\n> >\n> > diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> > index 4e3bdc9cc..11613fac9 100644\n> > --- a/src/android/camera_device.cpp\n> > +++ b/src/android/camera_device.cpp\n> > @@ -967,9 +967,9 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques\n> >        * to a libcamera stream. Streams of type Mapped will be handled later.\n> >        *\n> >        * Collect the CameraStream associated to each requested capture stream.\n> > -      * Since requestedStreams is an std:set<>, no duplications can happen.\n> > +      * Since requestedStreams is an std:map<>, no duplications can happen.\n>\n> So you can now remove #include <set> ?\n\nDone\n\n>\n> >        */\n> > -     std::set<CameraStream *> requestedStreams;\n> > +     std::map<CameraStream *, libcamera::FrameBuffer *> requestedBuffers;\n> >       for (const auto &[i, buffer] : utils::enumerate(descriptor->buffers_)) {\n> >               CameraStream *cameraStream = buffer.stream;\n> >               camera3_stream_t *camera3Stream = cameraStream->camera3Stream();\n> > @@ -1008,6 +1008,8 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques\n> >                                                 cameraStream->configuration().size);\n> >                       frameBuffer = buffer.frameBuffer.get();\n> >                       acquireFence = std::move(buffer.fence);\n> > +\n> > +                     requestedBuffers[cameraStream] = frameBuffer;\n> >                       LOG(HAL, Debug) << ss.str() << \" (direct)\";\n> >                       break;\n> >\n> > @@ -1021,6 +1023,9 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques\n> >                        */\n> >                       frameBuffer = cameraStream->getBuffer();\n> >                       buffer.internalBuffer = frameBuffer;\n> > +                     buffer.srcBuffer = frameBuffer;\n> > +\n> > +                     requestedBuffers[cameraStream] = frameBuffer;\n> >                       LOG(HAL, Debug) << ss.str() << \" (internal)\";\n> >\n> >                       descriptor->pendingStreamsToProcess_.insert(\n> > @@ -1036,8 +1041,6 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques\n> >               auto fence = std::make_unique<Fence>(std::move(acquireFence));\n> >               descriptor->request_->addBuffer(cameraStream->stream(),\n> >                                               frameBuffer, std::move(fence));\n> > -\n> > -             requestedStreams.insert(cameraStream);\n>\n> Why can't you\n>                 requestedBuffers[cameraStream] = frameBuffer;\n>\n> here ?\n>\n> I feel like it should be done after\n>\n>                 if (!frameBuffer) {\n>                         LOG(HAL, Error) << \"Failed to create frame buffer\";\n>                         return -ENOMEM;\n>                 }\n\nTrue, done.\n\n> >       }\n> >\n> >       /*\n> > @@ -1068,8 +1071,19 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques\n> >                */\n> >               CameraStream *sourceStream = cameraStream->sourceStream();\n> >               ASSERT(sourceStream);\n> > -             if (requestedStreams.find(sourceStream) != requestedStreams.end())\n> > +             ASSERT(sourceStream->type() == CameraStream::Type::Direct);\n>\n> If you want to add this assertion, you can do it in one line\n>\n>                 ASSERT(sourceStream && sourceStream->type() == CameraStream::Type::Direct);\n>\n\nDone\n\n> > +\n> > +             /*\n> > +              * If the buffer for the source stream has been requested as\n> > +              * Direct, use its framebuffer as the source buffer for\n> > +              * post-processing. No need to recycle the buffer since it's\n> > +              * owned by Android.\n>\n> What do you mean by \"recycle the buffer\" ?\n\nIt's a comment originally written by Han-lin. I think he meant\nthat it's not an internal buffer that we need to set and recycle\nto CameraStream.\n\nMight be a bit redundant though. Do you think we should\nremove it?\n\nBR,\nHarvey\n\n>\n> > +              */\n> > +             auto iterDirectBuffer = requestedBuffers.find(sourceStream);\n> > +             if (iterDirectBuffer != requestedBuffers.end()) {\n> > +                     buffer.srcBuffer = iterDirectBuffer->second;\n> >                       continue;\n> > +             }\n> >\n> >               /*\n> >                * If that's not the case, we need to add a buffer to the request\n> > @@ -1077,11 +1091,12 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques\n> >                */\n> >               FrameBuffer *frameBuffer = cameraStream->getBuffer();\n> >               buffer.internalBuffer = frameBuffer;\n> > +             buffer.srcBuffer = frameBuffer;\n> >\n> >               descriptor->request_->addBuffer(sourceStream->stream(),\n> >                                               frameBuffer, nullptr);\n> >\n> > -             requestedStreams.insert(sourceStream);\n> > +             requestedBuffers[sourceStream] = frameBuffer;\n> >       }\n> >\n> >       /*\n> > @@ -1236,8 +1251,6 @@ void CameraDevice::requestComplete(Request *request)\n> >                       continue;\n> >               }\n> >\n> > -             buffer->srcBuffer = src;\n> > -\n> >               ++iter;\n> >               int ret = stream->process(buffer);\n> >               if (ret) {\n> > --\n> > 2.47.0.338.g60cca15819-goog\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 9AB24C31E9\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 29 Nov 2024 08:46:23 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 8F80E66004;\n\tFri, 29 Nov 2024 09:46:22 +0100 (CET)","from mail-lj1-x22f.google.com (mail-lj1-x22f.google.com\n\t[IPv6:2a00:1450:4864:20::22f])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 5C86260CE6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 29 Nov 2024 09:46:21 +0100 (CET)","by mail-lj1-x22f.google.com with SMTP id\n\t38308e7fff4ca-2ffdf564190so18123861fa.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 29 Nov 2024 00:46:21 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=chromium.org header.i=@chromium.org\n\theader.b=\"BIh/Yzt4\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=chromium.org; s=google; t=1732869980; x=1733474780;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:cc:to:subject:message-id:date:from\n\t:in-reply-to:references:mime-version:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=3DEUOx+qpmjAn2UvI2ZMKtVx0d02veOwfz5EBL33NIk=;\n\tb=BIh/Yzt4kIDcZEYbSsoVoj1UZLQC7j6wHaLQvllIVlF/vtTn4sSIFdKibDWCLjrxUz\n\tKcGOY3rjZiT6wun4RXAgtnjePyVDsC1BgvxYgWJZsN7Xa2u3O9rBBH9XplRHtgV+2mSn\n\tT0Smcjp3CTH3f3IamuSs5/ATQTcDE8BvIB6f4=","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1732869980; x=1733474780;\n\th=content-transfer-encoding:cc:to:subject:message-id:date:from\n\t:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc\n\t:subject:date:message-id:reply-to;\n\tbh=3DEUOx+qpmjAn2UvI2ZMKtVx0d02veOwfz5EBL33NIk=;\n\tb=iFR1g7DdLQhDK5bVZRD+e7latx6efX13R2GSOf4PfjMMjdevBsQnW6G/lu2SMV4dov\n\tFk89AHh5m//q7QrWeo/6XYn7aZlXGtScUXAWtG8GS4yP0wFstVuhOiA68NXFdXolG9Ds\n\tOsj2Ob/T9eM1wf3EHkRRlwulEa2x5l+tGkU0CR+K3tjm1ccLVAzWytDb0vPUBnaGWT5A\n\tstUVH6yjpUFtX/+/CRo+YLuznDtUh/vR70926tsHslrq5dpVd57TszMXc2xXC8ZWQy8c\n\tsreoteR6A+XQDIL0LnOOCcVKvQxJEpj/kNOAr61UDFbqltA1t2wxSZGoBwfd8fNkloj8\n\t7RdA==","X-Gm-Message-State":"AOJu0YxpjfWV1E+7aU6Ug5EmSpLcC9qYoW4hN3ziPSIUoTtkkt/Wxl4S\n\tbbEHPVWASL9TIkr64rbo4hcntOQJVpaQBFuccRLCb5sf7QOjvS04pzb7aHgIt+oLe9Hg4K291d0\n\tz0tMwbFrsSc2z7i0NOjhhzFZ04GLYePVwgvcZpt68zhgZU7Q=","X-Gm-Gg":"ASbGnctXcJBZ8rwExkfAwG37lJunlMVwYcdsefmxoUr+CHXv7ga5DL616N3eEE/VUGW\n\tn5EO02SbOvTJwENyUTwKZTOY2ybhEYo+r1geAQutsIJJvJZZLIPNyKG+uOus=","X-Google-Smtp-Source":"AGHT+IFY444Pu5IZpLcPhI/q+VxSGZypnoQ9jkNo3tqMSGTIMiuoXdWVkaZ8aJcQ9+pXZ3QPsYsj6Op2yzepMY27JDk=","X-Received":"by 2002:a2e:a58a:0:b0:2ff:a7cd:ef7c with SMTP id\n\t38308e7fff4ca-2ffd60275f2mr54025291fa.17.1732869980470;\n\tFri, 29 Nov 2024 00:46:20 -0800 (PST)","MIME-Version":"1.0","References":"<20241127092632.3145984-1-chenghaoyang@chromium.org>\n\t<20241127092632.3145984-4-chenghaoyang@chromium.org>\n\t<xg2xuv22zhkva7ysr7g5iaxyyjqxnkiif46hfse5fh4ouapoho@tv6qcwz7tchw>","In-Reply-To":"<xg2xuv22zhkva7ysr7g5iaxyyjqxnkiif46hfse5fh4ouapoho@tv6qcwz7tchw>","From":"Cheng-Hao Yang <chenghaoyang@chromium.org>","Date":"Fri, 29 Nov 2024 16:46:09 +0800","Message-ID":"<CAEB1ahvh9u4ADGhTMvGPz+DrEV32O0hU-2D_CKm9VAhLE8cCFA@mail.gmail.com>","Subject":"Re: [PATCH v2 3/9] android: Set StreamBuffer::srcBuffer in\n\tCameraDevice::processCaptureRequest","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org, \n\tHan-Lin Chen <hanlinchen@chromium.org>","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]