/* SPDX-License-Identifier: LGPL-2.1-or-later */ /* * Copyright (C) 2025, Ideas on Board Oy * * DW100 vertex map interface */ #pragma once #include #include #include #include #include #include #include namespace libcamera { class Dw100VertexMap { public: enum ScaleMode { Fill = 0, Crop = 1, }; void applyLimits(); void setInputSize(const Size &size) { inputSize_ = size; scalerCrop_ = Rectangle(size); } void setSensorCrop(const Rectangle &rect) { sensorCrop_ = rect; } void setScalerCrop(const Rectangle &rect) { scalerCrop_ = rect; } const Rectangle &effectiveScalerCrop() const { return effectiveScalerCrop_; } void setOutputSize(const Size &size) { outputSize_ = size; } const Size &outputSize() const { return outputSize_; } void setTransform(const Transform &transform) { transform_ = transform; } const Transform &transform() const { return transform_; } void setScale(const float scale) { scale_ = scale; } float effectiveScale() const { return (effectiveScaleX_ + effectiveScaleY_) * 0.5; } void setRotation(const float rotation) { rotation_ = rotation; } float rotation() const { return rotation_; } void setOffset(const Point &offset) { offset_ = offset; } const Point &effectiveOffset() const { return effectiveOffset_; } void setMode(const ScaleMode mode) { mode_ = mode; } ScaleMode mode() const { return mode_; } std::vector getVertexMap(); private: Rectangle scalerCrop_; Rectangle sensorCrop_; Transform transform_ = Transform::Identity; Size inputSize_; Size outputSize_; Point offset_; double scale_ = 1.0; double rotation_ = 0.0; ScaleMode mode_ = Fill; double effectiveScaleX_; double effectiveScaleY_; Point effectiveOffset_; Rectangle effectiveScalerCrop_; }; } /* namespace libcamera */