summaryrefslogtreecommitdiff
path: root/src/ipa/raspberrypi/cam_helper_ov9281.cpp
AgeCommit message (Expand)Author
2021-06-30ipa: raspberrypi: Use a unique_ptr for the metadata parserNaushir Patuck
2021-06-28libcamera: ipa: raspberrypi: Add support for ov9281 sensorDavid Plowman
d='n7' href='#n7'>7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
/* 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