Show a patch.

GET /api/patches/19151/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 19151,
    "url": "https://patchwork.libcamera.org/api/patches/19151/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/19151/",
    "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": "<20231019140133.32090-4-jacopo.mondi@ideasonboard.com>",
    "date": "2023-10-19T14:01:24",
    "name": "[libcamera-devel,v6,03/12] Documentation: Add figures to document Orientation",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "ca9311b72eb8dfa38176913fac5a3492abdfdde4",
    "submitter": {
        "id": 143,
        "url": "https://patchwork.libcamera.org/api/people/143/?format=api",
        "name": "Jacopo Mondi",
        "email": "jacopo.mondi@ideasonboard.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/19151/mbox/",
    "series": [
        {
            "id": 4053,
            "url": "https://patchwork.libcamera.org/api/series/4053/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4053",
            "date": "2023-10-19T14:01:21",
            "name": "libcamera: Replace CameraConfiguration::transform",
            "version": 6,
            "mbox": "https://patchwork.libcamera.org/series/4053/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/19151/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/19151/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<libcamera-devel-bounces@lists.libcamera.org>",
        "X-Original-To": "parsemail@patchwork.libcamera.org",
        "Delivered-To": "parsemail@patchwork.libcamera.org",
        "Received": [
            "from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 52E88C3272\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 19 Oct 2023 14:01:55 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2CF2A6298A;\n\tThu, 19 Oct 2023 16:01:54 +0200 (CEST)",
            "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id F10B362984\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 19 Oct 2023 16:01:50 +0200 (CEST)",
            "from uno.LocalDomain (93-61-96-190.ip145.fastwebnet.it\n\t[93.61.96.190])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id DB47110FF;\n\tThu, 19 Oct 2023 16:01:42 +0200 (CEST)"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1697724114;\n\tbh=vyVixfRAB1MoIguSxyUe4vvZ8DqCVVEBiQUjG4hWmss=;\n\th=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=AoDbRcERtShl6Ifj1GBWzxTcL3MYORnsB7tXPbaxC0Lt89/ZF5iF6i4MLU1eetDFB\n\tNnWa8fZgL+p57o/zPJUuV+c93qN/RTUgSk9RXNpdDUzSTs26p/uTCD5KNDow4crSkb\n\tKgmA0fQD8sagXrly3iPICrDcY9VAAbUJI6yyXrb4HH0v9JTWo4UG5mhFnEFb42n5WE\n\tTK/6VLyC9WwsiYI8HEZ40MwMZBlhxLgYRi9i1S7RtSYwov2URJvW4WupOVQG5Wk3iI\n\t1HHqxBrH7TGhZVz+QM/r9UqgG8/jT5Sqz2A7SsxBzPc/fHQBSmmETICtm5Bw8e1CkG\n\ttoVmKSx9RGVQA==",
            "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1697724103;\n\tbh=vyVixfRAB1MoIguSxyUe4vvZ8DqCVVEBiQUjG4hWmss=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=Ei5HJ3L/trJk5AMx8ZKC91V0Fy7v1yFeme3pPlujvAH2Ltr/6tboloYs7rVQUy5OS\n\tzgYb2xsYSUiCc31JUOHtaYjHannULdwbuuCQMoDEhpQkTJ1Mnlc3M0z94tJEXuIvlD\n\tUwy9fNcJ4Qr3hM6Qr/RM84D1D18jTMudFxJwLKOg="
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"Ei5HJ3L/\"; dkim-atps=neutral",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Thu, 19 Oct 2023 16:01:24 +0200",
        "Message-ID": "<20231019140133.32090-4-jacopo.mondi@ideasonboard.com>",
        "X-Mailer": "git-send-email 2.42.0",
        "In-Reply-To": "<20231019140133.32090-1-jacopo.mondi@ideasonboard.com>",
        "References": "<20231019140133.32090-1-jacopo.mondi@ideasonboard.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH v6 03/12] Documentation: Add figures to\n\tdocument Orientation",
        "X-BeenThere": "libcamera-devel@lists.libcamera.org",
        "X-Mailman-Version": "2.1.29",
        "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>",
        "From": "Jacopo Mondi via libcamera-devel <libcamera-devel@lists.libcamera.org>",
        "Reply-To": "Jacopo Mondi <jacopo.mondi@ideasonboard.com>",
        "Cc": "Jacopo Mondi <jacopo.mondi@ideasonboard.com>",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "Add figures in Documentation/rotation/ to document the plane\ntransformations defined by the Orientation enumeration.\n\nSigned-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n---\n Documentation/Doxyfile.in                  |   2 +\n Documentation/rotation/rotate0.svg         | 132 ++++++++++++++++++++\n Documentation/rotation/rotate0Mirror.svg   | 135 +++++++++++++++++++++\n Documentation/rotation/rotate180.svg       | 135 +++++++++++++++++++++\n Documentation/rotation/rotate180Mirror.svg | 135 +++++++++++++++++++++\n Documentation/rotation/rotate270.svg       | 135 +++++++++++++++++++++\n Documentation/rotation/rotate270Mirror.svg | 135 +++++++++++++++++++++\n Documentation/rotation/rotate90.svg        | 135 +++++++++++++++++++++\n Documentation/rotation/rotate90Mirror.svg  | 135 +++++++++++++++++++++\n src/libcamera/orientation.cpp              |  17 +++\n 10 files changed, 1096 insertions(+)\n create mode 100644 Documentation/rotation/rotate0.svg\n create mode 100644 Documentation/rotation/rotate0Mirror.svg\n create mode 100644 Documentation/rotation/rotate180.svg\n create mode 100644 Documentation/rotation/rotate180Mirror.svg\n create mode 100644 Documentation/rotation/rotate270.svg\n create mode 100644 Documentation/rotation/rotate270Mirror.svg\n create mode 100644 Documentation/rotation/rotate90.svg\n create mode 100644 Documentation/rotation/rotate90Mirror.svg",
    "diff": "diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in\nindex 697a14d1dfe2..67ee51afb6e3 100644\n--- a/Documentation/Doxyfile.in\n+++ b/Documentation/Doxyfile.in\n@@ -78,6 +78,8 @@ EXPAND_ONLY_PREDEF     = YES\n INCLUDE_PATH           = \"@TOP_SRCDIR@/include/libcamera\"\n INCLUDE_FILE_PATTERNS  = *.h\n \n+IMAGE_PATH             = \"@TOP_SRCDIR@/Documentation\"\n+\n PREDEFINED             = __DOXYGEN__ \\\n                          __cplusplus \\\n                          __attribute__(x)= \\\ndiff --git a/Documentation/rotation/rotate0.svg b/Documentation/rotation/rotate0.svg\nnew file mode 100644\nindex 000000000000..13cde16ada51\n--- /dev/null\n+++ b/Documentation/rotation/rotate0.svg\n@@ -0,0 +1,132 @@\n+<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n+<!-- Created with Inkscape (http://www.inkscape.org/) -->\n+\n+<svg\n+   width=\"297mm\"\n+   height=\"210mm\"\n+   viewBox=\"0 0 297 210\"\n+   version=\"1.1\"\n+   id=\"svg1\"\n+   inkscape:version=\"1.3 (0e150ed6c4, 2023-07-21)\"\n+   sodipodi:docname=\"rotate0.svg\"\n+   xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n+   xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n+   xmlns=\"http://www.w3.org/2000/svg\"\n+   xmlns:svg=\"http://www.w3.org/2000/svg\">\n+  <sodipodi:namedview\n+     id=\"namedview1\"\n+     pagecolor=\"#ffffff\"\n+     bordercolor=\"#666666\"\n+     borderopacity=\"1.0\"\n+     inkscape:showpageshadow=\"2\"\n+     inkscape:pageopacity=\"0.0\"\n+     inkscape:pagecheckerboard=\"0\"\n+     inkscape:deskcolor=\"#d1d1d1\"\n+     inkscape:document-units=\"mm\"\n+     showgrid=\"true\"\n+     showguides=\"false\"\n+     inkscape:zoom=\"1.4854147\"\n+     inkscape:cx=\"666.48052\"\n+     inkscape:cy=\"448.35962\"\n+     inkscape:window-width=\"1916\"\n+     inkscape:window-height=\"1040\"\n+     inkscape:window-x=\"0\"\n+     inkscape:window-y=\"38\"\n+     inkscape:window-maximized=\"1\"\n+     inkscape:current-layer=\"layer1\">\n+    <inkscape:grid\n+       id=\"grid1\"\n+       units=\"px\"\n+       originx=\"0\"\n+       originy=\"0\"\n+       spacingx=\"0.26458334\"\n+       spacingy=\"0.26458333\"\n+       empcolor=\"#0000ff\"\n+       empopacity=\"0.25098039\"\n+       color=\"#0000ff\"\n+       opacity=\"0.1254902\"\n+       empspacing=\"5\"\n+       dotted=\"false\"\n+       gridanglex=\"30\"\n+       gridanglez=\"30\"\n+       visible=\"true\" />\n+  </sodipodi:namedview>\n+  <defs\n+     id=\"defs1\" />\n+  <g\n+     inkscape:label=\"Layer 1\"\n+     inkscape:groupmode=\"layer\"\n+     id=\"layer1\">\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;paint-order:markers stroke fill;stroke-dasharray:none\"\n+       id=\"rect1\"\n+       width=\"152.88184\"\n+       height=\"119.41136\"\n+       x=\"77.237244\"\n+       y=\"81.982094\" />\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;paint-order:markers stroke fill;stroke-dasharray:none\"\n+       id=\"rect2\"\n+       width=\"49.755535\"\n+       height=\"36.468258\"\n+       x=\"92.612343\"\n+       y=\"98.912964\" />\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+       id=\"rect2-5\"\n+       width=\"49.755535\"\n+       height=\"36.468258\"\n+       x=\"167.25099\"\n+       y=\"98.912964\" />\n+    <g\n+       id=\"g4\"\n+       transform=\"translate(-0.98582077)\"\n+       style=\"stroke-width:1.5875;stroke-dasharray:none\">\n+      <rect\n+         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+         id=\"rect3\"\n+         width=\"40.994682\"\n+         height=\"43.605846\"\n+         x=\"134.16664\"\n+         y=\"157.24184\" />\n+      <ellipse\n+         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+         id=\"path3\"\n+         cx=\"140.15703\"\n+         cy=\"176.44627\"\n+         rx=\"1.889045\"\n+         ry=\"1.925626\" />\n+    </g>\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"M 244.95942,81.765726 62.444825,81.97209 154.25639,28.65633 Z\"\n+       id=\"path4\"\n+       sodipodi:nodetypes=\"cccc\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-dasharray:none\"\n+       d=\"m 199.76751,33.368887 0.0285,21.581353\"\n+       id=\"path5\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-dasharray:none\"\n+       d=\"m 215.59016,33.189206 0.0959,31.330304\"\n+       id=\"path6\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 194.42835,33.189356 25.2821,-0.220612\"\n+       id=\"path7\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-dasharray:none\"\n+       d=\"m 195.19248,33.096339 -0.0701,-5.375793 23.77787,-0.05613 0.0553,5.315811\"\n+       id=\"path8\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 194.20874,25.616264 25.25485,-0.02536\"\n+       id=\"path7-5\"\n+       sodipodi:nodetypes=\"cc\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 195.03436,26.298566 -0.0455,-5.426692 23.77787,-0.05613 0.0553,5.315811\"\n+       id=\"path8-9\"\n+       sodipodi:nodetypes=\"cccc\" />\n+  </g>\n+</svg>\ndiff --git a/Documentation/rotation/rotate0Mirror.svg b/Documentation/rotation/rotate0Mirror.svg\nnew file mode 100644\nindex 000000000000..a7edda873bf5\n--- /dev/null\n+++ b/Documentation/rotation/rotate0Mirror.svg\n@@ -0,0 +1,135 @@\n+<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n+<!-- Created with Inkscape (http://www.inkscape.org/) -->\n+\n+<svg\n+   width=\"297mm\"\n+   height=\"210mm\"\n+   viewBox=\"0 0 297 210\"\n+   version=\"1.1\"\n+   id=\"svg1\"\n+   inkscape:version=\"1.3 (0e150ed6c4, 2023-07-21)\"\n+   sodipodi:docname=\"rotate0Mirror.svg\"\n+   xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n+   xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n+   xmlns=\"http://www.w3.org/2000/svg\"\n+   xmlns:svg=\"http://www.w3.org/2000/svg\">\n+  <sodipodi:namedview\n+     id=\"namedview1\"\n+     pagecolor=\"#ffffff\"\n+     bordercolor=\"#666666\"\n+     borderopacity=\"1.0\"\n+     inkscape:showpageshadow=\"2\"\n+     inkscape:pageopacity=\"0.0\"\n+     inkscape:pagecheckerboard=\"0\"\n+     inkscape:deskcolor=\"#d1d1d1\"\n+     inkscape:document-units=\"mm\"\n+     showgrid=\"true\"\n+     showguides=\"false\"\n+     inkscape:zoom=\"0.82900578\"\n+     inkscape:cx=\"599.51331\"\n+     inkscape:cy=\"579.00682\"\n+     inkscape:window-width=\"1916\"\n+     inkscape:window-height=\"1040\"\n+     inkscape:window-x=\"0\"\n+     inkscape:window-y=\"38\"\n+     inkscape:window-maximized=\"1\"\n+     inkscape:current-layer=\"layer1\">\n+    <inkscape:grid\n+       id=\"grid1\"\n+       units=\"px\"\n+       originx=\"0\"\n+       originy=\"0\"\n+       spacingx=\"0.26458334\"\n+       spacingy=\"0.26458333\"\n+       empcolor=\"#0000ff\"\n+       empopacity=\"0.25098039\"\n+       color=\"#0000ff\"\n+       opacity=\"0.1254902\"\n+       empspacing=\"5\"\n+       dotted=\"false\"\n+       gridanglex=\"30\"\n+       gridanglez=\"30\"\n+       visible=\"true\" />\n+  </sodipodi:namedview>\n+  <defs\n+     id=\"defs1\" />\n+  <g\n+     inkscape:label=\"Layer 1\"\n+     inkscape:groupmode=\"layer\"\n+     id=\"layer1\">\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+       id=\"rect1\"\n+       width=\"152.88184\"\n+       height=\"119.41136\"\n+       x=\"-230.13463\"\n+       y=\"81.982094\"\n+       transform=\"scale(-1,1)\" />\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+       id=\"rect2\"\n+       width=\"49.755535\"\n+       height=\"36.468258\"\n+       x=\"-214.75954\"\n+       y=\"98.912964\"\n+       transform=\"scale(-1,1)\" />\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+       id=\"rect2-5\"\n+       width=\"49.755535\"\n+       height=\"36.468258\"\n+       x=\"-140.12088\"\n+       y=\"98.912964\"\n+       transform=\"scale(-1,1)\" />\n+    <g\n+       id=\"g4\"\n+       transform=\"matrix(-1,0,0,1,308.35769,0)\"\n+       style=\"stroke-width:1.5875;stroke-dasharray:none\">\n+      <rect\n+         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+         id=\"rect3\"\n+         width=\"40.994682\"\n+         height=\"43.605846\"\n+         x=\"134.16664\"\n+         y=\"157.24184\" />\n+      <ellipse\n+         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+         id=\"path3\"\n+         cx=\"140.15703\"\n+         cy=\"176.44627\"\n+         rx=\"1.889045\"\n+         ry=\"1.925626\" />\n+    </g>\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"M 62.412454,81.765726 244.92705,81.97209 153.11548,28.65633 Z\"\n+       id=\"path4\"\n+       sodipodi:nodetypes=\"cccc\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 107.60436,33.368887 -0.0285,21.581353\"\n+       id=\"path5\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 91.781714,33.189206 -0.0959,31.330304\"\n+       id=\"path6\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"M 112.94352,33.189356 87.661424,32.968744\"\n+       id=\"path7\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 112.17939,33.096339 0.0701,-5.375793 -23.777866,-0.05613 -0.0553,5.315811\"\n+       id=\"path8\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"M 113.16313,25.616264 87.908284,25.590904\"\n+       id=\"path7-5\"\n+       sodipodi:nodetypes=\"cc\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 112.33751,26.298566 0.0455,-5.426692 -23.777866,-0.05613 -0.0553,5.315811\"\n+       id=\"path8-9\"\n+       sodipodi:nodetypes=\"cccc\" />\n+  </g>\n+</svg>\ndiff --git a/Documentation/rotation/rotate180.svg b/Documentation/rotation/rotate180.svg\nnew file mode 100644\nindex 000000000000..d092a5322fb1\n--- /dev/null\n+++ b/Documentation/rotation/rotate180.svg\n@@ -0,0 +1,135 @@\n+<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n+<!-- Created with Inkscape (http://www.inkscape.org/) -->\n+\n+<svg\n+   width=\"297mm\"\n+   height=\"210mm\"\n+   viewBox=\"0 0 297 210\"\n+   version=\"1.1\"\n+   id=\"svg1\"\n+   inkscape:version=\"1.3 (0e150ed6c4, 2023-07-21)\"\n+   sodipodi:docname=\"rotate180.svg\"\n+   xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n+   xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n+   xmlns=\"http://www.w3.org/2000/svg\"\n+   xmlns:svg=\"http://www.w3.org/2000/svg\">\n+  <sodipodi:namedview\n+     id=\"namedview1\"\n+     pagecolor=\"#ffffff\"\n+     bordercolor=\"#666666\"\n+     borderopacity=\"1.0\"\n+     inkscape:showpageshadow=\"2\"\n+     inkscape:pageopacity=\"0.0\"\n+     inkscape:pagecheckerboard=\"0\"\n+     inkscape:deskcolor=\"#d1d1d1\"\n+     inkscape:document-units=\"mm\"\n+     showgrid=\"true\"\n+     showguides=\"false\"\n+     inkscape:zoom=\"0.94272086\"\n+     inkscape:cx=\"467.79489\"\n+     inkscape:cy=\"423.24299\"\n+     inkscape:window-width=\"1916\"\n+     inkscape:window-height=\"1040\"\n+     inkscape:window-x=\"0\"\n+     inkscape:window-y=\"38\"\n+     inkscape:window-maximized=\"1\"\n+     inkscape:current-layer=\"layer1\">\n+    <inkscape:grid\n+       id=\"grid1\"\n+       units=\"px\"\n+       originx=\"0\"\n+       originy=\"0\"\n+       spacingx=\"0.26458334\"\n+       spacingy=\"0.26458333\"\n+       empcolor=\"#0000ff\"\n+       empopacity=\"0.25098039\"\n+       color=\"#0000ff\"\n+       opacity=\"0.1254902\"\n+       empspacing=\"5\"\n+       dotted=\"false\"\n+       gridanglex=\"30\"\n+       gridanglez=\"30\"\n+       visible=\"true\" />\n+  </sodipodi:namedview>\n+  <defs\n+     id=\"defs1\" />\n+  <g\n+     inkscape:label=\"Layer 1\"\n+     inkscape:groupmode=\"layer\"\n+     id=\"layer1\">\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+       id=\"rect1\"\n+       width=\"152.88184\"\n+       height=\"119.41136\"\n+       x=\"-230.13461\"\n+       y=\"-140.22527\"\n+       transform=\"scale(-1)\" />\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+       id=\"rect2\"\n+       width=\"49.755535\"\n+       height=\"36.468258\"\n+       x=\"-214.75951\"\n+       y=\"-123.2944\"\n+       transform=\"scale(-1)\" />\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+       id=\"rect2-5\"\n+       width=\"49.755535\"\n+       height=\"36.468258\"\n+       x=\"-140.12086\"\n+       y=\"-123.2944\"\n+       transform=\"scale(-1)\" />\n+    <g\n+       id=\"g4\"\n+       transform=\"rotate(180,154.17884,111.10368)\"\n+       style=\"stroke-width:1.5875;stroke-dasharray:none\">\n+      <rect\n+         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+         id=\"rect3\"\n+         width=\"40.994682\"\n+         height=\"43.605846\"\n+         x=\"134.16664\"\n+         y=\"157.24184\" />\n+      <ellipse\n+         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+         id=\"path3\"\n+         cx=\"140.15703\"\n+         cy=\"176.44627\"\n+         rx=\"1.889045\"\n+         ry=\"1.925626\" />\n+    </g>\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 62.412437,140.44163 182.514593,-0.20636 -91.81156,53.31576 z\"\n+       id=\"path4\"\n+       sodipodi:nodetypes=\"cccc\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 107.60435,188.83847 -0.0285,-21.58135\"\n+       id=\"path5\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 91.781697,189.01815 -0.0959,-31.3303\"\n+       id=\"path6\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 112.94351,189.018 -25.282103,0.22061\"\n+       id=\"path7\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 112.17938,189.11102 0.0701,5.37579 -23.777873,0.0561 -0.0553,-5.31581\"\n+       id=\"path8\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 113.16312,196.59109 -25.254853,0.0254\"\n+       id=\"path7-5\"\n+       sodipodi:nodetypes=\"cc\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 112.3375,195.90879 0.0455,5.42669 -23.777873,0.0561 -0.0553,-5.31581\"\n+       id=\"path8-9\"\n+       sodipodi:nodetypes=\"cccc\" />\n+  </g>\n+</svg>\ndiff --git a/Documentation/rotation/rotate180Mirror.svg b/Documentation/rotation/rotate180Mirror.svg\nnew file mode 100644\nindex 000000000000..d4a77d500d94\n--- /dev/null\n+++ b/Documentation/rotation/rotate180Mirror.svg\n@@ -0,0 +1,135 @@\n+<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n+<!-- Created with Inkscape (http://www.inkscape.org/) -->\n+\n+<svg\n+   width=\"297mm\"\n+   height=\"210mm\"\n+   viewBox=\"0 0 297 210\"\n+   version=\"1.1\"\n+   id=\"svg1\"\n+   inkscape:version=\"1.3 (0e150ed6c4, 2023-07-21)\"\n+   sodipodi:docname=\"rotate180Mirror.svg\"\n+   xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n+   xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n+   xmlns=\"http://www.w3.org/2000/svg\"\n+   xmlns:svg=\"http://www.w3.org/2000/svg\">\n+  <sodipodi:namedview\n+     id=\"namedview1\"\n+     pagecolor=\"#ffffff\"\n+     bordercolor=\"#666666\"\n+     borderopacity=\"1.0\"\n+     inkscape:showpageshadow=\"2\"\n+     inkscape:pageopacity=\"0.0\"\n+     inkscape:pagecheckerboard=\"0\"\n+     inkscape:deskcolor=\"#d1d1d1\"\n+     inkscape:document-units=\"mm\"\n+     showgrid=\"true\"\n+     showguides=\"false\"\n+     inkscape:zoom=\"0.94272086\"\n+     inkscape:cx=\"467.79489\"\n+     inkscape:cy=\"423.24299\"\n+     inkscape:window-width=\"1916\"\n+     inkscape:window-height=\"1040\"\n+     inkscape:window-x=\"0\"\n+     inkscape:window-y=\"38\"\n+     inkscape:window-maximized=\"1\"\n+     inkscape:current-layer=\"layer1\">\n+    <inkscape:grid\n+       id=\"grid1\"\n+       units=\"px\"\n+       originx=\"0\"\n+       originy=\"0\"\n+       spacingx=\"0.26458334\"\n+       spacingy=\"0.26458333\"\n+       empcolor=\"#0000ff\"\n+       empopacity=\"0.25098039\"\n+       color=\"#0000ff\"\n+       opacity=\"0.1254902\"\n+       empspacing=\"5\"\n+       dotted=\"false\"\n+       gridanglex=\"30\"\n+       gridanglez=\"30\"\n+       visible=\"true\" />\n+  </sodipodi:namedview>\n+  <defs\n+     id=\"defs1\" />\n+  <g\n+     inkscape:label=\"Layer 1\"\n+     inkscape:groupmode=\"layer\"\n+     id=\"layer1\">\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+       id=\"rect1\"\n+       width=\"152.88184\"\n+       height=\"119.41136\"\n+       x=\"77.237228\"\n+       y=\"-140.22527\"\n+       transform=\"scale(1,-1)\" />\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+       id=\"rect2\"\n+       width=\"49.755535\"\n+       height=\"36.468258\"\n+       x=\"92.612335\"\n+       y=\"-123.2944\"\n+       transform=\"scale(1,-1)\" />\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+       id=\"rect2-5\"\n+       width=\"49.755535\"\n+       height=\"36.468258\"\n+       x=\"167.25098\"\n+       y=\"-123.2944\"\n+       transform=\"scale(1,-1)\" />\n+    <g\n+       id=\"g4\"\n+       transform=\"matrix(1,0,0,-1,-0.98584226,222.20736)\"\n+       style=\"stroke-width:1.5875;stroke-dasharray:none\">\n+      <rect\n+         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+         id=\"rect3\"\n+         width=\"40.994682\"\n+         height=\"43.605846\"\n+         x=\"134.16664\"\n+         y=\"157.24184\" />\n+      <ellipse\n+         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+         id=\"path3\"\n+         cx=\"140.15703\"\n+         cy=\"176.44627\"\n+         rx=\"1.889045\"\n+         ry=\"1.925626\" />\n+    </g>\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"M 244.9594,140.44163 62.444808,140.23527 154.25637,193.55103 Z\"\n+       id=\"path4\"\n+       sodipodi:nodetypes=\"cccc\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 199.76749,188.83847 0.0285,-21.58135\"\n+       id=\"path5\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 215.59014,189.01815 0.0959,-31.3303\"\n+       id=\"path6\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 194.42833,189.018 25.2821,0.22061\"\n+       id=\"path7\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 195.19246,189.11102 -0.0701,5.37579 23.77787,0.0561 0.0553,-5.31581\"\n+       id=\"path8\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 194.20872,196.59109 25.25485,0.0254\"\n+       id=\"path7-5\"\n+       sodipodi:nodetypes=\"cc\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 195.03434,195.90879 -0.0455,5.42669 23.77787,0.0561 0.0553,-5.31581\"\n+       id=\"path8-9\"\n+       sodipodi:nodetypes=\"cccc\" />\n+  </g>\n+</svg>\ndiff --git a/Documentation/rotation/rotate270.svg b/Documentation/rotation/rotate270.svg\nnew file mode 100644\nindex 000000000000..13ea1e5df918\n--- /dev/null\n+++ b/Documentation/rotation/rotate270.svg\n@@ -0,0 +1,135 @@\n+<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n+<!-- Created with Inkscape (http://www.inkscape.org/) -->\n+\n+<svg\n+   width=\"297mm\"\n+   height=\"210mm\"\n+   viewBox=\"0 0 297 210\"\n+   version=\"1.1\"\n+   id=\"svg1\"\n+   inkscape:version=\"1.3 (0e150ed6c4, 2023-07-21)\"\n+   sodipodi:docname=\"rotate270.svg\"\n+   xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n+   xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n+   xmlns=\"http://www.w3.org/2000/svg\"\n+   xmlns:svg=\"http://www.w3.org/2000/svg\">\n+  <sodipodi:namedview\n+     id=\"namedview1\"\n+     pagecolor=\"#ffffff\"\n+     bordercolor=\"#666666\"\n+     borderopacity=\"1.0\"\n+     inkscape:showpageshadow=\"2\"\n+     inkscape:pageopacity=\"0.0\"\n+     inkscape:pagecheckerboard=\"0\"\n+     inkscape:deskcolor=\"#d1d1d1\"\n+     inkscape:document-units=\"mm\"\n+     showgrid=\"true\"\n+     showguides=\"false\"\n+     inkscape:zoom=\"0.94272086\"\n+     inkscape:cx=\"467.26451\"\n+     inkscape:cy=\"423.24299\"\n+     inkscape:window-width=\"1916\"\n+     inkscape:window-height=\"1040\"\n+     inkscape:window-x=\"0\"\n+     inkscape:window-y=\"38\"\n+     inkscape:window-maximized=\"1\"\n+     inkscape:current-layer=\"layer1\">\n+    <inkscape:grid\n+       id=\"grid1\"\n+       units=\"px\"\n+       originx=\"0\"\n+       originy=\"0\"\n+       spacingx=\"0.26458334\"\n+       spacingy=\"0.26458333\"\n+       empcolor=\"#0000ff\"\n+       empopacity=\"0.25098039\"\n+       color=\"#0000ff\"\n+       opacity=\"0.1254902\"\n+       empspacing=\"5\"\n+       dotted=\"false\"\n+       gridanglex=\"30\"\n+       gridanglez=\"30\"\n+       visible=\"true\" />\n+  </sodipodi:namedview>\n+  <defs\n+     id=\"defs1\" />\n+  <g\n+     inkscape:label=\"Layer 1\"\n+     inkscape:groupmode=\"layer\"\n+     id=\"layer1\">\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+       id=\"rect1\"\n+       width=\"152.88184\"\n+       height=\"119.41136\"\n+       x=\"-187.55237\"\n+       y=\"124.56432\"\n+       transform=\"rotate(-90)\" />\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+       id=\"rect2\"\n+       width=\"49.755535\"\n+       height=\"36.468258\"\n+       x=\"-172.17726\"\n+       y=\"141.49518\"\n+       transform=\"rotate(-90)\" />\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+       id=\"rect2-5\"\n+       width=\"49.755535\"\n+       height=\"36.468258\"\n+       x=\"-97.538612\"\n+       y=\"141.49518\"\n+       transform=\"rotate(-90)\" />\n+    <g\n+       id=\"g4\"\n+       transform=\"rotate(-90,154.17883,111.5966)\"\n+       style=\"stroke-width:1.5875;stroke-dasharray:none\">\n+      <rect\n+         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+         id=\"rect3\"\n+         width=\"40.994682\"\n+         height=\"43.605846\"\n+         x=\"134.16664\"\n+         y=\"157.24184\" />\n+      <ellipse\n+         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+         id=\"path3\"\n+         cx=\"140.15703\"\n+         cy=\"176.44627\"\n+         rx=\"1.889045\"\n+         ry=\"1.925626\" />\n+    </g>\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"M 124.34796,19.830188 124.55432,202.34478 71.238559,110.53322 Z\"\n+       id=\"path4\"\n+       sodipodi:nodetypes=\"cccc\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 75.951119,65.022101 21.58135,-0.0285\"\n+       id=\"path5\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 75.771439,49.199448 31.330301,-0.0959\"\n+       id=\"path6\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"M 75.771589,70.361261 75.550979,45.079158\"\n+       id=\"path7\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 75.678569,69.597131 -5.37579,0.0701 -0.0561,-23.777873 5.31581,-0.0553\"\n+       id=\"path8\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 68.198499,70.580871 -0.0254,-25.254853\"\n+       id=\"path7-5\"\n+       sodipodi:nodetypes=\"cc\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 68.880799,69.755251 -5.42669,0.0455 -0.0561,-23.777873 5.31581,-0.0553\"\n+       id=\"path8-9\"\n+       sodipodi:nodetypes=\"cccc\" />\n+  </g>\n+</svg>\ndiff --git a/Documentation/rotation/rotate270Mirror.svg b/Documentation/rotation/rotate270Mirror.svg\nnew file mode 100644\nindex 000000000000..6116f50aa96e\n--- /dev/null\n+++ b/Documentation/rotation/rotate270Mirror.svg\n@@ -0,0 +1,135 @@\n+<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n+<!-- Created with Inkscape (http://www.inkscape.org/) -->\n+\n+<svg\n+   width=\"297mm\"\n+   height=\"210mm\"\n+   viewBox=\"0 0 297 210\"\n+   version=\"1.1\"\n+   id=\"svg1\"\n+   inkscape:version=\"1.3 (0e150ed6c4, 2023-07-21)\"\n+   sodipodi:docname=\"rotate270Mirror.svg\"\n+   xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n+   xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n+   xmlns=\"http://www.w3.org/2000/svg\"\n+   xmlns:svg=\"http://www.w3.org/2000/svg\">\n+  <sodipodi:namedview\n+     id=\"namedview1\"\n+     pagecolor=\"#ffffff\"\n+     bordercolor=\"#666666\"\n+     borderopacity=\"1.0\"\n+     inkscape:showpageshadow=\"2\"\n+     inkscape:pageopacity=\"0.0\"\n+     inkscape:pagecheckerboard=\"0\"\n+     inkscape:deskcolor=\"#d1d1d1\"\n+     inkscape:document-units=\"mm\"\n+     showgrid=\"true\"\n+     showguides=\"false\"\n+     inkscape:zoom=\"0.94272086\"\n+     inkscape:cx=\"467.79489\"\n+     inkscape:cy=\"423.24299\"\n+     inkscape:window-width=\"1916\"\n+     inkscape:window-height=\"1040\"\n+     inkscape:window-x=\"0\"\n+     inkscape:window-y=\"38\"\n+     inkscape:window-maximized=\"1\"\n+     inkscape:current-layer=\"layer1\">\n+    <inkscape:grid\n+       id=\"grid1\"\n+       units=\"px\"\n+       originx=\"0\"\n+       originy=\"0\"\n+       spacingx=\"0.26458334\"\n+       spacingy=\"0.26458333\"\n+       empcolor=\"#0000ff\"\n+       empopacity=\"0.25098039\"\n+       color=\"#0000ff\"\n+       opacity=\"0.1254902\"\n+       empspacing=\"5\"\n+       dotted=\"false\"\n+       gridanglex=\"30\"\n+       gridanglez=\"30\"\n+       visible=\"true\" />\n+  </sodipodi:namedview>\n+  <defs\n+     id=\"defs1\" />\n+  <g\n+     inkscape:label=\"Layer 1\"\n+     inkscape:groupmode=\"layer\"\n+     id=\"layer1\">\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+       id=\"rect1\"\n+       width=\"152.88184\"\n+       height=\"119.41136\"\n+       x=\"-187.55237\"\n+       y=\"-182.80751\"\n+       transform=\"matrix(0,-1,-1,0,0,0)\" />\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+       id=\"rect2\"\n+       width=\"49.755535\"\n+       height=\"36.468258\"\n+       x=\"-172.17726\"\n+       y=\"-165.87666\"\n+       transform=\"matrix(0,-1,-1,0,0,0)\" />\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+       id=\"rect2-5\"\n+       width=\"49.755535\"\n+       height=\"36.468258\"\n+       x=\"-97.538612\"\n+       y=\"-165.87666\"\n+       transform=\"matrix(0,-1,-1,0,0,0)\" />\n+    <g\n+       id=\"g4\"\n+       transform=\"matrix(0,-1,-1,0,264.78961,265.77543)\"\n+       style=\"stroke-width:1.5875;stroke-dasharray:none\">\n+      <rect\n+         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+         id=\"rect3\"\n+         width=\"40.994682\"\n+         height=\"43.605846\"\n+         x=\"134.16664\"\n+         y=\"157.24184\" />\n+      <ellipse\n+         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+         id=\"path3\"\n+         cx=\"140.15703\"\n+         cy=\"176.44627\"\n+         rx=\"1.889045\"\n+         ry=\"1.925626\" />\n+    </g>\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 183.02388,19.830188 -0.20636,182.514592 53.31576,-91.81156 z\"\n+       id=\"path4\"\n+       sodipodi:nodetypes=\"cccc\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 231.42072,65.022101 -21.58135,-0.0285\"\n+       id=\"path5\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 231.6004,49.199448 -31.3303,-0.0959\"\n+       id=\"path6\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 231.60025,70.361261 0.22061,-25.282103\"\n+       id=\"path7\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 231.69327,69.597131 5.37579,0.0701 0.0561,-23.777873 -5.31581,-0.0553\"\n+       id=\"path8\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 239.17334,70.580871 0.0254,-25.254853\"\n+       id=\"path7-5\"\n+       sodipodi:nodetypes=\"cc\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 238.49104,69.755251 5.42669,0.0455 0.0561,-23.777873 -5.31581,-0.0553\"\n+       id=\"path8-9\"\n+       sodipodi:nodetypes=\"cccc\" />\n+  </g>\n+</svg>\ndiff --git a/Documentation/rotation/rotate90.svg b/Documentation/rotation/rotate90.svg\nnew file mode 100644\nindex 000000000000..af6276383c79\n--- /dev/null\n+++ b/Documentation/rotation/rotate90.svg\n@@ -0,0 +1,135 @@\n+<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n+<!-- Created with Inkscape (http://www.inkscape.org/) -->\n+\n+<svg\n+   width=\"297mm\"\n+   height=\"210mm\"\n+   viewBox=\"0 0 297 210\"\n+   version=\"1.1\"\n+   id=\"svg1\"\n+   inkscape:version=\"1.3 (0e150ed6c4, 2023-07-21)\"\n+   sodipodi:docname=\"rotate90.svg\"\n+   xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n+   xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n+   xmlns=\"http://www.w3.org/2000/svg\"\n+   xmlns:svg=\"http://www.w3.org/2000/svg\">\n+  <sodipodi:namedview\n+     id=\"namedview1\"\n+     pagecolor=\"#ffffff\"\n+     bordercolor=\"#666666\"\n+     borderopacity=\"1.0\"\n+     inkscape:showpageshadow=\"2\"\n+     inkscape:pageopacity=\"0.0\"\n+     inkscape:pagecheckerboard=\"0\"\n+     inkscape:deskcolor=\"#d1d1d1\"\n+     inkscape:document-units=\"mm\"\n+     showgrid=\"true\"\n+     showguides=\"false\"\n+     inkscape:zoom=\"0.94272086\"\n+     inkscape:cx=\"467.26451\"\n+     inkscape:cy=\"423.24299\"\n+     inkscape:window-width=\"1916\"\n+     inkscape:window-height=\"1040\"\n+     inkscape:window-x=\"0\"\n+     inkscape:window-y=\"38\"\n+     inkscape:window-maximized=\"1\"\n+     inkscape:current-layer=\"layer1\">\n+    <inkscape:grid\n+       id=\"grid1\"\n+       units=\"px\"\n+       originx=\"0\"\n+       originy=\"0\"\n+       spacingx=\"0.26458334\"\n+       spacingy=\"0.26458333\"\n+       empcolor=\"#0000ff\"\n+       empopacity=\"0.25098039\"\n+       color=\"#0000ff\"\n+       opacity=\"0.1254902\"\n+       empspacing=\"5\"\n+       dotted=\"false\"\n+       gridanglex=\"30\"\n+       gridanglez=\"30\"\n+       visible=\"true\" />\n+  </sodipodi:namedview>\n+  <defs\n+     id=\"defs1\" />\n+  <g\n+     inkscape:label=\"Layer 1\"\n+     inkscape:groupmode=\"layer\"\n+     id=\"layer1\">\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+       id=\"rect1\"\n+       width=\"152.88184\"\n+       height=\"119.41136\"\n+       x=\"34.65498\"\n+       y=\"-182.80751\"\n+       transform=\"rotate(90)\" />\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+       id=\"rect2\"\n+       width=\"49.755535\"\n+       height=\"36.468258\"\n+       x=\"50.030079\"\n+       y=\"-165.87665\"\n+       transform=\"rotate(90)\" />\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+       id=\"rect2-5\"\n+       width=\"49.755535\"\n+       height=\"36.468258\"\n+       x=\"124.66872\"\n+       y=\"-165.87665\"\n+       transform=\"rotate(90)\" />\n+    <g\n+       id=\"g4\"\n+       transform=\"rotate(90,154.17885,110.61076)\"\n+       style=\"stroke-width:1.5875;stroke-dasharray:none\">\n+      <rect\n+         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+         id=\"rect3\"\n+         width=\"40.994682\"\n+         height=\"43.605846\"\n+         x=\"134.16664\"\n+         y=\"157.24184\" />\n+      <ellipse\n+         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+         id=\"path3\"\n+         cx=\"140.15703\"\n+         cy=\"176.44627\"\n+         rx=\"1.889045\"\n+         ry=\"1.925626\" />\n+    </g>\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 183.02388,202.37715 -0.20636,-182.51459 53.31576,91.81156 z\"\n+       id=\"path4\"\n+       sodipodi:nodetypes=\"cccc\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 231.42072,157.18524 -21.58135,0.0285\"\n+       id=\"path5\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 231.6004,173.00789 -31.3303,0.0959\"\n+       id=\"path6\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 231.60025,151.84608 0.22061,25.2821\"\n+       id=\"path7\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 231.69327,152.61021 5.37579,-0.0701 0.0561,23.77787 -5.31581,0.0553\"\n+       id=\"path8\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 239.17334,151.62647 0.0254,25.25485\"\n+       id=\"path7-5\"\n+       sodipodi:nodetypes=\"cc\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 238.49104,152.45209 5.42669,-0.0455 0.0561,23.77787 -5.31581,0.0553\"\n+       id=\"path8-9\"\n+       sodipodi:nodetypes=\"cccc\" />\n+  </g>\n+</svg>\ndiff --git a/Documentation/rotation/rotate90Mirror.svg b/Documentation/rotation/rotate90Mirror.svg\nnew file mode 100644\nindex 000000000000..1760c46226ab\n--- /dev/null\n+++ b/Documentation/rotation/rotate90Mirror.svg\n@@ -0,0 +1,135 @@\n+<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n+<!-- Created with Inkscape (http://www.inkscape.org/) -->\n+\n+<svg\n+   width=\"297mm\"\n+   height=\"210mm\"\n+   viewBox=\"0 0 297 210\"\n+   version=\"1.1\"\n+   id=\"svg1\"\n+   inkscape:version=\"1.3 (0e150ed6c4, 2023-07-21)\"\n+   sodipodi:docname=\"rotate90Mirror.svg\"\n+   xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n+   xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n+   xmlns=\"http://www.w3.org/2000/svg\"\n+   xmlns:svg=\"http://www.w3.org/2000/svg\">\n+  <sodipodi:namedview\n+     id=\"namedview1\"\n+     pagecolor=\"#ffffff\"\n+     bordercolor=\"#666666\"\n+     borderopacity=\"1.0\"\n+     inkscape:showpageshadow=\"2\"\n+     inkscape:pageopacity=\"0.0\"\n+     inkscape:pagecheckerboard=\"0\"\n+     inkscape:deskcolor=\"#d1d1d1\"\n+     inkscape:document-units=\"mm\"\n+     showgrid=\"true\"\n+     showguides=\"false\"\n+     inkscape:zoom=\"0.94272086\"\n+     inkscape:cx=\"467.79489\"\n+     inkscape:cy=\"423.24299\"\n+     inkscape:window-width=\"1916\"\n+     inkscape:window-height=\"1040\"\n+     inkscape:window-x=\"0\"\n+     inkscape:window-y=\"38\"\n+     inkscape:window-maximized=\"1\"\n+     inkscape:current-layer=\"layer1\">\n+    <inkscape:grid\n+       id=\"grid1\"\n+       units=\"px\"\n+       originx=\"0\"\n+       originy=\"0\"\n+       spacingx=\"0.26458334\"\n+       spacingy=\"0.26458333\"\n+       empcolor=\"#0000ff\"\n+       empopacity=\"0.25098039\"\n+       color=\"#0000ff\"\n+       opacity=\"0.1254902\"\n+       empspacing=\"5\"\n+       dotted=\"false\"\n+       gridanglex=\"30\"\n+       gridanglez=\"30\"\n+       visible=\"true\" />\n+  </sodipodi:namedview>\n+  <defs\n+     id=\"defs1\" />\n+  <g\n+     inkscape:label=\"Layer 1\"\n+     inkscape:groupmode=\"layer\"\n+     id=\"layer1\">\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+       id=\"rect1\"\n+       width=\"152.88184\"\n+       height=\"119.41136\"\n+       x=\"34.65498\"\n+       y=\"124.56432\"\n+       transform=\"matrix(0,1,1,0,0,0)\" />\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+       id=\"rect2\"\n+       width=\"49.755535\"\n+       height=\"36.468258\"\n+       x=\"50.030079\"\n+       y=\"141.49519\"\n+       transform=\"matrix(0,1,1,0,0,0)\" />\n+    <rect\n+       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+       id=\"rect2-5\"\n+       width=\"49.755535\"\n+       height=\"36.468258\"\n+       x=\"124.66872\"\n+       y=\"141.49519\"\n+       transform=\"matrix(0,1,1,0,0,0)\" />\n+    <g\n+       id=\"g4\"\n+       transform=\"matrix(0,1,1,0,42.582224,-43.56809)\"\n+       style=\"stroke-width:1.5875;stroke-dasharray:none\">\n+      <rect\n+         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+         id=\"rect3\"\n+         width=\"40.994682\"\n+         height=\"43.605846\"\n+         x=\"134.16664\"\n+         y=\"157.24184\" />\n+      <ellipse\n+         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n+         id=\"path3\"\n+         cx=\"140.15703\"\n+         cy=\"176.44627\"\n+         rx=\"1.889045\"\n+         ry=\"1.925626\" />\n+    </g>\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"M 124.34795,202.37715 124.55431,19.86256 71.238554,111.67412 Z\"\n+       id=\"path4\"\n+       sodipodi:nodetypes=\"cccc\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 75.951114,157.18524 21.58135,0.0285\"\n+       id=\"path5\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 75.771434,173.00789 31.330296,0.0959\"\n+       id=\"path6\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 75.771584,151.84608 -0.22061,25.2821\"\n+       id=\"path7\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 75.678564,152.61021 -5.37579,-0.0701 -0.0561,23.77787 5.31581,0.0553\"\n+       id=\"path8\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 68.198494,151.62647 -0.0254,25.25485\"\n+       id=\"path7-5\"\n+       sodipodi:nodetypes=\"cc\" />\n+    <path\n+       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n+       d=\"m 68.880794,152.45209 -5.42669,-0.0455 -0.0561,23.77787 5.31581,0.0553\"\n+       id=\"path8-9\"\n+       sodipodi:nodetypes=\"cccc\" />\n+  </g>\n+</svg>\ndiff --git a/src/libcamera/orientation.cpp b/src/libcamera/orientation.cpp\nindex 61f26cfda31b..5caf76f73865 100644\n--- a/src/libcamera/orientation.cpp\n+++ b/src/libcamera/orientation.cpp\n@@ -37,6 +37,23 @@ namespace libcamera {\n  * In example Orientation::Rotate90Mirror describes the image transformation\n  * obtained by rotating 90 degrees clockwise first and then applying an\n  * horizontal mirroring.\n+ *\n+ * \\var CameraConfiguration::Rotate0\n+ * \\image html rotation/rotate0.svg\n+ * \\var CameraConfiguration::Rotate0Mirror\n+ * \\image html rotation/rotate0Mirror.svg\n+ * \\var CameraConfiguration::Rotate180\n+ * \\image html rotation/rotate180.svg\n+ * \\var CameraConfiguration::Rotate180Mirror\n+ * \\image html rotation/rotate180Mirror.svg\n+ * \\var CameraConfiguration::Rotate90Mirror\n+ * \\image html rotation/rotate90Mirror.svg\n+ * \\var CameraConfiguration::Rotate270\n+ * \\image html rotation/rotate270.svg\n+ * \\var CameraConfiguration::Rotate270Mirror\n+ * \\image html rotation/rotate270Mirror.svg\n+ * \\var CameraConfiguration::Rotate90\n+ * \\image html rotation/rotate90.svg\n  */\n \n /**\n",
    "prefixes": [
        "libcamera-devel",
        "v6",
        "03/12"
    ]
}