libcamera: pipeline_handler: Provide cancelRequest

Let's extract the two occurrences of canceling a request to a common
helper.  This is especially useful for the followup patch, which needs
to cancel a request from outside.

Signed-off-by: Milan Zamazal <mzamazal@redhat.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Tested-by: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Milan Zamazal 2024-11-06 21:17:19 +01:00 committed by Laurent Pinchart
parent e1d45a17f7
commit fe68cd0d7d
2 changed files with 17 additions and 7 deletions

View file

@ -60,6 +60,7 @@ public:
bool completeBuffer(Request *request, FrameBuffer *buffer); bool completeBuffer(Request *request, FrameBuffer *buffer);
void completeRequest(Request *request); void completeRequest(Request *request);
void cancelRequest(Request *request);
std::string configurationFile(const std::string &subdir, std::string configurationFile(const std::string &subdir,
const std::string &name) const; const std::string &name) const;

View file

@ -367,9 +367,7 @@ void PipelineHandler::stop(Camera *camera)
while (!waitingRequests_.empty()) { while (!waitingRequests_.empty()) {
Request *request = waitingRequests_.front(); Request *request = waitingRequests_.front();
waitingRequests_.pop(); waitingRequests_.pop();
cancelRequest(request);
request->_d()->cancel();
completeRequest(request);
} }
/* Make sure no requests are pending. */ /* Make sure no requests are pending. */
@ -470,10 +468,8 @@ void PipelineHandler::doQueueRequest(Request *request)
} }
int ret = queueRequestDevice(camera, request); int ret = queueRequestDevice(camera, request);
if (ret) { if (ret)
request->_d()->cancel(); cancelRequest(request);
completeRequest(request);
}
} }
/** /**
@ -568,6 +564,19 @@ void PipelineHandler::completeRequest(Request *request)
} }
} }
/**
* \brief Cancel request and signal its completion
* \param[in] request The request to cancel
*
* This function cancels and completes the request. The same rules as for
* completeRequest() apply.
*/
void PipelineHandler::cancelRequest(Request *request)
{
request->_d()->cancel();
completeRequest(request);
}
/** /**
* \brief Retrieve the absolute path to a platform configuration file * \brief Retrieve the absolute path to a platform configuration file
* \param[in] subdir The pipeline handler specific subdirectory name * \param[in] subdir The pipeline handler specific subdirectory name