libcamera v0.3.2+99-1230f78d
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 * 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 <stdint.h>
15#include <string>
16#include <tuple>
17#include <vector>
18
20#include <libcamera/base/log.h>
23
24#include <libcamera/geometry.h>
26
27#include <libcamera/ipa/soft_ipa_interface.h>
28#include <libcamera/ipa/soft_ipa_proxy.h>
29
31#include "libcamera/internal/dma_buf_allocator.h"
33#include "libcamera/internal/shared_mem_object.h"
34#include "libcamera/internal/software_isp/debayer_params.h"
35
36namespace libcamera {
37
38class DebayerCpu;
39class FrameBuffer;
40class PixelFormat;
41class Stream;
42struct StreamConfiguration;
43
44LOG_DECLARE_CATEGORY(SoftwareIsp)
45
47{
48public:
49 SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor);
51
52 int loadConfiguration([[maybe_unused]] const std::string &filename) { return 0; }
53
54 bool isValid() const;
55
56 std::vector<PixelFormat> formats(PixelFormat input);
57
58 SizeRange sizes(PixelFormat inputFormat, const Size &inputSize);
59
60 std::tuple<unsigned int, unsigned int>
61 strideAndFrameSize(const PixelFormat &outputFormat, const Size &size);
62
63 int configure(const StreamConfiguration &inputCfg,
64 const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
65 const ipa::soft::IPAConfigInfo &configInfo);
66
67 int exportBuffers(const Stream *stream, unsigned int count,
68 std::vector<std::unique_ptr<FrameBuffer>> *buffers);
69
70 void processStats(const uint32_t frame, const uint32_t bufferId,
71 const ControlList &sensorControls);
72
73 int start();
74 void stop();
75
76 void queueRequest(const uint32_t frame, const ControlList &controls);
77 int queueBuffers(uint32_t frame, FrameBuffer *input,
78 const std::map<const Stream *, FrameBuffer *> &outputs);
79
80 void process(uint32_t frame, FrameBuffer *input, FrameBuffer *output);
81
86
87private:
88 void saveIspParams();
89 void setSensorCtrls(const ControlList &sensorControls);
90 void statsReady(uint32_t frame, uint32_t bufferId);
91 void inputReady(FrameBuffer *input);
92 void outputReady(FrameBuffer *output);
93
94 std::unique_ptr<DebayerCpu> debayer_;
95 Thread ispWorkerThread_;
97 DebayerParams debayerParams_;
98 DmaBufAllocator dmaHeap_;
99
100 std::unique_ptr<ipa::soft::IPAProxySoft> ipa_;
101};
102
103} /* namespace libcamera */
A camera sensor.
Utilities to help constructing class interfaces.
A camera sensor based on V4L2 subdevices.
Definition: camera_sensor.h:39
Associate a list of ControlId with their values for an object.
Definition: controls.h:381
Helper class for dma-buf allocations.
Definition: dma_buf_allocator.h:16
Frame buffer data and its associated dynamic metadata.
Definition: framebuffer.h:49
Create and manage cameras based on a set of media devices.
Definition: pipeline_handler.h:35
libcamera image pixel format
Definition: pixel_format.h:17
Helper class to allocate an object in shareable memory.
Definition: shared_mem_object.h:60
Generic signal and slot communication mechanism.
Definition: signal.h:39
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:47
Signal< FrameBuffer * > outputBufferReady
A signal emitted when the output frame buffer completes.
Definition: software_isp.h:83
int loadConfiguration(const std::string &filename)
Load a configuration from a file.
Definition: software_isp.h:52
Signal< FrameBuffer * > inputBufferReady
A signal emitted when the input frame buffer completes.
Definition: software_isp.h:82
Signal< const ControlList & > setSensorControls
A signal emitted when the values to write to the sensor controls are ready.
Definition: software_isp.h:85
Signal< uint32_t, uint32_t > ispStatsReady
A signal emitted when the statistics for IPA are ready.
Definition: software_isp.h:84
Video stream for a camera.
Definition: stream.h:74
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.
const ControlIdMap controls
List of all supported libcamera controls.
Definition: control_ids.cpp:2125
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:40
Thread support.