/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (C) 2019, Raspberry Pi Ltd * * algorithm.h - ISP control algorithm interface */ #pragma once /* * All algorithms should be derived from this class and made available to the * Controller. */ #include #include #include #include "libcamera/internal/yaml_parser.h" #include "controller.h" namespace RPiController { /* This defines the basic interface for all control algorithms. */ class Algorithm { public: Algorithm(Controller *controller) : controller_(controller), paused_(false) { } virtual ~Algorithm() = default; virtual char const *name() const = 0; virtual bool isPaused() const { return paused_; } virtual void pause() { paused_ = true; } virtual void resume() { paused_ = false; } virtual int read(const libcamera::YamlObject ¶ms); virtual void initialise(); virtual void switchMode(CameraMode const &cameraMode, Metadata *metadata); virtual void prepare(Metadata *imageMetadata); virtual void process(StatisticsPtr &stats, Metadata *imageMetadata); Metadata &getGlobalMetadata() const { return controller_->getGlobalMetadata(); } private: Controller *controller_; bool paused_; }; /* * This code is for automatic registration of Front End algorithms with the * system. */ typedef Algorithm *(*AlgoCreateFunc)(Controller *controller); struct RegisterAlgorithm { RegisterAlgorithm(char const *name, AlgoCreateFunc createFunc); }; std::map const &getAlgorithms(); } /* namespace RPiController */