@@ -8,7 +8,6 @@
#pragma once
#include <stdint.h>
-#include <unordered_set>
#include <libcamera/base/event_notifier.h>
@@ -28,7 +27,7 @@ public:
~Private();
Camera *camera() const { return camera_; }
- bool hasPendingBuffers() const { return !pending_.empty(); }
+ bool hasPendingBuffers() const { return pending_ > 0; }
ControlList &metadata() { return metadata_; }
@@ -47,7 +46,7 @@ private:
bool cancelled_;
uint32_t sequence_ = 0;
- std::unordered_set<FrameBuffer *> pending_;
+ size_t pending_ = 0;
ControlList metadata_;
};
@@ -108,8 +108,8 @@ bool Request::Private::completeBuffer(FrameBuffer *buffer)
ASSERT(request->findBuffer(buffer->_d()->stream_) == buffer);
- int ret = pending_.erase(buffer);
- ASSERT(ret == 1);
+ ASSERT(pending_ > 0);
+ pending_ -= 1;
buffer->_d()->setRequest(nullptr);
buffer->_d()->stream_ = nullptr;
@@ -143,17 +143,8 @@ void Request::Private::complete()
void Request::Private::doCancelRequest()
{
- Request *request = _o<Request>();
-
- for (FrameBuffer *buffer : pending_) {
- buffer->_d()->cancel();
- camera_->bufferCompleted.emit(request, buffer);
- buffer->_d()->setRequest(nullptr);
- buffer->_d()->stream_ = nullptr;
- }
-
cancelled_ = true;
- pending_.clear();
+ pending_ = 0;
}
/**
@@ -184,7 +175,7 @@ void Request::Private::reset()
{
sequence_ = 0;
cancelled_ = false;
- pending_.clear();
+ pending_ = 0;
}
#endif /* __DOXYGEN_PUBLIC__ */
@@ -426,7 +417,7 @@ std::ostream &operator<<(std::ostream &out, const Request &r)
/* Example Output: Request(55:P:1/2:6523524) */
out << "Request(" << r.sequence() << ":" << statuses[r.status()] << ":"
- << r._d()->pending_.size() << "/" << r.buffers().size() << ":"
+ << r._d()->pending_ << "/" << r.buffers().size() << ":"
<< r.cookie() << ")";
return out;
With the split of requests and buffers, a request will have no information about which specific buffers are pending for itself, so make the previous set member into a simple integer counter. Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> --- include/libcamera/internal/request.h | 5 ++--- src/libcamera/request.cpp | 19 +++++-------------- 2 files changed, 7 insertions(+), 17 deletions(-)