| Message ID | 20260618123844.656396-23-barnabas.pocze@ideasonboard.com |
|---|---|
| State | Superseded |
| Headers | show |
| Series |
|
| Related | show |
Acked-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> On Thu, Jun 18, 2026 at 02:38:39PM +0200, Barnabás Pőcze wrote: > Convert the `completedBuffers_` container to store the items directly > and not via an `std::unique_ptr`. > > Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> > --- > src/v4l2/v4l2_camera.cpp | 11 ++++------- > src/v4l2/v4l2_camera.h | 2 +- > 2 files changed, 5 insertions(+), 8 deletions(-) > > diff --git a/src/v4l2/v4l2_camera.cpp b/src/v4l2/v4l2_camera.cpp > index 412ab4ea67..648578c22b 100644 > --- a/src/v4l2/v4l2_camera.cpp > +++ b/src/v4l2/v4l2_camera.cpp > @@ -70,11 +70,10 @@ void V4L2Camera::unbind() > > std::vector<V4L2Camera::Buffer> V4L2Camera::completedBuffers() > { > - std::vector<Buffer> v; > - > MutexLocker lock(bufferLock_); > - for (std::unique_ptr<Buffer> &metadata : completedBuffers_) > - v.push_back(*metadata.get()); > + std::vector v(std::move_iterator(completedBuffers_.begin()), > + std::move_iterator(completedBuffers_.end())); > + > completedBuffers_.clear(); > > return v; > @@ -88,9 +87,7 @@ void V4L2Camera::requestComplete(Request *request) > /* We only have one stream at the moment. */ > bufferLock_.lock(); > FrameBuffer *buffer = request->buffers().begin()->second; > - std::unique_ptr<Buffer> metadata = > - std::make_unique<Buffer>(request->cookie(), buffer->metadata()); > - completedBuffers_.push_back(std::move(metadata)); > + completedBuffers_.emplace_back(request->cookie(), buffer->metadata()); > bufferLock_.unlock(); > > uint64_t data = 1; > diff --git a/src/v4l2/v4l2_camera.h b/src/v4l2/v4l2_camera.h > index 3d09ae7d60..1528f9aad8 100644 > --- a/src/v4l2/v4l2_camera.h > +++ b/src/v4l2/v4l2_camera.h > @@ -85,7 +85,7 @@ private: > std::vector<std::unique_ptr<libcamera::Request>> requestPool_; > > std::deque<libcamera::Request *> pendingRequests_; > - std::deque<std::unique_ptr<Buffer>> completedBuffers_ > + std::deque<Buffer> completedBuffers_ > LIBCAMERA_TSA_GUARDED_BY(bufferLock_); > > int efd_; > -- > 2.54.0 >
On Thu, Jun 18, 2026 at 02:38:39PM +0200, Barnabás Pőcze wrote: > Convert the `completedBuffers_` container to store the items directly > and not via an `std::unique_ptr`. > > Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> > --- > src/v4l2/v4l2_camera.cpp | 11 ++++------- > src/v4l2/v4l2_camera.h | 2 +- > 2 files changed, 5 insertions(+), 8 deletions(-) > > diff --git a/src/v4l2/v4l2_camera.cpp b/src/v4l2/v4l2_camera.cpp > index 412ab4ea67..648578c22b 100644 > --- a/src/v4l2/v4l2_camera.cpp > +++ b/src/v4l2/v4l2_camera.cpp > @@ -70,11 +70,10 @@ void V4L2Camera::unbind() > > std::vector<V4L2Camera::Buffer> V4L2Camera::completedBuffers() > { > - std::vector<Buffer> v; > - > MutexLocker lock(bufferLock_); > - for (std::unique_ptr<Buffer> &metadata : completedBuffers_) > - v.push_back(*metadata.get()); > + std::vector v(std::move_iterator(completedBuffers_.begin()), std::vector<Buffer> is more readable for me. > + std::move_iterator(completedBuffers_.end())); Today I learnt about std::move_iterator. Thank you. Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > + > completedBuffers_.clear(); > > return v; > @@ -88,9 +87,7 @@ void V4L2Camera::requestComplete(Request *request) > /* We only have one stream at the moment. */ > bufferLock_.lock(); > FrameBuffer *buffer = request->buffers().begin()->second; > - std::unique_ptr<Buffer> metadata = > - std::make_unique<Buffer>(request->cookie(), buffer->metadata()); > - completedBuffers_.push_back(std::move(metadata)); > + completedBuffers_.emplace_back(request->cookie(), buffer->metadata()); > bufferLock_.unlock(); > > uint64_t data = 1; > diff --git a/src/v4l2/v4l2_camera.h b/src/v4l2/v4l2_camera.h > index 3d09ae7d60..1528f9aad8 100644 > --- a/src/v4l2/v4l2_camera.h > +++ b/src/v4l2/v4l2_camera.h > @@ -85,7 +85,7 @@ private: > std::vector<std::unique_ptr<libcamera::Request>> requestPool_; > > std::deque<libcamera::Request *> pendingRequests_; > - std::deque<std::unique_ptr<Buffer>> completedBuffers_ > + std::deque<Buffer> completedBuffers_ > LIBCAMERA_TSA_GUARDED_BY(bufferLock_); > > int efd_;
Quoting Barnabás Pőcze (2026-06-18 21:38:39) > Convert the `completedBuffers_` container to store the items directly > and not via an `std::unique_ptr`. > > Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> > --- > src/v4l2/v4l2_camera.cpp | 11 ++++------- > src/v4l2/v4l2_camera.h | 2 +- > 2 files changed, 5 insertions(+), 8 deletions(-) > > diff --git a/src/v4l2/v4l2_camera.cpp b/src/v4l2/v4l2_camera.cpp > index 412ab4ea67..648578c22b 100644 > --- a/src/v4l2/v4l2_camera.cpp > +++ b/src/v4l2/v4l2_camera.cpp > @@ -70,11 +70,10 @@ void V4L2Camera::unbind() > > std::vector<V4L2Camera::Buffer> V4L2Camera::completedBuffers() > { > - std::vector<Buffer> v; > - > MutexLocker lock(bufferLock_); > - for (std::unique_ptr<Buffer> &metadata : completedBuffers_) > - v.push_back(*metadata.get()); > + std::vector v(std::move_iterator(completedBuffers_.begin()), > + std::move_iterator(completedBuffers_.end())); > + > completedBuffers_.clear(); > > return v; > @@ -88,9 +87,7 @@ void V4L2Camera::requestComplete(Request *request) > /* We only have one stream at the moment. */ > bufferLock_.lock(); > FrameBuffer *buffer = request->buffers().begin()->second; > - std::unique_ptr<Buffer> metadata = > - std::make_unique<Buffer>(request->cookie(), buffer->metadata()); > - completedBuffers_.push_back(std::move(metadata)); > + completedBuffers_.emplace_back(request->cookie(), buffer->metadata()); > bufferLock_.unlock(); > > uint64_t data = 1; > diff --git a/src/v4l2/v4l2_camera.h b/src/v4l2/v4l2_camera.h > index 3d09ae7d60..1528f9aad8 100644 > --- a/src/v4l2/v4l2_camera.h > +++ b/src/v4l2/v4l2_camera.h > @@ -85,7 +85,7 @@ private: > std::vector<std::unique_ptr<libcamera::Request>> requestPool_; > > std::deque<libcamera::Request *> pendingRequests_; > - std::deque<std::unique_ptr<Buffer>> completedBuffers_ > + std::deque<Buffer> completedBuffers_ > LIBCAMERA_TSA_GUARDED_BY(bufferLock_); > > int efd_; > -- > 2.54.0 >
diff --git a/src/v4l2/v4l2_camera.cpp b/src/v4l2/v4l2_camera.cpp index 412ab4ea67..648578c22b 100644 --- a/src/v4l2/v4l2_camera.cpp +++ b/src/v4l2/v4l2_camera.cpp @@ -70,11 +70,10 @@ void V4L2Camera::unbind() std::vector<V4L2Camera::Buffer> V4L2Camera::completedBuffers() { - std::vector<Buffer> v; - MutexLocker lock(bufferLock_); - for (std::unique_ptr<Buffer> &metadata : completedBuffers_) - v.push_back(*metadata.get()); + std::vector v(std::move_iterator(completedBuffers_.begin()), + std::move_iterator(completedBuffers_.end())); + completedBuffers_.clear(); return v; @@ -88,9 +87,7 @@ void V4L2Camera::requestComplete(Request *request) /* We only have one stream at the moment. */ bufferLock_.lock(); FrameBuffer *buffer = request->buffers().begin()->second; - std::unique_ptr<Buffer> metadata = - std::make_unique<Buffer>(request->cookie(), buffer->metadata()); - completedBuffers_.push_back(std::move(metadata)); + completedBuffers_.emplace_back(request->cookie(), buffer->metadata()); bufferLock_.unlock(); uint64_t data = 1; diff --git a/src/v4l2/v4l2_camera.h b/src/v4l2/v4l2_camera.h index 3d09ae7d60..1528f9aad8 100644 --- a/src/v4l2/v4l2_camera.h +++ b/src/v4l2/v4l2_camera.h @@ -85,7 +85,7 @@ private: std::vector<std::unique_ptr<libcamera::Request>> requestPool_; std::deque<libcamera::Request *> pendingRequests_; - std::deque<std::unique_ptr<Buffer>> completedBuffers_ + std::deque<Buffer> completedBuffers_ LIBCAMERA_TSA_GUARDED_BY(bufferLock_); int efd_;
Convert the `completedBuffers_` container to store the items directly and not via an `std::unique_ptr`. Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> --- src/v4l2/v4l2_camera.cpp | 11 ++++------- src/v4l2/v4l2_camera.h | 2 +- 2 files changed, 5 insertions(+), 8 deletions(-)