summaryrefslogtreecommitdiff
path: root/src/libcamera/pipeline/rkisp1/rkisp1.cpp
diff options
context:
space:
mode:
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;
}