libcamera: pipeline: simple: Hardcode the number of internal buffers

The number of internal buffers, used between the capture device and the
converter, doesn't need to depend on the number of buffers allocated for
the output stream of the pipeline. Hardcode it to a fixed value.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Tested-by: Phi-Bang Nguyen <pnguyen@baylibre.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Laurent Pinchart 2021-01-29 00:31:52 +02:00
parent 5d6f902504
commit 37b3064bed

View file

@ -228,6 +228,8 @@ protected:
int queueRequestDevice(Camera *camera, Request *request) override; int queueRequestDevice(Camera *camera, Request *request) override;
private: private:
static constexpr unsigned int kNumInternalBuffers = 3;
SimpleCameraData *cameraData(const Camera *camera) SimpleCameraData *cameraData(const Camera *camera)
{ {
return static_cast<SimpleCameraData *>( return static_cast<SimpleCameraData *>(
@ -700,7 +702,7 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c)
inputCfg.pixelFormat = pipeConfig->captureFormat; inputCfg.pixelFormat = pipeConfig->captureFormat;
inputCfg.size = pipeConfig->captureSize; inputCfg.size = pipeConfig->captureSize;
inputCfg.stride = captureFormat.planes[0].bpl; inputCfg.stride = captureFormat.planes[0].bpl;
inputCfg.bufferCount = cfg.bufferCount; inputCfg.bufferCount = kNumInternalBuffers;
ret = converter_->configure(inputCfg, { cfg }); ret = converter_->configure(inputCfg, { cfg });
if (ret < 0) { if (ret < 0) {
@ -737,13 +739,20 @@ int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] const ControlL
{ {
SimpleCameraData *data = cameraData(camera); SimpleCameraData *data = cameraData(camera);
V4L2VideoDevice *video = data->video_; V4L2VideoDevice *video = data->video_;
unsigned int count = data->streams_[0].configuration().bufferCount;
int ret; int ret;
if (data->useConverter_) if (data->useConverter_) {
ret = video->allocateBuffers(count, &data->converterBuffers_); /*
else * When using the converter allocate a fixed number of internal
ret = video->importBuffers(count); * buffers.
*/
ret = video->allocateBuffers(kNumInternalBuffers,
&data->converterBuffers_);
} else {
/* Otherwise, prepare for using buffers from the only stream. */
Stream *stream = &data->streams_[0];
ret = video->importBuffers(stream->configuration().bufferCount);
}
if (ret < 0) if (ret < 0)
return ret; return ret;