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:
parent
74af791304
commit
ad64716ce9
2 changed files with 6 additions and 47 deletions
|
@ -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)
|
||||||
|
|
|
@ -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_;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue