23 #include "swstats_cpu.h" 34 const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,
38 std::tuple<unsigned int, unsigned int>
55 unsigned int frameSize() {
return outputConfig_.frameSize; }
86 using debayerFn = void (
DebayerCpu::*)(uint8_t *dst,
const uint8_t *src[]);
89 template<
bool addAlphaByte,
bool ccmEnabled>
90 void debayer8_BGBG_BGR888(uint8_t *dst,
const uint8_t *src[]);
91 template<
bool addAlphaByte,
bool ccmEnabled>
92 void debayer8_GRGR_BGR888(uint8_t *dst,
const uint8_t *src[]);
94 template<
bool addAlphaByte,
bool ccmEnabled>
95 void debayer10_BGBG_BGR888(uint8_t *dst,
const uint8_t *src[]);
96 template<
bool addAlphaByte,
bool ccmEnabled>
97 void debayer10_GRGR_BGR888(uint8_t *dst,
const uint8_t *src[]);
99 template<
bool addAlphaByte,
bool ccmEnabled>
100 void debayer12_BGBG_BGR888(uint8_t *dst,
const uint8_t *src[]);
101 template<
bool addAlphaByte,
bool ccmEnabled>
102 void debayer12_GRGR_BGR888(uint8_t *dst,
const uint8_t *src[]);
104 template<
bool addAlphaByte,
bool ccmEnabled>
105 void debayer10P_BGBG_BGR888(uint8_t *dst,
const uint8_t *src[]);
106 template<
bool addAlphaByte,
bool ccmEnabled>
107 void debayer10P_GRGR_BGR888(uint8_t *dst,
const uint8_t *src[]);
108 template<
bool addAlphaByte,
bool ccmEnabled>
109 void debayer10P_GBGB_BGR888(uint8_t *dst,
const uint8_t *src[]);
110 template<
bool addAlphaByte,
bool ccmEnabled>
111 void debayer10P_RGRG_BGR888(uint8_t *dst,
const uint8_t *src[]);
113 struct DebayerInputConfig {
117 std::vector<PixelFormat> outputFormats;
120 struct DebayerOutputConfig {
126 int getInputConfig(
PixelFormat inputFormat, DebayerInputConfig &config);
127 int getOutputConfig(
PixelFormat outputFormat, DebayerOutputConfig &config);
132 void setupInputMemcpy(
const uint8_t *linePointers[]);
133 void shiftLinePointers(
const uint8_t *linePointers[],
const uint8_t *src);
134 void memcpyNextLine(
const uint8_t *linePointers[]);
135 void process2(
const uint8_t *src, uint8_t *dst);
136 void process4(
const uint8_t *src, uint8_t *dst);
139 static constexpr
unsigned int kMaxLineBuffers = 5;
153 DebayerInputConfig inputConfig_;
154 DebayerOutputConfig outputConfig_;
155 std::unique_ptr<SwStatsCpu> stats_;
156 std::vector<uint8_t> lineBuffers_[kMaxLineBuffers];
157 unsigned int lineBufferLength_;
158 unsigned int lineBufferPadding_;
159 unsigned int lineBufferIndex_;
160 unsigned int xShift_;
161 bool enableInputMemcpy_;
162 bool swapRedBlueGains_;
163 unsigned int measuredFrames_;
164 int64_t frameProcessTime_;
166 static constexpr
unsigned int kFramesToSkip = 30;
167 static constexpr
unsigned int kLastFrameToMeasure = 60;
RAII-style wrapper for file descriptors.
Definition: shared_fd.h:16
Struct to hold the debayer parameters.
Definition: debayer_params.h:18
void process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, DebayerParams params)
Process the bayer data into the requested format.
Definition: debayer_cpu.cpp:759
const SharedFD & getStatsFD()
Get the file descriptor for the statistics.
Definition: debayer_cpu.h:48
Size patternSize(PixelFormat inputFormat)
Get the width and height at which the bayer pattern repeats.
Definition: debayer_cpu.cpp:567
Top-level libcamera namespace.
Definition: backtrace.h:17
std::vector< PixelFormat > formats(PixelFormat input)
Get the supported output formats.
Definition: debayer_cpu.cpp:577
Frame buffer data and its associated dynamic metadata.
Definition: framebuffer.h:48
std::array< uint8_t, kRGBLookupSize > LookupTable
Type of the lookup tables for single lookup values.
Definition: debayer_params.h:27
Describe a two-dimensional size.
Definition: geometry.h:50
SizeRange sizes(PixelFormat inputFormat, const Size &inputSize)
Get the supported output sizes for the given input format and size.
Definition: debayer_cpu.cpp:846
DebayerCpu(std::unique_ptr< SwStatsCpu > stats)
Constructs a DebayerCpu object.
Definition: debayer_cpu.cpp:42
Describe a rectangle's position and dimensions.
Definition: geometry.h:240
std::tuple< unsigned int, unsigned int > strideAndFrameSize(const PixelFormat &outputFormat, const Size &size)
Get the stride and the frame size.
Definition: debayer_cpu.cpp:588
Class for debayering on the CPU.
Definition: debayer_cpu.h:27
Base object to support automatic signal disconnection.
Describe a range of sizes.
Definition: geometry.h:198
unsigned int frameSize()
Get the output frame size.
Definition: debayer_cpu.h:55
int configure(const StreamConfiguration &inputCfg, const std::vector< std::reference_wrapper< StreamConfiguration >> &outputCfgs, bool ccmEnabled)
Configure the debayer object according to the passed in parameters.
Definition: debayer_cpu.cpp:490
Base object to support automatic signal disconnection.
Definition: object.h:26
Base debayering class.
Definition: debayer.h:30
std::array< CcmColumn, kRGBLookupSize > CcmLookupTable
Type of the CCM lookup tables for red, green, blue values.
Definition: debayer_params.h:28
Configuration parameters for a stream.
Definition: stream.h:40