Message ID | 20210920173752.1346190-4-umang.jain@ideasonboard.com |
---|---|
State | RFC |
Delegated to: | Umang Jain |
Headers | show |
Series |
|
Related | show |
Hi Umang, On Mon, Sep 20, 2021 at 11:07:45PM +0530, Umang Jain wrote: > Pass the libcamera::FrameBuffer pointer to the post-processor instead > of passing it by reference. Passing by reference is fine as long as > the post processing is done synchronously. > > However in subsequent commits, the post processing is planned to be > moved to a separate thread. The reference argument (in current case > 'source') is copied when we will try to invoke a method on separate > thread (which will run the post-processor) using Object::invokeMethod(). > As the 'source' is an instance of FrameBuffer class, which is > restricted by LIBCAMERA_DISABLE_COPY_AND_MOVE, passing the reference > to Object::invokeMethod() will try to copy it. Hence to avoid this copy, > pass in the FrameBuffer pointer instead of reference. > > This requires changes to the existing PostProcessor interface and all > its implemented classes. > > Signed-off-by: Umang Jain <umang.jain@ideasonboard.com> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Thanks j > --- > src/android/camera_device.cpp | 2 +- > src/android/camera_stream.cpp | 2 +- > src/android/camera_stream.h | 2 +- > src/android/jpeg/encoder.h | 2 +- > src/android/jpeg/encoder_libjpeg.cpp | 4 ++-- > src/android/jpeg/encoder_libjpeg.h | 2 +- > src/android/jpeg/post_processor_jpeg.cpp | 4 ++-- > src/android/jpeg/post_processor_jpeg.h | 4 ++-- > src/android/jpeg/thumbnailer.cpp | 4 ++-- > src/android/jpeg/thumbnailer.h | 2 +- > src/android/post_processor.h | 2 +- > src/android/yuv/post_processor_yuv.cpp | 18 +++++++++--------- > src/android/yuv/post_processor_yuv.h | 4 ++-- > 13 files changed, 26 insertions(+), 26 deletions(-) > > diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp > index 0562c225..cc078fe4 100644 > --- a/src/android/camera_device.cpp > +++ b/src/android/camera_device.cpp > @@ -1148,7 +1148,7 @@ void CameraDevice::requestComplete(Request *request) > continue; > } > > - int ret = cameraStream->process(*src, *buffer.buffer, > + int ret = cameraStream->process(src, *buffer.buffer, > descriptor->settings_, > resultMetadata.get()); > /* > diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp > index 0f5ae947..0fed5382 100644 > --- a/src/android/camera_stream.cpp > +++ b/src/android/camera_stream.cpp > @@ -98,7 +98,7 @@ int CameraStream::configure() > return 0; > } > > -int CameraStream::process(const FrameBuffer &source, > +int CameraStream::process(const FrameBuffer *source, > buffer_handle_t camera3Dest, > const CameraMetadata &requestMetadata, > CameraMetadata *resultMetadata) > diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h > index 2dab6c3a..5c232cb6 100644 > --- a/src/android/camera_stream.h > +++ b/src/android/camera_stream.h > @@ -118,7 +118,7 @@ public: > libcamera::Stream *stream() const; > > int configure(); > - int process(const libcamera::FrameBuffer &source, > + int process(const libcamera::FrameBuffer *source, > buffer_handle_t camera3Dest, > const CameraMetadata &requestMetadata, > CameraMetadata *resultMetadata); > diff --git a/src/android/jpeg/encoder.h b/src/android/jpeg/encoder.h > index a28522f4..7b6140e7 100644 > --- a/src/android/jpeg/encoder.h > +++ b/src/android/jpeg/encoder.h > @@ -18,7 +18,7 @@ public: > virtual ~Encoder() = default; > > virtual int configure(const libcamera::StreamConfiguration &cfg) = 0; > - virtual int encode(const libcamera::FrameBuffer &source, > + virtual int encode(const libcamera::FrameBuffer *source, > libcamera::Span<uint8_t> destination, > libcamera::Span<const uint8_t> exifData, > unsigned int quality) = 0; > diff --git a/src/android/jpeg/encoder_libjpeg.cpp b/src/android/jpeg/encoder_libjpeg.cpp > index 21a3b33d..3114ed4b 100644 > --- a/src/android/jpeg/encoder_libjpeg.cpp > +++ b/src/android/jpeg/encoder_libjpeg.cpp > @@ -178,10 +178,10 @@ void EncoderLibJpeg::compressNV(const std::vector<Span<uint8_t>> &planes) > } > } > > -int EncoderLibJpeg::encode(const FrameBuffer &source, Span<uint8_t> dest, > +int EncoderLibJpeg::encode(const FrameBuffer *source, Span<uint8_t> dest, > Span<const uint8_t> exifData, unsigned int quality) > { > - MappedFrameBuffer frame(&source, MappedFrameBuffer::MapFlag::Read); > + MappedFrameBuffer frame(source, MappedFrameBuffer::MapFlag::Read); > if (!frame.isValid()) { > LOG(JPEG, Error) << "Failed to map FrameBuffer : " > << strerror(frame.error()); > diff --git a/src/android/jpeg/encoder_libjpeg.h b/src/android/jpeg/encoder_libjpeg.h > index 45ffbd7f..ae4e1e32 100644 > --- a/src/android/jpeg/encoder_libjpeg.h > +++ b/src/android/jpeg/encoder_libjpeg.h > @@ -22,7 +22,7 @@ public: > ~EncoderLibJpeg(); > > int configure(const libcamera::StreamConfiguration &cfg) override; > - int encode(const libcamera::FrameBuffer &source, > + int encode(const libcamera::FrameBuffer *source, > libcamera::Span<uint8_t> destination, > libcamera::Span<const uint8_t> exifData, > unsigned int quality) override; > diff --git a/src/android/jpeg/post_processor_jpeg.cpp b/src/android/jpeg/post_processor_jpeg.cpp > index ef2d98cc..cb45f86b 100644 > --- a/src/android/jpeg/post_processor_jpeg.cpp > +++ b/src/android/jpeg/post_processor_jpeg.cpp > @@ -50,7 +50,7 @@ int PostProcessorJpeg::configure(const StreamConfiguration &inCfg, > return encoder_->configure(inCfg); > } > > -void PostProcessorJpeg::generateThumbnail(const FrameBuffer &source, > +void PostProcessorJpeg::generateThumbnail(const FrameBuffer *source, > const Size &targetSize, > unsigned int quality, > std::vector<unsigned char> *thumbnail) > @@ -97,7 +97,7 @@ void PostProcessorJpeg::generateThumbnail(const FrameBuffer &source, > } > } > > -int PostProcessorJpeg::process(const FrameBuffer &source, > +int PostProcessorJpeg::process(const FrameBuffer *source, > CameraBuffer *destination, > const CameraMetadata &requestMetadata, > CameraMetadata *resultMetadata) > diff --git a/src/android/jpeg/post_processor_jpeg.h b/src/android/jpeg/post_processor_jpeg.h > index 6fd31022..c4b2e9ef 100644 > --- a/src/android/jpeg/post_processor_jpeg.h > +++ b/src/android/jpeg/post_processor_jpeg.h > @@ -22,13 +22,13 @@ public: > > int configure(const libcamera::StreamConfiguration &incfg, > const libcamera::StreamConfiguration &outcfg) override; > - int process(const libcamera::FrameBuffer &source, > + int process(const libcamera::FrameBuffer *source, > CameraBuffer *destination, > const CameraMetadata &requestMetadata, > CameraMetadata *resultMetadata) override; > > private: > - void generateThumbnail(const libcamera::FrameBuffer &source, > + void generateThumbnail(const libcamera::FrameBuffer *source, > const libcamera::Size &targetSize, > unsigned int quality, > std::vector<unsigned char> *thumbnail); > diff --git a/src/android/jpeg/thumbnailer.cpp b/src/android/jpeg/thumbnailer.cpp > index 1fab8072..ffac6a15 100644 > --- a/src/android/jpeg/thumbnailer.cpp > +++ b/src/android/jpeg/thumbnailer.cpp > @@ -37,11 +37,11 @@ void Thumbnailer::configure(const Size &sourceSize, PixelFormat pixelFormat) > valid_ = true; > } > > -void Thumbnailer::createThumbnail(const FrameBuffer &source, > +void Thumbnailer::createThumbnail(const FrameBuffer *source, > const Size &targetSize, > std::vector<unsigned char> *destination) > { > - MappedFrameBuffer frame(&source, MappedFrameBuffer::MapFlag::Read); > + MappedFrameBuffer frame(source, MappedFrameBuffer::MapFlag::Read); > if (!frame.isValid()) { > LOG(Thumbnailer, Error) > << "Failed to map FrameBuffer : " > diff --git a/src/android/jpeg/thumbnailer.h b/src/android/jpeg/thumbnailer.h > index 4d086c49..0f3caf40 100644 > --- a/src/android/jpeg/thumbnailer.h > +++ b/src/android/jpeg/thumbnailer.h > @@ -19,7 +19,7 @@ public: > > void configure(const libcamera::Size &sourceSize, > libcamera::PixelFormat pixelFormat); > - void createThumbnail(const libcamera::FrameBuffer &source, > + void createThumbnail(const libcamera::FrameBuffer *source, > const libcamera::Size &targetSize, > std::vector<unsigned char> *dest); > const libcamera::PixelFormat &pixelFormat() const { return pixelFormat_; } > diff --git a/src/android/post_processor.h b/src/android/post_processor.h > index ab2b2c60..61dfb6d4 100644 > --- a/src/android/post_processor.h > +++ b/src/android/post_processor.h > @@ -21,7 +21,7 @@ public: > > virtual int configure(const libcamera::StreamConfiguration &inCfg, > const libcamera::StreamConfiguration &outCfg) = 0; > - virtual int process(const libcamera::FrameBuffer &source, > + virtual int process(const libcamera::FrameBuffer *source, > CameraBuffer *destination, > const CameraMetadata &requestMetadata, > CameraMetadata *resultMetadata) = 0; > diff --git a/src/android/yuv/post_processor_yuv.cpp b/src/android/yuv/post_processor_yuv.cpp > index 7b3b4960..0a874886 100644 > --- a/src/android/yuv/post_processor_yuv.cpp > +++ b/src/android/yuv/post_processor_yuv.cpp > @@ -49,7 +49,7 @@ int PostProcessorYuv::configure(const StreamConfiguration &inCfg, > return 0; > } > > -int PostProcessorYuv::process(const FrameBuffer &source, > +int PostProcessorYuv::process(const FrameBuffer *source, > CameraBuffer *destination, > [[maybe_unused]] const CameraMetadata &requestMetadata, > [[maybe_unused]] CameraMetadata *metadata) > @@ -57,7 +57,7 @@ int PostProcessorYuv::process(const FrameBuffer &source, > if (!isValidBuffers(source, *destination)) > return -EINVAL; > > - const MappedFrameBuffer sourceMapped(&source, MappedFrameBuffer::MapFlag::Read); > + const MappedFrameBuffer sourceMapped(source, MappedFrameBuffer::MapFlag::Read); > if (!sourceMapped.isValid()) { > LOG(YUV, Error) << "Failed to mmap camera frame buffer"; > return -EINVAL; > @@ -83,12 +83,12 @@ int PostProcessorYuv::process(const FrameBuffer &source, > return 0; > } > > -bool PostProcessorYuv::isValidBuffers(const FrameBuffer &source, > +bool PostProcessorYuv::isValidBuffers(const FrameBuffer *source, > const CameraBuffer &destination) const > { > - if (source.planes().size() != 2) { > + if (source->planes().size() != 2) { > LOG(YUV, Error) << "Invalid number of source planes: " > - << source.planes().size(); > + << source->planes().size(); > return false; > } > if (destination.numPlanes() != 2) { > @@ -97,12 +97,12 @@ bool PostProcessorYuv::isValidBuffers(const FrameBuffer &source, > return false; > } > > - if (source.planes()[0].length < sourceLength_[0] || > - source.planes()[1].length < sourceLength_[1]) { > + if (source->planes()[0].length < sourceLength_[0] || > + source->planes()[1].length < sourceLength_[1]) { > LOG(YUV, Error) > << "The source planes lengths are too small, actual size: {" > - << source.planes()[0].length << ", " > - << source.planes()[1].length > + << source->planes()[0].length << ", " > + << source->planes()[1].length > << "}, expected size: {" > << sourceLength_[0] << ", " > << sourceLength_[1] << "}"; > diff --git a/src/android/yuv/post_processor_yuv.h b/src/android/yuv/post_processor_yuv.h > index f8b1ba23..44a04113 100644 > --- a/src/android/yuv/post_processor_yuv.h > +++ b/src/android/yuv/post_processor_yuv.h > @@ -20,13 +20,13 @@ public: > > int configure(const libcamera::StreamConfiguration &incfg, > const libcamera::StreamConfiguration &outcfg) override; > - int process(const libcamera::FrameBuffer &source, > + int process(const libcamera::FrameBuffer *source, > CameraBuffer *destination, > const CameraMetadata &requestMetadata, > CameraMetadata *metadata) override; > > private: > - bool isValidBuffers(const libcamera::FrameBuffer &source, > + bool isValidBuffers(const libcamera::FrameBuffer *source, > const CameraBuffer &destination) const; > void calculateLengths(const libcamera::StreamConfiguration &inCfg, > const libcamera::StreamConfiguration &outCfg); > -- > 2.31.1 >
Hi Umang, thank you for the patch. On Tue, Sep 21, 2021 at 8:07 PM Jacopo Mondi <jacopo@jmondi.org> wrote: > > Hi Umang, > > On Mon, Sep 20, 2021 at 11:07:45PM +0530, Umang Jain wrote: > > Pass the libcamera::FrameBuffer pointer to the post-processor instead > > of passing it by reference. Passing by reference is fine as long as > > the post processing is done synchronously. > > > > However in subsequent commits, the post processing is planned to be > > moved to a separate thread. The reference argument (in current case > > 'source') is copied when we will try to invoke a method on separate > > thread (which will run the post-processor) using Object::invokeMethod(). > > As the 'source' is an instance of FrameBuffer class, which is > > restricted by LIBCAMERA_DISABLE_COPY_AND_MOVE, passing the reference > > to Object::invokeMethod() will try to copy it. Hence to avoid this copy, > > pass in the FrameBuffer pointer instead of reference. > > > > This requires changes to the existing PostProcessor interface and all > > its implemented classes. > > > > Signed-off-by: Umang Jain <umang.jain@ideasonboard.com> > > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> > Reviewed-by: Hirokazu Honda <hiroh@chromium.org> > Thanks > j > > > --- > > src/android/camera_device.cpp | 2 +- > > src/android/camera_stream.cpp | 2 +- > > src/android/camera_stream.h | 2 +- > > src/android/jpeg/encoder.h | 2 +- > > src/android/jpeg/encoder_libjpeg.cpp | 4 ++-- > > src/android/jpeg/encoder_libjpeg.h | 2 +- > > src/android/jpeg/post_processor_jpeg.cpp | 4 ++-- > > src/android/jpeg/post_processor_jpeg.h | 4 ++-- > > src/android/jpeg/thumbnailer.cpp | 4 ++-- > > src/android/jpeg/thumbnailer.h | 2 +- > > src/android/post_processor.h | 2 +- > > src/android/yuv/post_processor_yuv.cpp | 18 +++++++++--------- > > src/android/yuv/post_processor_yuv.h | 4 ++-- > > 13 files changed, 26 insertions(+), 26 deletions(-) > > > > diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp > > index 0562c225..cc078fe4 100644 > > --- a/src/android/camera_device.cpp > > +++ b/src/android/camera_device.cpp > > @@ -1148,7 +1148,7 @@ void CameraDevice::requestComplete(Request *request) > > continue; > > } > > > > - int ret = cameraStream->process(*src, *buffer.buffer, > > + int ret = cameraStream->process(src, *buffer.buffer, > > descriptor->settings_, > > resultMetadata.get()); > > /* > > diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp > > index 0f5ae947..0fed5382 100644 > > --- a/src/android/camera_stream.cpp > > +++ b/src/android/camera_stream.cpp > > @@ -98,7 +98,7 @@ int CameraStream::configure() > > return 0; > > } > > > > -int CameraStream::process(const FrameBuffer &source, > > +int CameraStream::process(const FrameBuffer *source, > > buffer_handle_t camera3Dest, > > const CameraMetadata &requestMetadata, > > CameraMetadata *resultMetadata) > > diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h > > index 2dab6c3a..5c232cb6 100644 > > --- a/src/android/camera_stream.h > > +++ b/src/android/camera_stream.h > > @@ -118,7 +118,7 @@ public: > > libcamera::Stream *stream() const; > > > > int configure(); > > - int process(const libcamera::FrameBuffer &source, > > + int process(const libcamera::FrameBuffer *source, > > buffer_handle_t camera3Dest, > > const CameraMetadata &requestMetadata, > > CameraMetadata *resultMetadata); > > diff --git a/src/android/jpeg/encoder.h b/src/android/jpeg/encoder.h > > index a28522f4..7b6140e7 100644 > > --- a/src/android/jpeg/encoder.h > > +++ b/src/android/jpeg/encoder.h > > @@ -18,7 +18,7 @@ public: > > virtual ~Encoder() = default; > > > > virtual int configure(const libcamera::StreamConfiguration &cfg) = 0; > > - virtual int encode(const libcamera::FrameBuffer &source, > > + virtual int encode(const libcamera::FrameBuffer *source, > > libcamera::Span<uint8_t> destination, > > libcamera::Span<const uint8_t> exifData, > > unsigned int quality) = 0; > > diff --git a/src/android/jpeg/encoder_libjpeg.cpp b/src/android/jpeg/encoder_libjpeg.cpp > > index 21a3b33d..3114ed4b 100644 > > --- a/src/android/jpeg/encoder_libjpeg.cpp > > +++ b/src/android/jpeg/encoder_libjpeg.cpp > > @@ -178,10 +178,10 @@ void EncoderLibJpeg::compressNV(const std::vector<Span<uint8_t>> &planes) > > } > > } > > > > -int EncoderLibJpeg::encode(const FrameBuffer &source, Span<uint8_t> dest, > > +int EncoderLibJpeg::encode(const FrameBuffer *source, Span<uint8_t> dest, > > Span<const uint8_t> exifData, unsigned int quality) > > { > > - MappedFrameBuffer frame(&source, MappedFrameBuffer::MapFlag::Read); > > + MappedFrameBuffer frame(source, MappedFrameBuffer::MapFlag::Read); > > if (!frame.isValid()) { > > LOG(JPEG, Error) << "Failed to map FrameBuffer : " > > << strerror(frame.error()); > > diff --git a/src/android/jpeg/encoder_libjpeg.h b/src/android/jpeg/encoder_libjpeg.h > > index 45ffbd7f..ae4e1e32 100644 > > --- a/src/android/jpeg/encoder_libjpeg.h > > +++ b/src/android/jpeg/encoder_libjpeg.h > > @@ -22,7 +22,7 @@ public: > > ~EncoderLibJpeg(); > > > > int configure(const libcamera::StreamConfiguration &cfg) override; > > - int encode(const libcamera::FrameBuffer &source, > > + int encode(const libcamera::FrameBuffer *source, > > libcamera::Span<uint8_t> destination, > > libcamera::Span<const uint8_t> exifData, > > unsigned int quality) override; > > diff --git a/src/android/jpeg/post_processor_jpeg.cpp b/src/android/jpeg/post_processor_jpeg.cpp > > index ef2d98cc..cb45f86b 100644 > > --- a/src/android/jpeg/post_processor_jpeg.cpp > > +++ b/src/android/jpeg/post_processor_jpeg.cpp > > @@ -50,7 +50,7 @@ int PostProcessorJpeg::configure(const StreamConfiguration &inCfg, > > return encoder_->configure(inCfg); > > } > > > > -void PostProcessorJpeg::generateThumbnail(const FrameBuffer &source, > > +void PostProcessorJpeg::generateThumbnail(const FrameBuffer *source, > > const Size &targetSize, > > unsigned int quality, > > std::vector<unsigned char> *thumbnail) > > @@ -97,7 +97,7 @@ void PostProcessorJpeg::generateThumbnail(const FrameBuffer &source, > > } > > } > > > > -int PostProcessorJpeg::process(const FrameBuffer &source, > > +int PostProcessorJpeg::process(const FrameBuffer *source, > > CameraBuffer *destination, > > const CameraMetadata &requestMetadata, > > CameraMetadata *resultMetadata) > > diff --git a/src/android/jpeg/post_processor_jpeg.h b/src/android/jpeg/post_processor_jpeg.h > > index 6fd31022..c4b2e9ef 100644 > > --- a/src/android/jpeg/post_processor_jpeg.h > > +++ b/src/android/jpeg/post_processor_jpeg.h > > @@ -22,13 +22,13 @@ public: > > > > int configure(const libcamera::StreamConfiguration &incfg, > > const libcamera::StreamConfiguration &outcfg) override; > > - int process(const libcamera::FrameBuffer &source, > > + int process(const libcamera::FrameBuffer *source, > > CameraBuffer *destination, > > const CameraMetadata &requestMetadata, > > CameraMetadata *resultMetadata) override; > > > > private: > > - void generateThumbnail(const libcamera::FrameBuffer &source, > > + void generateThumbnail(const libcamera::FrameBuffer *source, > > const libcamera::Size &targetSize, > > unsigned int quality, > > std::vector<unsigned char> *thumbnail); > > diff --git a/src/android/jpeg/thumbnailer.cpp b/src/android/jpeg/thumbnailer.cpp > > index 1fab8072..ffac6a15 100644 > > --- a/src/android/jpeg/thumbnailer.cpp > > +++ b/src/android/jpeg/thumbnailer.cpp > > @@ -37,11 +37,11 @@ void Thumbnailer::configure(const Size &sourceSize, PixelFormat pixelFormat) > > valid_ = true; > > } > > > > -void Thumbnailer::createThumbnail(const FrameBuffer &source, > > +void Thumbnailer::createThumbnail(const FrameBuffer *source, > > const Size &targetSize, > > std::vector<unsigned char> *destination) > > { > > - MappedFrameBuffer frame(&source, MappedFrameBuffer::MapFlag::Read); > > + MappedFrameBuffer frame(source, MappedFrameBuffer::MapFlag::Read); > > if (!frame.isValid()) { > > LOG(Thumbnailer, Error) > > << "Failed to map FrameBuffer : " > > diff --git a/src/android/jpeg/thumbnailer.h b/src/android/jpeg/thumbnailer.h > > index 4d086c49..0f3caf40 100644 > > --- a/src/android/jpeg/thumbnailer.h > > +++ b/src/android/jpeg/thumbnailer.h > > @@ -19,7 +19,7 @@ public: > > > > void configure(const libcamera::Size &sourceSize, > > libcamera::PixelFormat pixelFormat); > > - void createThumbnail(const libcamera::FrameBuffer &source, > > + void createThumbnail(const libcamera::FrameBuffer *source, > > const libcamera::Size &targetSize, > > std::vector<unsigned char> *dest); > > const libcamera::PixelFormat &pixelFormat() const { return pixelFormat_; } > > diff --git a/src/android/post_processor.h b/src/android/post_processor.h > > index ab2b2c60..61dfb6d4 100644 > > --- a/src/android/post_processor.h > > +++ b/src/android/post_processor.h > > @@ -21,7 +21,7 @@ public: > > > > virtual int configure(const libcamera::StreamConfiguration &inCfg, > > const libcamera::StreamConfiguration &outCfg) = 0; > > - virtual int process(const libcamera::FrameBuffer &source, > > + virtual int process(const libcamera::FrameBuffer *source, > > CameraBuffer *destination, > > const CameraMetadata &requestMetadata, > > CameraMetadata *resultMetadata) = 0; > > diff --git a/src/android/yuv/post_processor_yuv.cpp b/src/android/yuv/post_processor_yuv.cpp > > index 7b3b4960..0a874886 100644 > > --- a/src/android/yuv/post_processor_yuv.cpp > > +++ b/src/android/yuv/post_processor_yuv.cpp > > @@ -49,7 +49,7 @@ int PostProcessorYuv::configure(const StreamConfiguration &inCfg, > > return 0; > > } > > > > -int PostProcessorYuv::process(const FrameBuffer &source, > > +int PostProcessorYuv::process(const FrameBuffer *source, > > CameraBuffer *destination, > > [[maybe_unused]] const CameraMetadata &requestMetadata, > > [[maybe_unused]] CameraMetadata *metadata) > > @@ -57,7 +57,7 @@ int PostProcessorYuv::process(const FrameBuffer &source, > > if (!isValidBuffers(source, *destination)) > > return -EINVAL; > > > > - const MappedFrameBuffer sourceMapped(&source, MappedFrameBuffer::MapFlag::Read); > > + const MappedFrameBuffer sourceMapped(source, MappedFrameBuffer::MapFlag::Read); > > if (!sourceMapped.isValid()) { > > LOG(YUV, Error) << "Failed to mmap camera frame buffer"; > > return -EINVAL; > > @@ -83,12 +83,12 @@ int PostProcessorYuv::process(const FrameBuffer &source, > > return 0; > > } > > > > -bool PostProcessorYuv::isValidBuffers(const FrameBuffer &source, > > +bool PostProcessorYuv::isValidBuffers(const FrameBuffer *source, > > const CameraBuffer &destination) const > > { > > - if (source.planes().size() != 2) { > > + if (source->planes().size() != 2) { > > LOG(YUV, Error) << "Invalid number of source planes: " > > - << source.planes().size(); > > + << source->planes().size(); > > return false; > > } > > if (destination.numPlanes() != 2) { > > @@ -97,12 +97,12 @@ bool PostProcessorYuv::isValidBuffers(const FrameBuffer &source, > > return false; > > } > > > > - if (source.planes()[0].length < sourceLength_[0] || > > - source.planes()[1].length < sourceLength_[1]) { > > + if (source->planes()[0].length < sourceLength_[0] || > > + source->planes()[1].length < sourceLength_[1]) { > > LOG(YUV, Error) > > << "The source planes lengths are too small, actual size: {" > > - << source.planes()[0].length << ", " > > - << source.planes()[1].length > > + << source->planes()[0].length << ", " > > + << source->planes()[1].length > > << "}, expected size: {" > > << sourceLength_[0] << ", " > > << sourceLength_[1] << "}"; > > diff --git a/src/android/yuv/post_processor_yuv.h b/src/android/yuv/post_processor_yuv.h > > index f8b1ba23..44a04113 100644 > > --- a/src/android/yuv/post_processor_yuv.h > > +++ b/src/android/yuv/post_processor_yuv.h > > @@ -20,13 +20,13 @@ public: > > > > int configure(const libcamera::StreamConfiguration &incfg, > > const libcamera::StreamConfiguration &outcfg) override; > > - int process(const libcamera::FrameBuffer &source, > > + int process(const libcamera::FrameBuffer *source, > > CameraBuffer *destination, > > const CameraMetadata &requestMetadata, > > CameraMetadata *metadata) override; > > > > private: > > - bool isValidBuffers(const libcamera::FrameBuffer &source, > > + bool isValidBuffers(const libcamera::FrameBuffer *source, > > const CameraBuffer &destination) const; > > void calculateLengths(const libcamera::StreamConfiguration &inCfg, > > const libcamera::StreamConfiguration &outCfg); > > -- > > 2.31.1 > >
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index 0562c225..cc078fe4 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -1148,7 +1148,7 @@ void CameraDevice::requestComplete(Request *request) continue; } - int ret = cameraStream->process(*src, *buffer.buffer, + int ret = cameraStream->process(src, *buffer.buffer, descriptor->settings_, resultMetadata.get()); /* diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp index 0f5ae947..0fed5382 100644 --- a/src/android/camera_stream.cpp +++ b/src/android/camera_stream.cpp @@ -98,7 +98,7 @@ int CameraStream::configure() return 0; } -int CameraStream::process(const FrameBuffer &source, +int CameraStream::process(const FrameBuffer *source, buffer_handle_t camera3Dest, const CameraMetadata &requestMetadata, CameraMetadata *resultMetadata) diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h index 2dab6c3a..5c232cb6 100644 --- a/src/android/camera_stream.h +++ b/src/android/camera_stream.h @@ -118,7 +118,7 @@ public: libcamera::Stream *stream() const; int configure(); - int process(const libcamera::FrameBuffer &source, + int process(const libcamera::FrameBuffer *source, buffer_handle_t camera3Dest, const CameraMetadata &requestMetadata, CameraMetadata *resultMetadata); diff --git a/src/android/jpeg/encoder.h b/src/android/jpeg/encoder.h index a28522f4..7b6140e7 100644 --- a/src/android/jpeg/encoder.h +++ b/src/android/jpeg/encoder.h @@ -18,7 +18,7 @@ public: virtual ~Encoder() = default; virtual int configure(const libcamera::StreamConfiguration &cfg) = 0; - virtual int encode(const libcamera::FrameBuffer &source, + virtual int encode(const libcamera::FrameBuffer *source, libcamera::Span<uint8_t> destination, libcamera::Span<const uint8_t> exifData, unsigned int quality) = 0; diff --git a/src/android/jpeg/encoder_libjpeg.cpp b/src/android/jpeg/encoder_libjpeg.cpp index 21a3b33d..3114ed4b 100644 --- a/src/android/jpeg/encoder_libjpeg.cpp +++ b/src/android/jpeg/encoder_libjpeg.cpp @@ -178,10 +178,10 @@ void EncoderLibJpeg::compressNV(const std::vector<Span<uint8_t>> &planes) } } -int EncoderLibJpeg::encode(const FrameBuffer &source, Span<uint8_t> dest, +int EncoderLibJpeg::encode(const FrameBuffer *source, Span<uint8_t> dest, Span<const uint8_t> exifData, unsigned int quality) { - MappedFrameBuffer frame(&source, MappedFrameBuffer::MapFlag::Read); + MappedFrameBuffer frame(source, MappedFrameBuffer::MapFlag::Read); if (!frame.isValid()) { LOG(JPEG, Error) << "Failed to map FrameBuffer : " << strerror(frame.error()); diff --git a/src/android/jpeg/encoder_libjpeg.h b/src/android/jpeg/encoder_libjpeg.h index 45ffbd7f..ae4e1e32 100644 --- a/src/android/jpeg/encoder_libjpeg.h +++ b/src/android/jpeg/encoder_libjpeg.h @@ -22,7 +22,7 @@ public: ~EncoderLibJpeg(); int configure(const libcamera::StreamConfiguration &cfg) override; - int encode(const libcamera::FrameBuffer &source, + int encode(const libcamera::FrameBuffer *source, libcamera::Span<uint8_t> destination, libcamera::Span<const uint8_t> exifData, unsigned int quality) override; diff --git a/src/android/jpeg/post_processor_jpeg.cpp b/src/android/jpeg/post_processor_jpeg.cpp index ef2d98cc..cb45f86b 100644 --- a/src/android/jpeg/post_processor_jpeg.cpp +++ b/src/android/jpeg/post_processor_jpeg.cpp @@ -50,7 +50,7 @@ int PostProcessorJpeg::configure(const StreamConfiguration &inCfg, return encoder_->configure(inCfg); } -void PostProcessorJpeg::generateThumbnail(const FrameBuffer &source, +void PostProcessorJpeg::generateThumbnail(const FrameBuffer *source, const Size &targetSize, unsigned int quality, std::vector<unsigned char> *thumbnail) @@ -97,7 +97,7 @@ void PostProcessorJpeg::generateThumbnail(const FrameBuffer &source, } } -int PostProcessorJpeg::process(const FrameBuffer &source, +int PostProcessorJpeg::process(const FrameBuffer *source, CameraBuffer *destination, const CameraMetadata &requestMetadata, CameraMetadata *resultMetadata) diff --git a/src/android/jpeg/post_processor_jpeg.h b/src/android/jpeg/post_processor_jpeg.h index 6fd31022..c4b2e9ef 100644 --- a/src/android/jpeg/post_processor_jpeg.h +++ b/src/android/jpeg/post_processor_jpeg.h @@ -22,13 +22,13 @@ public: int configure(const libcamera::StreamConfiguration &incfg, const libcamera::StreamConfiguration &outcfg) override; - int process(const libcamera::FrameBuffer &source, + int process(const libcamera::FrameBuffer *source, CameraBuffer *destination, const CameraMetadata &requestMetadata, CameraMetadata *resultMetadata) override; private: - void generateThumbnail(const libcamera::FrameBuffer &source, + void generateThumbnail(const libcamera::FrameBuffer *source, const libcamera::Size &targetSize, unsigned int quality, std::vector<unsigned char> *thumbnail); diff --git a/src/android/jpeg/thumbnailer.cpp b/src/android/jpeg/thumbnailer.cpp index 1fab8072..ffac6a15 100644 --- a/src/android/jpeg/thumbnailer.cpp +++ b/src/android/jpeg/thumbnailer.cpp @@ -37,11 +37,11 @@ void Thumbnailer::configure(const Size &sourceSize, PixelFormat pixelFormat) valid_ = true; } -void Thumbnailer::createThumbnail(const FrameBuffer &source, +void Thumbnailer::createThumbnail(const FrameBuffer *source, const Size &targetSize, std::vector<unsigned char> *destination) { - MappedFrameBuffer frame(&source, MappedFrameBuffer::MapFlag::Read); + MappedFrameBuffer frame(source, MappedFrameBuffer::MapFlag::Read); if (!frame.isValid()) { LOG(Thumbnailer, Error) << "Failed to map FrameBuffer : " diff --git a/src/android/jpeg/thumbnailer.h b/src/android/jpeg/thumbnailer.h index 4d086c49..0f3caf40 100644 --- a/src/android/jpeg/thumbnailer.h +++ b/src/android/jpeg/thumbnailer.h @@ -19,7 +19,7 @@ public: void configure(const libcamera::Size &sourceSize, libcamera::PixelFormat pixelFormat); - void createThumbnail(const libcamera::FrameBuffer &source, + void createThumbnail(const libcamera::FrameBuffer *source, const libcamera::Size &targetSize, std::vector<unsigned char> *dest); const libcamera::PixelFormat &pixelFormat() const { return pixelFormat_; } diff --git a/src/android/post_processor.h b/src/android/post_processor.h index ab2b2c60..61dfb6d4 100644 --- a/src/android/post_processor.h +++ b/src/android/post_processor.h @@ -21,7 +21,7 @@ public: virtual int configure(const libcamera::StreamConfiguration &inCfg, const libcamera::StreamConfiguration &outCfg) = 0; - virtual int process(const libcamera::FrameBuffer &source, + virtual int process(const libcamera::FrameBuffer *source, CameraBuffer *destination, const CameraMetadata &requestMetadata, CameraMetadata *resultMetadata) = 0; diff --git a/src/android/yuv/post_processor_yuv.cpp b/src/android/yuv/post_processor_yuv.cpp index 7b3b4960..0a874886 100644 --- a/src/android/yuv/post_processor_yuv.cpp +++ b/src/android/yuv/post_processor_yuv.cpp @@ -49,7 +49,7 @@ int PostProcessorYuv::configure(const StreamConfiguration &inCfg, return 0; } -int PostProcessorYuv::process(const FrameBuffer &source, +int PostProcessorYuv::process(const FrameBuffer *source, CameraBuffer *destination, [[maybe_unused]] const CameraMetadata &requestMetadata, [[maybe_unused]] CameraMetadata *metadata) @@ -57,7 +57,7 @@ int PostProcessorYuv::process(const FrameBuffer &source, if (!isValidBuffers(source, *destination)) return -EINVAL; - const MappedFrameBuffer sourceMapped(&source, MappedFrameBuffer::MapFlag::Read); + const MappedFrameBuffer sourceMapped(source, MappedFrameBuffer::MapFlag::Read); if (!sourceMapped.isValid()) { LOG(YUV, Error) << "Failed to mmap camera frame buffer"; return -EINVAL; @@ -83,12 +83,12 @@ int PostProcessorYuv::process(const FrameBuffer &source, return 0; } -bool PostProcessorYuv::isValidBuffers(const FrameBuffer &source, +bool PostProcessorYuv::isValidBuffers(const FrameBuffer *source, const CameraBuffer &destination) const { - if (source.planes().size() != 2) { + if (source->planes().size() != 2) { LOG(YUV, Error) << "Invalid number of source planes: " - << source.planes().size(); + << source->planes().size(); return false; } if (destination.numPlanes() != 2) { @@ -97,12 +97,12 @@ bool PostProcessorYuv::isValidBuffers(const FrameBuffer &source, return false; } - if (source.planes()[0].length < sourceLength_[0] || - source.planes()[1].length < sourceLength_[1]) { + if (source->planes()[0].length < sourceLength_[0] || + source->planes()[1].length < sourceLength_[1]) { LOG(YUV, Error) << "The source planes lengths are too small, actual size: {" - << source.planes()[0].length << ", " - << source.planes()[1].length + << source->planes()[0].length << ", " + << source->planes()[1].length << "}, expected size: {" << sourceLength_[0] << ", " << sourceLength_[1] << "}"; diff --git a/src/android/yuv/post_processor_yuv.h b/src/android/yuv/post_processor_yuv.h index f8b1ba23..44a04113 100644 --- a/src/android/yuv/post_processor_yuv.h +++ b/src/android/yuv/post_processor_yuv.h @@ -20,13 +20,13 @@ public: int configure(const libcamera::StreamConfiguration &incfg, const libcamera::StreamConfiguration &outcfg) override; - int process(const libcamera::FrameBuffer &source, + int process(const libcamera::FrameBuffer *source, CameraBuffer *destination, const CameraMetadata &requestMetadata, CameraMetadata *metadata) override; private: - bool isValidBuffers(const libcamera::FrameBuffer &source, + bool isValidBuffers(const libcamera::FrameBuffer *source, const CameraBuffer &destination) const; void calculateLengths(const libcamera::StreamConfiguration &inCfg, const libcamera::StreamConfiguration &outCfg);