[libcamera-devel] [RFC 07/12] libcamera: buffer: Add dedicated container for buffer information
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Mon Nov 18 20:27:42 CET 2019
Hi Niklas,
Thank you for the patch.
On Mon, Oct 28, 2019 at 03:25:20AM +0100, Niklas Söderlund wrote:
> The Buffer object will be split in two, one containing the memory and
> one containing the information recorded from when the buffer is
> dequeued. Add a container for the later in preparation for the split.
>
> Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
> include/libcamera/buffer.h | 34 ++++++++++++++++++++++++++++++++++
This is missing documentation (hence the RFC status I suppose). I assume
you're aware of it :-)
> 1 file changed, 34 insertions(+)
>
> diff --git a/include/libcamera/buffer.h b/include/libcamera/buffer.h
> index 54c757ef7db8b5f6..c626f669040b3c04 100644
> --- a/include/libcamera/buffer.h
> +++ b/include/libcamera/buffer.h
> @@ -105,6 +105,40 @@ private:
> Stream *stream_;
> };
>
> +class BufferInfo
An alternative name could be BufferMetaData. I wanted to mention it as
that's what I envisioned when we discussed this topic a few weeks ago.
We need a really good naming scheme for the buffer-related API, and
BufferInfo may be best, let's see how it fits in the big picture.
> +{
> +public:
> + enum Status {
> + BufferSuccess,
> + BufferError,
> + BufferCancelled,
> + };
> +
> + struct PlaneInfo {
> + unsigned int bytesused;
> + };
Do you foresee more plane-specific fields in the future, or should be
drop this structures and replace planes_ with a vector of bytesused ? I
think I'm leaning a bit towards keeping it as-is, but I may change my
mind while reviewing the rest of the series.
> +
> + BufferInfo(Status status, unsigned int sequence, uint64_t timestamp,
> + const std::vector<PlaneInfo> &planes)
> + : status_(status), sequence_(sequence), timestamp_(timestamp),
> + planes_(planes)
> + {
> + }
> +
> + Status status() const { return status_; }
> + unsigned int sequence() const { return sequence_; }
> + unsigned int timestamp() const { return timestamp_; }
The return type doesn't match the timestamp_ member type.
> +
> + unsigned int planes() const { return planes_.size(); }
> + const PlaneInfo &plane(unsigned int plane) const { return planes_.at(plane); }
How about replacing those two methods with
const std::vector<PlaneInfo> &planes() const { return planes_; }
? The planes() method above is a bit ill-named, as it returns the number
of planes, and I think returning the vector will result in more flexible
code for the caller.
> +
> +private:
> + Status status_;
> + unsigned int sequence_;
> + uint64_t timestamp_;
Should this be a std::chrono type instead ?
> + std::vector<PlaneInfo> planes_;
> +};
> +
> } /* namespace libcamera */
>
> #endif /* __LIBCAMERA_BUFFER_H__ */
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list