pipelines: Use lambda functions to factor out buffer mapping code
Multiple pipeline handlers duplicate code related to mapping params and stats buffers to IPA modules. Factor out the code to lambda functions to share it between the two buffer types. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
@@ -678,15 +678,15 @@ int PipelineHandlerIPU3::allocateBuffers(Camera *camera)
|
||||
/* Map buffers to the IPA. */
|
||||
unsigned int ipaBufferId = 1;
|
||||
|
||||
for (const std::unique_ptr<FrameBuffer> &buffer : imgu->paramBuffers_) {
|
||||
buffer->setCookie(ipaBufferId++);
|
||||
ipaBuffers_.emplace_back(buffer->cookie(), buffer->planes());
|
||||
}
|
||||
auto pushBuffers = [&](const std::vector<std::unique_ptr<FrameBuffer>> &buffers) {
|
||||
for (const std::unique_ptr<FrameBuffer> &buffer : buffers) {
|
||||
buffer->setCookie(ipaBufferId++);
|
||||
ipaBuffers_.emplace_back(buffer->cookie(), buffer->planes());
|
||||
}
|
||||
};
|
||||
|
||||
for (const std::unique_ptr<FrameBuffer> &buffer : imgu->statBuffers_) {
|
||||
buffer->setCookie(ipaBufferId++);
|
||||
ipaBuffers_.emplace_back(buffer->cookie(), buffer->planes());
|
||||
}
|
||||
pushBuffers(imgu->paramBuffers_);
|
||||
pushBuffers(imgu->statBuffers_);
|
||||
|
||||
data->ipa_->mapBuffers(ipaBuffers_);
|
||||
|
||||
|
||||
@@ -1133,27 +1133,29 @@ int PipelineHandlerMaliC55::allocateBuffers(Camera *camera)
|
||||
data->dsStream_.configuration().bufferCount,
|
||||
});
|
||||
|
||||
auto pushBuffers = [&](const std::vector<std::unique_ptr<FrameBuffer>> &buffers,
|
||||
std::queue<FrameBuffer *> &queue,
|
||||
std::vector<IPABuffer> &ipaBuffers) {
|
||||
for (const std::unique_ptr<FrameBuffer> &buffer : buffers) {
|
||||
buffer->setCookie(ipaBufferId++);
|
||||
ipaBuffers.emplace_back(buffer->cookie(), buffer->planes());
|
||||
queue.push(buffer.get());
|
||||
}
|
||||
};
|
||||
|
||||
ret = stats_->allocateBuffers(bufferCount, &statsBuffers_);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
for (std::unique_ptr<FrameBuffer> &buffer : statsBuffers_) {
|
||||
buffer->setCookie(ipaBufferId++);
|
||||
data->ipaStatBuffers_.emplace_back(buffer->cookie(),
|
||||
buffer->planes());
|
||||
availableStatsBuffers_.push(buffer.get());
|
||||
}
|
||||
pushBuffers(statsBuffers_, availableStatsBuffers_,
|
||||
data->ipaStatBuffers_);
|
||||
|
||||
ret = params_->allocateBuffers(bufferCount, ¶msBuffers_);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
for (std::unique_ptr<FrameBuffer> &buffer : paramsBuffers_) {
|
||||
buffer->setCookie(ipaBufferId++);
|
||||
data->ipaParamBuffers_.emplace_back(buffer->cookie(),
|
||||
buffer->planes());
|
||||
availableParamsBuffers_.push(buffer.get());
|
||||
}
|
||||
pushBuffers(paramsBuffers_, availableParamsBuffers_,
|
||||
data->ipaParamBuffers_);
|
||||
|
||||
if (data->ipa_) {
|
||||
data->ipa_->mapBuffers(data->ipaStatBuffers_, true);
|
||||
|
||||
@@ -1028,19 +1028,18 @@ int PipelineHandlerRkISP1::allocateBuffers(Camera *camera)
|
||||
availableMainPathBuffers_.push(buffer.get());
|
||||
}
|
||||
|
||||
for (std::unique_ptr<FrameBuffer> &buffer : paramBuffers_) {
|
||||
buffer->setCookie(ipaBufferId++);
|
||||
data->ipaBuffers_.emplace_back(buffer->cookie(),
|
||||
buffer->planes());
|
||||
availableParamBuffers_.push(buffer.get());
|
||||
}
|
||||
auto pushBuffers = [&](const std::vector<std::unique_ptr<FrameBuffer>> &buffers,
|
||||
std::queue<FrameBuffer *> &queue) {
|
||||
for (const std::unique_ptr<FrameBuffer> &buffer : buffers) {
|
||||
buffer->setCookie(ipaBufferId++);
|
||||
data->ipaBuffers_.emplace_back(buffer->cookie(),
|
||||
buffer->planes());
|
||||
queue.push(buffer.get());
|
||||
}
|
||||
};
|
||||
|
||||
for (std::unique_ptr<FrameBuffer> &buffer : statBuffers_) {
|
||||
buffer->setCookie(ipaBufferId++);
|
||||
data->ipaBuffers_.emplace_back(buffer->cookie(),
|
||||
buffer->planes());
|
||||
availableStatBuffers_.push(buffer.get());
|
||||
}
|
||||
pushBuffers(paramBuffers_, availableParamBuffers_);
|
||||
pushBuffers(statBuffers_, availableStatBuffers_);
|
||||
|
||||
data->ipa_->mapBuffers(data->ipaBuffers_);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user