19#define GL_GLEXT_PROTOTYPES
20#define EGL_EGLEXT_PROTOTYPES
23#include "libcamera/internal/egl.h"
25#include "libcamera/internal/software_isp/benchmark.h"
26#include "libcamera/internal/software_isp/swstats_cpu.h"
29#include <EGL/eglext.h>
30#include <GLES3/gl32.h>
36#define DEBAYER_EGL_MIN_SIMPLE_RGB_GAIN_TEXTURE_UNITS 4
37#define DEBAYER_OPENGL_COORDS 4
45 bool quadBayer =
false);
49 const std::vector<std::reference_wrapper<const StreamConfiguration>> &outputCfgs,
50 bool ccmEnabled)
override;
67 static int getInputConfig(
PixelFormat inputFormat, DebayerInputConfig &config);
68 static int getOutputConfig(
PixelFormat outputFormat, DebayerOutputConfig &config);
70 int getShaderVariableLocations();
72 int debayerGPU(
FrameBuffer *input,
FrameBuffer *output,
const DebayerParams ¶ms, std::optional<MappedFrameBuffer> *mappedInputBuffer, std::optional<DmaSyncer> *inputBufferDmaSyncer);
74 eGLImage *getCachedInputFrameBuffer(
FrameBuffer *input, std::optional<MappedFrameBuffer> *inMapped, std::optional<DmaSyncer> *inDmaSyncer);
78 GLuint vertexShaderId_ = 0;
79 GLuint fragmentShaderId_ = 0;
80 GLuint programId_ = 0;
83 std::deque<std::pair<SharedFD, std::unique_ptr<eGLImage>>> eglImageInCache_;
84 std::deque<std::pair<SharedFD, std::unique_ptr<eGLImage>>> eglImageOutCache_;
85 unsigned int inputBufferCount_;
86 unsigned int outputBufferCount_;
91 GLint attributeVertex_;
92 GLint attributeTexture_;
93 GLint textureUniformStep_;
94 GLint textureUniformSize_;
95 GLint textureUniformStrideFactor_;
96 GLint textureUniformBayerFirstRed_;
97 GLint textureUniformProjMatrix_;
98 std::array<GLfloat, 8> textureCoordinates_;
100 GLint textureUniformBayerDataIn_;
103 GLint awbUniformDataIn_;
106 GLint ccmUniformDataIn_;
109 GLint blackLevelUniformDataIn_;
112 GLint gammaUniformDataIn_;
115 GLint contrastExpUniformDataIn_;
117 Size nativeOutputSize_;
119 std::unique_ptr<SwStatsCpu> stats_;
124 unsigned int bytesPerPixel_;
125 uint32_t shaderStridePixels_;
Provide access and manage all cameras in the system.
Definition camera_manager.h:25
DebayerEGL(std::unique_ptr< SwStatsCpu > stats, const CameraManager &cm, bool quadBayer=false)
Construct a DebayerEGL object.
Definition debayer_egl.cpp:46
int start() override
Execute a start signal in the debayer object from workerthread context.
Definition debayer_egl.cpp:691
std::tuple< unsigned int, unsigned int > strideAndFrameSize(const PixelFormat &outputFormat, const Size &size) override
Get the stride and the frame size.
Definition debayer_egl.cpp:389
uint32_t preferredInputStride(const PixelFormat &inputFormat, const Size &size) override
Definition debayer_egl.cpp:402
int configure(const StreamConfiguration &inputCfg, const std::vector< std::reference_wrapper< const StreamConfiguration > > &outputCfgs, bool ccmEnabled) override
Configure the debayer object according to the passed in parameters.
Definition debayer_egl.cpp:292
const SharedFD & getStatsFD() override
Get the file descriptor for the statistics.
Definition debayer_egl.h:62
void stop() override
Stop the debayering process and perform cleanup.
Definition debayer_egl.cpp:708
Size patternSize(PixelFormat inputFormat) override
Get the width and height at which the bayer pattern repeats.
Definition debayer_egl.cpp:365
std::vector< PixelFormat > formats(PixelFormat input) override
Get the supported output formats.
Definition debayer_egl.cpp:375
SizeRange sizes(PixelFormat inputFormat, const Size &inputSize) override
Get the supported output sizes for the given input format and size.
Definition debayer_egl.cpp:717
void process(uint32_t frame, FrameBuffer *input, FrameBuffer *output, const DebayerParams ¶ms) override
Process the bayer data into the requested format.
Definition debayer_egl.cpp:639
Debayer(const CameraManager &cm, bool quadBayer=false)
Construct a Debayer object.
Definition debayer.cpp:59
Frame buffer data and its associated dynamic metadata.
Definition framebuffer.h:50
Describe a rectangle's position and dimensions.
Definition geometry.h:247
RAII-style wrapper for file descriptors.
Definition shared_fd.h:17
Describe a range of sizes.
Definition geometry.h:205
Describe a two-dimensional size.
Definition geometry.h:51
Helper class for managing EGL image resources.
Definition egl.h:50
Helper class for managing OpenGL ES operations.
Definition egl.h:100
Frame buffer memory mapping support.
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:20
Configuration parameters for a stream.
Definition stream.h:40