[{"id":19729,"web_url":"https://patchwork.libcamera.org/comment/19729/","msgid":"<20210921110827.llmdrctr27vup6pa@uno.localdomain>","date":"2021-09-21T11:08:27","subject":"Re: [libcamera-devel] [PATCH v3 03/10] android: camera_stream: Pass\n\tFrameBuffer pointer instead of reference","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Umang,\n\nOn Mon, Sep 20, 2021 at 11:07:45PM +0530, Umang Jain wrote:\n> Pass the libcamera::FrameBuffer pointer to the post-processor instead\n> of passing it by reference. Passing by reference is fine as long as\n> the post processing is done synchronously.\n>\n> However in subsequent commits, the post processing is planned to be\n> moved to a separate thread. The reference argument (in current case\n> 'source') is copied when we will try to invoke a method on separate\n> thread (which will run the post-processor) using Object::invokeMethod().\n> As the 'source' is an instance of FrameBuffer class, which is\n> restricted by LIBCAMERA_DISABLE_COPY_AND_MOVE, passing the reference\n> to Object::invokeMethod() will try to copy it. Hence to avoid this copy,\n> pass in the FrameBuffer pointer instead of reference.\n>\n> This requires changes to the existing PostProcessor interface and all\n> its implemented classes.\n>\n> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n  j\n\n> ---\n>  src/android/camera_device.cpp            |  2 +-\n>  src/android/camera_stream.cpp            |  2 +-\n>  src/android/camera_stream.h              |  2 +-\n>  src/android/jpeg/encoder.h               |  2 +-\n>  src/android/jpeg/encoder_libjpeg.cpp     |  4 ++--\n>  src/android/jpeg/encoder_libjpeg.h       |  2 +-\n>  src/android/jpeg/post_processor_jpeg.cpp |  4 ++--\n>  src/android/jpeg/post_processor_jpeg.h   |  4 ++--\n>  src/android/jpeg/thumbnailer.cpp         |  4 ++--\n>  src/android/jpeg/thumbnailer.h           |  2 +-\n>  src/android/post_processor.h             |  2 +-\n>  src/android/yuv/post_processor_yuv.cpp   | 18 +++++++++---------\n>  src/android/yuv/post_processor_yuv.h     |  4 ++--\n>  13 files changed, 26 insertions(+), 26 deletions(-)\n>\n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index 0562c225..cc078fe4 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -1148,7 +1148,7 @@ void CameraDevice::requestComplete(Request *request)\n>  \t\t\tcontinue;\n>  \t\t}\n>\n> -\t\tint ret = cameraStream->process(*src, *buffer.buffer,\n> +\t\tint ret = cameraStream->process(src, *buffer.buffer,\n>  \t\t\t\t\t\tdescriptor->settings_,\n>  \t\t\t\t\t\tresultMetadata.get());\n>  \t\t/*\n> diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp\n> index 0f5ae947..0fed5382 100644\n> --- a/src/android/camera_stream.cpp\n> +++ b/src/android/camera_stream.cpp\n> @@ -98,7 +98,7 @@ int CameraStream::configure()\n>  \treturn 0;\n>  }\n>\n> -int CameraStream::process(const FrameBuffer &source,\n> +int CameraStream::process(const FrameBuffer *source,\n>  \t\t\t  buffer_handle_t camera3Dest,\n>  \t\t\t  const CameraMetadata &requestMetadata,\n>  \t\t\t  CameraMetadata *resultMetadata)\n> diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h\n> index 2dab6c3a..5c232cb6 100644\n> --- a/src/android/camera_stream.h\n> +++ b/src/android/camera_stream.h\n> @@ -118,7 +118,7 @@ public:\n>  \tlibcamera::Stream *stream() const;\n>\n>  \tint configure();\n> -\tint process(const libcamera::FrameBuffer &source,\n> +\tint process(const libcamera::FrameBuffer *source,\n>  \t\t    buffer_handle_t camera3Dest,\n>  \t\t    const CameraMetadata &requestMetadata,\n>  \t\t    CameraMetadata *resultMetadata);\n> diff --git a/src/android/jpeg/encoder.h b/src/android/jpeg/encoder.h\n> index a28522f4..7b6140e7 100644\n> --- a/src/android/jpeg/encoder.h\n> +++ b/src/android/jpeg/encoder.h\n> @@ -18,7 +18,7 @@ public:\n>  \tvirtual ~Encoder() = default;\n>\n>  \tvirtual int configure(const libcamera::StreamConfiguration &cfg) = 0;\n> -\tvirtual int encode(const libcamera::FrameBuffer &source,\n> +\tvirtual int encode(const libcamera::FrameBuffer *source,\n>  \t\t\t   libcamera::Span<uint8_t> destination,\n>  \t\t\t   libcamera::Span<const uint8_t> exifData,\n>  \t\t\t   unsigned int quality) = 0;\n> diff --git a/src/android/jpeg/encoder_libjpeg.cpp b/src/android/jpeg/encoder_libjpeg.cpp\n> index 21a3b33d..3114ed4b 100644\n> --- a/src/android/jpeg/encoder_libjpeg.cpp\n> +++ b/src/android/jpeg/encoder_libjpeg.cpp\n> @@ -178,10 +178,10 @@ void EncoderLibJpeg::compressNV(const std::vector<Span<uint8_t>> &planes)\n>  \t}\n>  }\n>\n> -int EncoderLibJpeg::encode(const FrameBuffer &source, Span<uint8_t> dest,\n> +int EncoderLibJpeg::encode(const FrameBuffer *source, Span<uint8_t> dest,\n>  \t\t\t   Span<const uint8_t> exifData, unsigned int quality)\n>  {\n> -\tMappedFrameBuffer frame(&source, MappedFrameBuffer::MapFlag::Read);\n> +\tMappedFrameBuffer frame(source, MappedFrameBuffer::MapFlag::Read);\n>  \tif (!frame.isValid()) {\n>  \t\tLOG(JPEG, Error) << \"Failed to map FrameBuffer : \"\n>  \t\t\t\t << strerror(frame.error());\n> diff --git a/src/android/jpeg/encoder_libjpeg.h b/src/android/jpeg/encoder_libjpeg.h\n> index 45ffbd7f..ae4e1e32 100644\n> --- a/src/android/jpeg/encoder_libjpeg.h\n> +++ b/src/android/jpeg/encoder_libjpeg.h\n> @@ -22,7 +22,7 @@ public:\n>  \t~EncoderLibJpeg();\n>\n>  \tint configure(const libcamera::StreamConfiguration &cfg) override;\n> -\tint encode(const libcamera::FrameBuffer &source,\n> +\tint encode(const libcamera::FrameBuffer *source,\n>  \t\t   libcamera::Span<uint8_t> destination,\n>  \t\t   libcamera::Span<const uint8_t> exifData,\n>  \t\t   unsigned int quality) override;\n> diff --git a/src/android/jpeg/post_processor_jpeg.cpp b/src/android/jpeg/post_processor_jpeg.cpp\n> index ef2d98cc..cb45f86b 100644\n> --- a/src/android/jpeg/post_processor_jpeg.cpp\n> +++ b/src/android/jpeg/post_processor_jpeg.cpp\n> @@ -50,7 +50,7 @@ int PostProcessorJpeg::configure(const StreamConfiguration &inCfg,\n>  \treturn encoder_->configure(inCfg);\n>  }\n>\n> -void PostProcessorJpeg::generateThumbnail(const FrameBuffer &source,\n> +void PostProcessorJpeg::generateThumbnail(const FrameBuffer *source,\n>  \t\t\t\t\t  const Size &targetSize,\n>  \t\t\t\t\t  unsigned int quality,\n>  \t\t\t\t\t  std::vector<unsigned char> *thumbnail)\n> @@ -97,7 +97,7 @@ void PostProcessorJpeg::generateThumbnail(const FrameBuffer &source,\n>  \t}\n>  }\n>\n> -int PostProcessorJpeg::process(const FrameBuffer &source,\n> +int PostProcessorJpeg::process(const FrameBuffer *source,\n>  \t\t\t       CameraBuffer *destination,\n>  \t\t\t       const CameraMetadata &requestMetadata,\n>  \t\t\t       CameraMetadata *resultMetadata)\n> diff --git a/src/android/jpeg/post_processor_jpeg.h b/src/android/jpeg/post_processor_jpeg.h\n> index 6fd31022..c4b2e9ef 100644\n> --- a/src/android/jpeg/post_processor_jpeg.h\n> +++ b/src/android/jpeg/post_processor_jpeg.h\n> @@ -22,13 +22,13 @@ public:\n>\n>  \tint configure(const libcamera::StreamConfiguration &incfg,\n>  \t\t      const libcamera::StreamConfiguration &outcfg) override;\n> -\tint process(const libcamera::FrameBuffer &source,\n> +\tint process(const libcamera::FrameBuffer *source,\n>  \t\t    CameraBuffer *destination,\n>  \t\t    const CameraMetadata &requestMetadata,\n>  \t\t    CameraMetadata *resultMetadata) override;\n>\n>  private:\n> -\tvoid generateThumbnail(const libcamera::FrameBuffer &source,\n> +\tvoid generateThumbnail(const libcamera::FrameBuffer *source,\n>  \t\t\t       const libcamera::Size &targetSize,\n>  \t\t\t       unsigned int quality,\n>  \t\t\t       std::vector<unsigned char> *thumbnail);\n> diff --git a/src/android/jpeg/thumbnailer.cpp b/src/android/jpeg/thumbnailer.cpp\n> index 1fab8072..ffac6a15 100644\n> --- a/src/android/jpeg/thumbnailer.cpp\n> +++ b/src/android/jpeg/thumbnailer.cpp\n> @@ -37,11 +37,11 @@ void Thumbnailer::configure(const Size &sourceSize, PixelFormat pixelFormat)\n>  \tvalid_ = true;\n>  }\n>\n> -void Thumbnailer::createThumbnail(const FrameBuffer &source,\n> +void Thumbnailer::createThumbnail(const FrameBuffer *source,\n>  \t\t\t\t  const Size &targetSize,\n>  \t\t\t\t  std::vector<unsigned char> *destination)\n>  {\n> -\tMappedFrameBuffer frame(&source, MappedFrameBuffer::MapFlag::Read);\n> +\tMappedFrameBuffer frame(source, MappedFrameBuffer::MapFlag::Read);\n>  \tif (!frame.isValid()) {\n>  \t\tLOG(Thumbnailer, Error)\n>  \t\t\t<< \"Failed to map FrameBuffer : \"\n> diff --git a/src/android/jpeg/thumbnailer.h b/src/android/jpeg/thumbnailer.h\n> index 4d086c49..0f3caf40 100644\n> --- a/src/android/jpeg/thumbnailer.h\n> +++ b/src/android/jpeg/thumbnailer.h\n> @@ -19,7 +19,7 @@ public:\n>\n>  \tvoid configure(const libcamera::Size &sourceSize,\n>  \t\t       libcamera::PixelFormat pixelFormat);\n> -\tvoid createThumbnail(const libcamera::FrameBuffer &source,\n> +\tvoid createThumbnail(const libcamera::FrameBuffer *source,\n>  \t\t\t     const libcamera::Size &targetSize,\n>  \t\t\t     std::vector<unsigned char> *dest);\n>  \tconst libcamera::PixelFormat &pixelFormat() const { return pixelFormat_; }\n> diff --git a/src/android/post_processor.h b/src/android/post_processor.h\n> index ab2b2c60..61dfb6d4 100644\n> --- a/src/android/post_processor.h\n> +++ b/src/android/post_processor.h\n> @@ -21,7 +21,7 @@ public:\n>\n>  \tvirtual int configure(const libcamera::StreamConfiguration &inCfg,\n>  \t\t\t      const libcamera::StreamConfiguration &outCfg) = 0;\n> -\tvirtual int process(const libcamera::FrameBuffer &source,\n> +\tvirtual int process(const libcamera::FrameBuffer *source,\n>  \t\t\t    CameraBuffer *destination,\n>  \t\t\t    const CameraMetadata &requestMetadata,\n>  \t\t\t    CameraMetadata *resultMetadata) = 0;\n> diff --git a/src/android/yuv/post_processor_yuv.cpp b/src/android/yuv/post_processor_yuv.cpp\n> index 7b3b4960..0a874886 100644\n> --- a/src/android/yuv/post_processor_yuv.cpp\n> +++ b/src/android/yuv/post_processor_yuv.cpp\n> @@ -49,7 +49,7 @@ int PostProcessorYuv::configure(const StreamConfiguration &inCfg,\n>  \treturn 0;\n>  }\n>\n> -int PostProcessorYuv::process(const FrameBuffer &source,\n> +int PostProcessorYuv::process(const FrameBuffer *source,\n>  \t\t\t      CameraBuffer *destination,\n>  \t\t\t      [[maybe_unused]] const CameraMetadata &requestMetadata,\n>  \t\t\t      [[maybe_unused]] CameraMetadata *metadata)\n> @@ -57,7 +57,7 @@ int PostProcessorYuv::process(const FrameBuffer &source,\n>  \tif (!isValidBuffers(source, *destination))\n>  \t\treturn -EINVAL;\n>\n> -\tconst MappedFrameBuffer sourceMapped(&source, MappedFrameBuffer::MapFlag::Read);\n> +\tconst MappedFrameBuffer sourceMapped(source, MappedFrameBuffer::MapFlag::Read);\n>  \tif (!sourceMapped.isValid()) {\n>  \t\tLOG(YUV, Error) << \"Failed to mmap camera frame buffer\";\n>  \t\treturn -EINVAL;\n> @@ -83,12 +83,12 @@ int PostProcessorYuv::process(const FrameBuffer &source,\n>  \treturn 0;\n>  }\n>\n> -bool PostProcessorYuv::isValidBuffers(const FrameBuffer &source,\n> +bool PostProcessorYuv::isValidBuffers(const FrameBuffer *source,\n>  \t\t\t\t      const CameraBuffer &destination) const\n>  {\n> -\tif (source.planes().size() != 2) {\n> +\tif (source->planes().size() != 2) {\n>  \t\tLOG(YUV, Error) << \"Invalid number of source planes: \"\n> -\t\t\t\t<< source.planes().size();\n> +\t\t\t\t<< source->planes().size();\n>  \t\treturn false;\n>  \t}\n>  \tif (destination.numPlanes() != 2) {\n> @@ -97,12 +97,12 @@ bool PostProcessorYuv::isValidBuffers(const FrameBuffer &source,\n>  \t\treturn false;\n>  \t}\n>\n> -\tif (source.planes()[0].length < sourceLength_[0] ||\n> -\t    source.planes()[1].length < sourceLength_[1]) {\n> +\tif (source->planes()[0].length < sourceLength_[0] ||\n> +\t    source->planes()[1].length < sourceLength_[1]) {\n>  \t\tLOG(YUV, Error)\n>  \t\t\t<< \"The source planes lengths are too small, actual size: {\"\n> -\t\t\t<< source.planes()[0].length << \", \"\n> -\t\t\t<< source.planes()[1].length\n> +\t\t\t<< source->planes()[0].length << \", \"\n> +\t\t\t<< source->planes()[1].length\n>  \t\t\t<< \"}, expected size: {\"\n>  \t\t\t<< sourceLength_[0] << \", \"\n>  \t\t\t<< sourceLength_[1] << \"}\";\n> diff --git a/src/android/yuv/post_processor_yuv.h b/src/android/yuv/post_processor_yuv.h\n> index f8b1ba23..44a04113 100644\n> --- a/src/android/yuv/post_processor_yuv.h\n> +++ b/src/android/yuv/post_processor_yuv.h\n> @@ -20,13 +20,13 @@ public:\n>\n>  \tint configure(const libcamera::StreamConfiguration &incfg,\n>  \t\t      const libcamera::StreamConfiguration &outcfg) override;\n> -\tint process(const libcamera::FrameBuffer &source,\n> +\tint process(const libcamera::FrameBuffer *source,\n>  \t\t    CameraBuffer *destination,\n>  \t\t    const CameraMetadata &requestMetadata,\n>  \t\t    CameraMetadata *metadata) override;\n>\n>  private:\n> -\tbool isValidBuffers(const libcamera::FrameBuffer &source,\n> +\tbool isValidBuffers(const libcamera::FrameBuffer *source,\n>  \t\t\t    const CameraBuffer &destination) const;\n>  \tvoid calculateLengths(const libcamera::StreamConfiguration &inCfg,\n>  \t\t\t      const libcamera::StreamConfiguration &outCfg);\n> --\n> 2.31.1\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 8FAF3BDC71\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 21 Sep 2021 11:07:43 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id DD5C16918A;\n\tTue, 21 Sep 2021 13:07:42 +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 E333E60247\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 21 Sep 2021 13:07:40 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby relay2-d.mail.gandi.net (Postfix) with ESMTPSA id 68EB140004;\n\tTue, 21 Sep 2021 11:07:40 +0000 (UTC)"],"Date":"Tue, 21 Sep 2021 13:08:27 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Umang Jain <umang.jain@ideasonboard.com>","Message-ID":"<20210921110827.llmdrctr27vup6pa@uno.localdomain>","References":"<20210920173752.1346190-1-umang.jain@ideasonboard.com>\n\t<20210920173752.1346190-4-umang.jain@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20210920173752.1346190-4-umang.jain@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v3 03/10] android: camera_stream: Pass\n\tFrameBuffer pointer instead of reference","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":19857,"web_url":"https://patchwork.libcamera.org/comment/19857/","msgid":"<CAO5uPHNaE3HRJ-6Lm4zqnyuuWzAnkTA-LvLUp+mrM+7z-fV-DA@mail.gmail.com>","date":"2021-09-27T06:01:21","subject":"Re: [libcamera-devel] [PATCH v3 03/10] android: camera_stream: Pass\n\tFrameBuffer pointer instead of reference","submitter":{"id":63,"url":"https://patchwork.libcamera.org/api/people/63/","name":"Hirokazu Honda","email":"hiroh@chromium.org"},"content":"Hi Umang, thank you for the patch.\n\nOn Tue, Sep 21, 2021 at 8:07 PM Jacopo Mondi <jacopo@jmondi.org> wrote:\n>\n> Hi Umang,\n>\n> On Mon, Sep 20, 2021 at 11:07:45PM +0530, Umang Jain wrote:\n> > Pass the libcamera::FrameBuffer pointer to the post-processor instead\n> > of passing it by reference. Passing by reference is fine as long as\n> > the post processing is done synchronously.\n> >\n> > However in subsequent commits, the post processing is planned to be\n> > moved to a separate thread. The reference argument (in current case\n> > 'source') is copied when we will try to invoke a method on separate\n> > thread (which will run the post-processor) using Object::invokeMethod().\n> > As the 'source' is an instance of FrameBuffer class, which is\n> > restricted by LIBCAMERA_DISABLE_COPY_AND_MOVE, passing the reference\n> > to Object::invokeMethod() will try to copy it. Hence to avoid this copy,\n> > pass in the FrameBuffer pointer instead of reference.\n> >\n> > This requires changes to the existing PostProcessor interface and all\n> > its implemented classes.\n> >\n> > Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n>\n\nReviewed-by: Hirokazu Honda <hiroh@chromium.org>\n\n> Thanks\n>   j\n>\n> > ---\n> >  src/android/camera_device.cpp            |  2 +-\n> >  src/android/camera_stream.cpp            |  2 +-\n> >  src/android/camera_stream.h              |  2 +-\n> >  src/android/jpeg/encoder.h               |  2 +-\n> >  src/android/jpeg/encoder_libjpeg.cpp     |  4 ++--\n> >  src/android/jpeg/encoder_libjpeg.h       |  2 +-\n> >  src/android/jpeg/post_processor_jpeg.cpp |  4 ++--\n> >  src/android/jpeg/post_processor_jpeg.h   |  4 ++--\n> >  src/android/jpeg/thumbnailer.cpp         |  4 ++--\n> >  src/android/jpeg/thumbnailer.h           |  2 +-\n> >  src/android/post_processor.h             |  2 +-\n> >  src/android/yuv/post_processor_yuv.cpp   | 18 +++++++++---------\n> >  src/android/yuv/post_processor_yuv.h     |  4 ++--\n> >  13 files changed, 26 insertions(+), 26 deletions(-)\n> >\n> > diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> > index 0562c225..cc078fe4 100644\n> > --- a/src/android/camera_device.cpp\n> > +++ b/src/android/camera_device.cpp\n> > @@ -1148,7 +1148,7 @@ void CameraDevice::requestComplete(Request *request)\n> >                       continue;\n> >               }\n> >\n> > -             int ret = cameraStream->process(*src, *buffer.buffer,\n> > +             int ret = cameraStream->process(src, *buffer.buffer,\n> >                                               descriptor->settings_,\n> >                                               resultMetadata.get());\n> >               /*\n> > diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp\n> > index 0f5ae947..0fed5382 100644\n> > --- a/src/android/camera_stream.cpp\n> > +++ b/src/android/camera_stream.cpp\n> > @@ -98,7 +98,7 @@ int CameraStream::configure()\n> >       return 0;\n> >  }\n> >\n> > -int CameraStream::process(const FrameBuffer &source,\n> > +int CameraStream::process(const FrameBuffer *source,\n> >                         buffer_handle_t camera3Dest,\n> >                         const CameraMetadata &requestMetadata,\n> >                         CameraMetadata *resultMetadata)\n> > diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h\n> > index 2dab6c3a..5c232cb6 100644\n> > --- a/src/android/camera_stream.h\n> > +++ b/src/android/camera_stream.h\n> > @@ -118,7 +118,7 @@ public:\n> >       libcamera::Stream *stream() const;\n> >\n> >       int configure();\n> > -     int process(const libcamera::FrameBuffer &source,\n> > +     int process(const libcamera::FrameBuffer *source,\n> >                   buffer_handle_t camera3Dest,\n> >                   const CameraMetadata &requestMetadata,\n> >                   CameraMetadata *resultMetadata);\n> > diff --git a/src/android/jpeg/encoder.h b/src/android/jpeg/encoder.h\n> > index a28522f4..7b6140e7 100644\n> > --- a/src/android/jpeg/encoder.h\n> > +++ b/src/android/jpeg/encoder.h\n> > @@ -18,7 +18,7 @@ public:\n> >       virtual ~Encoder() = default;\n> >\n> >       virtual int configure(const libcamera::StreamConfiguration &cfg) = 0;\n> > -     virtual int encode(const libcamera::FrameBuffer &source,\n> > +     virtual int encode(const libcamera::FrameBuffer *source,\n> >                          libcamera::Span<uint8_t> destination,\n> >                          libcamera::Span<const uint8_t> exifData,\n> >                          unsigned int quality) = 0;\n> > diff --git a/src/android/jpeg/encoder_libjpeg.cpp b/src/android/jpeg/encoder_libjpeg.cpp\n> > index 21a3b33d..3114ed4b 100644\n> > --- a/src/android/jpeg/encoder_libjpeg.cpp\n> > +++ b/src/android/jpeg/encoder_libjpeg.cpp\n> > @@ -178,10 +178,10 @@ void EncoderLibJpeg::compressNV(const std::vector<Span<uint8_t>> &planes)\n> >       }\n> >  }\n> >\n> > -int EncoderLibJpeg::encode(const FrameBuffer &source, Span<uint8_t> dest,\n> > +int EncoderLibJpeg::encode(const FrameBuffer *source, Span<uint8_t> dest,\n> >                          Span<const uint8_t> exifData, unsigned int quality)\n> >  {\n> > -     MappedFrameBuffer frame(&source, MappedFrameBuffer::MapFlag::Read);\n> > +     MappedFrameBuffer frame(source, MappedFrameBuffer::MapFlag::Read);\n> >       if (!frame.isValid()) {\n> >               LOG(JPEG, Error) << \"Failed to map FrameBuffer : \"\n> >                                << strerror(frame.error());\n> > diff --git a/src/android/jpeg/encoder_libjpeg.h b/src/android/jpeg/encoder_libjpeg.h\n> > index 45ffbd7f..ae4e1e32 100644\n> > --- a/src/android/jpeg/encoder_libjpeg.h\n> > +++ b/src/android/jpeg/encoder_libjpeg.h\n> > @@ -22,7 +22,7 @@ public:\n> >       ~EncoderLibJpeg();\n> >\n> >       int configure(const libcamera::StreamConfiguration &cfg) override;\n> > -     int encode(const libcamera::FrameBuffer &source,\n> > +     int encode(const libcamera::FrameBuffer *source,\n> >                  libcamera::Span<uint8_t> destination,\n> >                  libcamera::Span<const uint8_t> exifData,\n> >                  unsigned int quality) override;\n> > diff --git a/src/android/jpeg/post_processor_jpeg.cpp b/src/android/jpeg/post_processor_jpeg.cpp\n> > index ef2d98cc..cb45f86b 100644\n> > --- a/src/android/jpeg/post_processor_jpeg.cpp\n> > +++ b/src/android/jpeg/post_processor_jpeg.cpp\n> > @@ -50,7 +50,7 @@ int PostProcessorJpeg::configure(const StreamConfiguration &inCfg,\n> >       return encoder_->configure(inCfg);\n> >  }\n> >\n> > -void PostProcessorJpeg::generateThumbnail(const FrameBuffer &source,\n> > +void PostProcessorJpeg::generateThumbnail(const FrameBuffer *source,\n> >                                         const Size &targetSize,\n> >                                         unsigned int quality,\n> >                                         std::vector<unsigned char> *thumbnail)\n> > @@ -97,7 +97,7 @@ void PostProcessorJpeg::generateThumbnail(const FrameBuffer &source,\n> >       }\n> >  }\n> >\n> > -int PostProcessorJpeg::process(const FrameBuffer &source,\n> > +int PostProcessorJpeg::process(const FrameBuffer *source,\n> >                              CameraBuffer *destination,\n> >                              const CameraMetadata &requestMetadata,\n> >                              CameraMetadata *resultMetadata)\n> > diff --git a/src/android/jpeg/post_processor_jpeg.h b/src/android/jpeg/post_processor_jpeg.h\n> > index 6fd31022..c4b2e9ef 100644\n> > --- a/src/android/jpeg/post_processor_jpeg.h\n> > +++ b/src/android/jpeg/post_processor_jpeg.h\n> > @@ -22,13 +22,13 @@ public:\n> >\n> >       int configure(const libcamera::StreamConfiguration &incfg,\n> >                     const libcamera::StreamConfiguration &outcfg) override;\n> > -     int process(const libcamera::FrameBuffer &source,\n> > +     int process(const libcamera::FrameBuffer *source,\n> >                   CameraBuffer *destination,\n> >                   const CameraMetadata &requestMetadata,\n> >                   CameraMetadata *resultMetadata) override;\n> >\n> >  private:\n> > -     void generateThumbnail(const libcamera::FrameBuffer &source,\n> > +     void generateThumbnail(const libcamera::FrameBuffer *source,\n> >                              const libcamera::Size &targetSize,\n> >                              unsigned int quality,\n> >                              std::vector<unsigned char> *thumbnail);\n> > diff --git a/src/android/jpeg/thumbnailer.cpp b/src/android/jpeg/thumbnailer.cpp\n> > index 1fab8072..ffac6a15 100644\n> > --- a/src/android/jpeg/thumbnailer.cpp\n> > +++ b/src/android/jpeg/thumbnailer.cpp\n> > @@ -37,11 +37,11 @@ void Thumbnailer::configure(const Size &sourceSize, PixelFormat pixelFormat)\n> >       valid_ = true;\n> >  }\n> >\n> > -void Thumbnailer::createThumbnail(const FrameBuffer &source,\n> > +void Thumbnailer::createThumbnail(const FrameBuffer *source,\n> >                                 const Size &targetSize,\n> >                                 std::vector<unsigned char> *destination)\n> >  {\n> > -     MappedFrameBuffer frame(&source, MappedFrameBuffer::MapFlag::Read);\n> > +     MappedFrameBuffer frame(source, MappedFrameBuffer::MapFlag::Read);\n> >       if (!frame.isValid()) {\n> >               LOG(Thumbnailer, Error)\n> >                       << \"Failed to map FrameBuffer : \"\n> > diff --git a/src/android/jpeg/thumbnailer.h b/src/android/jpeg/thumbnailer.h\n> > index 4d086c49..0f3caf40 100644\n> > --- a/src/android/jpeg/thumbnailer.h\n> > +++ b/src/android/jpeg/thumbnailer.h\n> > @@ -19,7 +19,7 @@ public:\n> >\n> >       void configure(const libcamera::Size &sourceSize,\n> >                      libcamera::PixelFormat pixelFormat);\n> > -     void createThumbnail(const libcamera::FrameBuffer &source,\n> > +     void createThumbnail(const libcamera::FrameBuffer *source,\n> >                            const libcamera::Size &targetSize,\n> >                            std::vector<unsigned char> *dest);\n> >       const libcamera::PixelFormat &pixelFormat() const { return pixelFormat_; }\n> > diff --git a/src/android/post_processor.h b/src/android/post_processor.h\n> > index ab2b2c60..61dfb6d4 100644\n> > --- a/src/android/post_processor.h\n> > +++ b/src/android/post_processor.h\n> > @@ -21,7 +21,7 @@ public:\n> >\n> >       virtual int configure(const libcamera::StreamConfiguration &inCfg,\n> >                             const libcamera::StreamConfiguration &outCfg) = 0;\n> > -     virtual int process(const libcamera::FrameBuffer &source,\n> > +     virtual int process(const libcamera::FrameBuffer *source,\n> >                           CameraBuffer *destination,\n> >                           const CameraMetadata &requestMetadata,\n> >                           CameraMetadata *resultMetadata) = 0;\n> > diff --git a/src/android/yuv/post_processor_yuv.cpp b/src/android/yuv/post_processor_yuv.cpp\n> > index 7b3b4960..0a874886 100644\n> > --- a/src/android/yuv/post_processor_yuv.cpp\n> > +++ b/src/android/yuv/post_processor_yuv.cpp\n> > @@ -49,7 +49,7 @@ int PostProcessorYuv::configure(const StreamConfiguration &inCfg,\n> >       return 0;\n> >  }\n> >\n> > -int PostProcessorYuv::process(const FrameBuffer &source,\n> > +int PostProcessorYuv::process(const FrameBuffer *source,\n> >                             CameraBuffer *destination,\n> >                             [[maybe_unused]] const CameraMetadata &requestMetadata,\n> >                             [[maybe_unused]] CameraMetadata *metadata)\n> > @@ -57,7 +57,7 @@ int PostProcessorYuv::process(const FrameBuffer &source,\n> >       if (!isValidBuffers(source, *destination))\n> >               return -EINVAL;\n> >\n> > -     const MappedFrameBuffer sourceMapped(&source, MappedFrameBuffer::MapFlag::Read);\n> > +     const MappedFrameBuffer sourceMapped(source, MappedFrameBuffer::MapFlag::Read);\n> >       if (!sourceMapped.isValid()) {\n> >               LOG(YUV, Error) << \"Failed to mmap camera frame buffer\";\n> >               return -EINVAL;\n> > @@ -83,12 +83,12 @@ int PostProcessorYuv::process(const FrameBuffer &source,\n> >       return 0;\n> >  }\n> >\n> > -bool PostProcessorYuv::isValidBuffers(const FrameBuffer &source,\n> > +bool PostProcessorYuv::isValidBuffers(const FrameBuffer *source,\n> >                                     const CameraBuffer &destination) const\n> >  {\n> > -     if (source.planes().size() != 2) {\n> > +     if (source->planes().size() != 2) {\n> >               LOG(YUV, Error) << \"Invalid number of source planes: \"\n> > -                             << source.planes().size();\n> > +                             << source->planes().size();\n> >               return false;\n> >       }\n> >       if (destination.numPlanes() != 2) {\n> > @@ -97,12 +97,12 @@ bool PostProcessorYuv::isValidBuffers(const FrameBuffer &source,\n> >               return false;\n> >       }\n> >\n> > -     if (source.planes()[0].length < sourceLength_[0] ||\n> > -         source.planes()[1].length < sourceLength_[1]) {\n> > +     if (source->planes()[0].length < sourceLength_[0] ||\n> > +         source->planes()[1].length < sourceLength_[1]) {\n> >               LOG(YUV, Error)\n> >                       << \"The source planes lengths are too small, actual size: {\"\n> > -                     << source.planes()[0].length << \", \"\n> > -                     << source.planes()[1].length\n> > +                     << source->planes()[0].length << \", \"\n> > +                     << source->planes()[1].length\n> >                       << \"}, expected size: {\"\n> >                       << sourceLength_[0] << \", \"\n> >                       << sourceLength_[1] << \"}\";\n> > diff --git a/src/android/yuv/post_processor_yuv.h b/src/android/yuv/post_processor_yuv.h\n> > index f8b1ba23..44a04113 100644\n> > --- a/src/android/yuv/post_processor_yuv.h\n> > +++ b/src/android/yuv/post_processor_yuv.h\n> > @@ -20,13 +20,13 @@ public:\n> >\n> >       int configure(const libcamera::StreamConfiguration &incfg,\n> >                     const libcamera::StreamConfiguration &outcfg) override;\n> > -     int process(const libcamera::FrameBuffer &source,\n> > +     int process(const libcamera::FrameBuffer *source,\n> >                   CameraBuffer *destination,\n> >                   const CameraMetadata &requestMetadata,\n> >                   CameraMetadata *metadata) override;\n> >\n> >  private:\n> > -     bool isValidBuffers(const libcamera::FrameBuffer &source,\n> > +     bool isValidBuffers(const libcamera::FrameBuffer *source,\n> >                           const CameraBuffer &destination) const;\n> >       void calculateLengths(const libcamera::StreamConfiguration &inCfg,\n> >                             const libcamera::StreamConfiguration &outCfg);\n> > --\n> > 2.31.1\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 E5D2CBDC71\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 27 Sep 2021 06:01:34 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 73C0B684C8;\n\tMon, 27 Sep 2021 08:01:34 +0200 (CEST)","from mail-ed1-x532.google.com (mail-ed1-x532.google.com\n\t[IPv6:2a00:1450:4864:20::532])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 93AA4684C8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 27 Sep 2021 08:01:32 +0200 (CEST)","by mail-ed1-x532.google.com with SMTP id x7so49799059edd.6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 26 Sep 2021 23:01:32 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=chromium.org header.i=@chromium.org\n\theader.b=\"lP68HhLZ\"; 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=MtpbP/e4Qu1E3AMv/hVHRGJEW71LsnvpKn7k5ArG8zI=;\n\tb=lP68HhLZgzz73xpw2XHcT6nnYb7sL2vILo6qBmm1mKEh9f8NJaMy9N2scwEMfKfnBt\n\tPYLF9GleJOySeSBHSNiBHSl5ytHY2pP9+nUZH5X+AoD+cCR/dqwxURxMA5NsrNWEdsNu\n\tiDjVXd0lAH3LBDC/X/RNHOADAKXPK+d3uJJ94=","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=x-gm-message-state:mime-version:references:in-reply-to:from:date\n\t:message-id:subject:to:cc;\n\tbh=MtpbP/e4Qu1E3AMv/hVHRGJEW71LsnvpKn7k5ArG8zI=;\n\tb=pQELa0HWyow0asYegje7GNM1ihZ8qf8bWh+LIZ6OLVCKFPFYUUlAH+CQpMs3Zelzw0\n\t2iqtn81wL9zoQ1UDSD2Ps9t57KQjMiEsial6g9w2+tHOYcf4N8oAYLEJ3xmzdiyAYwAV\n\tMY6l7JrNHqYScwcchOpqO7GjP/Ba9e1dq4ZGTgQK+iu4ZqWOP0t3ogBRtSbMHhhQWGYS\n\tMCxMoXMNDZ0KP9mmMzV5LjbaJdm5WEzw317Z0P81wdhSZ5qjcclOB8+8tQhTtbnFRGI9\n\tZp1B8LT12Zjj3OKAfbh1+OQgJtU/qvTp9g4BfL5yQWtlckGbPMYijJFaOncf8YZH4kIh\n\tuTrg==","X-Gm-Message-State":"AOAM532dNGtbc5JbVItkeS8e/QmpiO0wKrFJ6qLOA9FTHDSOXzX2HOCC\n\tY8od3IDee2MI0V8a6ihRzT0cK6FqxBxUcFO+WsuU1g==","X-Google-Smtp-Source":"ABdhPJy+6292uZ+yF9VDN6JyqkHLc15FGJqUo6cagXYQLqa7RhmUtpOoJg9oFJj/xUIYz5NA+XXAUuZwE8GA/2JYP3g=","X-Received":"by 2002:a50:d80d:: with SMTP id\n\to13mr21392576edj.204.1632722491935; \n\tSun, 26 Sep 2021 23:01:31 -0700 (PDT)","MIME-Version":"1.0","References":"<20210920173752.1346190-1-umang.jain@ideasonboard.com>\n\t<20210920173752.1346190-4-umang.jain@ideasonboard.com>\n\t<20210921110827.llmdrctr27vup6pa@uno.localdomain>","In-Reply-To":"<20210921110827.llmdrctr27vup6pa@uno.localdomain>","From":"Hirokazu Honda <hiroh@chromium.org>","Date":"Mon, 27 Sep 2021 15:01:21 +0900","Message-ID":"<CAO5uPHNaE3HRJ-6Lm4zqnyuuWzAnkTA-LvLUp+mrM+7z-fV-DA@mail.gmail.com>","To":"Jacopo Mondi <jacopo@jmondi.org>","Content-Type":"text/plain; charset=\"UTF-8\"","Subject":"Re: [libcamera-devel] [PATCH v3 03/10] android: camera_stream: Pass\n\tFrameBuffer pointer instead of reference","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>"}}]