libcamera: request: In addBuffer() do not fetch stream from Buffer
In the FrameBuffer interface the stream will not be available from the buffer object as the buffer might be allocated externally. The application needs to explicitly state which stream the buffer is being added for to the request. Extend the addBuffer() function to get this information explicitly from the caller. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
13724144f9
commit
dea689e1f2
9 changed files with 13 additions and 13 deletions
|
@ -39,7 +39,7 @@ public:
|
|||
ControlList &controls() { return *controls_; }
|
||||
ControlList &metadata() { return *metadata_; }
|
||||
const std::map<Stream *, Buffer *> &buffers() const { return bufferMap_; }
|
||||
int addBuffer(std::unique_ptr<Buffer> buffer);
|
||||
int addBuffer(Stream *stream, std::unique_ptr<Buffer> buffer);
|
||||
Buffer *findBuffer(Stream *stream) const;
|
||||
|
||||
uint64_t cookie() const { return cookie_; }
|
||||
|
|
|
@ -754,7 +754,7 @@ void CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reque
|
|||
|
||||
Request *request =
|
||||
camera_->createRequest(reinterpret_cast<uint64_t>(descriptor));
|
||||
request->addBuffer(std::move(buffer));
|
||||
request->addBuffer(stream, std::move(buffer));
|
||||
|
||||
int ret = camera_->queueRequest(request);
|
||||
if (ret) {
|
||||
|
|
|
@ -95,7 +95,7 @@ int Capture::capture(EventLoop *loop)
|
|||
Stream *stream = cfg.stream();
|
||||
std::unique_ptr<Buffer> buffer = stream->createBuffer(i);
|
||||
|
||||
ret = request->addBuffer(std::move(buffer));
|
||||
ret = request->addBuffer(stream, std::move(buffer));
|
||||
if (ret < 0) {
|
||||
std::cerr << "Can't set buffer for request"
|
||||
<< std::endl;
|
||||
|
@ -185,7 +185,7 @@ void Capture::requestComplete(Request *request)
|
|||
return;
|
||||
}
|
||||
|
||||
request->addBuffer(std::move(newBuffer));
|
||||
request->addBuffer(stream, std::move(newBuffer));
|
||||
}
|
||||
|
||||
camera_->queueRequest(request);
|
||||
|
|
|
@ -113,6 +113,7 @@ Request::~Request()
|
|||
|
||||
/**
|
||||
* \brief Store a Buffer with its associated Stream in the Request
|
||||
* \param[in] stream The stream the buffer belongs to
|
||||
* \param[in] buffer The Buffer to store in the request
|
||||
*
|
||||
* Ownership of the buffer is passed to the request. It will be deleted when
|
||||
|
@ -125,9 +126,8 @@ Request::~Request()
|
|||
* \retval -EEXIST The request already contains a buffer for the stream
|
||||
* \retval -EINVAL The buffer does not reference a valid Stream
|
||||
*/
|
||||
int Request::addBuffer(std::unique_ptr<Buffer> buffer)
|
||||
int Request::addBuffer(Stream *stream, std::unique_ptr<Buffer> buffer)
|
||||
{
|
||||
Stream *stream = buffer->stream();
|
||||
if (!stream) {
|
||||
LOG(Request, Error) << "Invalid stream reference";
|
||||
return -EINVAL;
|
||||
|
|
|
@ -191,7 +191,7 @@ int MainWindow::startCapture()
|
|||
goto error;
|
||||
}
|
||||
|
||||
ret = request->addBuffer(std::move(buffer));
|
||||
ret = request->addBuffer(stream, std::move(buffer));
|
||||
if (ret < 0) {
|
||||
std::cerr << "Can't set buffer for request" << std::endl;
|
||||
goto error;
|
||||
|
@ -289,7 +289,7 @@ void MainWindow::requestComplete(Request *request)
|
|||
return;
|
||||
}
|
||||
|
||||
request->addBuffer(std::move(newBuffer));
|
||||
request->addBuffer(stream, std::move(newBuffer));
|
||||
}
|
||||
|
||||
camera_->queueRequest(request);
|
||||
|
|
|
@ -192,7 +192,7 @@ int V4L2Camera::qbuf(unsigned int index)
|
|||
return -ENOMEM;
|
||||
}
|
||||
|
||||
int ret = request->addBuffer(std::move(buffer));
|
||||
int ret = request->addBuffer(stream, std::move(buffer));
|
||||
if (ret < 0) {
|
||||
LOG(V4L2Compat, Error) << "Can't set buffer for request";
|
||||
return -ENOMEM;
|
||||
|
|
|
@ -268,7 +268,7 @@ public:
|
|||
Request *request = camera_->createRequest(cookie);
|
||||
|
||||
std::unique_ptr<Buffer> buffer = stream_->createBuffer({ dmabuf, -1, -1 });
|
||||
request->addBuffer(move(buffer));
|
||||
request->addBuffer(stream_, move(buffer));
|
||||
camera_->queueRequest(request);
|
||||
}
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ protected:
|
|||
std::unique_ptr<Buffer> newBuffer = stream->createBuffer(buffer->index());
|
||||
|
||||
request = camera_->createRequest();
|
||||
request->addBuffer(std::move(newBuffer));
|
||||
request->addBuffer(stream, std::move(newBuffer));
|
||||
camera_->queueRequest(request);
|
||||
}
|
||||
|
||||
|
@ -101,7 +101,7 @@ protected:
|
|||
return TestFail;
|
||||
}
|
||||
|
||||
if (request->addBuffer(std::move(buffer))) {
|
||||
if (request->addBuffer(stream, std::move(buffer))) {
|
||||
cout << "Failed to associating buffer with request" << endl;
|
||||
return TestFail;
|
||||
}
|
||||
|
|
|
@ -219,7 +219,7 @@ protected:
|
|||
|
||||
Stream *stream = *camera_->streams().begin();
|
||||
std::unique_ptr<Buffer> buffer = stream->createBuffer(0);
|
||||
if (request->addBuffer(std::move(buffer)))
|
||||
if (request->addBuffer(stream, std::move(buffer)))
|
||||
return TestFail;
|
||||
|
||||
if (camera_->queueRequest(request))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue