Patch Detail
Show a patch.
GET /api/1.1/patches/1245/?format=api
{ "id": 1245, "url": "https://patchwork.libcamera.org/api/1.1/patches/1245/?format=api", "web_url": "https://patchwork.libcamera.org/patch/1245/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/1.1/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": "<20190521192740.28112-3-laurent.pinchart@ideasonboard.com>", "date": "2019-05-21T19:27:36", "name": "[libcamera-devel,v3,2/6] libcamera: Use stream roles directly instead of StreamUsage", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "101fd4d115f4cc31d97bde17d9e51244e8beb8fd", "submitter": { "id": 2, "url": "https://patchwork.libcamera.org/api/1.1/people/2/?format=api", "name": "Laurent Pinchart", "email": "laurent.pinchart@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/1245/mbox/", "series": [ { "id": 313, "url": "https://patchwork.libcamera.org/api/1.1/series/313/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=313", "date": "2019-05-21T19:27:34", "name": "Rework camera configuration to introduce negotiation of parameters", "version": 3, "mbox": "https://patchwork.libcamera.org/series/313/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/1245/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/1245/checks/", "tags": {}, "headers": { "Return-Path": "<laurent.pinchart@ideasonboard.com>", "Received": [ "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9691960E4A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 21 May 2019 21:28:03 +0200 (CEST)", "from pendragon.bb.dnainternet.fi (81-175-216-236.bb.dnainternet.fi\n\t[81.175.216.236])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 193AB52C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 21 May 2019 21:28:03 +0200 (CEST)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1558466883;\n\tbh=LsEgEfsX82cgqpY6uJD1ifok0NXdCXGEL15+pWZk2hw=;\n\th=From:To:Subject:Date:In-Reply-To:References:From;\n\tb=hhfJtIvusfDrk0l1qxMlM0ECSO+9hpUVb38cZsmxdhzYwSDVgg/Qy1inqAGxfiKB2\n\tFSY3GNyMQcrx620q3xZKpgZJF7tqiwTcAuF8xvHzmQ1/cvd26MXUAW9JBfEqIgd183\n\tZXI/AAJS9JvGXzrgOMXcJZy8g/Ezi65QSrnCIwLY=", "From": "Laurent Pinchart <laurent.pinchart@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org", "Date": "Tue, 21 May 2019 22:27:36 +0300", "Message-Id": "<20190521192740.28112-3-laurent.pinchart@ideasonboard.com>", "X-Mailer": "git-send-email 2.21.0", "In-Reply-To": "<20190521192740.28112-1-laurent.pinchart@ideasonboard.com>", "References": "<20190521192740.28112-1-laurent.pinchart@ideasonboard.com>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [PATCH v3 2/6] libcamera: Use stream roles\n\tdirectly instead of StreamUsage", "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": "Tue, 21 May 2019 19:28:04 -0000" }, "content": "In order to prepare for an API overhall of the camera configuration\ngeneration, remove the StreamUsage class and replace its uses by stream\nroles. The size hints can't be specified anymore, and will be replaced\nwith an API on the StreamConfiguration to negotiate configuration\nparameters with cameras.\n\nSigned-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\nReviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n---\n include/libcamera/camera.h | 8 +--\n include/libcamera/stream.h | 44 ++----------\n src/cam/main.cpp | 13 ++--\n src/libcamera/camera.cpp | 16 ++---\n src/libcamera/include/pipeline_handler.h | 6 +-\n src/libcamera/pipeline/ipu3/ipu3.cpp | 28 ++++----\n src/libcamera/pipeline/rkisp1/rkisp1.cpp | 4 +-\n src/libcamera/pipeline/uvcvideo.cpp | 5 +-\n src/libcamera/pipeline/vimc.cpp | 5 +-\n src/libcamera/pipeline_handler.cpp | 10 +--\n src/libcamera/stream.cpp | 89 ++++--------------------\n src/qcam/main_window.cpp | 2 +-\n test/camera/capture.cpp | 2 +-\n test/camera/configuration_default.cpp | 6 +-\n test/camera/configuration_set.cpp | 2 +-\n test/camera/statemachine.cpp | 2 +-\n 16 files changed, 69 insertions(+), 173 deletions(-)", "diff": "diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\nindex 306739b7014a..42ba5201eabc 100644\n--- a/include/libcamera/camera.h\n+++ b/include/libcamera/camera.h\n@@ -14,16 +14,13 @@\n \n #include <libcamera/request.h>\n #include <libcamera/signal.h>\n+#include <libcamera/stream.h>\n \n namespace libcamera {\n \n class Buffer;\n class PipelineHandler;\n class Request;\n-class Stream;\n-class StreamUsage;\n-\n-struct StreamConfiguration;\n \n class CameraConfiguration\n {\n@@ -74,8 +71,7 @@ public:\n \tint release();\n \n \tconst std::set<Stream *> &streams() const;\n-\tCameraConfiguration\n-\tgenerateConfiguration(const std::vector<StreamUsage> &usage);\n+\tCameraConfiguration generateConfiguration(const StreamRoles &roles);\n \tint configure(const CameraConfiguration &config);\n \n \tint allocateBuffers();\ndiff --git a/include/libcamera/stream.h b/include/libcamera/stream.h\nindex 0c986310939b..59bdf217eb31 100644\n--- a/include/libcamera/stream.h\n+++ b/include/libcamera/stream.h\n@@ -8,6 +8,7 @@\n #define __LIBCAMERA_STREAM_H__\n \n #include <string>\n+#include <vector>\n \n #include <libcamera/buffer.h>\n #include <libcamera/geometry.h>\n@@ -25,48 +26,17 @@ struct StreamConfiguration {\n \tstd::string toString() const;\n };\n \n-class StreamUsage\n-{\n-public:\n-\tenum Role {\n-\t\tStillCapture,\n-\t\tVideoRecording,\n-\t\tViewfinder,\n-\t};\n-\n-\tRole role() const { return role_; }\n-\tconst Size &size() const { return size_; }\n-\n-protected:\n-\texplicit StreamUsage(Role role);\n-\tStreamUsage(Role role, const Size &size);\n-\n-private:\n-\tRole role_;\n-\tSize size_;\n+enum StreamRole {\n+\tStillCapture,\n+\tVideoRecording,\n+\tViewfinder,\n };\n \n+using StreamRoles = std::vector<StreamRole>;\n+\n class Stream\n {\n public:\n-\tclass StillCapture : public StreamUsage\n-\t{\n-\tpublic:\n-\t\tStillCapture();\n-\t};\n-\n-\tclass VideoRecording : public StreamUsage\n-\t{\n-\tpublic:\n-\t\tVideoRecording();\n-\t};\n-\n-\tclass Viewfinder : public StreamUsage\n-\t{\n-\tpublic:\n-\t\tViewfinder(int width, int height);\n-\t};\n-\n \tStream();\n \tBufferPool &bufferPool() { return bufferPool_; }\n \tconst StreamConfiguration &configuration() const { return configuration_; }\ndiff --git a/src/cam/main.cpp b/src/cam/main.cpp\nindex 6a2508dd3bd9..d603228c0116 100644\n--- a/src/cam/main.cpp\n+++ b/src/cam/main.cpp\n@@ -87,13 +87,13 @@ static int parseOptions(int argc, char *argv[])\n \n static int prepareCameraConfig(CameraConfiguration *config)\n {\n-\tstd::vector<StreamUsage> roles;\n+\tStreamRoles roles;\n \n \tstreamInfo.clear();\n \n \t/* If no configuration is provided assume a single video stream. */\n \tif (!options.isSet(OptStream)) {\n-\t\t*config = camera->generateConfiguration({ Stream::VideoRecording() });\n+\t\t*config = camera->generateConfiguration({ StreamRole::VideoRecording });\n \t\tstreamInfo[config->front()] = \"stream0\";\n \t\treturn 0;\n \t}\n@@ -106,14 +106,13 @@ static int prepareCameraConfig(CameraConfiguration *config)\n \t\tKeyValueParser::Options conf = value.toKeyValues();\n \n \t\tif (!conf.isSet(\"role\")) {\n-\t\t\troles.push_back(Stream::VideoRecording());\n+\t\t\troles.push_back(StreamRole::VideoRecording);\n \t\t} else if (conf[\"role\"].toString() == \"viewfinder\") {\n-\t\t\troles.push_back(Stream::Viewfinder(conf[\"width\"],\n-\t\t\t\t\t\t\t conf[\"height\"]));\n+\t\t\troles.push_back(StreamRole::Viewfinder);\n \t\t} else if (conf[\"role\"].toString() == \"video\") {\n-\t\t\troles.push_back(Stream::VideoRecording());\n+\t\t\troles.push_back(StreamRole::VideoRecording);\n \t\t} else if (conf[\"role\"].toString() == \"still\") {\n-\t\t\troles.push_back(Stream::StillCapture());\n+\t\t\troles.push_back(StreamRole::StillCapture);\n \t\t} else {\n \t\t\tstd::cerr << \"Unknown stream role \"\n \t\t\t\t << conf[\"role\"].toString() << std::endl;\ndiff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\nindex 359174a41823..a3921f91f1c9 100644\n--- a/src/libcamera/camera.cpp\n+++ b/src/libcamera/camera.cpp\n@@ -542,23 +542,23 @@ const std::set<Stream *> &Camera::streams() const\n }\n \n /**\n- * \\brief Generate a default camera configuration according to stream usages\n- * \\param[in] usages A list of stream usages\n+ * \\brief Generate a default camera configuration according to stream roles\n+ * \\param[in] roles A list of stream roles\n *\n- * Generate a camera configuration for a set of desired usages. The caller\n- * specifies a list of stream usages and the camera returns a configuration\n+ * Generate a camera configuration for a set of desired stream roles. The caller\n+ * specifies a list of stream roles and the camera returns a configuration\n * containing suitable streams and their suggested default configurations.\n *\n- * \\return A valid CameraConfiguration if the requested usages can be satisfied,\n+ * \\return A valid CameraConfiguration if the requested roles can be satisfied,\n * or a invalid one otherwise\n */\n CameraConfiguration\n-Camera::generateConfiguration(const std::vector<StreamUsage> &usages)\n+Camera::generateConfiguration(const StreamRoles &roles)\n {\n-\tif (disconnected_ || !usages.size() || usages.size() > streams_.size())\n+\tif (disconnected_ || !roles.size() || roles.size() > streams_.size())\n \t\treturn CameraConfiguration();\n \n-\tCameraConfiguration config = pipe_->generateConfiguration(this, usages);\n+\tCameraConfiguration config = pipe_->generateConfiguration(this, roles);\n \n \tstd::ostringstream msg(\"streams configuration:\", std::ios_base::ate);\n \tunsigned int index = 0;\ndiff --git a/src/libcamera/include/pipeline_handler.h b/src/libcamera/include/pipeline_handler.h\nindex 9cc11a8e192e..3352cb0e5bc9 100644\n--- a/src/libcamera/include/pipeline_handler.h\n+++ b/src/libcamera/include/pipeline_handler.h\n@@ -14,6 +14,8 @@\n #include <string>\n #include <vector>\n \n+#include <libcamera/stream.h>\n+\n namespace libcamera {\n \n class Buffer;\n@@ -26,8 +28,6 @@ class DeviceMatch;\n class MediaDevice;\n class PipelineHandler;\n class Request;\n-class Stream;\n-class StreamUsage;\n \n class CameraData\n {\n@@ -61,7 +61,7 @@ public:\n \tvoid unlock();\n \n \tvirtual CameraConfiguration\n-\tgenerateConfiguration(Camera *camera, const std::vector<StreamUsage> &usages) = 0;\n+\tgenerateConfiguration(Camera *camera, const StreamRoles &roles) = 0;\n \tvirtual int configure(Camera *camera, const CameraConfiguration &config) = 0;\n \n \tvirtual int allocateBuffers(Camera *camera,\ndiff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\nindex ba0c708f9e1e..d234a8ac5289 100644\n--- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n@@ -151,8 +151,7 @@ public:\n \tPipelineHandlerIPU3(CameraManager *manager);\n \n \tCameraConfiguration\n-\tgenerateConfiguration(Camera *camera,\n-\t\t\t const std::vector<StreamUsage> &usages) override;\n+\tgenerateConfiguration(Camera *camera, const StreamRoles &roles) override;\n \tint configure(Camera *camera,\n \t\t const CameraConfiguration &config) override;\n \n@@ -211,7 +210,7 @@ PipelineHandlerIPU3::PipelineHandlerIPU3(CameraManager *manager)\n \n CameraConfiguration\n PipelineHandlerIPU3::generateConfiguration(Camera *camera,\n-\t\t\t\t\t const std::vector<StreamUsage> &usages)\n+\t\t\t\t\t const StreamRoles &roles)\n {\n \tIPU3CameraData *data = cameraData(camera);\n \tCameraConfiguration config = {};\n@@ -220,13 +219,12 @@ PipelineHandlerIPU3::generateConfiguration(Camera *camera,\n \t\t&data->vfStream_,\n \t};\n \n-\tfor (const StreamUsage &usage : usages) {\n+\tfor (const StreamRole role : roles) {\n \t\tStreamConfiguration cfg = {};\n-\t\tStreamUsage::Role role = usage.role();\n \t\tIPU3Stream *stream = nullptr;\n \n \t\tswitch (role) {\n-\t\tcase StreamUsage::Role::StillCapture:\n+\t\tcase StreamRole::StillCapture:\n \t\t\t/*\n \t\t\t * Pick the output stream by default as the Viewfinder\n \t\t\t * and VideoRecording roles are not allowed on\n@@ -256,11 +254,11 @@ PipelineHandlerIPU3::generateConfiguration(Camera *camera,\n \n \t\t\tbreak;\n \n-\t\tcase StreamUsage::Role::Viewfinder:\n-\t\tcase StreamUsage::Role::VideoRecording: {\n+\t\tcase StreamRole::Viewfinder:\n+\t\tcase StreamRole::VideoRecording: {\n \t\t\t/*\n \t\t\t * We can't use the 'output' stream for viewfinder or\n-\t\t\t * video capture usages.\n+\t\t\t * video capture roles.\n \t\t\t *\n \t\t\t * \\todo This is an artificial limitation until we\n \t\t\t * figure out the exact capabilities of the hardware.\n@@ -275,15 +273,13 @@ PipelineHandlerIPU3::generateConfiguration(Camera *camera,\n \t\t\tstream = &data->vfStream_;\n \n \t\t\t/*\n-\t\t\t * Align the requested viewfinder size to the\n-\t\t\t * maximum available sensor resolution and to the\n-\t\t\t * IPU3 alignment constraints.\n+\t\t\t * Align the default viewfinder size to the maximum\n+\t\t\t * available sensor resolution and to the IPU3\n+\t\t\t * alignment constraints.\n \t\t\t */\n \t\t\tconst Size &res = data->cio2_.sensor_->resolution();\n-\t\t\tunsigned int width = std::min(usage.size().width,\n-\t\t\t\t\t\t res.width);\n-\t\t\tunsigned int height = std::min(usage.size().height,\n-\t\t\t\t\t\t res.height);\n+\t\t\tunsigned int width = std::min(1280U, res.width);\n+\t\t\tunsigned int height = std::min(720U, res.height);\n \t\t\tcfg.size = { width & ~7, height & ~3 };\n \n \t\t\tbreak;\ndiff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\nindex 4d02f9604ad9..4bd8c5101a96 100644\n--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n@@ -35,7 +35,7 @@ public:\n \t~PipelineHandlerRkISP1();\n \n \tCameraConfiguration generateConfiguration(Camera *camera,\n-\t\tconst std::vector<StreamUsage> &usages) override;\n+\t\tconst StreamRoles &roles) override;\n \tint configure(Camera *camera,\n \t\tconst CameraConfiguration &config) override;\n \n@@ -107,7 +107,7 @@ PipelineHandlerRkISP1::~PipelineHandlerRkISP1()\n */\n \n CameraConfiguration PipelineHandlerRkISP1::generateConfiguration(Camera *camera,\n-\tconst std::vector<StreamUsage> &usages)\n+\tconst StreamRoles &roles)\n {\n \tRkISP1CameraData *data = cameraData(camera);\n \tCameraConfiguration config;\ndiff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp\nindex 118b97457d2a..d2e1f7d4e5b2 100644\n--- a/src/libcamera/pipeline/uvcvideo.cpp\n+++ b/src/libcamera/pipeline/uvcvideo.cpp\n@@ -26,8 +26,7 @@ public:\n \tPipelineHandlerUVC(CameraManager *manager);\n \n \tCameraConfiguration\n-\tgenerateConfiguration(Camera *camera,\n-\t\t\t const std::vector<StreamUsage> &usages) override;\n+\tgenerateConfiguration(Camera *camera, const StreamRoles &roles) override;\n \tint configure(Camera *camera,\n \t\t const CameraConfiguration &config) override;\n \n@@ -77,7 +76,7 @@ PipelineHandlerUVC::PipelineHandlerUVC(CameraManager *manager)\n \n CameraConfiguration\n PipelineHandlerUVC::generateConfiguration(Camera *camera,\n-\t\t\t\t\t const std::vector<StreamUsage> &usages)\n+\t\t\t\t\t const StreamRoles &roles)\n {\n \tUVCCameraData *data = cameraData(camera);\n \tCameraConfiguration config;\ndiff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp\nindex 74959581a7ef..17e2491e5c27 100644\n--- a/src/libcamera/pipeline/vimc.cpp\n+++ b/src/libcamera/pipeline/vimc.cpp\n@@ -26,8 +26,7 @@ public:\n \tPipelineHandlerVimc(CameraManager *manager);\n \n \tCameraConfiguration\n-\tgenerateConfiguration(Camera *camera,\n-\t\t\t const std::vector<StreamUsage> &usages) override;\n+\tgenerateConfiguration(Camera *camera, const StreamRoles &roles) override;\n \tint configure(Camera *camera,\n \t\t const CameraConfiguration &config) override;\n \n@@ -77,7 +76,7 @@ PipelineHandlerVimc::PipelineHandlerVimc(CameraManager *manager)\n \n CameraConfiguration\n PipelineHandlerVimc::generateConfiguration(Camera *camera,\n-\t\t\t\t\t const std::vector<StreamUsage> &usages)\n+\t\t\t\t\t const StreamRoles &roles)\n {\n \tVimcCameraData *data = cameraData(camera);\n \tCameraConfiguration config;\ndiff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp\nindex b9ac64328f1d..81c11149c9fe 100644\n--- a/src/libcamera/pipeline_handler.cpp\n+++ b/src/libcamera/pipeline_handler.cpp\n@@ -221,18 +221,18 @@ void PipelineHandler::unlock()\n * \\fn PipelineHandler::generateConfiguration()\n * \\brief Generate a camera configuration for a specified camera\n * \\param[in] camera The camera to generate a default configuration for\n- * \\param[in] usages A list of stream usages\n+ * \\param[in] roles A list of stream roles\n *\n- * Generate a default configuration for the \\a camera for a specified group of\n- * use-cases. The caller shall populate the \\a usages array with the use-cases\n- * it wishes to fetch the default configuration for. The returned configuration\n+ * Generate a default configuration for the \\a camera for a specified list of\n+ * stream roles. The caller shall populate the \\a roles with the use-cases it\n+ * wishes to fetch the default configuration for. The returned configuration\n * can then be examined by the caller to learn about the selected streams and\n * their default parameters.\n *\n * The intended companion to this is \\a configure() which can be used to change\n * the group of streams parameters.\n *\n- * \\return A valid CameraConfiguration if the requested usages can be satisfied,\n+ * \\return A valid CameraConfiguration if the requested roles can be satisfied,\n * or a invalid configuration otherwise\n */\n \ndiff --git a/src/libcamera/stream.cpp b/src/libcamera/stream.cpp\nindex af259510b19c..fe4c4ecf4150 100644\n--- a/src/libcamera/stream.cpp\n+++ b/src/libcamera/stream.cpp\n@@ -75,61 +75,31 @@ std::string StreamConfiguration::toString() const\n }\n \n /**\n- * \\class StreamUsage\n- * \\brief Stream usage information\n- *\n- * The StreamUsage class describes how an application intends to use a stream.\n- * Usages are specified by applications and passed to cameras, that then select\n- * the most appropriate streams and their default configurations.\n- */\n-\n-/**\n- * \\enum StreamUsage::Role\n+ * \\enum StreamRole\n * \\brief Identify the role a stream is intended to play\n- * \\var StreamUsage::StillCapture\n+ *\n+ * The StreamRole describes how an application intends to use a stream. Roles\n+ * are specified by applications and passed to cameras, that then select the\n+ * most appropriate streams and their default configurations.\n+ *\n+ * \\var StillCapture\n * The stream is intended to capture high-resolution, high-quality still images\n * with low frame rate. The captured frames may be exposed with flash.\n- * \\var StreamUsage::VideoRecording\n+ * \\var VideoRecording\n * The stream is intended to capture video for the purpose of recording or\n * streaming. The video stream may produce a high frame rate and may be\n * enhanced with video stabilization.\n- * \\var StreamUsage::Viewfinder\n+ * \\var Viewfinder\n * The stream is intended to capture video for the purpose of display on the\n- * local screen. The StreamUsage includes the desired resolution. Trade-offs\n- * between quality and usage of system resources are acceptable.\n+ * local screen. Trade-offs between quality and usage of system resources are\n+ * acceptable.\n */\n \n /**\n- * \\fn StreamUsage::role()\n- * \\brief Retrieve the stream role\n- * \\return The stream role\n+ * \\typedef StreamRoles\n+ * \\brief A vector of StreamRole\n */\n \n-/**\n- * \\fn StreamUsage::size()\n- * \\brief Retrieve desired size\n- * \\return The desired size\n- */\n-\n-/**\n- * \\brief Create a stream usage\n- * \\param[in] role Stream role\n- */\n-StreamUsage::StreamUsage(Role role)\n-\t: role_(role)\n-{\n-}\n-\n-/**\n- * \\brief Create a stream usage with a desired size\n- * \\param[in] role Stream role\n- * \\param[in] size The desired size\n- */\n-StreamUsage::StreamUsage(Role role, const Size &size)\n-\t: role_(role), size_(size)\n-{\n-}\n-\n /**\n * \\class Stream\n * \\brief Video stream for a camera\n@@ -148,39 +118,6 @@ StreamUsage::StreamUsage(Role role, const Size &size)\n * optimal stream for the task.\n */\n \n-/**\n- * \\class Stream::StillCapture\n- * \\brief Describe a still capture usage\n- */\n-Stream::StillCapture::StillCapture()\n-\t: StreamUsage(Role::StillCapture)\n-{\n-}\n-\n-/**\n- * \\class Stream::VideoRecording\n- * \\brief Describe a video recording usage\n- */\n-Stream::VideoRecording::VideoRecording()\n-\t: StreamUsage(Role::VideoRecording)\n-{\n-}\n-\n-/**\n- * \\class Stream::Viewfinder\n- * \\brief Describe a viewfinder usage\n- */\n-\n-/**\n- * \\brief Create a viewfinder usage with a desired dimension\n- * \\param[in] width The desired viewfinder width\n- * \\param[in] height The desired viewfinder height\n- */\n-Stream::Viewfinder::Viewfinder(int width, int height)\n-\t: StreamUsage(Role::Viewfinder, Size(width, height))\n-{\n-}\n-\n /**\n * \\brief Construct a stream with default parameters\n */\ndiff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp\nindex c91b82727ec6..a984aaca764f 100644\n--- a/src/qcam/main_window.cpp\n+++ b/src/qcam/main_window.cpp\n@@ -97,7 +97,7 @@ int MainWindow::startCapture()\n {\n \tint ret;\n \n-\tconfig_ = camera_->generateConfiguration({ Stream::VideoRecording() });\n+\tconfig_ = camera_->generateConfiguration({ StreamRole::VideoRecording });\n \tStream *stream = config_.front();\n \tret = camera_->configure(config_);\n \tif (ret < 0) {\ndiff --git a/test/camera/capture.cpp b/test/camera/capture.cpp\nindex bc3a4d6cb9f2..e7e6438203b9 100644\n--- a/test/camera/capture.cpp\n+++ b/test/camera/capture.cpp\n@@ -43,7 +43,7 @@ protected:\n \tint run()\n \t{\n \t\tCameraConfiguration config =\n-\t\t\tcamera_->generateConfiguration({ Stream::VideoRecording() });\n+\t\t\tcamera_->generateConfiguration({ StreamRole::VideoRecording });\n \t\tStream *stream = config.front();\n \t\tStreamConfiguration *cfg = &config[stream];\n \ndiff --git a/test/camera/configuration_default.cpp b/test/camera/configuration_default.cpp\nindex 340b5f58f04c..8c4a03db498a 100644\n--- a/test/camera/configuration_default.cpp\n+++ b/test/camera/configuration_default.cpp\n@@ -21,7 +21,7 @@ protected:\n \t\tCameraConfiguration config;\n \n \t\t/* Test asking for configuration for a video stream. */\n-\t\tconfig = camera_->generateConfiguration({ Stream::VideoRecording() });\n+\t\tconfig = camera_->generateConfiguration({ StreamRole::VideoRecording });\n \t\tif (!config.isValid()) {\n \t\t\tcout << \"Default configuration invalid\" << endl;\n \t\t\treturn TestFail;\n@@ -29,11 +29,11 @@ protected:\n \n \t\t/*\n \t\t * Test that asking for configuration for an empty array of\n-\t\t * stream usages returns an empty list of configurations.\n+\t\t * stream roles returns an empty list of configurations.\n \t\t */\n \t\tconfig = camera_->generateConfiguration({});\n \t\tif (config.isValid()) {\n-\t\t\tcout << \"Failed to retrieve configuration for empty usage list\"\n+\t\t\tcout << \"Failed to retrieve configuration for empty roles list\"\n \t\t\t << endl;\n \t\t\treturn TestFail;\n \t\t}\ndiff --git a/test/camera/configuration_set.cpp b/test/camera/configuration_set.cpp\nindex 24d5ca6690b7..76d8bc3e40a4 100644\n--- a/test/camera/configuration_set.cpp\n+++ b/test/camera/configuration_set.cpp\n@@ -19,7 +19,7 @@ protected:\n \tint run()\n \t{\n \t\tCameraConfiguration config =\n-\t\t\tcamera_->generateConfiguration({ Stream::VideoRecording() });\n+\t\t\tcamera_->generateConfiguration({ StreamRole::VideoRecording });\n \t\tStreamConfiguration *cfg = &config[config.front()];\n \n \t\tif (!config.isValid()) {\ndiff --git a/test/camera/statemachine.cpp b/test/camera/statemachine.cpp\nindex bd2e61ff2939..7a74cd85a37a 100644\n--- a/test/camera/statemachine.cpp\n+++ b/test/camera/statemachine.cpp\n@@ -235,7 +235,7 @@ protected:\n \n \tint run()\n \t{\n-\t\tdefconf_ = camera_->generateConfiguration({ Stream::VideoRecording() });\n+\t\tdefconf_ = camera_->generateConfiguration({ StreamRole::VideoRecording });\n \n \t\tif (testAvailable() != TestPass) {\n \t\t\tcout << \"State machine in Available state failed\" << endl;\n", "prefixes": [ "libcamera-devel", "v3", "2/6" ] }