summaryrefslogtreecommitdiff
path: root/simple-cam.cpp
diff options
context:
space:
mode:
authorPaul Elder <paul.elder@ideasonboard.com>2020-10-16 14:51:19 +0900
committerKieran Bingham <kieran@bingham.xyz>2020-10-16 10:05:35 +0100
commit94b055c70c09729cab51cc2c74c1a0e3c1a9ae50 (patch)
tree3581213677b2e65faad917e3a669c3961d15b33b /simple-cam.cpp
parent4d5251b0fabcf1b1bbf890367b6e9e877c7c652d (diff)
simple-cam: Reuse Requests
Update simple-cam to reuse Request objects, and use the new API with unique pointers. Signed-off-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran@bingham.xyz>
Diffstat (limited to 'simple-cam.cpp')
-rw-r--r--simple-cam.cpp35
1 files changed, 8 insertions, 27 deletions
diff --git a/simple-cam.cpp b/simple-cam.cpp
index 3aa975e..727bb6d 100644
--- a/simple-cam.cpp
+++ b/simple-cam.cpp
@@ -55,27 +55,8 @@ static void requestComplete(Request *request)
*/
}
- /*
- * Re-queue a Request to the camera.
- *
- * Create a new request and populate it with one buffer for each
- * stream.
- */
- request = camera->createRequest();
- if (!request)
- {
- std::cerr << "Can't create request" << std::endl;
- return;
- }
-
- for (auto it = buffers.begin(); it != buffers.end(); ++it)
- {
- const Stream *stream = it->first;
- FrameBuffer *buffer = it->second;
-
- request->addBuffer(stream, buffer);
- }
-
+ /* Re-queue the Request to the camera. */
+ request->reuse(Request::ReuseBuffers);
camera->queueRequest(request);
}
@@ -263,9 +244,9 @@ int main()
*/
Stream *stream = streamConfig.stream();
const std::vector<std::unique_ptr<FrameBuffer>> &buffers = allocator->buffers(stream);
- std::vector<Request *> requests;
+ std::vector<std::unique_ptr<Request>> requests;
for (unsigned int i = 0; i < buffers.size(); ++i) {
- Request *request = camera->createRequest();
+ std::unique_ptr<Request> request = camera->createRequest();
if (!request)
{
std::cerr << "Can't create request" << std::endl;
@@ -281,13 +262,13 @@ int main()
return ret;
}
- requests.push_back(request);
-
/*
* Controls can be added to a request on a per frame basis.
*/
ControlList &controls = request->controls();
controls.set(controls::Brightness, 0.5);
+
+ requests.push_back(std::move(request));
}
/*
@@ -323,8 +304,8 @@ int main()
* Camera::requestCompleted Signal is called.
*/
camera->start();
- for (Request *request : requests)
- camera->queueRequest(request);
+ for (std::unique_ptr<Request> &request : requests)
+ camera->queueRequest(request.get());
/*
* --------------------------------------------------------------------