libcamera: camera: Check requests before queueing them

Make sure all requests queued to a camera only contain streams which
have been configured and belong to the camera.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Niklas Söderlund
2019-04-17 17:06:25 +02:00
parent 11fd9f171e
commit ff24be7022

View File

@@ -732,6 +732,7 @@ Request *Camera::createRequest()
* \return 0 on success or a negative error code otherwise
* \retval -ENODEV The camera has been disconnected from the system
* \retval -EACCES The camera is not running so requests can't be queued
* \retval -EINVAL The request is invalid
*/
int Camera::queueRequest(Request *request)
{
@@ -741,6 +742,14 @@ int Camera::queueRequest(Request *request)
if (!stateIs(CameraRunning))
return -EACCES;
for (auto const &it : request->buffers()) {
Stream *stream = it.first;
if (activeStreams_.find(stream) == activeStreams_.end()) {
LOG(Camera, Error) << "Invalid request";
return -EINVAL;
}
}
int ret = request->prepare();
if (ret) {
LOG(Camera, Error) << "Failed to prepare request";