[libcamera-devel] [PATCH] file_sink.cpp: Avoid dangling-reference
Barnabás Pőcze
pobrn at protonmail.com
Tue Jan 24 17:29:17 CET 2023
Hi
On 2023. január 24., kedd 10:22, Khem Raj via libcamera-devel <libcamera-devel at lists.libcamera.org> wrote:
> Fixes following errors with gcc-13
>
> ../git/src/cam/file_sink.cpp:92:45: error: possibly dangling reference to a temporary [-Werror=dangling-reference]
> 92 | const FrameMetadata::Plane &meta = buffer->metadata().planes()[i];
> | ^~~~
> ../git/src/cam/file_sink.cpp:92:81: note: the temporary was destroyed at the end of the full expression '(& buffer->libcamera::FrameBuffer::metadata())->libcamera::FrameMetadata::planes().libcamera::Span<const libcamera::FrameMetadata::Plane>::operator[](i)'
> 92 | const FrameMetadata::Plane &meta = buffer->metadata().planes()[i];
> | ^
> cc1plus: all warnings being treated as errors
I think this warning is a false-positive. See a similar example here: https://gcc.godbolt.org/z/rf8v4j6YG
This should probably be reported to the GCC bug tracker if that has not already been done.
>
> Signed-off-by: Khem Raj <raj.khem at gmail.com>
> ---
> src/cam/file_sink.cpp | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/src/cam/file_sink.cpp b/src/cam/file_sink.cpp
> index 45213d4a..897c4b37 100644
> --- a/src/cam/file_sink.cpp
> +++ b/src/cam/file_sink.cpp
> @@ -89,13 +89,13 @@ void FileSink::writeBuffer(const Stream *stream, FrameBuffer *buffer)
> Image *image = mappedBuffers_[buffer].get();
>
> for (unsigned int i = 0; i < buffer->planes().size(); ++i) {
> - const FrameMetadata::Plane &meta = buffer->metadata().planes()[i];
> + unsigned int bytesused = buffer->metadata().planes()[i].bytesused;
>
> Span<uint8_t> data = image->data(i);
> - unsigned int length = std::min<unsigned int>(meta.bytesused, data.size());
> + unsigned int length = std::min<unsigned int>(bytesused, data.size());
>
> - if (meta.bytesused > data.size())
> - std::cerr << "payload size " << meta.bytesused
> + if (bytesused > data.size())
> + std::cerr << "payload size " << bytesused
> << " larger than plane size " << data.size()
> << std::endl;
>
> --
> 2.39.1
>
>
Regards,
Barnabás Pőcze
More information about the libcamera-devel
mailing list