libcamera v0.2.0
Supporting cameras in Linux since 2019
software_isp.h
1/* SPDX-License-Identifier: LGPL-2.1-or-later */
2/*
3 * Copyright (C) 2023, Linaro Ltd
4 *
5 * software_isp.h - Simple software ISP implementation
6 */
7
8#pragma once
9
10#include <functional>
11#include <initializer_list>
12#include <map>
13#include <memory>
14#include <string>
15#include <tuple>
16#include <vector>
17
19#include <libcamera/base/log.h>
22
23#include <libcamera/geometry.h>
25
26#include <libcamera/ipa/soft_ipa_interface.h>
27#include <libcamera/ipa/soft_ipa_proxy.h>
28
29#include "libcamera/internal/dma_heaps.h"
31#include "libcamera/internal/shared_mem_object.h"
32#include "libcamera/internal/software_isp/debayer_params.h"
33
34namespace libcamera {
35
36class DebayerCpu;
37class FrameBuffer;
38class PixelFormat;
39struct StreamConfiguration;
40
41LOG_DECLARE_CATEGORY(SoftwareIsp)
42
44{
45public:
46 SoftwareIsp(PipelineHandler *pipe, const ControlInfoMap &sensorControls);
48
49 int loadConfiguration([[maybe_unused]] const std::string &filename) { return 0; }
50
51 bool isValid() const;
52
53 std::vector<PixelFormat> formats(PixelFormat input);
54
55 SizeRange sizes(PixelFormat inputFormat, const Size &inputSize);
56
57 std::tuple<unsigned int, unsigned int>
58 strideAndFrameSize(const PixelFormat &outputFormat, const Size &size);
59
60 int configure(const StreamConfiguration &inputCfg,
61 const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
62 const ControlInfoMap &sensorControls);
63
64 int exportBuffers(unsigned int output, unsigned int count,
65 std::vector<std::unique_ptr<FrameBuffer>> *buffers);
66
67 void processStats(const ControlList &sensorControls);
68
69 int start();
70 void stop();
71
72 int queueBuffers(FrameBuffer *input,
73 const std::map<unsigned int, FrameBuffer *> &outputs);
74
75 void process(FrameBuffer *input, FrameBuffer *output);
76
81
82private:
83 void saveIspParams(int dummy);
84 void setSensorCtrls(const ControlList &sensorControls);
85 void statsReady(int dummy);
86 void inputReady(FrameBuffer *input);
87 void outputReady(FrameBuffer *output);
88
89 std::unique_ptr<DebayerCpu> debayer_;
90 Thread ispWorkerThread_;
92 DebayerParams debayerParams_;
93 DmaHeap dmaHeap_;
94
95 std::unique_ptr<ipa::soft::IPAProxySoft> ipa_;
96};
97
98} /* namespace libcamera */
Utilities to help constructing class interfaces.
A map of ControlId to ControlInfo.
Definition: controls.h:306
Associate a list of ControlId with their values for an object.
Definition: controls.h:350
Helper class for dma-heap allocations.
Definition: dma_heaps.h:18
Frame buffer data and its associated dynamic metadata.
Definition: framebuffer.h:50
Create and manage cameras based on a set of media devices.
Definition: pipeline_handler.h:39
libcamera image pixel format
Definition: pixel_format.h:18
Helper class for allocating objects in shared memory.
Definition: shared_mem_object.h:74
Generic signal and slot communication mechanism.
Definition: signal.h:40
Describe a range of sizes.
Definition: geometry.h:201
Describe a two-dimensional size.
Definition: geometry.h:53
Class for the Software ISP.
Definition: software_isp.h:44
Signal< FrameBuffer * > outputBufferReady
A signal emitted when the output frame buffer completes.
Definition: software_isp.h:78
int loadConfiguration(const std::string &filename)
Load a configuration from a file.
Definition: software_isp.h:49
Signal< FrameBuffer * > inputBufferReady
A signal emitted when the input frame buffer completes.
Definition: software_isp.h:77
Signal< const ControlList & > setSensorControls
A signal emitted when the values to write to the sensor controls are ready.
Definition: software_isp.h:80
Signal< int > ispStatsReady
A signal emitted when the statistics for IPA are ready.
Definition: software_isp.h:79
A thread of execution.
Definition: thread.h:29
Data structures related to geometric objects.
Logging infrastructure.
#define LOG_DECLARE_CATEGORY(name)
Declare a category of log messages.
Top-level libcamera namespace.
Definition: backtrace.h:17
Create pipelines and cameras from a set of media devices.
libcamera pixel format
Signal & slot implementation.
Struct to hold the debayer parameters.
Definition: debayer_params.h:18
Configuration parameters for a stream.
Definition: stream.h:41
Thread support.