summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiklas Söderlund <niklas.soderlund@ragnatech.se>2019-11-22 17:31:08 +0100
committerNiklas Söderlund <niklas.soderlund@ragnatech.se>2020-01-12 16:10:37 +0100
commitdea689e1f260b904697a9c2f3d05b7b5068d85e1 (patch)
tree3f4af3e375e64a7e54c4a044e0620679f7fe1032
parent13724144f9bfd22f79d56431061bc55a887c1d10 (diff)
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>
-rw-r--r--include/libcamera/request.h2
-rw-r--r--src/android/camera_device.cpp2
-rw-r--r--src/cam/capture.cpp4
-rw-r--r--src/libcamera/request.cpp4
-rw-r--r--src/qcam/main_window.cpp4
-rw-r--r--src/v4l2/v4l2_camera.cpp2
-rw-r--r--test/camera/buffer_import.cpp2
-rw-r--r--test/camera/capture.cpp4
-rw-r--r--test/camera/statemachine.cpp2
9 files changed, 13 insertions, 13 deletions
diff --git a/include/libcamera/request.h b/include/libcamera/request.h
index 728f380d..b8324224 100644
--- a/include/libcamera/request.h
+++ b/include/libcamera/request.h
@@ -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_; }
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index 065e0292..09588c16 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -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) {
diff --git a/src/cam/capture.cpp b/src/cam/capture.cpp
index 4b65b1d0..1a4dbe7c 100644
--- a/src/cam/capture.cpp
+++ b/src/cam/capture.cpp
@@ -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);
diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
index 92330c1a..54dfb461 100644
--- a/src/libcamera/request.cpp
+++ b/src/libcamera/request.cpp
@@ -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;
diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
index 0a353e8b..8b3d9923 100644
--- a/src/qcam/main_window.cpp
+++ b/src/qcam/main_window.cpp
@@ -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);
diff --git a/src/v4l2/v4l2_camera.cpp b/src/v4l2/v4l2_camera.cpp
index 7221755d..b6e0bb76 100644
--- a/src/v4l2/v4l2_camera.cpp
+++ b/src/v4l2/v4l2_camera.cpp
@@ -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;
diff --git a/test/camera/buffer_import.cpp b/test/camera/buffer_import.cpp
index 171540ed..e5c010d8 100644
--- a/test/camera/buffer_import.cpp
+++ b/test/camera/buffer_import.cpp
@@ -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);
}
diff --git a/test/camera/capture.cpp b/test/camera/capture.cpp
index 7cb76038..ca1ebe41 100644
--- a/test/camera/capture.cpp
+++ b/test/camera/capture.cpp
@@ -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;
}
diff --git a/test/camera/statemachine.cpp b/test/camera/statemachine.cpp
index afa13ba7..f627b8f3 100644
--- a/test/camera/statemachine.cpp
+++ b/test/camera/statemachine.cpp
@@ -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))