summaryrefslogtreecommitdiff
path: root/src/libcamera/pipeline/rkisp1/rkisp1.cpp
diff options
context:
space:
mode:
authorNiklas Söderlund <niklas.soderlund@ragnatech.se>2019-11-25 13:46:57 +0100
committerNiklas Söderlund <niklas.soderlund@ragnatech.se>2020-01-12 16:10:38 +0100
commit6cd505ac89a6ee41865a2ecb32ed5f344544295d (patch)
tree68b4dc20fabb409489eb33a4c880effcb04dfa81 /src/libcamera/pipeline/rkisp1/rkisp1.cpp
parent07156a2713609e7f4b53e240167c7e460b244a71 (diff)
libcamera: pipeline: Remove explicit buffer handling
With the FrameBuffer interface in place there is no need for the Camera to call into the specific pipelines allocation and freeing of buffers as it no longer needs to be synchronized with buffer allocation by the application. Remove the function prototypes in the pipeline handler base class and fold the functionality in the pipelines start() and stop() functions where needed. A follow up patch will remove the now no-op Camera::allocateBuffers() and Camera::freeBuffers(). Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/libcamera/pipeline/rkisp1/rkisp1.cpp')
-rw-r--r--src/libcamera/pipeline/rkisp1/rkisp1.cpp24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index da6e079f..389a99cf 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -178,11 +178,6 @@ public:
int importFrameBuffers(Camera *camera, Stream *stream) override;
void freeFrameBuffers(Camera *camera, Stream *stream) override;
- int allocateBuffers(Camera *camera,
- const std::set<Stream *> &streams) override;
- int freeBuffers(Camera *camera,
- const std::set<Stream *> &streams) override;
-
int start(Camera *camera) override;
void stop(Camera *camera) override;
@@ -208,6 +203,9 @@ private:
void paramReady(FrameBuffer *buffer);
void statReady(FrameBuffer *buffer);
+ int allocateBuffers(Camera *camera);
+ int freeBuffers(Camera *camera);
+
MediaDevice *media_;
V4L2Subdevice *dphy_;
V4L2Subdevice *isp_;
@@ -675,8 +673,7 @@ void PipelineHandlerRkISP1::freeFrameBuffers(Camera *camera, Stream *stream)
video_->releaseBuffers();
}
-int PipelineHandlerRkISP1::allocateBuffers(Camera *camera,
- const std::set<Stream *> &streams)
+int PipelineHandlerRkISP1::allocateBuffers(Camera *camera)
{
RkISP1CameraData *data = cameraData(camera);
unsigned int count = 1;
@@ -720,8 +717,7 @@ error:
return ret;
}
-int PipelineHandlerRkISP1::freeBuffers(Camera *camera,
- const std::set<Stream *> &streams)
+int PipelineHandlerRkISP1::freeBuffers(Camera *camera)
{
RkISP1CameraData *data = cameraData(camera);
@@ -755,10 +751,16 @@ int PipelineHandlerRkISP1::start(Camera *camera)
RkISP1CameraData *data = cameraData(camera);
int ret;
+ /* Allocate buffers for internal pipeline usage. */
+ ret = allocateBuffers(camera);
+ if (ret)
+ return ret;
+
data->frame_ = 0;
ret = param_->streamOn();
if (ret) {
+ freeBuffers(camera);
LOG(RkISP1, Error)
<< "Failed to start parameters " << camera->name();
return ret;
@@ -767,6 +769,7 @@ int PipelineHandlerRkISP1::start(Camera *camera)
ret = stat_->streamOn();
if (ret) {
param_->streamOff();
+ freeBuffers(camera);
LOG(RkISP1, Error)
<< "Failed to start statistics " << camera->name();
return ret;
@@ -776,6 +779,7 @@ int PipelineHandlerRkISP1::start(Camera *camera)
if (ret) {
param_->streamOff();
stat_->streamOff();
+ freeBuffers(camera);
LOG(RkISP1, Error)
<< "Failed to start camera " << camera->name();
@@ -820,6 +824,8 @@ void PipelineHandlerRkISP1::stop(Camera *camera)
data->timeline_.reset();
+ freeBuffers(camera);
+
activeCamera_ = nullptr;
}