diff options
author | Niklas Söderlund <niklas.soderlund@ragnatech.se> | 2019-11-22 17:31:08 +0100 |
---|---|---|
committer | Niklas Söderlund <niklas.soderlund@ragnatech.se> | 2020-01-12 16:10:37 +0100 |
commit | dea689e1f260b904697a9c2f3d05b7b5068d85e1 (patch) | |
tree | 3f4af3e375e64a7e54c4a044e0620679f7fe1032 | |
parent | 13724144f9bfd22f79d56431061bc55a887c1d10 (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.h | 2 | ||||
-rw-r--r-- | src/android/camera_device.cpp | 2 | ||||
-rw-r--r-- | src/cam/capture.cpp | 4 | ||||
-rw-r--r-- | src/libcamera/request.cpp | 4 | ||||
-rw-r--r-- | src/qcam/main_window.cpp | 4 | ||||
-rw-r--r-- | src/v4l2/v4l2_camera.cpp | 2 | ||||
-rw-r--r-- | test/camera/buffer_import.cpp | 2 | ||||
-rw-r--r-- | test/camera/capture.cpp | 4 | ||||
-rw-r--r-- | test/camera/statemachine.cpp | 2 |
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)) |