[{"id":19230,"web_url":"https://patchwork.libcamera.org/comment/19230/","msgid":"<YS6XgZpdcIp7Ir+2@pendragon.ideasonboard.com>","date":"2021-08-31T20:56:33","subject":"Re: [libcamera-devel] [PATCH v3 3/3] android: camera_device:\n\tConfigure one stream for identical stream requests","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Hiro,\n\nThank you for the patch.\n\nOn Tue, Aug 31, 2021 at 06:34:39PM +0900, Hirokazu Honda wrote:\n> An Android HAL client may request identical stream requests. It is\n> redundant that a native camera device produces a separate stream for\n> each of the identical requests.\n> Configure camera one stream configuration for the identical stream\n> requests.\n> \n> Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> ---\n>  src/android/camera_device.cpp | 28 +++++++++++++++++++++++-----\n>  1 file changed, 23 insertions(+), 5 deletions(-)\n> \n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index 74a95a2a..1cb4e675 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -618,14 +618,32 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>  \t\t\tcontinue;\n>  \t\t}\n>  \n> +\t\t/* This stream will be produced by hardware. */\n> +\t\tstream->usage |= GRALLOC_USAGE_HW_CAMERA_WRITE;\n\nStrictly speaking this isn't true, given that the software stream will\nnot be produced by hardware, but by a memcpy, right ? Is this needed\nbecause otherwise the gralloc module will not pick the right format ? If\nso, could you capture it in the comment ?\n\n> +\n> +\t\t/*\n> +\t\t * If a CameraStream with the same size and format of the\n> +\t\t * current stream has already been requested, associate the two.\n> +\t\t */\n> +\t\tauto iter = std::find_if(\n> +\t\t\tstreamConfigs.begin(), streamConfigs.end(),\n> +\t\t\t[size, format](const Camera3StreamConfig &streamConfig) {\n> +\t\t\t\treturn streamConfig.config.size == size &&\n> +\t\t\t\t       streamConfig.config.pixelFormat == format;\n> +\t\t\t});\n> +\t\tif (iter != streamConfigs.end()) {\n> +\t\t\t/* Add usage to copy the buffer in streams[0] to stream. */\n> +\t\t\titer->streams[0].stream->usage |= GRALLOC_USAGE_SW_READ_OFTEN;\n> +\t\t\tstream->usage |= GRALLOC_USAGE_SW_WRITE_OFTEN;\n> +\t\t\titer->streams.push_back({ stream, CameraStream::Type::Mapped });\n> +\t\t\tcontinue;\n> +\t\t}\n> +\n>  \t\tCamera3StreamConfig streamConfig;\n>  \t\tstreamConfig.streams = { { stream, CameraStream::Type::Direct } };\n>  \t\tstreamConfig.config.size = size;\n>  \t\tstreamConfig.config.pixelFormat = format;\n>  \t\tstreamConfigs.push_back(std::move(streamConfig));\n> -\n> -\t\t/* This stream will be produced by hardware. */\n> -\t\tstream->usage |= GRALLOC_USAGE_HW_CAMERA_WRITE;\n>  \t}\n>  \n>  \t/* Now handle the MJPEG streams, adding a new stream if required. */\n> @@ -1144,12 +1162,12 @@ void CameraDevice::requestComplete(Request *request)\n>  \t\tresultMetadata = std::make_unique<CameraMetadata>(0, 0);\n>  \t}\n>  \n> -\t/* Handle any JPEG compression. */\n> +\t/* Handle post-processing. */\n>  \tfor (camera3_stream_buffer_t &buffer : descriptor.buffers_) {\n>  \t\tCameraStream *cameraStream =\n>  \t\t\tstatic_cast<CameraStream *>(buffer.stream->priv);\n>  \n> -\t\tif (cameraStream->camera3Stream().format != HAL_PIXEL_FORMAT_BLOB)\n> +\t\tif (cameraStream->type() == CameraStream::Type::Direct)\n>  \t\t\tcontinue;\n\nI would have moved those changes to 2/3 as that's where you introduce\nusage of the YUV post-processor, but it's not enabled before this patch,\nso it doesn't matter much.\n\nWith the above comment expanded (or my understanding corrected),\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n>  \n>  \t\tFrameBuffer *src = request->findBuffer(cameraStream->stream());","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 7DEEDBDC71\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 31 Aug 2021 20:56:50 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id DC0766916A;\n\tTue, 31 Aug 2021 22:56:49 +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 7944868890\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 31 Aug 2021 22:56:48 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id E7B1F24F;\n\tTue, 31 Aug 2021 22:56:47 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"pRo2OdtZ\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1630443408;\n\tbh=R0dw7sXiJmb8KNEhZGZgRWrkfwSCzV8MvNDZF21KcLg=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=pRo2OdtZy6vLW7/ZF2MkoMO3skuoQT3w0PYsDiEMERgTjZRPU0tQM/dn9HhCi8j9R\n\toSBZhrIYzFNewat6qZyt/9/vDi3NMsqs1N2FpZdXsRgm1fTvBJWJR8llnnkzfs+rIb\n\tk0H6ZrrgV9PBzNkJcfu4Ql2ccCM5qhhhJfbZlYpo=","Date":"Tue, 31 Aug 2021 23:56:33 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Hirokazu Honda <hiroh@chromium.org>","Message-ID":"<YS6XgZpdcIp7Ir+2@pendragon.ideasonboard.com>","References":"<20210831093439.853586-1-hiroh@chromium.org>\n\t<20210831093439.853586-4-hiroh@chromium.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20210831093439.853586-4-hiroh@chromium.org>","Subject":"Re: [libcamera-devel] [PATCH v3 3/3] android: camera_device:\n\tConfigure one stream for identical stream requests","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@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":19233,"web_url":"https://patchwork.libcamera.org/comment/19233/","msgid":"<CAO5uPHPrXYLVXiKd1xi6Lq_tZ=D4P5xZzGO-9L2iKjGh28V4vQ@mail.gmail.com>","date":"2021-08-31T21:06:59","subject":"Re: [libcamera-devel] [PATCH v3 3/3] android: camera_device:\n\tConfigure one stream for identical stream requests","submitter":{"id":63,"url":"https://patchwork.libcamera.org/api/people/63/","name":"Hirokazu Honda","email":"hiroh@chromium.org"},"content":"Hi Laurent,\n\nOn Wed, Sep 1, 2021 at 5:56 AM Laurent Pinchart\n<laurent.pinchart@ideasonboard.com> wrote:\n>\n> Hi Hiro,\n>\n> Thank you for the patch.\n>\n> On Tue, Aug 31, 2021 at 06:34:39PM +0900, Hirokazu Honda wrote:\n> > An Android HAL client may request identical stream requests. It is\n> > redundant that a native camera device produces a separate stream for\n> > each of the identical requests.\n> > Configure camera one stream configuration for the identical stream\n> > requests.\n> >\n> > Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n> > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> > ---\n> >  src/android/camera_device.cpp | 28 +++++++++++++++++++++++-----\n> >  1 file changed, 23 insertions(+), 5 deletions(-)\n> >\n> > diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> > index 74a95a2a..1cb4e675 100644\n> > --- a/src/android/camera_device.cpp\n> > +++ b/src/android/camera_device.cpp\n> > @@ -618,14 +618,32 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n> >                       continue;\n> >               }\n> >\n> > +             /* This stream will be produced by hardware. */\n> > +             stream->usage |= GRALLOC_USAGE_HW_CAMERA_WRITE;\n>\n> Strictly speaking this isn't true, given that the software stream will\n> not be produced by hardware, but by a memcpy, right ? Is this needed\n> because otherwise the gralloc module will not pick the right format ? If\n> so, could you capture it in the comment ?\n>\n\nSure. I will make sure my understanding why our gralloc implementation\ndoesn't work without this.\nI will submit the next patch series with the comment.\n\n-Hiro\n> > +\n> > +             /*\n> > +              * If a CameraStream with the same size and format of the\n> > +              * current stream has already been requested, associate the two.\n> > +              */\n> > +             auto iter = std::find_if(\n> > +                     streamConfigs.begin(), streamConfigs.end(),\n> > +                     [size, format](const Camera3StreamConfig &streamConfig) {\n> > +                             return streamConfig.config.size == size &&\n> > +                                    streamConfig.config.pixelFormat == format;\n> > +                     });\n> > +             if (iter != streamConfigs.end()) {\n> > +                     /* Add usage to copy the buffer in streams[0] to stream. */\n> > +                     iter->streams[0].stream->usage |= GRALLOC_USAGE_SW_READ_OFTEN;\n> > +                     stream->usage |= GRALLOC_USAGE_SW_WRITE_OFTEN;\n> > +                     iter->streams.push_back({ stream, CameraStream::Type::Mapped });\n> > +                     continue;\n> > +             }\n> > +\n> >               Camera3StreamConfig streamConfig;\n> >               streamConfig.streams = { { stream, CameraStream::Type::Direct } };\n> >               streamConfig.config.size = size;\n> >               streamConfig.config.pixelFormat = format;\n> >               streamConfigs.push_back(std::move(streamConfig));\n> > -\n> > -             /* This stream will be produced by hardware. */\n> > -             stream->usage |= GRALLOC_USAGE_HW_CAMERA_WRITE;\n> >       }\n> >\n> >       /* Now handle the MJPEG streams, adding a new stream if required. */\n> > @@ -1144,12 +1162,12 @@ void CameraDevice::requestComplete(Request *request)\n> >               resultMetadata = std::make_unique<CameraMetadata>(0, 0);\n> >       }\n> >\n> > -     /* Handle any JPEG compression. */\n> > +     /* Handle post-processing. */\n> >       for (camera3_stream_buffer_t &buffer : descriptor.buffers_) {\n> >               CameraStream *cameraStream =\n> >                       static_cast<CameraStream *>(buffer.stream->priv);\n> >\n> > -             if (cameraStream->camera3Stream().format != HAL_PIXEL_FORMAT_BLOB)\n> > +             if (cameraStream->type() == CameraStream::Type::Direct)\n> >                       continue;\n>\n> I would have moved those changes to 2/3 as that's where you introduce\n> usage of the YUV post-processor, but it's not enabled before this patch,\n> so it doesn't matter much.\n>\n> With the above comment expanded (or my understanding corrected),\n>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>\n> >\n> >               FrameBuffer *src = request->findBuffer(cameraStream->stream());\n>\n> --\n> Regards,\n>\n> Laurent Pinchart","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 EC8E5BD87D\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 31 Aug 2021 21:07:11 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 564FA6916B;\n\tTue, 31 Aug 2021 23:07:11 +0200 (CEST)","from mail-ej1-x62d.google.com (mail-ej1-x62d.google.com\n\t[IPv6:2a00:1450:4864:20::62d])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 018AA69166\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 31 Aug 2021 23:07:09 +0200 (CEST)","by mail-ej1-x62d.google.com with SMTP id t19so1806629ejr.8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 31 Aug 2021 14:07:09 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=chromium.org header.i=@chromium.org\n\theader.b=\"SNedo2cj\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org;\n\ts=google; \n\th=mime-version:references:in-reply-to:from:date:message-id:subject:to\n\t:cc; bh=50uxtcsYuz3S1UykCI21yK3UIhPQNSKbhS+37k0XPUo=;\n\tb=SNedo2cjppS1gQJy5Xf+e7g8yrLnL8hmueOqV6AaKT8QWlSgaLNH5H+tpTQooabZG1\n\tqgCBvd2HO75Qft8neSHKJTAuy48gdYCc6F3e5+UCjXEqyv6RnzYGyQV6U6KAAS7MbzxP\n\tk7lI4uSabPObtENBuvBBv5sQpSJLneGnyACwo=","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:mime-version:references:in-reply-to:from:date\n\t:message-id:subject:to:cc;\n\tbh=50uxtcsYuz3S1UykCI21yK3UIhPQNSKbhS+37k0XPUo=;\n\tb=WsdXZx0CAYKIb2L+1r43zG0uHpzOEHqt5lTWmD/+mcWijO16TUccm9iIcuJo/oW/IO\n\tCKZC7rDokU36u8kSWCJGNb16SQM1ivw0s6Qo08dpFdb04720+8HKaeLzN0ffjhnuERgi\n\tOgiuwEJVBRYcftV94EMu5CqFlpLXBE4q/jr8K/ch7eNv9lZlnp+yR90atep/E1qqf81L\n\t8v+w2e2E7YTqe9lhFDDV/1PENTZE8m7+Ul311JY12uQguvtf/smLBiBumH+LUdVxnlaW\n\tU8cnqcvgx5XO5I+PCl5VEGUTUxLkY0WPdXHR3wvPZXv/kMtivooCffIzadGlCkZt2WYU\n\t2zqQ==","X-Gm-Message-State":"AOAM532f0KuqlRDczWYGGwABk6LWo2skhr5CWkD4VyacmnCzNklmy3vt\n\t3dF+rpwRXHHB9f7v2EdGw/qlZ0e0I0C9ZnOUbQ7uD6u4eJw=","X-Google-Smtp-Source":"ABdhPJxumr76wefu6lAdTOGGg2Z9fEqkZicJ6FxhxewXL1hjsoLa+lMr6WNVE/f2yhJCcv/aOpvQhMeJSNTDHd8it18=","X-Received":"by 2002:a17:907:d86:: with SMTP id\n\tgo6mr2798822ejc.475.1630444029570; \n\tTue, 31 Aug 2021 14:07:09 -0700 (PDT)","MIME-Version":"1.0","References":"<20210831093439.853586-1-hiroh@chromium.org>\n\t<20210831093439.853586-4-hiroh@chromium.org>\n\t<YS6XgZpdcIp7Ir+2@pendragon.ideasonboard.com>","In-Reply-To":"<YS6XgZpdcIp7Ir+2@pendragon.ideasonboard.com>","From":"Hirokazu Honda <hiroh@chromium.org>","Date":"Wed, 1 Sep 2021 06:06:59 +0900","Message-ID":"<CAO5uPHPrXYLVXiKd1xi6Lq_tZ=D4P5xZzGO-9L2iKjGh28V4vQ@mail.gmail.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=\"UTF-8\"","Subject":"Re: [libcamera-devel] [PATCH v3 3/3] android: camera_device:\n\tConfigure one stream for identical stream requests","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":19315,"web_url":"https://patchwork.libcamera.org/comment/19315/","msgid":"<0e98d3d6-28c5-9357-1feb-ac7b453f1e71@ideasonboard.com>","date":"2021-09-03T06:50:08","subject":"Re: [libcamera-devel] [PATCH v3 3/3] android: camera_device:\n\tConfigure one stream for identical stream requests","submitter":{"id":86,"url":"https://patchwork.libcamera.org/api/people/86/","name":"Umang Jain","email":"umang.jain@ideasonboard.com"},"content":"Hi,\n\nOn 8/31/21 3:04 PM, Hirokazu Honda wrote:\n> An Android HAL client may request identical stream requests. It is\n> redundant that a native camera device produces a separate stream for\n> each of the identical requests.\n> Configure camera one stream configuration for the identical stream\n\n\ns/camera one/one camera/ maybe? Not sure if sentence structure is correct.\n\n     \"Configure only one camera stream configuration for identical \nstream...\"\n\nDoes this mean the same thing too?\n\n> requests.\n>\n> Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> ---\n>   src/android/camera_device.cpp | 28 +++++++++++++++++++++++-----\n>   1 file changed, 23 insertions(+), 5 deletions(-)\n>\n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index 74a95a2a..1cb4e675 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -618,14 +618,32 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>   \t\t\tcontinue;\n>   \t\t}\n>   \n> +\t\t/* This stream will be produced by hardware. */\n> +\t\tstream->usage |= GRALLOC_USAGE_HW_CAMERA_WRITE;\n> +\n> +\t\t/*\n> +\t\t * If a CameraStream with the same size and format of the\n> +\t\t * current stream has already been requested, associate the two.\n> +\t\t */\n> +\t\tauto iter = std::find_if(\n> +\t\t\tstreamConfigs.begin(), streamConfigs.end(),\n> +\t\t\t[size, format](const Camera3StreamConfig &streamConfig) {\n> +\t\t\t\treturn streamConfig.config.size == size &&\n> +\t\t\t\t       streamConfig.config.pixelFormat == format;\n> +\t\t\t});\n> +\t\tif (iter != streamConfigs.end()) {\n> +\t\t\t/* Add usage to copy the buffer in streams[0] to stream. */\n> +\t\t\titer->streams[0].stream->usage |= GRALLOC_USAGE_SW_READ_OFTEN;\n> +\t\t\tstream->usage |= GRALLOC_USAGE_SW_WRITE_OFTEN;\n> +\t\t\titer->streams.push_back({ stream, CameraStream::Type::Mapped });\n> +\t\t\tcontinue;\n> +\t\t}\n> +\n>   \t\tCamera3StreamConfig streamConfig;\n>   \t\tstreamConfig.streams = { { stream, CameraStream::Type::Direct } };\n>   \t\tstreamConfig.config.size = size;\n>   \t\tstreamConfig.config.pixelFormat = format;\n>   \t\tstreamConfigs.push_back(std::move(streamConfig));\n> -\n> -\t\t/* This stream will be produced by hardware. */\n> -\t\tstream->usage |= GRALLOC_USAGE_HW_CAMERA_WRITE;\n>   \t}\n>   \n>   \t/* Now handle the MJPEG streams, adding a new stream if required. */\n> @@ -1144,12 +1162,12 @@ void CameraDevice::requestComplete(Request *request)\n>   \t\tresultMetadata = std::make_unique<CameraMetadata>(0, 0);\n>   \t}\n>   \n> -\t/* Handle any JPEG compression. */\n> +\t/* Handle post-processing. */\n>   \tfor (camera3_stream_buffer_t &buffer : descriptor.buffers_) {\n>   \t\tCameraStream *cameraStream =\n>   \t\t\tstatic_cast<CameraStream *>(buffer.stream->priv);\n>   \n> -\t\tif (cameraStream->camera3Stream().format != HAL_PIXEL_FORMAT_BLOB)\n> +\t\tif (cameraStream->type() == CameraStream::Type::Direct)\n>   \t\t\tcontinue;\n>   \n>   \t\tFrameBuffer *src = request->findBuffer(cameraStream->stream());","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 694B6BDC71\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  3 Sep 2021 06:50:16 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 354546916B;\n\tFri,  3 Sep 2021 08:50:15 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8029769166\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  3 Sep 2021 08:50:13 +0200 (CEST)","from [192.168.1.104] (unknown [103.251.226.107])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id AEB07BBE;\n\tFri,  3 Sep 2021 08:50:12 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"sDgOUoHy\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1630651813;\n\tbh=MsjpN2xxDa4KPqzIFfU6Gb3DQEczB1BMAzBt0OPzUqY=;\n\th=Subject:To:References:From:Date:In-Reply-To:From;\n\tb=sDgOUoHy/GQTG/eEvOd7I25C9QFDlHUQkm2xLQfSVRV7dvouBBZobSeXu/Nq6QofM\n\t44+h/S/JUgca8chCjsH49uhVwZsrwB6BEwXV44pXafSkpjrnHMe+Ue+X+5SpuE8kSz\n\t7YrIxGqxUh1Txl/6MaveAYrk73LkWhp72tUZO48o=","To":"Hirokazu Honda <hiroh@chromium.org>, libcamera-devel@lists.libcamera.org","References":"<20210831093439.853586-1-hiroh@chromium.org>\n\t<20210831093439.853586-4-hiroh@chromium.org>","From":"Umang Jain <umang.jain@ideasonboard.com>","Message-ID":"<0e98d3d6-28c5-9357-1feb-ac7b453f1e71@ideasonboard.com>","Date":"Fri, 3 Sep 2021 12:20:08 +0530","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101\n\tThunderbird/78.10.2","MIME-Version":"1.0","In-Reply-To":"<20210831093439.853586-4-hiroh@chromium.org>","Content-Type":"text/plain; charset=utf-8; format=flowed","Content-Transfer-Encoding":"8bit","Content-Language":"en-US","Subject":"Re: [libcamera-devel] [PATCH v3 3/3] android: camera_device:\n\tConfigure one stream for identical stream requests","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>"}}]