libcamera: pipeline_handler: Fold buffer management with start/stop

There's no need anymore to have the Camera object control how and when
pipeline handlers allocate and free the buffers for the
application-facing video devices. Fold those operations, currently
performed by importFrameBuffers() and freeFrameBuffers(), into the
start() and stop() functions. This simplifies the pipeline handler API,
its implementation, and the implementation of the Camera class.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
This commit is contained in:
Laurent Pinchart
2020-03-14 16:14:27 +02:00
parent 9da27d5d84
commit 33fedea818
7 changed files with 105 additions and 179 deletions
+14 -18
View File
@@ -83,8 +83,6 @@ public:
int exportFrameBuffers(Camera *camera, Stream *stream,
std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;
int importFrameBuffers(Camera *camera, Stream *stream) override;
void freeFrameBuffers(Camera *camera, Stream *stream) override;
int start(Camera *camera) override;
void stop(Camera *camera) override;
@@ -267,31 +265,29 @@ int PipelineHandlerVimc::exportFrameBuffers(Camera *camera, Stream *stream,
return data->video_->exportBuffers(count, buffers);
}
int PipelineHandlerVimc::importFrameBuffers(Camera *camera, Stream *stream)
{
VimcCameraData *data = cameraData(camera);
unsigned int count = stream->configuration().bufferCount;
return data->video_->importBuffers(count);
}
void PipelineHandlerVimc::freeFrameBuffers(Camera *camera, Stream *stream)
{
VimcCameraData *data = cameraData(camera);
data->video_->releaseBuffers();
}
int PipelineHandlerVimc::start(Camera *camera)
{
VimcCameraData *data = cameraData(camera);
return data->video_->streamOn();
unsigned int count = data->stream_.configuration().bufferCount;
int ret = data->video_->importBuffers(count);
if (ret < 0)
return ret;
ret = data->video_->streamOn();
if (ret < 0) {
data->video_->releaseBuffers();
return ret;
}
return 0;
}
void PipelineHandlerVimc::stop(Camera *camera)
{
VimcCameraData *data = cameraData(camera);
data->video_->streamOff();
data->video_->releaseBuffers();
}
int PipelineHandlerVimc::processControls(VimcCameraData *data, Request *request)