diff options
-rw-r--r-- | Documentation/guides/pipeline-handler.rst | 4 | ||||
-rw-r--r-- | include/libcamera/internal/pipeline_handler.h | 7 | ||||
-rw-r--r-- | src/libcamera/camera.cpp | 2 | ||||
-rw-r--r-- | src/libcamera/pipeline/ipu3/ipu3.cpp | 8 | ||||
-rw-r--r-- | src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 8 | ||||
-rw-r--r-- | src/libcamera/pipeline/rkisp1/rkisp1.cpp | 5 | ||||
-rw-r--r-- | src/libcamera/pipeline/simple/simple.cpp | 12 | ||||
-rw-r--r-- | src/libcamera/pipeline/uvcvideo/uvcvideo.cpp | 4 | ||||
-rw-r--r-- | src/libcamera/pipeline/vimc/vimc.cpp | 4 | ||||
-rw-r--r-- | src/libcamera/pipeline_handler.cpp | 16 |
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); |