Cover Letter Detail
Show a cover letter.
GET /api/1.1/covers/18751/?format=api
{ "id": 18751, "url": "https://patchwork.libcamera.org/api/1.1/covers/18751/?format=api", "web_url": "https://patchwork.libcamera.org/cover/18751/", "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": "<20230620142904.72600-1-jacopo.mondi@ideasonboard.com>", "date": "2023-06-20T14:29:00", "name": "[libcamera-devel,RFC,0/4] libcamera: Replace CameraConfiguration::transform", "submitter": { "id": 143, "url": "https://patchwork.libcamera.org/api/1.1/people/143/?format=api", "name": "Jacopo Mondi", "email": "jacopo.mondi@ideasonboard.com" }, "mbox": "https://patchwork.libcamera.org/cover/18751/mbox/", "series": [ { "id": 3932, "url": "https://patchwork.libcamera.org/api/1.1/series/3932/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=3932", "date": "2023-06-20T14:29:00", "name": "libcamera: Replace CameraConfiguration::transform", "version": 1, "mbox": "https://patchwork.libcamera.org/series/3932/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/covers/18751/comments/", "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 7EEAFBD78E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 20 Jun 2023 14:29:20 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 971D9628C4;\n\tTue, 20 Jun 2023 16:29:19 +0200 (CEST)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E6132617B2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 20 Jun 2023 16:29:17 +0200 (CEST)", "from uno.lan (unknown [IPv6:2001:b07:5d2e:52c9:72c3:346:a663:c82d])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 9C9792B3;\n\tTue, 20 Jun 2023 16:28:42 +0200 (CEST)" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1687271359;\n\tbh=532uo/0a1TVcjNDAKzFvpD9O1ULqaKihMWI3Kw1Ptc8=;\n\th=To:Date:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post:\n\tList-Help:List-Subscribe:From:Reply-To:Cc:From;\n\tb=4VVe91w6FmJ8Jej30CynBSH4E5qXgwph/rdNI+AyB9syia+m6iAnSYW0YqRyXnHhl\n\t+6t5P3Yz7rn2Y/T8Ft/m9FlIYGfI6J9Dz8zVjlnYOgqaGADbK/7oS/aOwBCYP0UZML\n\t56W9sWnLzrVisN85D8LpoETjSUy/KeHjSxvnwXZfHQt37W7ldeDJ91Rcs2n8vD8aH6\n\tSssSRJ5wf262+3w4+8wwd6cq5qKCHeWubAr9Ta0MD7GtJBDa1SdfRN1pPj2jdbeBpD\n\tJI+I59tfs5jn6E3aeQewuZ/XB6q6zGmAt7glc3Wh2vBfnEmUszOD8NVo0eBXJrJfwo\n\tIdymAXeZRdaxg==", "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1687271323;\n\tbh=532uo/0a1TVcjNDAKzFvpD9O1ULqaKihMWI3Kw1Ptc8=;\n\th=From:To:Cc:Subject:Date:From;\n\tb=niK6bumCirJ+UdFlPe+SEZZPqMsdk3KeQXZSksnJBLPaLIvEIEqrGJF70MZCSyV35\n\tRk6Ijbf9dALYDMOcm+I/Oi9DkV4R8ebGBrl6gV5y0oLoQg0N7Hlwfgs//Oj7hl/Rbf\n\tBzSoJHqDxZMQ9xUk+6Ar6Yk430+YKjFKugNJxo/0=" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"niK6bumC\"; dkim-atps=neutral", "To": "libcamera-devel@lists.libcamera.org", "Date": "Tue, 20 Jun 2023 16:29:00 +0200", "Message-Id": "<20230620142904.72600-1-jacopo.mondi@ideasonboard.com>", "X-Mailer": "git-send-email 2.40.1", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [RFC 0/4] libcamera: Replace\n\tCameraConfiguration::transform", "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": "Hello everyone\n\nWe have been discussing rotation/transformations for a long time, and\nthe currently implemented CameraConfiguration::transform behaviour has\nproven to be confusing for several reasons: it was poorly documented,\ntranslating it to something consumable for upper layer frameworks was\ndifficult and it behaved differently than any other field part of the\nCameraConfiguration, as it was meant to tell libcamera \"what to do\" instead\nof expressing what applications want.\n\nFor these reasons this series proposes to replace the usage to Transform\nin the public API in favour of a new CameraConfiguration::Orientation type,\ndefined based on the EXIF specification, tag 274, 'orientation'. For reference\nthis is the same as implemented by gstreamer:\nhttps://gstreamer.freedesktop.org/documentation/gstreamer/gsttaglist.html?gi-language=c#GST_TAG_IMAGE_ORIENTATION\n\nThe newly introduced CameraConfiguration::orientation replaces the\nexisting CameraConfiguration::tranform, and it is meant for application to\nexpress how they would like the images to be oriented, not to tell libcamera\nwhat to do. As an example, passing in 'rotation0' means that the application\nexpects the images to be rotated upright, and doesn't tell libcamera not to\napply any rotation like passing in \"Transform::Identity\" did.\n\nThe value CameraConfiguration::orientation is set to after a validate() also\ndiffers in meaning, as instead of reporting \"what applications have to do\nto obtain what they originally asked for\" it simply reports the actual\norientation of the stream: this means that if libcamera cannot fully satisfy the\nuser request it will set ::orientation to report the native images rotation\nand the CameraConfiguration::status will be set to Adjusted.\n\nHandling of 90 and 270 degrees rotation has also changed: as the camera sensor\ncannot correct rotations that include a transposition, requests for a 90/270\ndegrees are ignored, and cameras with a mounting rotation of 90/270 degrees\nare never re-oriented. This makes it clear and less confusing for applications\nthat they have to deal with correction fully by themselves. As an example, with\nthe current implementation if the application requires a Rot270 (HFlip +\nTranspose) libcamera will do the HFlip and leave transposition to the upper\nlayers. There is no clear advantage in doing so, and display compositors are\nbetter suited for handling transpositions and flipping in a single pass instead\nof having the library try to handle part of that.\n\nThis series clearly breaks the application API as it removes a member from\nCameraConfiguration, so it should be introduced probably only when a new release\nis cut.\n\nTested on RPi imx219 with the newly introduced cam option, flip, mirror and\nrotation work as expected.\n\nTested on Pinephone Pro, where sensors are 90/270 degrees rotated (libcamera\nperforms no correction)\n\nComments welcome of course.\n\nThanks\n j\n\nJacopo Mondi (4):\n libcamera: camera_sensor: Cache rotationTransform_\n libcamera: camera: Introduce CameraConfiguration::orientation\n libcamera: Move to use CameraConfiguration::orientation\n apsp: cam: Add option to set stream orientation\n\n Documentation/Doxyfile.in | 2 +\n Documentation/rotation/flip-rotate-0.eps | 170 +++++++++++++++\n Documentation/rotation/flip-rotate-0.png | Bin 0 -> 16488 bytes\n Documentation/rotation/flip-rotate-180.eps | 191 +++++++++++++++++\n Documentation/rotation/flip-rotate-180.png | Bin 0 -> 22198 bytes\n Documentation/rotation/flip-rotate-270.eps | 197 ++++++++++++++++++\n Documentation/rotation/flip-rotate-270.png | Bin 0 -> 21367 bytes\n Documentation/rotation/flip-rotate-90.eps | 195 +++++++++++++++++\n Documentation/rotation/flip-rotate-90.png | Bin 0 -> 21020 bytes\n Documentation/rotation/rotate-0.eps | 169 +++++++++++++++\n Documentation/rotation/rotate-0.png | Bin 0 -> 9086 bytes\n Documentation/rotation/rotate-180.eps | 189 +++++++++++++++++\n Documentation/rotation/rotate-180.png | Bin 0 -> 22182 bytes\n Documentation/rotation/rotate-270.eps | 196 +++++++++++++++++\n Documentation/rotation/rotate-270.png | Bin 0 -> 21016 bytes\n Documentation/rotation/rotate-90.eps | 196 +++++++++++++++++\n Documentation/rotation/rotate-90.png | Bin 0 -> 21528 bytes\n include/libcamera/camera.h | 14 +-\n include/libcamera/internal/camera_sensor.h | 4 +-\n include/libcamera/transform.h | 4 +\n src/apps/cam/camera_session.cpp | 17 ++\n src/apps/cam/main.cpp | 5 +\n src/apps/cam/main.h | 1 +\n src/libcamera/camera.cpp | 54 ++++-\n src/libcamera/camera_sensor.cpp | 137 ++++++------\n src/libcamera/pipeline/ipu3/ipu3.cpp | 6 +-\n src/libcamera/pipeline/rkisp1/rkisp1.cpp | 8 +-\n .../pipeline/rpi/common/pipeline_base.cpp | 9 +-\n src/libcamera/pipeline/simple/simple.cpp | 6 +-\n src/libcamera/pipeline/uvcvideo/uvcvideo.cpp | 4 +-\n src/libcamera/pipeline/vimc/vimc.cpp | 4 +-\n src/libcamera/transform.cpp | 58 ++++++\n 32 files changed, 1739 insertions(+), 97 deletions(-)\n create mode 100644 Documentation/rotation/flip-rotate-0.eps\n create mode 100644 Documentation/rotation/flip-rotate-0.png\n create mode 100644 Documentation/rotation/flip-rotate-180.eps\n create mode 100644 Documentation/rotation/flip-rotate-180.png\n create mode 100644 Documentation/rotation/flip-rotate-270.eps\n create mode 100644 Documentation/rotation/flip-rotate-270.png\n create mode 100644 Documentation/rotation/flip-rotate-90.eps\n create mode 100644 Documentation/rotation/flip-rotate-90.png\n create mode 100644 Documentation/rotation/rotate-0.eps\n create mode 100644 Documentation/rotation/rotate-0.png\n create mode 100644 Documentation/rotation/rotate-180.eps\n create mode 100644 Documentation/rotation/rotate-180.png\n create mode 100644 Documentation/rotation/rotate-270.eps\n create mode 100644 Documentation/rotation/rotate-270.png\n create mode 100644 Documentation/rotation/rotate-90.eps\n create mode 100644 Documentation/rotation/rotate-90.png\n\n--\n2.40.1" }