/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright (C) 2019, Raspberry Pi (Trading) Limited * * controller.hpp - ISP controller interface */ #pragma once // The Controller is simply a container for a collecting together a number of // "control algorithms" (such as AWB etc.) and for running them all in a // convenient manner. #include <vector> #include <string> #include <linux/bcm2835-isp.h> #include "camera_mode.h" #include "device_status.h" #include "metadata.hpp" namespace RPiController { class Algorithm; typedef std::unique_ptr<Algorithm> AlgorithmPtr; typedef std::shared_ptr<bcm2835_isp_stats> StatisticsPtr; // The Controller holds a pointer to some global_metadata, which is how // different controllers and control algorithms within them can exchange // information. The Prepare method returns a pointer to metadata for this // specific image, and which should be passed on to the Process method. class Controller { public: Controller(); Controller(char const *json_filename); ~Controller(); Algorithm *CreateAlgorithm(char const *name); void Read(char const *filename); void Initialise(); void SwitchMode(CameraMode const &camera_mode, Metadata *metadata); void Prepare(Metadata *image_metadata); void Process(StatisticsPtr stats, Metadata *image_metadata); Metadata &GetGlobalMetadata(); Algorithm *GetAlgorithm(std::string const &name) const; protected: Metadata global_metadata_; std::vector<AlgorithmPtr> algorithms_; bool switch_mode_called_; }; } // namespace RPiController