From patchwork Mon Jun 27 16:27:20 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 16384 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 3D56CBD808 for ; Mon, 27 Jun 2022 16:27:47 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 1904A6563A; Mon, 27 Jun 2022 18:27:46 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1656347266; bh=rfTtBwtUgSj9o+bJBAFXhooGsYV+I+gwNmqLZ6anrjI=; 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=W9tMASKV9lvqZSO1YiORjVcqI5vx/nliLaPC3iR3yqS/vuC1sorOFLIQGc8om+b3s zW1MlOTqCoxwW62qTN23+s6I0zeNWUy2esz3OOQkg7qHOgrkXkGtMBw6E1+mEdUG0h AgM09PDqds3Dhfu6E/G65gxna7mQkbyTm88hh/Sj+1NFCGZWj+xPt8rJhZJ65QKDaB XLTvPEhrOOHIMumNSDRT1SkLyleUY6L2mpfhGMcVe1cjp805kXvpzeRTxN6IHiaJLH mmYYsjmYsp6g3OxiHhe1CK5e5A12Qkw5uradX4cqaU/9VsT0Lpq8b5rhvAv79xNBCS lc5Ussoz7YYfw== Received: from relay7-d.mail.gandi.net (relay7-d.mail.gandi.net [217.70.183.200]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id EA0ED6059B for ; Mon, 27 Jun 2022 18:27:42 +0200 (CEST) Received: (Authenticated sender: jacopo@jmondi.org) by mail.gandi.net (Postfix) with ESMTPSA id 02D8E20008; Mon, 27 Jun 2022 16:27:41 +0000 (UTC) To: libcamera-devel@lists.libcamera.org Date: Mon, 27 Jun 2022 18:27:20 +0200 Message-Id: <20220627162732.33160-4-jacopo@jmondi.org> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220627162732.33160-1-jacopo@jmondi.org> References: <20220627162732.33160-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 03/15] 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 | 15 +++++++ src/libcamera/internal_control_ids.yaml | 54 +++++++++++++++++++++++++ src/libcamera/meson.build | 17 ++++++++ 3 files changed, 86 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..1559c3c368c4 100644 --- a/include/libcamera/internal/meson.build +++ b/include/libcamera/internal/meson.build @@ -9,6 +9,21 @@ libcamera_tracepoint_header = custom_target( command: [gen_tracepoints_header, '@OUTPUT@', '@INPUT@'], ) +# Generate the list of internal controls identifiers +internal_control_source_files = ['control_ids'] + +libcamera_internal_control_headers = [] + +foreach header : internal_control_source_files + input_files = files('../../../src/libcamera/internal_' + header +'.yaml',\ + '../' + header + '.h.in') + libcamera_internal_control_headers += custom_target( + 'internal_' + header + '_h', + input : input_files, + output : header + '.h', + command : [gen_controls, '--internal=True','-o', '@OUTPUT@', '@INPUT@']) +endforeach + libcamera_internal_headers = files([ 'bayer_format.h', 'byte_stream_buffer.h', 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..89fdf347c708 100644 --- a/src/libcamera/meson.build +++ b/src/libcamera/meson.build @@ -52,6 +52,7 @@ libcamera_sources = files([ libcamera_sources += libcamera_public_headers libcamera_sources += libcamera_generated_ipa_headers libcamera_sources += libcamera_tracepoint_header +libcamera_sources += libcamera_internal_control_headers includes = [ libcamera_includes, @@ -99,6 +100,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 +113,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