From patchwork Sun Feb 8 21:44:43 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rui Wang X-Patchwork-Id: 26109 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 85231C3220 for ; Sun, 8 Feb 2026 21:44:56 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 9FFCA6209D; Sun, 8 Feb 2026 22:44:55 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="fZcBCL5E"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id C376762084 for ; Sun, 8 Feb 2026 22:44:52 +0100 (CET) Received: from rui-Precision-7560.local.tld (pool-99-254-80-244.cpe.net.cable.rogers.com [99.254.80.244]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id E9CBC16AE; Sun, 8 Feb 2026 22:44:06 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1770587047; bh=tgCydorrBbJ6gonUVSw8lgE4HHahCte0RIu+qDbB7oE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fZcBCL5EnJbRbfOGb7FKq2ZJRNTOZ//tZolK3VaqLx1j9h2hbIzoSAVzvHbsVdYjZ XZwYX/q8nVwF5ezQqDFGVkjHVdvZR6xzkCZRo1nhDZ4Vj/g/AAQA/968Q1JlN+arZ0 kTvWhbFdWex43jzIYt/0J5303/mPXe7TNS0rW9z0= From: Rui Wang To: libcamera-devel@lists.libcamera.org Cc: Rui Wang Subject: [PATCH v1 1/1] libcamera: Move NoiseReductionMode control from draft to core Date: Sun, 8 Feb 2026 16:44:43 -0500 Message-ID: <20260208214443.469189-2-rui.wang@ideasonboard.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260208214443.469189-1-rui.wang@ideasonboard.com> References: <20260208214443.469189-1-rui.wang@ideasonboard.com> MIME-Version: 1.0 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: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Promote the NoiseReductionMode control from the draft namespace to the core controls namespace. This change affects: - Core control definitions (control_ids_core.yaml) - Draft control definitions (control_ids_draft.yaml) - RkISP1 IPA algorithm implementations (dpf.cpp, filter.cpp, rkisp1.cpp) - Raspberry Pi IPA implementations (rpi/common/ipa_base.cpp, pisp.cpp, vc4.cpp) - Android camera capabilities (camera_capabilities.cpp) All references to controls::draft::NoiseReductionMode and its enum values are updated to use controls::NoiseReductionMode in the core namespace. Signed-off-by: Rui Wang --- src/android/camera_capabilities.cpp | 2 +- src/ipa/rkisp1/algorithms/dpf.cpp | 10 ++++----- src/ipa/rkisp1/algorithms/filter.cpp | 10 ++++----- src/ipa/rkisp1/rkisp1.cpp | 2 +- src/ipa/rpi/common/ipa_base.cpp | 6 +++--- src/ipa/rpi/pisp/pisp.cpp | 4 ++-- src/ipa/rpi/vc4/vc4.cpp | 12 +++++------ src/libcamera/control_ids_core.yaml | 31 +++++++++++++++++++++++++++- src/libcamera/control_ids_draft.yaml | 29 -------------------------- 9 files changed, 53 insertions(+), 53 deletions(-) diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp index b161bc6b..356c8e8f 100644 --- a/src/android/camera_capabilities.cpp +++ b/src/android/camera_capabilities.cpp @@ -1291,7 +1291,7 @@ int CameraCapabilities::initializeStaticMetadata() { std::vector data; data.reserve(5); - const auto &infoMap = controlsInfo.find(&controls::draft::NoiseReductionMode); + const auto &infoMap = controlsInfo.find(&controls::NoiseReductionMode); if (infoMap != controlsInfo.end()) { for (const auto &value : infoMap->second.values()) data.push_back(value.get()); diff --git a/src/ipa/rkisp1/algorithms/dpf.cpp b/src/ipa/rkisp1/algorithms/dpf.cpp index 83c1e4b7..0d8b9ef3 100644 --- a/src/ipa/rkisp1/algorithms/dpf.cpp +++ b/src/ipa/rkisp1/algorithms/dpf.cpp @@ -182,20 +182,20 @@ void Dpf::queueRequest(IPAContext &context, auto &dpf = context.activeState.dpf; bool update = false; - const auto &denoise = controls.get(controls::draft::NoiseReductionMode); + const auto &denoise = controls.get(controls::NoiseReductionMode); if (denoise) { LOG(RkISP1Dpf, Debug) << "Set denoise to " << *denoise; switch (*denoise) { - case controls::draft::NoiseReductionModeOff: + case controls::NoiseReductionModeOff: if (dpf.denoise) { dpf.denoise = false; update = true; } break; - case controls::draft::NoiseReductionModeMinimal: - case controls::draft::NoiseReductionModeHighQuality: - case controls::draft::NoiseReductionModeFast: + case controls::NoiseReductionModeMinimal: + case controls::NoiseReductionModeHighQuality: + case controls::NoiseReductionModeFast: if (!dpf.denoise) { dpf.denoise = true; update = true; diff --git a/src/ipa/rkisp1/algorithms/filter.cpp b/src/ipa/rkisp1/algorithms/filter.cpp index 8ad79801..aa49d332 100644 --- a/src/ipa/rkisp1/algorithms/filter.cpp +++ b/src/ipa/rkisp1/algorithms/filter.cpp @@ -73,25 +73,25 @@ void Filter::queueRequest(IPAContext &context, LOG(RkISP1Filter, Debug) << "Set sharpness to " << *sharpness; } - const auto &denoise = controls.get(controls::draft::NoiseReductionMode); + const auto &denoise = controls.get(controls::NoiseReductionMode); if (denoise) { LOG(RkISP1Filter, Debug) << "Set denoise to " << *denoise; switch (*denoise) { - case controls::draft::NoiseReductionModeOff: + case controls::NoiseReductionModeOff: if (filter.denoise != 0) { filter.denoise = 0; update = true; } break; - case controls::draft::NoiseReductionModeMinimal: + case controls::NoiseReductionModeMinimal: if (filter.denoise != 1) { filter.denoise = 1; update = true; } break; - case controls::draft::NoiseReductionModeHighQuality: - case controls::draft::NoiseReductionModeFast: + case controls::NoiseReductionModeHighQuality: + case controls::NoiseReductionModeFast: if (filter.denoise != 3) { filter.denoise = 3; update = true; diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp index fbcc3910..69a4ab93 100644 --- a/src/ipa/rkisp1/rkisp1.cpp +++ b/src/ipa/rkisp1/rkisp1.cpp @@ -120,7 +120,7 @@ const IPAHwSettings ipaHwSettingsV12{ /* List of controls handled by the RkISP1 IPA */ const ControlInfoMap::Map rkisp1Controls{ { &controls::DebugMetadataEnable, ControlInfo(false, true, false) }, - { &controls::draft::NoiseReductionMode, ControlInfo(controls::draft::NoiseReductionModeValues) }, + { &controls::NoiseReductionMode, ControlInfo(controls::NoiseReductionModeValues) }, }; } /* namespace */ diff --git a/src/ipa/rpi/common/ipa_base.cpp b/src/ipa/rpi/common/ipa_base.cpp index 7072b38c..40d7783e 100644 --- a/src/ipa/rpi/common/ipa_base.cpp +++ b/src/ipa/rpi/common/ipa_base.cpp @@ -88,7 +88,7 @@ const ControlInfoMap::Map ipaControls{ static_cast(defaultMaxFrameDuration.get()), Span{ { static_cast(defaultMinFrameDuration.get()), static_cast(defaultMinFrameDuration.get()) } }) }, - { &controls::draft::NoiseReductionMode, ControlInfo(controls::draft::NoiseReductionModeValues) }, + { &controls::NoiseReductionMode, ControlInfo(controls::NoiseReductionModeValues) }, { &controls::rpi::StatsOutputEnable, ControlInfo(false, true, false) }, }; @@ -1290,9 +1290,9 @@ void IpaBase::applyControls(const ControlList &controls) break; } - case controls::draft::NOISE_REDUCTION_MODE: + case controls::NOISE_REDUCTION_MODE: /* Handled below in handleControls() */ - libcameraMetadata_.set(controls::draft::NoiseReductionMode, + libcameraMetadata_.set(controls::NoiseReductionMode, ctrl.second.get()); break; diff --git a/src/ipa/rpi/pisp/pisp.cpp b/src/ipa/rpi/pisp/pisp.cpp index ec7593ff..b93c0497 100644 --- a/src/ipa/rpi/pisp/pisp.cpp +++ b/src/ipa/rpi/pisp/pisp.cpp @@ -560,7 +560,7 @@ void IpaPiSP::handleControls(const ControlList &controls) setHistogramWeights(); break; - case controls::draft::NOISE_REDUCTION_MODE: { + case controls::NOISE_REDUCTION_MODE: { RPiController::DenoiseAlgorithm *denoise = dynamic_cast( controller_.getAlgorithm("denoise")); @@ -570,7 +570,7 @@ void IpaPiSP::handleControls(const ControlList &controls) return; } - if (ctrl.second.get() == controls::draft::NoiseReductionModeOff) + if (ctrl.second.get() == controls::NoiseReductionModeOff) denoise->setMode(RPiController::DenoiseMode::Off); else denoise->setMode(RPiController::DenoiseMode::ColourHighQuality); diff --git a/src/ipa/rpi/vc4/vc4.cpp b/src/ipa/rpi/vc4/vc4.cpp index 2b205b28..9c8865d2 100644 --- a/src/ipa/rpi/vc4/vc4.cpp +++ b/src/ipa/rpi/vc4/vc4.cpp @@ -293,16 +293,16 @@ RPiController::StatisticsPtr IpaVc4::platformProcessStats(Span mem) void IpaVc4::handleControls(const ControlList &controls) { static const std::map DenoiseModeTable = { - { controls::draft::NoiseReductionModeOff, RPiController::DenoiseMode::Off }, - { controls::draft::NoiseReductionModeFast, RPiController::DenoiseMode::ColourFast }, - { controls::draft::NoiseReductionModeHighQuality, RPiController::DenoiseMode::ColourHighQuality }, - { controls::draft::NoiseReductionModeMinimal, RPiController::DenoiseMode::ColourOff }, - { controls::draft::NoiseReductionModeZSL, RPiController::DenoiseMode::ColourHighQuality }, + { controls::NoiseReductionModeOff, RPiController::DenoiseMode::Off }, + { controls::NoiseReductionModeFast, RPiController::DenoiseMode::ColourFast }, + { controls::NoiseReductionModeHighQuality, RPiController::DenoiseMode::ColourHighQuality }, + { controls::NoiseReductionModeMinimal, RPiController::DenoiseMode::ColourOff }, + { controls::NoiseReductionModeZSL, RPiController::DenoiseMode::ColourHighQuality }, }; for (auto const &ctrl : controls) { switch (ctrl.first) { - case controls::draft::NOISE_REDUCTION_MODE: { + case controls::NOISE_REDUCTION_MODE: { RPiController::DenoiseAlgorithm *sdn = dynamic_cast( controller_.getAlgorithm("SDN")); /* Some platforms may have a combined "denoise" algorithm instead. */ diff --git a/src/libcamera/control_ids_core.yaml b/src/libcamera/control_ids_core.yaml index f26a1b1b..455693ac 100644 --- a/src/libcamera/control_ids_core.yaml +++ b/src/libcamera/control_ids_core.yaml @@ -1361,4 +1361,33 @@ controls: description: | Enable or disable the lens shading correction. -... + - NoiseReductionMode: + type: int32_t + direction: inout + description: | + Control to select the noise reduction algorithm mode. Currently + identical to ANDROID_NOISE_REDUCTION_MODE. + + Mode of operation for the noise reduction algorithm. + enum: + - name: NoiseReductionModeOff + value: 0 + description: No noise reduction is applied + - name: NoiseReductionModeFast + value: 1 + description: | + Noise reduction is applied without reducing the frame rate. + - name: NoiseReductionModeHighQuality + value: 2 + description: | + High quality noise reduction at the expense of frame rate. + - name: NoiseReductionModeMinimal + value: 3 + description: | + Minimal noise reduction is applied without reducing the frame rate. + - name: NoiseReductionModeZSL + value: 4 + description: | + Noise reduction is applied at different levels to different streams. + +... \ No newline at end of file diff --git a/src/libcamera/control_ids_draft.yaml b/src/libcamera/control_ids_draft.yaml index 03309eea..0e04cb16 100644 --- a/src/libcamera/control_ids_draft.yaml +++ b/src/libcamera/control_ids_draft.yaml @@ -30,35 +30,6 @@ controls: The camera will cancel any active or completed metering sequence. The AE algorithm is reset to its initial state. - - NoiseReductionMode: - type: int32_t - direction: inout - description: | - Control to select the noise reduction algorithm mode. Currently - identical to ANDROID_NOISE_REDUCTION_MODE. - - Mode of operation for the noise reduction algorithm. - enum: - - name: NoiseReductionModeOff - value: 0 - description: No noise reduction is applied - - name: NoiseReductionModeFast - value: 1 - description: | - Noise reduction is applied without reducing the frame rate. - - name: NoiseReductionModeHighQuality - value: 2 - description: | - High quality noise reduction at the expense of frame rate. - - name: NoiseReductionModeMinimal - value: 3 - description: | - Minimal noise reduction is applied without reducing the frame rate. - - name: NoiseReductionModeZSL - value: 4 - description: | - Noise reduction is applied at different levels to different streams. - - ColorCorrectionAberrationMode: type: int32_t direction: inout