libcamera: pipeline_handler: Remove Camera argument from request handling
There is no need to pass the Camera pointer to queueRequest(), completeBuffer() and completeRequest() as the Request also passed contains the same information. Remove the Camera argument to avoid situations where the information in the Request and the argument differ. There is no functional change and no public API change as the interface is only used between the Camera and PipelineHandler. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
67bf6bc459
commit
8992b3ffbb
10 changed files with 34 additions and 36 deletions
|
@ -1421,8 +1421,8 @@ code-base.
|
||||||
{
|
{
|
||||||
Request *request = buffer->request();
|
Request *request = buffer->request();
|
||||||
|
|
||||||
pipe_->completeBuffer(camera_, request, buffer);
|
pipe_->completeBuffer(request, buffer);
|
||||||
pipe_->completeRequest(camera_, request);
|
pipe_->completeRequest(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
Testing a pipeline handler
|
Testing a pipeline handler
|
||||||
|
|
|
@ -81,11 +81,10 @@ public:
|
||||||
virtual int start(Camera *camera, ControlList *controls) = 0;
|
virtual int start(Camera *camera, ControlList *controls) = 0;
|
||||||
virtual void stop(Camera *camera) = 0;
|
virtual void stop(Camera *camera) = 0;
|
||||||
|
|
||||||
int queueRequest(Camera *camera, Request *request);
|
int queueRequest(Request *request);
|
||||||
|
|
||||||
bool completeBuffer(Camera *camera, Request *request,
|
bool completeBuffer(Request *request, FrameBuffer *buffer);
|
||||||
FrameBuffer *buffer);
|
void completeRequest(Request *request);
|
||||||
void completeRequest(Camera *camera, Request *request);
|
|
||||||
|
|
||||||
const char *name() const { return name_; }
|
const char *name() const { return name_; }
|
||||||
|
|
||||||
|
|
|
@ -997,7 +997,7 @@ int Camera::queueRequest(Request *request)
|
||||||
}
|
}
|
||||||
|
|
||||||
return d->pipe_->invokeMethod(&PipelineHandler::queueRequest,
|
return d->pipe_->invokeMethod(&PipelineHandler::queueRequest,
|
||||||
ConnectionTypeQueued, this, request);
|
ConnectionTypeQueued, request);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -836,13 +836,13 @@ void IPU3CameraData::imguOutputBufferReady(FrameBuffer *buffer)
|
||||||
{
|
{
|
||||||
Request *request = buffer->request();
|
Request *request = buffer->request();
|
||||||
|
|
||||||
if (!pipe_->completeBuffer(camera_, request, buffer))
|
if (!pipe_->completeBuffer(request, buffer))
|
||||||
/* Request not completed yet, return here. */
|
/* Request not completed yet, return here. */
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Mark the request as complete. */
|
/* Mark the request as complete. */
|
||||||
request->metadata().set(controls::draft::PipelineDepth, 3);
|
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.
|
* now as there's no need for ImgU processing.
|
||||||
*/
|
*/
|
||||||
if (request->findBuffer(&rawStream_)) {
|
if (request->findBuffer(&rawStream_)) {
|
||||||
bool isComplete = pipe_->completeBuffer(camera_, request, buffer);
|
bool isComplete = pipe_->completeBuffer(request, buffer);
|
||||||
if (isComplete) {
|
if (isComplete) {
|
||||||
request->metadata().set(controls::draft::PipelineDepth, 2);
|
request->metadata().set(controls::draft::PipelineDepth, 2);
|
||||||
pipe_->completeRequest(camera_, request);
|
pipe_->completeRequest(request);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1507,10 +1507,10 @@ void RPiCameraData::clearIncompleteRequests()
|
||||||
* request? If not, do so now.
|
* request? If not, do so now.
|
||||||
*/
|
*/
|
||||||
if (buffer && buffer->request())
|
if (buffer && buffer->request())
|
||||||
pipe_->completeBuffer(camera_, request, buffer);
|
pipe_->completeBuffer(request, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
pipe_->completeRequest(camera_, request);
|
pipe_->completeRequest(request);
|
||||||
requestQueue_.pop_front();
|
requestQueue_.pop_front();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1534,7 +1534,7 @@ void RPiCameraData::handleStreamBuffer(FrameBuffer *buffer, RPi::Stream *stream)
|
||||||
* Tag the buffer as completed, returning it to the
|
* Tag the buffer as completed, returning it to the
|
||||||
* application.
|
* application.
|
||||||
*/
|
*/
|
||||||
pipe_->completeBuffer(camera_, request, buffer);
|
pipe_->completeBuffer(request, buffer);
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* This buffer was not part of the Request, or there is no
|
* This buffer was not part of the Request, or there is no
|
||||||
|
@ -1597,7 +1597,7 @@ void RPiCameraData::checkRequestCompleted()
|
||||||
if (state_ != State::IpaComplete)
|
if (state_ != State::IpaComplete)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
pipe_->completeRequest(camera_, request);
|
pipe_->completeRequest(request);
|
||||||
requestQueue_.pop_front();
|
requestQueue_.pop_front();
|
||||||
requestCompleted = true;
|
requestCompleted = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1135,15 +1135,14 @@ void PipelineHandlerRkISP1::tryCompleteRequest(Request *request)
|
||||||
|
|
||||||
data->frameInfo_.destroy(info->frame);
|
data->frameInfo_.destroy(info->frame);
|
||||||
|
|
||||||
completeRequest(activeCamera_, request);
|
completeRequest(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PipelineHandlerRkISP1::bufferReady(FrameBuffer *buffer)
|
void PipelineHandlerRkISP1::bufferReady(FrameBuffer *buffer)
|
||||||
{
|
{
|
||||||
ASSERT(activeCamera_);
|
|
||||||
Request *request = buffer->request();
|
Request *request = buffer->request();
|
||||||
|
|
||||||
completeBuffer(activeCamera_, request, buffer);
|
completeBuffer(request, buffer);
|
||||||
tryCompleteRequest(request);
|
tryCompleteRequest(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -898,8 +898,8 @@ void SimplePipelineHandler::bufferReady(FrameBuffer *buffer)
|
||||||
}
|
}
|
||||||
|
|
||||||
Request *request = buffer->request();
|
Request *request = buffer->request();
|
||||||
completeBuffer(activeCamera_, request, buffer);
|
completeBuffer(request, buffer);
|
||||||
completeRequest(activeCamera_, request);
|
completeRequest(request);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -923,8 +923,8 @@ void SimplePipelineHandler::bufferReady(FrameBuffer *buffer)
|
||||||
|
|
||||||
/* Otherwise simply complete the request. */
|
/* Otherwise simply complete the request. */
|
||||||
Request *request = buffer->request();
|
Request *request = buffer->request();
|
||||||
completeBuffer(activeCamera_, request, buffer);
|
completeBuffer(request, buffer);
|
||||||
completeRequest(activeCamera_, request);
|
completeRequest(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimplePipelineHandler::converterDone(FrameBuffer *input,
|
void SimplePipelineHandler::converterDone(FrameBuffer *input,
|
||||||
|
@ -935,8 +935,8 @@ void SimplePipelineHandler::converterDone(FrameBuffer *input,
|
||||||
|
|
||||||
/* Complete the request. */
|
/* Complete the request. */
|
||||||
Request *request = output->request();
|
Request *request = output->request();
|
||||||
completeBuffer(activeCamera_, request, output);
|
completeBuffer(request, output);
|
||||||
completeRequest(activeCamera_, request);
|
completeRequest(request);
|
||||||
|
|
||||||
/* Queue the input buffer back for capture. */
|
/* Queue the input buffer back for capture. */
|
||||||
data->video_->queueBuffer(input);
|
data->video_->queueBuffer(input);
|
||||||
|
|
|
@ -646,8 +646,8 @@ void UVCCameraData::bufferReady(FrameBuffer *buffer)
|
||||||
{
|
{
|
||||||
Request *request = buffer->request();
|
Request *request = buffer->request();
|
||||||
|
|
||||||
pipe_->completeBuffer(camera_, request, buffer);
|
pipe_->completeBuffer(request, buffer);
|
||||||
pipe_->completeRequest(camera_, request);
|
pipe_->completeRequest(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
REGISTER_PIPELINE_HANDLER(PipelineHandlerUVC)
|
REGISTER_PIPELINE_HANDLER(PipelineHandlerUVC)
|
||||||
|
|
|
@ -519,8 +519,8 @@ void VimcCameraData::bufferReady(FrameBuffer *buffer)
|
||||||
{
|
{
|
||||||
Request *request = buffer->request();
|
Request *request = buffer->request();
|
||||||
|
|
||||||
pipe_->completeBuffer(camera_, request, buffer);
|
pipe_->completeBuffer(request, buffer);
|
||||||
pipe_->completeRequest(camera_, request);
|
pipe_->completeRequest(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
REGISTER_PIPELINE_HANDLER(PipelineHandlerVimc)
|
REGISTER_PIPELINE_HANDLER(PipelineHandlerVimc)
|
||||||
|
|
|
@ -376,8 +376,7 @@ const ControlList &PipelineHandler::properties(const Camera *camera) const
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \fn PipelineHandler::queueRequest()
|
* \fn PipelineHandler::queueRequest()
|
||||||
* \brief Queue a request to the camera
|
* \brief Queue a request
|
||||||
* \param[in] camera The camera to queue the request to
|
|
||||||
* \param[in] request The request to queue
|
* \param[in] request The request to queue
|
||||||
*
|
*
|
||||||
* This method queues a capture request to the pipeline handler for processing.
|
* 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
|
* \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);
|
CameraData *data = cameraData(camera);
|
||||||
data->queuedRequests_.push_back(request);
|
data->queuedRequests_.push_back(request);
|
||||||
|
|
||||||
|
@ -423,7 +423,6 @@ int PipelineHandler::queueRequest(Camera *camera, Request *request)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Complete a buffer for a 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] request The request the buffer belongs to
|
||||||
* \param[in] buffer The buffer that has completed
|
* \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
|
* \return True if all buffers contained in the request have completed, false
|
||||||
* otherwise
|
* otherwise
|
||||||
*/
|
*/
|
||||||
bool PipelineHandler::completeBuffer(Camera *camera, Request *request,
|
bool PipelineHandler::completeBuffer(Request *request, FrameBuffer *buffer)
|
||||||
FrameBuffer *buffer)
|
|
||||||
{
|
{
|
||||||
|
Camera *camera = request->camera_;
|
||||||
camera->bufferCompleted.emit(request, buffer);
|
camera->bufferCompleted.emit(request, buffer);
|
||||||
return request->completeBuffer(buffer);
|
return request->completeBuffer(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Signal request completion
|
* \brief Signal request completion
|
||||||
* \param[in] camera The camera that the request belongs to
|
|
||||||
* \param[in] request The request that has completed
|
* \param[in] request The request that has completed
|
||||||
*
|
*
|
||||||
* The pipeline handler shall call this method to notify the \a camera that the
|
* 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.
|
* \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();
|
request->complete();
|
||||||
|
|
||||||
CameraData *data = cameraData(camera);
|
CameraData *data = cameraData(camera);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue