/* SPDX-License-Identifier: LGPL-2.1-or-later */ /* * Copyright (C) 2024-2025 Red Hat, Inc. * * Simple pipeline IPA Context */ #pragma once #include #include #include #include #include "libcamera/internal/matrix.h" #include "libcamera/internal/vector.h" #include #include "core_ipa_interface.h" namespace libcamera { namespace ipa::soft { struct IPASessionConfiguration { float gamma; struct { int32_t exposureMin, exposureMax; double againMin, againMax, againMinStep; utils::Duration lineDuration; } agc; struct { std::optional level; } black; }; struct IPAActiveState { struct { uint8_t level; int32_t lastExposure; double lastGain; } blc; struct { RGB gains; unsigned int temperatureK; } awb; static constexpr unsigned int kGammaLookupSize = 1024; struct { std::array gammaTable; uint8_t blackLevel; double contrast; } gamma; struct { Matrix ccm; bool changed; } ccm; struct { /* 0..2 range, 1.0 = normal */ std::optional contrast; } knobs; }; struct IPAFrameContext : public FrameContext { struct { Matrix ccm; } ccm; struct { int32_t exposure; double gain; } sensor; struct { double red; double blue; } gains; std::optional contrast; }; struct IPAContext { IPAContext(unsigned int frameContextSize) : frameContexts(frameContextSize) { } IPACameraSensorInfo sensorInfo; IPASessionConfiguration configuration; IPAActiveState activeState; FCQueue frameContexts; ControlInfoMap::Map ctrlMap; bool ccmEnabled = false; }; } /* namespace ipa::soft */ } /* namespace libcamera */