From patchwork Tue Jun 21 15:03:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 16301 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 55591BE173 for ; Tue, 21 Jun 2022 15:03:51 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id A557C65642; Tue, 21 Jun 2022 17:03:50 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1655823830; bh=WoNawazu4DtVo2a0TC6LniOF2ZiHITfjPBs4z2Ptau4=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=hm7lP23RTLcS8aI7yyQ/tgdRGyJ5XPZ5WWbgrDp04t5K2qdtisqg0Dp/7HRGFYBcH Wcce+Fb0HqTXjYn+zEvXvgfGvBHfBZyz86BnQfSZ2ZLSXWCh9A9jsJVe4CEeZlG567 q2AQBkOdvNpPjmqi0Vd3A4XjQAhsPzyKe4PE5tFcIvsWMImv/FR5VaSnh6azyyo/kx TVenOda9Ltbigs20M3e2DBTsrOHZk+ib/urCtsgmPhEHNxjDDHLvpIvQsL9mmXBkqu fsTUl265qul8nyHHLtBtk6blRAIzu6xze8e6DBUEkaHk5uBybOFfG/EyWTAbr50sHT +b+H+uCKIaqtQ== Received: from relay9-d.mail.gandi.net (relay9-d.mail.gandi.net [IPv6:2001:4b98:dc4:8::229]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 59F4F65631 for ; Tue, 21 Jun 2022 17:03:47 +0200 (CEST) Received: (Authenticated sender: jacopo@jmondi.org) by mail.gandi.net (Postfix) with ESMTPSA id 98C20FF80C; Tue, 21 Jun 2022 15:03:46 +0000 (UTC) To: libcamera-devel@lists.libcamera.org Date: Tue, 21 Jun 2022 17:03:37 +0200 Message-Id: <20220621150337.47839-4-jacopo@jmondi.org> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220621150337.47839-1-jacopo@jmondi.org> References: <20220621150337.47839-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 3/3] libcamera: Introduce internal controls X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Jacopo Mondi via libcamera-devel From: Jacopo Mondi Reply-To: Jacopo Mondi Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Introduce the enumeration of internal controls in internal_control_ids.yaml. The list of controls currently defines 4 draft controls which mirror the definition of the V4L2 control they map to. Plumb in the build system the command to generate the definition of internal controls by re-using the same mechanism used for public controls to make it easy to extend it to also handle internal properties in future. Signed-off-by: Jacopo Mondi Reviewed-by: Jean-Michel Hautbois --- include/libcamera/internal/meson.build | 18 +++++++++ src/libcamera/internal_control_ids.yaml | 54 +++++++++++++++++++++++++ src/libcamera/meson.build | 16 ++++++++ 3 files changed, 88 insertions(+) create mode 100644 src/libcamera/internal_control_ids.yaml diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build index 7a780d48ee57..569940b0d2e8 100644 --- a/include/libcamera/internal/meson.build +++ b/include/libcamera/internal/meson.build @@ -44,3 +44,21 @@ libcamera_internal_headers = files([ 'v4l2_videodevice.h', 'yaml_parser.h', ]) + +# Generate the list of internal controls identifiers +internal_control_source_files = ['control_ids'] + +internal_control_headers = [] + +foreach header : internal_control_source_files + input_files = files('../../../src/libcamera/internal_' + header +'.yaml',\ + '../' + header + '.h.in') + internal_control_headers += custom_target('internal_' + header + '_h', + input : input_files, + output : header + '.h', + command : [gen_controls, '--internal=True',\ + '-o', '@OUTPUT@',\ + '@INPUT@'], + install : false) +endforeach +libcamera_internal_headers += internal_control_headers diff --git a/src/libcamera/internal_control_ids.yaml b/src/libcamera/internal_control_ids.yaml new file mode 100644 index 000000000000..e69e0d30657c --- /dev/null +++ b/src/libcamera/internal_control_ids.yaml @@ -0,0 +1,54 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +# +# Copyright (C) 2022, Google Inc. +# +%YAML 1.2 +--- +# Enumeration of internal libcamera controls +# Not exposed to application, for library use only + +controls: + + # ---------------------------------------------------------------------------- + # Draft controls section + + - VBlank: + type: int32_t + draft: true + description: | + Vertical blanking. The idle period after every frame during which no + image data is produced. The unit of vertical blanking is a line. Every + line has length of the image width plus horizontal blanking at the pixel + rate defined by V4L2_CID_PIXEL_RATE control in the same sub-device. + + Currently identical to V4L2_CID_VBLANK. + + - HBlank: + type: int32_t + draft: true + description: | + Horizontal blanking. The idle period after every line of image data + during which no image data is produced. The unit of horizontal blanking + is pixels. + + Currently identical to V4L2_CID_HBLANK. + + - SensorAnalogueGain: + type: int32_t + draft: true + description: | + Analogue gain is gain affecting all colour components in the pixel + matrix. The gain operation is performed in the analogue domain before + A/D conversion + + Currently identical to V4L2_CID_ANALOGUE_GAIN. + + - SensorExposure: + type: int32_t + draft: true + description: | + Exposure time, expressed in frame lines. + + Currently identical to V4L2_CID_EXPOSURE. + +... diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build index b57bee7ef6ca..4564d3dbb835 100644 --- a/src/libcamera/meson.build +++ b/src/libcamera/meson.build @@ -99,6 +99,7 @@ if not libyaml.found() libyaml = libyaml_wrap.dependency('yaml') endif +# Generate control_ids.cpp and property_ids.cpp control_sources = [] foreach source : control_source_files @@ -111,6 +112,21 @@ endforeach libcamera_sources += control_sources +# Generate internal_control_ids.cpp +internal_control_source_files = ['control_ids'] +internal_control_sources = [] + +foreach source : internal_control_source_files + input_files = files('internal_' + source +'.yaml', source + '.cpp.in') + internal_control_sources += custom_target('internal_' + source + '_cpp', + input : input_files, + output : 'internal_' + source + '.cpp', + command : [gen_controls, '--internal=True',\ + '-o', '@OUTPUT@',\ + '@INPUT@']) +endforeach +libcamera_sources += internal_control_sources + gen_version = meson.project_source_root() / 'utils' / 'gen-version.sh' # Use vcs_tag() and not configure_file() or run_command(), to ensure that the