pipeline: rpi: Simplify buffer id generation

Replace the buffer id generation in RPi::Stream with a simple integer
counter since ids don't get recycled any more.

Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Naushir Patuck 2023-07-25 09:55:40 +01:00
parent 74af791304
commit ad64716ce9
2 changed files with 6 additions and 47 deletions

View file

@ -56,7 +56,7 @@ void Stream::resetBuffers()
void Stream::setExportedBuffers(std::vector<std::unique_ptr<FrameBuffer>> *buffers) void Stream::setExportedBuffers(std::vector<std::unique_ptr<FrameBuffer>> *buffers)
{ {
for (auto const &buffer : *buffers) for (auto const &buffer : *buffers)
bufferMap_.emplace(id_.get(), buffer.get()); bufferMap_.emplace(++id_, buffer.get());
} }
const BufferMap &Stream::getBuffers() const const BufferMap &Stream::getBuffers() const
@ -81,7 +81,7 @@ unsigned int Stream::getBufferId(FrameBuffer *buffer) const
void Stream::setExportedBuffer(FrameBuffer *buffer) void Stream::setExportedBuffer(FrameBuffer *buffer)
{ {
bufferMap_.emplace(id_.get(), buffer); bufferMap_.emplace(++id_, buffer);
} }
int Stream::prepareBuffers(unsigned int count) int Stream::prepareBuffers(unsigned int count)
@ -152,9 +152,6 @@ void Stream::returnBuffer(FrameBuffer *buffer)
/* Push this buffer back into the queue to be used again. */ /* Push this buffer back into the queue to be used again. */
availableBuffers_.push(buffer); availableBuffers_.push(buffer);
/* Allow the buffer id to be reused. */
id_.release(getBufferId(buffer));
/* /*
* Do we have any Request buffers that are waiting to be queued? * Do we have any Request buffers that are waiting to be queued?
* If so, do it now as availableBuffers_ will not be empty. * If so, do it now as availableBuffers_ will not be empty.
@ -213,7 +210,7 @@ void Stream::clearBuffers()
requestBuffers_ = std::queue<FrameBuffer *>{}; requestBuffers_ = std::queue<FrameBuffer *>{};
internalBuffers_.clear(); internalBuffers_.clear();
bufferMap_.clear(); bufferMap_.clear();
id_.reset(); id_ = 0;
} }
int Stream::queueToDevice(FrameBuffer *buffer) int Stream::queueToDevice(FrameBuffer *buffer)

View file

@ -54,13 +54,13 @@ public:
using StreamFlags = Flags<StreamFlag>; using StreamFlags = Flags<StreamFlag>;
Stream() Stream()
: flags_(StreamFlag::None), id_(BufferMask::MaskID) : flags_(StreamFlag::None), id_(0)
{ {
} }
Stream(const char *name, MediaEntity *dev, StreamFlags flags = StreamFlag::None) Stream(const char *name, MediaEntity *dev, StreamFlags flags = StreamFlag::None)
: flags_(flags), name_(name), : flags_(flags), name_(name),
dev_(std::make_unique<V4L2VideoDevice>(dev)), id_(BufferMask::MaskID) dev_(std::make_unique<V4L2VideoDevice>(dev)), id_(0)
{ {
} }
@ -86,44 +86,6 @@ public:
void releaseBuffers(); void releaseBuffers();
private: private:
class IdGenerator
{
public:
IdGenerator(unsigned int max)
: max_(max), id_(0)
{
}
unsigned int get()
{
unsigned int id;
if (!recycle_.empty()) {
id = recycle_.front();
recycle_.pop();
} else {
id = ++id_;
ASSERT(id_ <= max_);
}
return id;
}
void release(unsigned int id)
{
recycle_.push(id);
}
void reset()
{
id_ = 0;
recycle_ = {};
}
private:
unsigned int max_;
unsigned int id_;
std::queue<unsigned int> recycle_;
};
void clearBuffers(); void clearBuffers();
int queueToDevice(FrameBuffer *buffer); int queueToDevice(FrameBuffer *buffer);
@ -136,7 +98,7 @@ private:
std::unique_ptr<V4L2VideoDevice> dev_; std::unique_ptr<V4L2VideoDevice> dev_;
/* Tracks a unique id key for the bufferMap_ */ /* Tracks a unique id key for the bufferMap_ */
IdGenerator id_; unsigned int id_;
/* All frame buffers associated with this device stream. */ /* All frame buffers associated with this device stream. */
BufferMap bufferMap_; BufferMap bufferMap_;