23#include "swstats_cpu.h"
34 const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs);
37 std::tuple<unsigned int, unsigned int>
54 unsigned int frameSize() {
return outputConfig_.frameSize; }
85 using debayerFn = void (
DebayerCpu::*)(uint8_t *dst, const uint8_t *src[]);
88 void debayer8_BGBG_BGR888(uint8_t *dst,
const uint8_t *src[]);
89 void debayer8_GRGR_BGR888(uint8_t *dst,
const uint8_t *src[]);
91 void debayer10_BGBG_BGR888(uint8_t *dst,
const uint8_t *src[]);
92 void debayer10_GRGR_BGR888(uint8_t *dst,
const uint8_t *src[]);
94 void debayer12_BGBG_BGR888(uint8_t *dst,
const uint8_t *src[]);
95 void debayer12_GRGR_BGR888(uint8_t *dst,
const uint8_t *src[]);
97 void debayer10P_BGBG_BGR888(uint8_t *dst,
const uint8_t *src[]);
98 void debayer10P_GRGR_BGR888(uint8_t *dst,
const uint8_t *src[]);
99 void debayer10P_GBGB_BGR888(uint8_t *dst,
const uint8_t *src[]);
100 void debayer10P_RGRG_BGR888(uint8_t *dst,
const uint8_t *src[]);
102 struct DebayerInputConfig {
106 std::vector<PixelFormat> outputFormats;
109 struct DebayerOutputConfig {
112 unsigned int frameSize;
115 int getInputConfig(PixelFormat inputFormat, DebayerInputConfig &config);
116 int getOutputConfig(PixelFormat outputFormat, DebayerOutputConfig &config);
118 int setDebayerFunctions(PixelFormat inputFormat, PixelFormat outputFormat);
119 void setupInputMemcpy(
const uint8_t *linePointers[]);
120 void shiftLinePointers(
const uint8_t *linePointers[],
const uint8_t *src);
121 void memcpyNextLine(
const uint8_t *linePointers[]);
122 void process2(
const uint8_t *src, uint8_t *dst);
123 void process4(
const uint8_t *src, uint8_t *dst);
125 static constexpr unsigned int kGammaLookupSize = 1024;
126 static constexpr unsigned int kRGBLookupSize = 256;
128 static constexpr unsigned int kMaxLineBuffers = 5;
130 std::array<uint8_t, kGammaLookupSize> gamma_;
131 std::array<uint8_t, kRGBLookupSize> red_;
132 std::array<uint8_t, kRGBLookupSize> green_;
133 std::array<uint8_t, kRGBLookupSize> blue_;
139 DebayerInputConfig inputConfig_;
140 DebayerOutputConfig outputConfig_;
141 std::unique_ptr<SwStatsCpu> stats_;
142 uint8_t *lineBuffers_[kMaxLineBuffers];
143 unsigned int lineBufferLength_;
144 unsigned int lineBufferPadding_;
145 unsigned int lineBufferIndex_;
146 unsigned int xShift_;
147 bool enableInputMemcpy_;
148 bool swapRedBlueGains_;
149 float gammaCorrection_;
150 unsigned int blackLevel_;
151 unsigned int measuredFrames_;
152 int64_t frameProcessTime_;
154 static constexpr unsigned int kFramesToSkip = 30;
155 static constexpr unsigned int kLastFrameToMeasure = 60;
Class for debayering on the CPU.
Definition debayer_cpu.h:28
Size patternSize(PixelFormat inputFormat)
Get the width and height at which the bayer pattern repeats.
Definition debayer_cpu.cpp:506
SizeRange sizes(PixelFormat inputFormat, const Size &inputSize)
Get the supported output sizes for the given input format and size.
Definition debayer_cpu.cpp:778
DebayerCpu(std::unique_ptr< SwStatsCpu > stats)
Constructs a DebayerCpu object.
Definition debayer_cpu.cpp:37
unsigned int frameSize()
Get the output frame size.
Definition debayer_cpu.h:54
void process(FrameBuffer *input, FrameBuffer *output, DebayerParams params)
Process the bayer data into the requested format.
Definition debayer_cpu.cpp:692
int configure(const StreamConfiguration &inputCfg, const std::vector< std::reference_wrapper< StreamConfiguration > > &outputCfgs)
Configure the debayer object according to the passed in parameters.
Definition debayer_cpu.cpp:430
std::vector< PixelFormat > formats(PixelFormat input)
Get the supported output formats.
Definition debayer_cpu.cpp:516
std::tuple< unsigned int, unsigned int > strideAndFrameSize(const PixelFormat &outputFormat, const Size &size)
Get the stride and the frame size.
Definition debayer_cpu.cpp:527
const SharedFD & getStatsFD()
Get the file descriptor for the statistics.
Definition debayer_cpu.h:47
Base debayering class.
Definition debayer.h:31
Frame buffer data and its associated dynamic metadata.
Definition framebuffer.h:50
Base object to support automatic signal disconnection.
Definition object.h:25
RAII-style wrapper for file descriptors.
Definition shared_fd.h:17
Describe a range of sizes.
Definition geometry.h:201
Describe a two-dimensional size.
Definition geometry.h:53
Top-level libcamera namespace.
Definition backtrace.h:17
Base object to support automatic signal disconnection.
Struct to hold the debayer parameters.
Definition debayer_params.h:15
Configuration parameters for a stream.
Definition stream.h:41