Message ID | 20190704225334.26170-1-jacopo@jmondi.org |
---|---|
Headers | show
Return-Path: <jacopo@jmondi.org> Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id F236460C2C for <libcamera-devel@lists.libcamera.org>; Fri, 5 Jul 2019 00:52:26 +0200 (CEST) X-Originating-IP: 2.224.242.101 Received: from uno.lan (2-224-242-101.ip172.fastwebnet.it [2.224.242.101]) (Authenticated sender: jacopo@jmondi.org) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 76FA01C0002; Thu, 4 Jul 2019 22:52:26 +0000 (UTC) From: Jacopo Mondi <jacopo@jmondi.org> To: libcamera-devel@lists.libcamera.org Date: Fri, 5 Jul 2019 00:53:25 +0200 Message-Id: <20190704225334.26170-1-jacopo@jmondi.org> X-Mailer: git-send-email 2.21.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [libcamera-devel] [PATCH 0/9] Add support for external bufferes X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: <libcamera-devel.lists.libcamera.org> List-Unsubscribe: <https://lists.libcamera.org/options/libcamera-devel>, <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>, <mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe> X-List-Received-Date: Thu, 04 Jul 2019 22:52:27 -0000 |
Series |
|
Related |
show
|
>From the RFC cover letter: ------------------------------------------------------------------------------- The libcamera APIs need to be augmented to allow application to use buffers whose memory has been allocated outside of the library. This feature is particularly essential to support the Android camera HAL, which uses buffers allocated by mean of gralloc and exported by using DMABUF file descriptor. Each Stream has a buffer pool which contains buffers which are used to interact with the underlying video devices and whose memory is directly accessed by applications in case a Stream uses its internal memory, but could also be mapped on buffers whose memory is allocated elsewhere by exchanging the dmabuf file descriptors associated to each buffer's plane. Extend the StreamConfiguration class with a flag that defines the memory type a Stream uses (internal or external) and use said flag in pipeline handler to either allocate memory for the buffer, or prepare to use externally allocated buffers. As a consequence, rename PipelineHandler::allocateBuffers() to PipelineHandler::setupBuffers(). On top of this perform buffer mapping for streams using external memory at request queueing time, hiding the mapping from pipeline handler that will always only interact with streams from the Stream's internal pool. Add a map of buffers to each request to perform back-and-forth translation of application provided buffers to stream internal buffer at request complete time. Finally, add a test application that use buffers allocated in the vivid output device to stream a Camera. The test is not meant to be considered for merge, but more a proof a concept (it has my camera name hardcoded...) and fails for buffer #0 (but works for all others). ------------------------------------------------------------------------------- I have included Niklas and Kieran comments and heavily reworked the mapping operation in the Stream. The rest is more or less the same, with the exception of support for IPU3 which is now included and for importing multiplane buffers. Finally, the last patch should be made a test. At the moment it's a development tool (has the name of my webcam hardcoded...) Thanks j Jacopo Mondi (9): libcamera: stream: Provide accessors to buffers libcamera: stream: Add Stream memory type libcamera: pipeline: Support external buffers libcamera: Rename PipelineHandler::allocateBuffers libcamera: request: Rename the Stream to Buffer map libcamera: stream: Add operation to map buffers libcamera: request: Support buffer mapping libcamera: pipeline: ipu3: Use buffer mapping [HACK] test: v4l2_videodevice: Add buffer import test include/libcamera/buffer.h | 1 + include/libcamera/request.h | 8 +- include/libcamera/stream.h | 26 +++ src/cam/capture.cpp | 4 +- src/libcamera/camera.cpp | 11 +- src/libcamera/include/pipeline_handler.h | 4 +- src/libcamera/pipeline/ipu3/ipu3.cpp | 45 ++++- src/libcamera/pipeline/rkisp1/rkisp1.cpp | 15 +- src/libcamera/pipeline/uvcvideo.cpp | 16 +- src/libcamera/pipeline/vimc.cpp | 16 +- src/libcamera/pipeline_handler.cpp | 12 +- src/libcamera/request.cpp | 61 +++++- src/libcamera/stream.cpp | 181 +++++++++++++++++- src/qcam/main_window.cpp | 4 +- test/camera/capture.cpp | 3 +- test/camera/statemachine.cpp | 3 +- test/v4l2_videodevice/buffer_import.cpp | 234 +++++++++++++++++++++++ test/v4l2_videodevice/meson.build | 1 + 18 files changed, 588 insertions(+), 57 deletions(-) create mode 100644 test/v4l2_videodevice/buffer_import.cpp -- 2.21.0