From 856a4a25278ce5e4b64497deaa3b20c4df16fdee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20S=C3=B6derlund?= Date: Sun, 12 Jan 2020 01:10:51 +0100 Subject: libcamera: request: remove prepare() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The association of buffers to a request can be done directly in addBuffer() instead of when the request is queued to the camera. Keep the check that a request contains buffers by moving it to Camera::queueRequest() where prepare() was previously called. As a bonus we can remove a friend statement in Request. Signed-off-by: Niklas Söderlund Reviewed-by: Laurent Pinchart --- src/libcamera/buffer.cpp | 4 ++-- src/libcamera/camera.cpp | 11 +++++------ src/libcamera/request.cpp | 26 ++------------------------ 3 files changed, 9 insertions(+), 32 deletions(-) (limited to 'src/libcamera') diff --git a/src/libcamera/buffer.cpp b/src/libcamera/buffer.cpp index 960eeb8f..5305e3c3 100644 --- a/src/libcamera/buffer.cpp +++ b/src/libcamera/buffer.cpp @@ -360,7 +360,7 @@ Buffer::Buffer(unsigned int index, const Buffer *metadata) * The intended callers of this method are buffer completion handlers that * need to associate a buffer to the request it belongs to. * - * A Buffer is associated to a request by Request::prepare() and the + * A Buffer is associated to a request by Request::addBuffer() and the * association is valid until the buffer completes. The returned request * pointer is valid only during that interval. * @@ -397,7 +397,7 @@ void Buffer::cancel() * \fn Buffer::setRequest() * \brief Set the request this buffer belongs to * - * The intended callers are Request::prepare() and Request::completeBuffer(). + * The intended callers are Request::addBuffer() and Request::completeBuffer(). */ } /* namespace libcamera */ diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp index e810fb72..5d294b10 100644 --- a/src/libcamera/camera.cpp +++ b/src/libcamera/camera.cpp @@ -810,6 +810,11 @@ int Camera::queueRequest(Request *request) if (!stateIs(CameraRunning)) return -EACCES; + if (request->buffers().empty()) { + LOG(Camera, Error) << "Request contains no buffers"; + return -EINVAL; + } + for (auto const &it : request->buffers()) { Stream *stream = it.first; Buffer *buffer = it.second; @@ -832,12 +837,6 @@ int Camera::queueRequest(Request *request) buffer->mem_ = &stream->buffers()[buffer->index_]; } - int ret = request->prepare(); - if (ret) { - LOG(Camera, Error) << "Failed to prepare request"; - return ret; - } - return pipe_->queueRequest(this, request); } diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp index c14ed1a4..84a5f558 100644 --- a/src/libcamera/request.cpp +++ b/src/libcamera/request.cpp @@ -139,6 +139,8 @@ int Request::addBuffer(std::unique_ptr buffer) return -EEXIST; } + buffer->setRequest(this); + pending_.insert(buffer.get()); bufferMap_[stream] = buffer.release(); return 0; @@ -203,30 +205,6 @@ Buffer *Request::findBuffer(Stream *stream) const * otherwise */ -/** - * \brief Validate the request and prepare it for the completion handler - * - * Requests that contain no buffers are invalid and are rejected. - * - * \return 0 on success or a negative error code otherwise - * \retval -EINVAL The request is invalid - */ -int Request::prepare() -{ - if (bufferMap_.empty()) { - LOG(Request, Error) << "Invalid request due to missing buffers"; - return -EINVAL; - } - - for (auto const &pair : bufferMap_) { - Buffer *buffer = pair.second; - buffer->setRequest(this); - pending_.insert(buffer); - } - - return 0; -} - /** * \brief Complete a queued request * -- cgit v1.2.1