{"id":13864,"url":"https://patchwork.libcamera.org/api/1.1/covers/13864/?format=json","web_url":"https://patchwork.libcamera.org/cover/13864/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20210920173752.1346190-1-umang.jain@ideasonboard.com>","date":"2021-09-20T17:37:42","name":"[libcamera-devel,v3,00/10] Async post processor","submitter":{"id":86,"url":"https://patchwork.libcamera.org/api/1.1/people/86/?format=json","name":"Umang Jain","email":"umang.jain@ideasonboard.com"},"mbox":"https://patchwork.libcamera.org/cover/13864/mbox/","series":[{"id":2539,"url":"https://patchwork.libcamera.org/api/1.1/series/2539/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=2539","date":"2021-09-20T17:37:42","name":"Async post processor","version":3,"mbox":"https://patchwork.libcamera.org/series/2539/mbox/"}],"comments":"https://patchwork.libcamera.org/api/covers/13864/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 7159FBF01C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 20 Sep 2021 17:38:03 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 8B4E06918A;\n\tMon, 20 Sep 2021 19:38:02 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B02FB69186\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 20 Sep 2021 19:38:00 +0200 (CEST)","from perceval.ideasonboard.com (unknown [103.251.226.144])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 6A24E45E;\n\tMon, 20 Sep 2021 19:37:59 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"Z2SWahPm\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1632159480;\n\tbh=/k/jx5vOGNAG5QxKXYT2d1XCF3VjKeMqW/MDfqqDijc=;\n\th=From:To:Cc:Subject:Date:From;\n\tb=Z2SWahPmztQ7YbTK11tnqXhunoMnh+H9ZDdIc2MwJpUVW5Q1An42NKNSKKDOA0+EL\n\tMq19OXvFq8gUd+5MFt4x1gluG9WCTII6o8qrT8f9sXfLBYCQQ7Vrb3H+7/GHuUUrIw\n\tReDPfkhbyRqlQDmKDP946yZ2vqu2w7nyEhPKB2as=","From":"Umang Jain <umang.jain@ideasonboard.com>","To":"libcamera-devel@lists.libcamera.org","Date":"Mon, 20 Sep 2021 23:07:42 +0530","Message-Id":"<20210920173752.1346190-1-umang.jain@ideasonboard.com>","X-Mailer":"git-send-email 2.31.1","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH v3 00/10] Async post processor","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"This series aims to enable async post-processing of streams\nin the HAL layer.\n\nPatch [1,2]/10 transforms the Camera3RequestDescriptor's map\nto a queue. The queue is helpful and easier to track when operations\n(like post-processing are running asynchronously).\n\nPatch 3/10 is a patch of using pointer instead of reference, since\nwe will be using Object::invokeMethod() for async processing, \n\nPatch [4,5,6]/10 expands the breadth of Camera3RequestDescriptor\nwhich can be thought as a \"context\" structure booking-keeping all\nthe data for async post-processing. It also manages the lifetime\nof source framebuffers.\n\nPatch [7,8]/10 introduces a notification mechanism via a Signal to\ninfer if a post-processing has been completed. It shall handle success\n/error paths accordingly.\n\nPatch 9/10 inspects the queue's head and check if descriptor can be\noffloaded from the queue, if \"ready\". If yes, it will send the capture\nresults present in the descriptor and drop it from the queue.\n\nPatch 10/10 introduces a threading mechanism which will run the post-processor\nin a separate thread.\n(It currently runs with ConnectionTypeBlocking, but it should run with\nConnectionTypeQueued. There is WIP debugging issue and marked as TODO)\n\nUmang Jain (10):\n  android: camera_worker: Use Camera3RequestDescriptor as cookie\n  android: camera_device: Transform descriptors_ map to queue\n  android: camera_stream: Pass FrameBuffer pointer instead of reference\n  camera_device: Remove private scope of Camera3RequestDescriptor\n  android: camera_device: Store results metadata into\n    Camera3RequestDescriptor\n  android: camera_stream: Plumb process() with Camera3RequestDescriptor\n  android: post_processor: Notify post processing completion status\n  android: camera_stream: Drop return value for process()\n  android: camera_device: Send capture results inspecting the descriptor\n  android: camera_stream: Run post processor in a thread\n\n src/android/camera_device.cpp            | 158 +++++++++++++++--------\n src/android/camera_device.h              |  52 +++++---\n src/android/camera_stream.cpp            |  55 +++++---\n src/android/camera_stream.h              |  16 ++-\n src/android/camera_worker.cpp            |   6 +-\n src/android/camera_worker.h              |   5 +-\n src/android/jpeg/encoder.h               |   2 +-\n src/android/jpeg/encoder_libjpeg.cpp     |   4 +-\n src/android/jpeg/encoder_libjpeg.h       |   2 +-\n src/android/jpeg/post_processor_jpeg.cpp |  25 ++--\n src/android/jpeg/post_processor_jpeg.h   |   9 +-\n src/android/jpeg/thumbnailer.cpp         |   4 +-\n src/android/jpeg/thumbnailer.h           |   2 +-\n src/android/post_processor.h             |  16 ++-\n src/android/yuv/post_processor_yuv.cpp   |  43 +++---\n src/android/yuv/post_processor_yuv.h     |   9 +-\n 16 files changed, 263 insertions(+), 145 deletions(-)"}