Show a patch.

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

{
    "id": 4128,
    "url": "https://patchwork.libcamera.org/api/patches/4128/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/4128/",
    "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": "<20200623020930.1781469-2-niklas.soderlund@ragnatech.se>",
    "date": "2020-06-23T02:09:21",
    "name": "[libcamera-devel,v3,01/10] libcamera: camera_sensor: Make mbusCodes() return a set",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "43fe9772df86037df8c7c35998d3fe220ae4c478",
    "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/4128/mbox/",
    "series": [
        {
            "id": 1027,
            "url": "https://patchwork.libcamera.org/api/series/1027/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=1027",
            "date": "2020-06-23T02:09:20",
            "name": "libcamera: ipu3: Allow zero-copy RAW stream",
            "version": 3,
            "mbox": "https://patchwork.libcamera.org/series/1027/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/4128/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/4128/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<niklas.soderlund@ragnatech.se>",
        "Received": [
            "from bin-mail-out-06.binero.net (bin-mail-out-06.binero.net\n\t[195.74.38.229])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9962E603BF\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 23 Jun 2020 04:09:43 +0200 (CEST)",
            "from bismarck.berto.se (p4fca2eca.dip0.t-ipconnect.de\n\t[79.202.46.202]) by bin-vsp-out-01.atm.binero.net (Halon) with ESMTPA\n\tid 99e4d2a0-b4f6-11ea-933e-005056917a89;\n\tTue, 23 Jun 2020 04:09:42 +0200 (CEST)"
        ],
        "X-Halon-ID": "99e4d2a0-b4f6-11ea-933e-005056917a89",
        "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": "Tue, 23 Jun 2020 04:09:21 +0200",
        "Message-Id": "<20200623020930.1781469-2-niklas.soderlund@ragnatech.se>",
        "X-Mailer": "git-send-email 2.27.0",
        "In-Reply-To": "<20200623020930.1781469-1-niklas.soderlund@ragnatech.se>",
        "References": "<20200623020930.1781469-1-niklas.soderlund@ragnatech.se>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH v3 01/10] libcamera: camera_sensor: Make\n\tmbusCodes() return a set",
        "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>",
        "X-List-Received-Date": "Tue, 23 Jun 2020 02:09:44 -0000"
    },
    "content": "It makes little sens for a CameraSensor to support the same media bus\nformat multiple times, change the container from a vector<> to a set<>.\n\nThis was discovered while working with the IPU3 pipeline handler that\nUnnecessarily had to carry code to sort vectors in order to find\nintersections. As this change requires switching the container to set<>\nin that pipeline handler as well fix this while we are at it.\n\nSigned-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n---\n include/libcamera/internal/camera_sensor.h |  4 ++--\n include/libcamera/internal/formats.h       |  2 +-\n src/libcamera/camera_sensor.cpp            |  1 -\n src/libcamera/formats.cpp                  |  7 +++----\n src/libcamera/pipeline/ipu3/ipu3.cpp       | 13 +++++--------\n test/camera-sensor.cpp                     |  2 +-\n 6 files changed, 12 insertions(+), 17 deletions(-)",
    "diff": "diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h\nindex 7f07413f95602881..6d92818f16e4b752 100644\n--- a/include/libcamera/internal/camera_sensor.h\n+++ b/include/libcamera/internal/camera_sensor.h\n@@ -50,7 +50,7 @@ public:\n \n \tconst std::string &model() const { return model_; }\n \tconst MediaEntity *entity() const { return entity_; }\n-\tconst std::vector<unsigned int> &mbusCodes() const { return mbusCodes_; }\n+\tconst std::set<unsigned int> &mbusCodes() const { return mbusCodes_; }\n \tconst std::vector<Size> &sizes() const { return sizes_; }\n \tconst Size &resolution() const { return resolution_; }\n \n@@ -77,7 +77,7 @@ private:\n \n \tImageFormats formats_;\n \tSize resolution_;\n-\tstd::vector<unsigned int> mbusCodes_;\n+\tstd::set<unsigned int> mbusCodes_;\n \tstd::vector<Size> sizes_;\n \n \tControlList properties_;\ndiff --git a/include/libcamera/internal/formats.h b/include/libcamera/internal/formats.h\nindex 4b172efc6588d374..e8aa555dcbe99350 100644\n--- a/include/libcamera/internal/formats.h\n+++ b/include/libcamera/internal/formats.h\n@@ -24,7 +24,7 @@ public:\n \tint addFormat(unsigned int format, const std::vector<SizeRange> &sizes);\n \n \tbool isEmpty() const;\n-\tstd::vector<unsigned int> formats() const;\n+\tstd::set<unsigned int> formats() const;\n \tconst std::vector<SizeRange> &sizes(unsigned int format) const;\n \tconst std::map<unsigned int, std::vector<SizeRange>> &data() const;\n \ndiff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp\nindex b14b4051dca606b9..5ab50de660534f3f 100644\n--- a/src/libcamera/camera_sensor.cpp\n+++ b/src/libcamera/camera_sensor.cpp\n@@ -251,7 +251,6 @@ int CameraSensor::init()\n \t}\n \n \tmbusCodes_ = formats_.formats();\n-\tstd::sort(mbusCodes_.begin(), mbusCodes_.end());\n \n \tfor (const auto &format : formats_.data()) {\n \t\tconst std::vector<SizeRange> &ranges = format.second;\ndiff --git a/src/libcamera/formats.cpp b/src/libcamera/formats.cpp\nindex 1272de29c802c539..6234fd98f3e2002c 100644\n--- a/src/libcamera/formats.cpp\n+++ b/src/libcamera/formats.cpp\n@@ -68,14 +68,13 @@ bool ImageFormats::isEmpty() const\n  * \\brief Retrieve a list of all supported image formats\n  * \\return List of pixel formats or media bus codes\n  */\n-std::vector<unsigned int> ImageFormats::formats() const\n+std::set<unsigned int> ImageFormats::formats() const\n {\n-\tstd::vector<unsigned int> formats;\n-\tformats.reserve(data_.size());\n+\tstd::set<unsigned int> formats;\n \n \t/* \\todo: Should this be cached instead of computed each time? */\n \tfor (auto const &it : data_)\n-\t\tformats.push_back(it.first);\n+\t\tformats.insert(it.first);\n \n \treturn formats;\n }\ndiff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\nindex 5544288b14f739c0..1a59de0c58975b3c 100644\n--- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n@@ -1441,15 +1441,12 @@ int CIO2Device::init(const MediaDevice *media, unsigned int index)\n \t/*\n \t * Make sure the sensor produces at least one format compatible with\n \t * the CIO2 requirements.\n-\t *\n-\t * utils::set_overlap requires the ranges to be sorted, keep the\n-\t * cio2Codes vector sorted in ascending order.\n \t */\n-\tconst std::vector<unsigned int> cio2Codes{ MEDIA_BUS_FMT_SBGGR10_1X10,\n-\t\t\t\t\t\t   MEDIA_BUS_FMT_SGRBG10_1X10,\n-\t\t\t\t\t\t   MEDIA_BUS_FMT_SGBRG10_1X10,\n-\t\t\t\t\t\t   MEDIA_BUS_FMT_SRGGB10_1X10 };\n-\tconst std::vector<unsigned int> &sensorCodes = sensor_->mbusCodes();\n+\tconst std::set<unsigned int> cio2Codes{ MEDIA_BUS_FMT_SBGGR10_1X10,\n+\t\t\t\t\t\tMEDIA_BUS_FMT_SGRBG10_1X10,\n+\t\t\t\t\t\tMEDIA_BUS_FMT_SGBRG10_1X10,\n+\t\t\t\t\t\tMEDIA_BUS_FMT_SRGGB10_1X10 };\n+\tconst std::set<unsigned int> &sensorCodes = sensor_->mbusCodes();\n \tif (!utils::set_overlap(sensorCodes.begin(), sensorCodes.end(),\n \t\t\t\tcio2Codes.begin(), cio2Codes.end())) {\n \t\tLOG(IPU3, Error)\ndiff --git a/test/camera-sensor.cpp b/test/camera-sensor.cpp\nindex 8c7fd1d2d4445db3..146b1b7d6c294fdb 100644\n--- a/test/camera-sensor.cpp\n+++ b/test/camera-sensor.cpp\n@@ -67,7 +67,7 @@ protected:\n \t\t\treturn TestFail;\n \t\t}\n \n-\t\tconst std::vector<unsigned int> &codes = sensor_->mbusCodes();\n+\t\tconst std::set<unsigned int> &codes = sensor_->mbusCodes();\n \t\tauto iter = std::find(codes.begin(), codes.end(),\n \t\t\t\t      MEDIA_BUS_FMT_ARGB8888_1X32);\n \t\tif (iter == codes.end()) {\n",
    "prefixes": [
        "libcamera-devel",
        "v3",
        "01/10"
    ]
}