Patch Detail
Show a patch.
GET /api/patches/713/?format=api
{ "id": 713, "url": "https://patchwork.libcamera.org/api/patches/713/?format=api", "web_url": "https://patchwork.libcamera.org/patch/713/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/projects/1/?format=api", "name": "libcamera", "link_name": "libcamera", "list_id": "libcamera_core", "list_email": "libcamera-devel@lists.libcamera.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20190311022232.4759-4-niklas.soderlund@ragnatech.se>", "date": "2019-03-11T02:22:31", "name": "[libcamera-devel,v2,3/4] test: camera: Add capture test", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "0aecc0ae90ea7518720717017e44eb0467490bfa", "submitter": { "id": 5, "url": "https://patchwork.libcamera.org/api/people/5/?format=api", "name": "Niklas Söderlund", "email": "niklas.soderlund@ragnatech.se" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/713/mbox/", "series": [ { "id": 204, "url": "https://patchwork.libcamera.org/api/series/204/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=204", "date": "2019-03-11T02:22:28", "name": "test: camera: Add basic tests for the camera", "version": 2, "mbox": "https://patchwork.libcamera.org/series/204/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/713/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/713/checks/", "tags": {}, "headers": { "Return-Path": "<niklas.soderlund@ragnatech.se>", "Received": [ "from bin-mail-out-05.binero.net (bin-mail-out-05.binero.net\n\t[195.74.38.228])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id EE2CC610B6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 11 Mar 2019 03:23:09 +0100 (CET)", "from bismarck.berto.se (unknown [89.233.230.99])\n\tby bin-vsp-out-02.atm.binero.net (Halon) with ESMTPA\n\tid 9ab61213-43a4-11e9-985a-005056917f90;\n\tMon, 11 Mar 2019 03:23:06 +0100 (CET)" ], "X-Halon-ID": "9ab61213-43a4-11e9-985a-005056917f90", "Authorized-sender": "niklas@soderlund.pp.se", "From": "=?utf-8?q?Niklas_S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>", "To": "libcamera-devel@lists.libcamera.org", "Date": "Mon, 11 Mar 2019 03:22:31 +0100", "Message-Id": "<20190311022232.4759-4-niklas.soderlund@ragnatech.se>", "X-Mailer": "git-send-email 2.21.0", "In-Reply-To": "<20190311022232.4759-1-niklas.soderlund@ragnatech.se>", "References": "<20190311022232.4759-1-niklas.soderlund@ragnatech.se>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [PATCH v2 3/4] test: camera: Add capture test", "X-BeenThere": "libcamera-devel@lists.libcamera.org", "X-Mailman-Version": "2.1.23", "Precedence": "list", "List-Id": "<libcamera-devel.lists.libcamera.org>", "List-Unsubscribe": "<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>", "List-Archive": "<https://lists.libcamera.org/pipermail/libcamera-devel/>", "List-Post": "<mailto:libcamera-devel@lists.libcamera.org>", "List-Help": "<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>", "List-Subscribe": "<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>", "X-List-Received-Date": "Mon, 11 Mar 2019 02:23:10 -0000" }, "content": "Correctly configure the camera using the default configuration and run a\ncapture session for 100 milliseconds, which is plenty of time, in tests\nover 600 requests completed using the vimc pipeline.\n\nThe test passes if at least the number of buffers used in the capture\ntimes two number of requests completes to prove we cycle through all\nbuffers.\n\nSigned-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n---\n test/camera/capture.cpp | 136 ++++++++++++++++++++++++++++++++++++++++\n test/camera/meson.build | 1 +\n 2 files changed, 137 insertions(+)\n create mode 100644 test/camera/capture.cpp", "diff": "diff --git a/test/camera/capture.cpp b/test/camera/capture.cpp\nnew file mode 100644\nindex 0000000000000000..44adcf3639393d3f\n--- /dev/null\n+++ b/test/camera/capture.cpp\n@@ -0,0 +1,136 @@\n+/* SPDX-License-Identifier: GPL-2.0-or-later */\n+/*\n+ * Copyright (C) 2019, Google Inc.\n+ *\n+ * libcamera Camera API tests\n+ */\n+\n+#include <iostream>\n+\n+#include \"camera_test.h\"\n+\n+using namespace std;\n+\n+namespace {\n+\n+class Capture : public CameraTest\n+{\n+protected:\n+\tunsigned int completeBuffersCount_;\n+\tunsigned int completeRequestsCount_;\n+\n+\tvoid bufferComplete(Request *request, Buffer *buffer)\n+\t{\n+\t\tif (buffer->status() != Buffer::BufferSuccess)\n+\t\t\treturn;\n+\n+\t\tcompleteBuffersCount_++;\n+\t}\n+\n+\tvoid requestComplete(Request *request, const std::map<Stream *, Buffer *> &buffers)\n+\t{\n+\t\tif (request->status() != Request::RequestComplete)\n+\t\t\treturn;\n+\n+\t\tcompleteRequestsCount_++;\n+\n+\t\t/* Reuse the buffers for a new request. */\n+\t\trequest = camera_->createRequest();\n+\t\trequest->setBuffers(buffers);\n+\t\tcamera_->queueRequest(request);\n+\t}\n+\n+\tint run()\n+\t{\n+\t\tStream *stream = *camera_->streams().begin();\n+\t\tstd::set<Stream *> streams = { stream };\n+\t\tstd::map<Stream *, StreamConfiguration> conf =\n+\t\t\tcamera_->streamConfiguration(streams);\n+\t\tStreamConfiguration *sconf = &conf.begin()->second;\n+\n+\t\tif (!configurationValid(streams, conf)) {\n+\t\t\tcout << \"Reading default configuration\" << endl;\n+\t\t\treturn TestFail;\n+\t\t}\n+\n+\t\tif (camera_->acquire()) {\n+\t\t\tcout << \"Acquiring the camera\" << endl;\n+\t\t\treturn TestFail;\n+\t\t}\n+\n+\t\tif (camera_->configureStreams(conf)) {\n+\t\t\tcout << \"Setting default configuration\" << endl;\n+\t\t\treturn TestFail;\n+\t\t}\n+\n+\t\tif (camera_->allocateBuffers()) {\n+\t\t\tcout << \"Allocating buffers\" << endl;\n+\t\t\treturn TestFail;\n+\t\t}\n+\n+\t\tBufferPool &pool = stream->bufferPool();\n+\t\tstd::vector<Request *> requests;\n+\t\tfor (Buffer &buffer : pool.buffers()) {\n+\t\t\tRequest *request = camera_->createRequest();\n+\t\t\tif (!request) {\n+\t\t\t\tcout << \"Creating requests\" << endl;\n+\t\t\t\treturn TestFail;\n+\t\t\t}\n+\n+\t\t\tstd::map<Stream *, Buffer *> map = { { stream, &buffer } };\n+\t\t\tif (request->setBuffers(map)) {\n+\t\t\t\tcout << \"Associating buffers with requests\" << endl;\n+\t\t\t\treturn TestFail;\n+\t\t\t}\n+\n+\t\t\trequests.push_back(request);\n+\t\t}\n+\n+\t\tcompleteRequestsCount_ = 0;\n+\t\tcompleteBuffersCount_ = 0;\n+\n+\t\tcamera_->bufferCompleted.connect(this, &Capture::bufferComplete);\n+\t\tcamera_->requestCompleted.connect(this, &Capture::requestComplete);\n+\n+\t\tif (camera_->start()) {\n+\t\t\tcout << \"Starting camera\" << endl;\n+\t\t\treturn TestFail;\n+\t\t}\n+\n+\t\tfor (Request *request : requests) {\n+\t\t\tif (camera_->queueRequest(request)) {\n+\t\t\t\tcout << \"Queueing requests\" << endl;\n+\t\t\t\treturn TestFail;\n+\t\t\t}\n+\t\t}\n+\n+\t\tEventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher();\n+\n+\t\tTimer timer;\n+\t\ttimer.start(100);\n+\t\twhile (timer.isRunning())\n+\t\t\tdispatcher->processEvents();\n+\n+\t\tif (completeRequestsCount_ <= sconf->bufferCount * 2 ||\n+\t\t completeRequestsCount_ != completeBuffersCount_) {\n+\t\t\tcout << \"Capture failed\" << endl;\n+\t\t\treturn TestFail;\n+\t\t}\n+\n+\t\tif (camera_->stop()) {\n+\t\t\tcout << \"Stopping camera\" << endl;\n+\t\t\treturn TestFail;\n+\t\t}\n+\n+\t\tif (camera_->freeBuffers()) {\n+\t\t\tcout << \"Freeing buffers\" << endl;\n+\t\t\treturn TestFail;\n+\t\t}\n+\n+\t\treturn TestPass;\n+\t}\n+};\n+\n+} /* namespace */\n+\n+TEST_REGISTER(Capture);\ndiff --git a/test/camera/meson.build b/test/camera/meson.build\nindex ed4837190ff6c52c..a1fd20326e97538b 100644\n--- a/test/camera/meson.build\n+++ b/test/camera/meson.build\n@@ -3,6 +3,7 @@\n camera_tests = [\n [ 'configuration_default', 'configuration_default.cpp' ],\n [ 'configuration_set', 'configuration_set.cpp' ],\n+ [ 'capture', 'capture.cpp' ],\n ]\n \n foreach t : camera_tests\n", "prefixes": [ "libcamera-devel", "v2", "3/4" ] }