Show a patch.

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

{
    "id": 9589,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/9589/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/9589/",
    "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": "<20200912101129.12625-10-jacopo@jmondi.org>",
    "date": "2020-09-12T10:11:28",
    "name": "[libcamera-devel,v4,09/10] android: camera_device: Set Encoder at construction",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "909fa76fbd0210a2aa3b633b65a023a887f4651f",
    "submitter": {
        "id": 3,
        "url": "https://patchwork.libcamera.org/api/1.1/people/3/?format=api",
        "name": "Jacopo Mondi",
        "email": "jacopo@jmondi.org"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/9589/mbox/",
    "series": [
        {
            "id": 1287,
            "url": "https://patchwork.libcamera.org/api/1.1/series/1287/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=1287",
            "date": "2020-09-12T10:11:19",
            "name": "android: camera_device: Fix JPEG/RAW sizes",
            "version": 4,
            "mbox": "https://patchwork.libcamera.org/series/1287/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/9589/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/9589/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 5DB85C3B5B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSat, 12 Sep 2020 10:08:11 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 39C9062DFF;\n\tSat, 12 Sep 2020 12:08:11 +0200 (CEST)",
            "from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net\n\t[217.70.183.201])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 53FB662D5B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 12 Sep 2020 12:08:10 +0200 (CEST)",
            "from uno.lan (2-224-242-101.ip172.fastwebnet.it [2.224.242.101])\n\t(Authenticated sender: jacopo@jmondi.org)\n\tby relay8-d.mail.gandi.net (Postfix) with ESMTPSA id 830791BF204;\n\tSat, 12 Sep 2020 10:08:08 +0000 (UTC)"
        ],
        "X-Originating-IP": "2.224.242.101",
        "From": "Jacopo Mondi <jacopo@jmondi.org>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Sat, 12 Sep 2020 12:11:28 +0200",
        "Message-Id": "<20200912101129.12625-10-jacopo@jmondi.org>",
        "X-Mailer": "git-send-email 2.28.0",
        "In-Reply-To": "<20200912101129.12625-1-jacopo@jmondi.org>",
        "References": "<20200912101129.12625-1-jacopo@jmondi.org>",
        "MIME-Version": "1.0",
        "Subject": "[libcamera-devel] [PATCH v4 09/10] android: camera_device: Set\n\tEncoder at construction",
        "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>",
        "Cc": "hanlinchen@chromium.org",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "base64",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "Make the CameraStream encoder a private unique pointer and require its\ninitialization at construction time. This ties the encoder lifetime to\nthe CameraStream it has been created with, allowing to remove the\nCameraStream destructor.\n\nThis change dis-allow creating a CameraStream and set the Encoder later,\nwhich shall not happen now that we create CameraStream once we have all\nthe required information in place.\n\nNo functional changes intended but this change aims to make the code\nmore robust enforcing a stricter CameraStream interface.\n\nReviewed-by: Hirokazu Honda <hiroh@chromium.org>\nReviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\nSigned-off-by: Jacopo Mondi <jacopo@jmondi.org>\n---\n src/android/camera_device.cpp | 22 +++++++++-------------\n src/android/camera_device.h   |  8 ++++----\n 2 files changed, 13 insertions(+), 17 deletions(-)",
    "diff": "diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\nindex 59acfd762a89..4d8847e72db5 100644\n--- a/src/android/camera_device.cpp\n+++ b/src/android/camera_device.cpp\n@@ -169,16 +169,11 @@ MappedCamera3Buffer::MappedCamera3Buffer(const buffer_handle_t camera3buffer,\n \t}\n }\n \n-CameraStream::CameraStream(PixelFormat f, Size s, unsigned int i)\n-\t: format(f), size(s), jpeg(nullptr), index_(i)\n+CameraStream::CameraStream(PixelFormat f, Size s, unsigned int i, Encoder *e)\n+\t: format(f), size(s), index_(i), encoder_(e)\n {\n }\n \n-CameraStream::~CameraStream()\n-{\n-\tdelete jpeg;\n-};\n-\n /*\n  * \\struct Camera3RequestDescriptor\n  *\n@@ -1272,20 +1267,21 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n \t\t}\n \n \t\tStreamConfiguration &cfg = config_->at(index);\n-\t\tCameraStream &cameraStream =\n-\t\t\tstreams_.emplace_back(formats::MJPEG, cfg.size, index);\n-\t\tjpegStream->priv = static_cast<void *>(&cameraStream);\n \n \t\t/*\n \t\t * Construct a software encoder for MJPEG streams from the\n \t\t * chosen libcamera source stream.\n \t\t */\n-\t\tcameraStream.jpeg = new EncoderLibJpeg();\n-\t\tint ret = cameraStream.jpeg->configure(cfg);\n+\t\tEncoder *encoder = new EncoderLibJpeg();\n+\t\tint ret = encoder->configure(cfg);\n \t\tif (ret) {\n \t\t\tLOG(HAL, Error) << \"Failed to configure encoder\";\n+\t\t\tdelete encoder;\n \t\t\treturn ret;\n \t\t}\n+\n+\t\tstreams_.emplace_back(formats::MJPEG, cfg.size, index, encoder);\n+\t\tjpegStream->priv = static_cast<void *>(&streams_.back());\n \t}\n \n \tswitch (config_->validate()) {\n@@ -1474,7 +1470,7 @@ void CameraDevice::requestComplete(Request *request)\n \t\tif (cameraStream->format != formats::MJPEG)\n \t\t\tcontinue;\n \n-\t\tEncoder *encoder = cameraStream->jpeg;\n+\t\tEncoder *encoder = cameraStream->encoder();\n \t\tif (!encoder) {\n \t\t\tLOG(HAL, Error) << \"Failed to identify encoder\";\n \t\t\tcontinue;\ndiff --git a/src/android/camera_device.h b/src/android/camera_device.h\nindex 376d001ea7d7..49a2e7f3f8bc 100644\n--- a/src/android/camera_device.h\n+++ b/src/android/camera_device.h\n@@ -29,16 +29,15 @@ class CameraMetadata;\n \n struct CameraStream {\n public:\n-\tCameraStream(libcamera::PixelFormat, libcamera::Size, unsigned int i);\n-\t~CameraStream();\n+\tCameraStream(libcamera::PixelFormat, libcamera::Size, unsigned int i,\n+\t\t     Encoder *e = nullptr);\n \n \tunsigned int index() const { return index_; }\n+\tEncoder *encoder() const { return encoder_.get(); }\n \n \tlibcamera::PixelFormat format;\n \tlibcamera::Size size;\n \n-\tEncoder *jpeg;\n-\n private:\n \t/*\n \t * The index of the libcamera StreamConfiguration as added during\n@@ -46,6 +45,7 @@ private:\n \t * one or more streams to the Android framework.\n \t */\n \tunsigned int index_;\n+\tstd::unique_ptr<Encoder> encoder_;\n };\n \n class CameraDevice : protected libcamera::Loggable\n",
    "prefixes": [
        "libcamera-devel",
        "v4",
        "09/10"
    ]
}