summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Documentation/guides/pipeline-handler.rst4
-rw-r--r--include/libcamera/internal/pipeline_handler.h7
-rw-r--r--src/libcamera/camera.cpp2
-rw-r--r--src/libcamera/pipeline/ipu3/ipu3.cpp8
-rw-r--r--src/libcamera/pipeline/raspberrypi/raspberrypi.cpp8
-rw-r--r--src/libcamera/pipeline/rkisp1/rkisp1.cpp5
-rw-r--r--src/libcamera/pipeline/simple/simple.cpp12
-rw-r--r--src/libcamera/pipeline/uvcvideo/uvcvideo.cpp4
-rw-r--r--src/libcamera/pipeline/vimc/vimc.cpp4
-rw-r--r--src/libcamera/pipeline_handler.cpp16
10 files changed, 34 insertions, 36 deletions
diff --git a/Documentation/guides/pipeline-handler.rst b/Documentation/guides/pipeline-handler.rst
index 63275a12..f4a31d3c 100644
--- a/Documentation/guides/pipeline-handler.rst
+++ b/Documentation/guides/pipeline-handler.rst
@@ -1421,8 +1421,8 @@ code-base.
{
Request *request = buffer->request();
- pipe_->completeBuffer(camera_, request, buffer);
- pipe_->completeRequest(camera_, request);
+ pipe_->completeBuffer(request, buffer);
+ pipe_->completeRequest(request);
}
Testing a pipeline handler
diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h
index bd3c4a81..5f9a26be 100644
--- a/include/libcamera/internal/pipeline_handler.h
+++ b/include/libcamera/internal/pipeline_handler.h
@@ -81,11 +81,10 @@ public:
virtual int start(Camera *camera, ControlList *controls) = 0;
virtual void stop(Camera *camera) = 0;
- int queueRequest(Camera *camera, Request *request);
+ int queueRequest(Request *request);
- bool completeBuffer(Camera *camera, Request *request,
- FrameBuffer *buffer);
- void completeRequest(Camera *camera, Request *request);
+ bool completeBuffer(Request *request, FrameBuffer *buffer);
+ void completeRequest(Request *request);
const char *name() const { return name_; }
diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp
index c1de1fee..d9b81787 100644
--- a/src/libcamera/camera.cpp
+++ b/src/libcamera/camera.cpp
@@ -997,7 +997,7 @@ int Camera::queueRequest(Request *request)
}
return d->pipe_->invokeMethod(&PipelineHandler::queueRequest,
- ConnectionTypeQueued, this, request);
+ ConnectionTypeQueued, request);
}
/**
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index 8a1918d5..f1151733 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -836,13 +836,13 @@ void IPU3CameraData::imguOutputBufferReady(FrameBuffer *buffer)
{
Request *request = buffer->request();
- if (!pipe_->completeBuffer(camera_, request, buffer))
+ if (!pipe_->completeBuffer(request, buffer))
/* Request not completed yet, return here. */
return;
/* Mark the request as complete. */
request->metadata().set(controls::draft::PipelineDepth, 3);
- pipe_->completeRequest(camera_, request);
+ pipe_->completeRequest(request);
}
/**
@@ -865,10 +865,10 @@ void IPU3CameraData::cio2BufferReady(FrameBuffer *buffer)
* now as there's no need for ImgU processing.
*/
if (request->findBuffer(&rawStream_)) {
- bool isComplete = pipe_->completeBuffer(camera_, request, buffer);
+ bool isComplete = pipe_->completeBuffer(request, buffer);
if (isComplete) {
request->metadata().set(controls::draft::PipelineDepth, 2);
- pipe_->completeRequest(camera_, request);
+ pipe_->completeRequest(request);
return;
}
}
diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
index 7a5f5881..f121328e 100644
--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
@@ -1507,10 +1507,10 @@ void RPiCameraData::clearIncompleteRequests()
* request? If not, do so now.
*/
if (buffer && buffer->request())
- pipe_->completeBuffer(camera_, request, buffer);
+ pipe_->completeBuffer(request, buffer);
}
- pipe_->completeRequest(camera_, request);
+ pipe_->completeRequest(request);
requestQueue_.pop_front();
}
}
@@ -1534,7 +1534,7 @@ void RPiCameraData::handleStreamBuffer(FrameBuffer *buffer, RPi::Stream *stream)
* Tag the buffer as completed, returning it to the
* application.
*/
- pipe_->completeBuffer(camera_, request, buffer);
+ pipe_->completeBuffer(request, buffer);
} else {
/*
* This buffer was not part of the Request, or there is no
@@ -1597,7 +1597,7 @@ void RPiCameraData::checkRequestCompleted()
if (state_ != State::IpaComplete)
return;
- pipe_->completeRequest(camera_, request);
+ pipe_->completeRequest(request);
requestQueue_.pop_front();
requestCompleted = true;
}
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 021d0ffe..5ce37feb 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -1135,15 +1135,14 @@ void PipelineHandlerRkISP1::tryCompleteRequest(Request *request)
data->frameInfo_.destroy(info->frame);
- completeRequest(activeCamera_, request);
+ completeRequest(request);
}
void PipelineHandlerRkISP1::bufferReady(FrameBuffer *buffer)
{
- ASSERT(activeCamera_);
Request *request = buffer->request();
- completeBuffer(activeCamera_, request, buffer);
+ completeBuffer(request, buffer);
tryCompleteRequest(request);
}
diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
index 57bfb290..23320d26 100644
--- a/src/libcamera/pipeline/simple/simple.cpp
+++ b/src/libcamera/pipeline/simple/simple.cpp
@@ -898,8 +898,8 @@ void SimplePipelineHandler::bufferReady(FrameBuffer *buffer)
}
Request *request = buffer->request();
- completeBuffer(activeCamera_, request, buffer);
- completeRequest(activeCamera_, request);
+ completeBuffer(request, buffer);
+ completeRequest(request);
return;
}
@@ -923,8 +923,8 @@ void SimplePipelineHandler::bufferReady(FrameBuffer *buffer)
/* Otherwise simply complete the request. */
Request *request = buffer->request();
- completeBuffer(activeCamera_, request, buffer);
- completeRequest(activeCamera_, request);
+ completeBuffer(request, buffer);
+ completeRequest(request);
}
void SimplePipelineHandler::converterDone(FrameBuffer *input,
@@ -935,8 +935,8 @@ void SimplePipelineHandler::converterDone(FrameBuffer *input,
/* Complete the request. */
Request *request = output->request();
- completeBuffer(activeCamera_, request, output);
- completeRequest(activeCamera_, request);
+ completeBuffer(request, output);
+ completeRequest(request);
/* Queue the input buffer back for capture. */
data->video_->queueBuffer(input);
diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
index e54f45bb..7cb310e2 100644
--- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
+++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
@@ -646,8 +646,8 @@ void UVCCameraData::bufferReady(FrameBuffer *buffer)
{
Request *request = buffer->request();
- pipe_->completeBuffer(camera_, request, buffer);
- pipe_->completeRequest(camera_, request);
+ pipe_->completeBuffer(request, buffer);
+ pipe_->completeRequest(request);
}
REGISTER_PIPELINE_HANDLER(PipelineHandlerUVC)
diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
index 8bda746f..36325ffb 100644
--- a/src/libcamera/pipeline/vimc/vimc.cpp
+++ b/src/libcamera/pipeline/vimc/vimc.cpp
@@ -519,8 +519,8 @@ void VimcCameraData::bufferReady(FrameBuffer *buffer)
{
Request *request = buffer->request();
- pipe_->completeBuffer(camera_, request, buffer);
- pipe_->completeRequest(camera_, request);
+ pipe_->completeBuffer(request, buffer);
+ pipe_->completeRequest(request);
}
REGISTER_PIPELINE_HANDLER(PipelineHandlerVimc)
diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index c75ebbd5..26d6c07d 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -376,8 +376,7 @@ const ControlList &PipelineHandler::properties(const Camera *camera) const
/**
* \fn PipelineHandler::queueRequest()
- * \brief Queue a request to the camera
- * \param[in] camera The camera to queue the request to
+ * \brief Queue a request
* \param[in] request The request to queue
*
* This method queues a capture request to the pipeline handler for processing.
@@ -392,8 +391,9 @@ const ControlList &PipelineHandler::properties(const Camera *camera) const
*
* \return 0 on success or a negative error code otherwise
*/
-int PipelineHandler::queueRequest(Camera *camera, Request *request)
+int PipelineHandler::queueRequest(Request *request)
{
+ Camera *camera = request->camera_;
CameraData *data = cameraData(camera);
data->queuedRequests_.push_back(request);
@@ -423,7 +423,6 @@ int PipelineHandler::queueRequest(Camera *camera, Request *request)
/**
* \brief Complete a buffer for a request
- * \param[in] camera The camera the request belongs to
* \param[in] request The request the buffer belongs to
* \param[in] buffer The buffer that has completed
*
@@ -439,16 +438,15 @@ int PipelineHandler::queueRequest(Camera *camera, Request *request)
* \return True if all buffers contained in the request have completed, false
* otherwise
*/
-bool PipelineHandler::completeBuffer(Camera *camera, Request *request,
- FrameBuffer *buffer)
+bool PipelineHandler::completeBuffer(Request *request, FrameBuffer *buffer)
{
+ Camera *camera = request->camera_;
camera->bufferCompleted.emit(request, buffer);
return request->completeBuffer(buffer);
}
/**
* \brief Signal request completion
- * \param[in] camera The camera that the request belongs to
* \param[in] request The request that has completed
*
* The pipeline handler shall call this method to notify the \a camera that the
@@ -461,8 +459,10 @@ bool PipelineHandler::completeBuffer(Camera *camera, Request *request,
*
* \context This function shall be called from the CameraManager thread.
*/
-void PipelineHandler::completeRequest(Camera *camera, Request *request)
+void PipelineHandler::completeRequest(Request *request)
{
+ Camera *camera = request->camera_;
+
request->complete();
CameraData *data = cameraData(camera);