@@ -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;
@@ -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(-)