| Message ID | 20251212002937.3118-1-bryan.odonoghue@linaro.org |
|---|---|
| Headers | show |
| Series |
|
| Related | show |
Quoting Bryan O'Donoghue (2025-12-12 00:29:11) > v8: > > A small number of updates. I'll copy and paste my change notes directly. > Running checkpatch: -------------------------------------------------------------------------------------------------------------------- 5023d90b81f9fe831c775a53a7a2b343ff8acc30 libcamera: software_isp: gbm: Add a GBM helper class for GPU surface access -------------------------------------------------------------------------------------------------------------------- --- src/libcamera/gbm.cpp +++ src/libcamera/gbm.cpp @@ -112,7 +112,7 @@ * \return Pointer to the gbm_device structure, or nullptr if the device * has not been created */ -struct gbm_device * GBM::getDevice() +struct gbm_device *GBM::getDevice() { return gbmDevice_; } --- 1 potential issue detected, please review -------------------------------------------------------------------------------------------------- 823e8df41243762f23036c8fe7ceb187b503f770 libcamera: software_isp: egl: Add a eGL base helper class -------------------------------------------------------------------------------------------------- Header include/libcamera/internal/egl.h added without corresponding update to include/libcamera/internal/meson.build --- include/libcamera/internal/egl.h +++ include/libcamera/internal/egl.h @@ -15,8 +15,8 @@ #include <libcamera/base/log.h> #include <libcamera/base/span.h> +#include <libcamera/base/utils.h> -#include "libcamera/base/utils.h" #include "libcamera/internal/gbm.h" #define EGL_EGLEXT_PROTOTYPES @@ -92,17 +92,17 @@ glDeleteTextures(1, &texture_); } - uint32_t width_; /**< Image width in pixels */ - uint32_t height_; /**< Image height in pixels */ - uint32_t stride_; /**< Row stride in bytes */ - uint32_t offset_; /**< Buffer offset (reserved for future use) */ - uint32_t framesize_; /**< Total frame size in bytes (stride * height) */ - uint32_t bpp_; /**< Bytes per pixel */ - uint32_t texture_unit_uniform_id_; /**< Shader uniform id for texture unit */ - GLenum texture_unit_; /**< Texture unit associated with this image eg (GL_TEXTURE0) */ - GLuint texture_; /**< OpenGL texture object ID */ - GLuint fbo_; /**< OpenGL frame buffer object ID */ - EGLImageKHR image_; /**< EGL Image handle */ + uint32_t width_; /**< Image width in pixels */ + uint32_t height_; /**< Image height in pixels */ + uint32_t stride_; /**< Row stride in bytes */ + uint32_t offset_; /**< Buffer offset (reserved for future use) */ + uint32_t framesize_; /**< Total frame size in bytes (stride * height) */ + uint32_t bpp_; /**< Bytes per pixel */ + uint32_t texture_unit_uniform_id_; /**< Shader uniform id for texture unit */ + GLenum texture_unit_; /**< Texture unit associated with this image eg (GL_TEXTURE0) */ + GLuint texture_; /**< OpenGL texture object ID */ + GLuint fbo_; /**< OpenGL frame buffer object ID */ + EGLImageKHR image_; /**< EGL Image handle */ private: LIBCAMERA_DISABLE_COPY_AND_MOVE(eGLImage) --- src/libcamera/egl.cpp +++ src/libcamera/egl.cpp @@ -229,7 +229,6 @@ eglDestroyImage(display_, eglImage->image_); } - /** * \brief Create a 2D texture from a memory buffer * \param[in,out] eglImage EGL image to associate with the texture @@ -357,15 +356,15 @@ return -ENODEV; } - /** * \brief Clean up EGL resources * * Destroys the EGL sync object. Must be called from the same thread * that created the EGL context. */ -void eGL::cleanUp(void) {} - +void eGL::cleanUp(void) +{ +} /** * \brief Make the EGL context current for the calling thread @@ -382,7 +381,6 @@ LOG(eGL, Error) << "eglMakeCurrent fail"; } } - /** * \brief Activate a shader program for rendering @@ -513,7 +511,7 @@ GLint sizeLog = 0; glGetShaderiv(shaderId, GL_INFO_LOG_LENGTH, &sizeLog); - auto infoLog = std::make_unique<GLchar []>(sizeLog); + auto infoLog = std::make_unique<GLchar[]>(sizeLog); glGetShaderInfoLog(shaderId, sizeLog, &sizeLog, infoLog.get()); LOG(eGL, Error) << infoLog.get(); @@ -540,7 +538,7 @@ LOG(eGL, Debug) << "Shader length is " << shaderLength; if (shaderLength > 0) { - auto shaderSource = std::make_unique<GLchar []>(shaderLength); + auto shaderSource = std::make_unique<GLchar[]>(shaderLength); glGetShaderSource(shaderId, shaderLength, &shaderLength, shaderSource.get()); if (shaderLength) { @@ -548,7 +546,6 @@ } } } - /** * \brief Link a shader program --- 9 potential issues detected, please review ------------------------------------------------------------------------------------------- 7400459ccda59432c80acfcc2a1dbc7ac8c6619f qcam: viewfinder_gl: Set no-op Bayer shader values ------------------------------------------------------------------------------------------- --- src/apps/qcam/viewfinder_gl.cpp +++ src/apps/qcam/viewfinder_gl.cpp @@ -547,9 +571,9 @@ unsigned int stridePixels; /* Identity CCM */ - float ccm[] = {1.0f, 0.0f, 0.0f, - 0.0f, 1.0f, 0.0f, - 0.0f, 0.0f, 1.0f }; + float ccm[] = { 1.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 1.0f }; QMatrix3x3 qCcmMat(ccm); /* Black Level */ @@ -802,7 +826,7 @@ */ stridePixels = size_.width(); - /* Colour Correction Matrix */ + /* Colour Correction Matrix */ shaderProgram_.setUniformValue(ccmUniformDataIn_, qCcmMat); /* Black Level */ --- 2 potential issues detected, please review --------------------------------------------------------------------------------------------- feb833daef2208ccd7baef94e9d91cbff1dc2dc7 libcamera: shaders: Rename bayer_8 to bayer_unpacked --------------------------------------------------------------------------------------------- No issue detected ------------------------------------------------------------------------------------------------------ ee1532da2ce67e03d7da34d4930af4d6dffa410d libcamera: shaders: Use highp not mediump for float precision ------------------------------------------------------------------------------------------------------ No issue detected ------------------------------------------------------------------------------------------------------ a843ffbf87ed820d5d0a20c4d89f120c0e8d6703 libcamera: shaders: Extend debayer shaders to apply CCM gains ------------------------------------------------------------------------------------------------------ No issue detected ----------------------------------------------------------------------------------------------------------------------- e95b92f52b862b77264e5cc29ac8070ed8ae1562 libcamera: shaders: Extend bayer shaders to support swapping R and B on output ----------------------------------------------------------------------------------------------------------------------- No issue detected ----------------------------------------------------------------------------------------------------- 06c96eb42cb1ff0bf67ea47a4bd44f5fc709ab37 libcamera: shaders: Add support for black level compensation ----------------------------------------------------------------------------------------------------- No issue detected ---------------------------------------------------------------------------------- f38a15658b37bf8da6b5fb7cf7ec5f27ff39f1df libcamera: shaders: Add support for Gamma ---------------------------------------------------------------------------------- No issue detected ------------------------------------------------------------------------------------- a9f01d64ef9a039a416ef30f538e157da796a5f2 libcamera: shaders: Add support for contrast ------------------------------------------------------------------------------------- No issue detected ---------------------------------------------------------------------------------------------------- f0b9b57aa0d57fb0b46482240aac2871800cde41 libcamera: shaders: Fix input sampling when width != stride ---------------------------------------------------------------------------------------------------- No issue detected --------------------------------------------------------------------------------------------------------------------------------- 4c3ae9501fb70f1a4d40c6a42ce65b7803f291ce libcamera: software_isp: Add member variables to track selected input/output pixelFormat --------------------------------------------------------------------------------------------------------------------------------- No issue detected ------------------------------------------------------------------------------------------------------------------ 08ce64403a68ecce3e69c41885131e5c63a81132 libcamera: software_isp: Add a Size_ member variable to pass to eGL later ------------------------------------------------------------------------------------------------------------------ No issue detected ------------------------------------------------------------------------------------------------------- fbd546a20988f8833a205e1cfac34c253598db18 libcamera: software_isp: debayer_egl: Add an eGL Debayer class ------------------------------------------------------------------------------------------------------- --- src/libcamera/software_isp/debayer_egl.cpp +++ src/libcamera/software_isp/debayer_egl.cpp @@ -36,9 +36,13 @@ * \param[in] configuration Global configuration reference */ DebayerEGL::DebayerEGL(std::unique_ptr<SwStatsCpu> stats, const GlobalConfiguration &configuration) - : Debayer(configuration), stats_(std::move(stats)) {} - -DebayerEGL::~DebayerEGL() {} + : Debayer(configuration), stats_(std::move(stats)) +{ +} + +DebayerEGL::~DebayerEGL() +{ +} int DebayerEGL::getInputConfig(PixelFormat inputFormat, DebayerInputConfig &config) { @@ -286,11 +290,10 @@ return -EINVAL; } - /** - * \brief Get the output frame size. + * \brief Get the output frame size * - * \return The output frame size. + * \return The output frame size */ unsigned int DebayerEGL::frameSize() { @@ -323,7 +326,6 @@ inputPixelFormat_ = inputCfg.pixelFormat; width_ = inputCfg.size.width; height_ = inputCfg.size.height; - if (outputCfgs.size() != 1) { LOG(Debayer, Error) #13: C++ header <cmath> is preferred +#include <math.h> ^~~~~~ --- 4 potential issues detected, please review ----------------------------------------------------------------------------------------------------------------------------- 2c2ca4391ceaaeea7c19623cc5027d957868c335 libcamera: software_isp: debayer_cpu: Make getInputConfig and getOutputConfig static ----------------------------------------------------------------------------------------------------------------------------- No issue detected ------------------------------------------------------------------------------------------------------------ 26c2a55c5612892b03d68ad23e5995ac7f04015b libcamera: software_isp: GPU support for unpacked 10/12-bit formats ------------------------------------------------------------------------------------------------------------ No issue detected -------------------------------------------------------------------------------------------------------------------- 83c23cbc22b23b3cd82356fba7694721f9c86f50 libcamera: software_isp: debayer_egl: Make DebayerEGL an environment option -------------------------------------------------------------------------------------------------------------------- No issue detected --------------------------------------------------------------------------------------------------------------- 6aa05a044fbf05d5eea09ec15e372f89d802bfb7 libcamera: software_isp: debayer_egl: Make gpuisp default softisp mode --------------------------------------------------------------------------------------------------------------- No issue detected ----------------------------------------------------------------------------------------------------- 675c629d3188c12c076e7da571e2d092347ccee0 ipa: software_isp: Add a selfInitialising flag to IPAContext ----------------------------------------------------------------------------------------------------- No issue detected ---------------------------------------------------------------------------------------------------------------------- 068a08cae681c81cc9c0c0cb58edf23d4f3404d4 libcamera: software_isp: ccm: Add self-initialising identity CCM to Ccm::init ---------------------------------------------------------------------------------------------------------------------- No issue detected ------------------------------------------------------------------------------------------------ 1f6e86d8868e6943bb498cb647e3229a1be2d590 ipa: libipa: module: Add createSelfEnumeratingAlgorithm ------------------------------------------------------------------------------------------------ --- src/ipa/libipa/module.cpp +++ src/ipa/libipa/module.cpp @@ -109,7 +109,7 @@ * Worker method which allows sharing of common code in the Yaml and self-initialising algorithm case * * \param[in] context The IPA context to pass to the algorithm's init function - * \param[in] algoData Yaml object. + * \param[in] algoData Yaml object * \param[in] name The name of the algorithm to instantiate * * \return 0 on success, negative errno value on failure: --- src/ipa/libipa/module.h +++ src/ipa/libipa/module.h @@ -87,7 +87,6 @@ } private: - int createAlgorithmCommon(Context &context, const YamlObject &algoData, const std::string &name) { std::unique_ptr<Algorithm<Module>> algo = createAlgorithm(name); --- 2 potential issues detected, please review ------------------------------------------------------------------------------------------ cf381ffd0c32057a380f3251c728754c1d9c4ded ipa: simple: Add a flag to indicate gpuIspEnabled ------------------------------------------------------------------------------------------ No issue detected ------------------------------------------------------------------------------------------------------------------------------------ ad8a0b54d8d560919c00319ad78f7a5bcd4e2e5b ipa: software_isp: Call createSelfEnumeratingAlgorithm() to statically instantiate CCM algo ------------------------------------------------------------------------------------------------------------------------------------ No issue detected ------------------------------------------------------------------------------------------------------------------------------ b01198a12d3bb98e36ed1ca1df642bf8c374515f libcamera: software_isp: lut: Skip calculation lookup tables if gpuIspEnabled is true ------------------------------------------------------------------------------------------------------------------------------ No issue detected ------------------------------------------------------------------------------------------------------ daffa9121715788c1c9ef1fb42613042bfcbe811 libcamera: software_isp: lut: Change default Gamma to 1.0/2.2 ------------------------------------------------------------------------------------------------------ --- src/ipa/simple/algorithms/lut.cpp +++ src/ipa/simple/algorithms/lut.cpp @@ -35,7 +35,7 @@ [[maybe_unused]] const IPAConfigInfo &configInfo) { /* Gamma value is fixed */ - context.configuration.gamma = 1.0/2.2; + context.configuration.gamma = 1.0 / 2.2; context.activeState.knobs.contrast = std::optional<double>(); updateGammaTable(context); --- 1 potential issue detected, please review ---------------------------------------------------------------------------------------- 7bbf8168bc43cccaa2b2b227b2a28ecb1ecaa28c libcamera: software_isp: Add a gpuisp todo list ---------------------------------------------------------------------------------------- No issue detected
Quoting Kieran Bingham (2025-12-15 20:12:06) > Quoting Bryan O'Donoghue (2025-12-12 00:29:11) > > v8: > > > > A small number of updates. I'll copy and paste my change notes directly. > > > > Running checkpatch: > @@ -92,17 +92,17 @@ > glDeleteTextures(1, &texture_); > } > > - uint32_t width_; /**< Image width in pixels */ > - uint32_t height_; /**< Image height in pixels */ > - uint32_t stride_; /**< Row stride in bytes */ > - uint32_t offset_; /**< Buffer offset (reserved for future use) */ > - uint32_t framesize_; /**< Total frame size in bytes (stride * height) */ > - uint32_t bpp_; /**< Bytes per pixel */ > - uint32_t texture_unit_uniform_id_; /**< Shader uniform id for texture unit */ > - GLenum texture_unit_; /**< Texture unit associated with this image eg (GL_TEXTURE0) */ > - GLuint texture_; /**< OpenGL texture object ID */ > - GLuint fbo_; /**< OpenGL frame buffer object ID */ > - EGLImageKHR image_; /**< EGL Image handle */ > + uint32_t width_; /**< Image width in pixels */ > + uint32_t height_; /**< Image height in pixels */ > + uint32_t stride_; /**< Row stride in bytes */ > + uint32_t offset_; /**< Buffer offset (reserved for future use) */ > + uint32_t framesize_; /**< Total frame size in bytes (stride * height) */ > + uint32_t bpp_; /**< Bytes per pixel */ > + uint32_t texture_unit_uniform_id_; /**< Shader uniform id for texture unit */ > + GLenum texture_unit_; /**< Texture unit associated with this image eg (GL_TEXTURE0) */ > + GLuint texture_; /**< OpenGL texture object ID */ > + GLuint fbo_; /**< OpenGL frame buffer object ID */ > + EGLImageKHR image_; /**< EGL Image handle */ I wouldn't object to ignoring that hunk though. The rest look easy to apply though. Remember you can do things like kbingham@charm:~/iob/libcamera$ ./utils/checkstyle.py daffa9121715788c1c9ef1fb42613042bfcbe811 | patch -p0 patching file src/ipa/simple/algorithms/lut.cpp kbingham@charm:~/iob/libcamera$ git add -p diff --git a/src/ipa/simple/algorithms/lut.cpp b/src/ipa/simple/algorithms/lut.cpp index 618219b17bc5..bd0d308bef3c 100644 --- a/src/ipa/simple/algorithms/lut.cpp +++ b/src/ipa/simple/algorithms/lut.cpp @@ -35,7 +35,7 @@ int Lut::configure(IPAContext &context, [[maybe_unused]] const IPAConfigInfo &configInfo) { /* Gamma value is fixed */ - context.configuration.gamma = 1.0/2.2; + context.configuration.gamma = 1.0 / 2.2; context.activeState.knobs.contrast = std::optional<double>(); updateGammaTable(context); (1/1) Stage this hunk [y,n,q,a,d,e,p,P,?]? y kbingham@charm:~/iob/libcamera$ git fixup 7fab2062d8274065e870de20382720a0cdb11193 [L] libcamera: software_isp: Move color handling to an algorithm module <mzamazal@redhat.com> 9135aacff1fa8aa6af1a44493c6ec8abfbde31a3 [L] libcamera: software_isp: Add support for contrast control <mzamazal@redhat.com> daffa9121715788c1c9ef1fb42613042bfcbe811 [L] libcamera: software_isp: lut: Change default Gamma to 1.0/2.2 <bryan.odonoghue@linaro.org> kbingham@charm:~/iob/libcamera$ git commit --fixup=daffa9121715788c1c9ef1fb42613042bfcbe811 ------------------------------------------------------------------------------------------------------------- 30de50eb9903043a86e8a0c299164f75f55a617e fixup! libcamera: software_isp: lut: Change default Gamma to 1.0/2.2 ------------------------------------------------------------------------------------------------------------- No 'Signed-off-by' trailer matching author 'Kieran Bingham <kieran.bingham@ideasonboard.com>', see Documentation/contributing.rst --- 1 potential issue detected, please review [patchwork/5637 30de50eb9903] fixup! libcamera: software_isp: lut: Change default Gamma to 1.0/2.2 1 file changed, 1 insertion(+), 1 deletion(-) kbingham@charm:~/iob/libcamera$ git rebase -i --autosquash --autostash origin/master And now the commit is 'fixed'. I use git fixup from # git-fixup https://github.com/keis/git-fixup -- Kieran
v8: A small number of updates. I'll copy and paste my change notes directly. - gbm patch - \todo, nullptr comments addressed - Milan - Left fail - meant fail - Changed cleanup flow - // namespace libcamera -> /* namespace libcamera */ - Dropped HAVE_GBM - Contrast patch Passed contrastExp as argument to apply_contrast() - Milan - Dropped "invalid." for "invalid" Left "it makes sense" not sure of "let's try" was a suggested commit log comment but - "it makes sense" to me :) - Milan - Changes CCM init to Matrix<float, 3, 3> identityMatrix = Matrix<float, 3, 3>::identity(); Amends commit log - Milan - Fixes the identity CCM commit log Old commit log not updated on review changes - Milan - Changed selfEnumerating to use common code Milan left a comment on not having copied code so I created a helper function and moved a much as I thought I could - Milan - todo - rewriging -> rewiring. onomatopoeic error ! - manging -> managing v7: - Takes Laurent's question on doing egl init in start() instead of configure() and implements it. Tested with repeated start()/stop() from qcam. - A few supporting patches to get data we require in configure() into start() has been added as a result. - Bayer object now has a start() and a stop() - introduced in the precursor series. - Dropped overloaded algorith init() function as Milan seemed to prefer a flag in context_ over an overloaded init(). - Small tidy up on the use of TEXTURE1 instead of TEXTURE4 now that the RGB lookup tables have been dropped too. - Updates the todo list - The one thing not done is passing the complex contrast into the fragment shader per frame, instead of having it calculated per-pixel. I'd rather get the current series out/merged than add this extra bit right now. v6: - Rebases on 0.6.0 - Removes conditional compilation for lookup-table v CCM. The conditional compile to switch the ordering of blue is kept. - Laurent - Removes Bayer lookup table code from shaders and debayer_egl logic Disussed with Laurent and agree it can be dropped now - Adds a patch to pass no-op values to the debayer shaders when running those shaders in qcam. Confirmed this works by switching the true/false flag in simple.cpp and recompiling. Once the raw-streams stuff gets merged changing simple.cpp shouldn't be required. This lets us continue to support the original behaviour of the debayer shaders in Qcam while also reusing those shaders with our extensions in softisp. - Re-orders the patches a bit to group changes a bit more logically especially on more recently added patches. CI is still happy with building as progressive changes. - Drops the patch to make isStandardBayerOrder static as this logic has been squashed into the precursor series. Barnabas v5: - Takes in a fix from Hans for the unpacked center bytes. I opted to have separate stride values passed to the shaders to maintain consistency with qcam - Implements the unique_ptr change Barnabas suggested - Changes to glFinish instead of eglWaitSyncKHR - Milan/Robert - Fixes interface to pass gpuIspEnabled as a parameter - Barnabas - Makes it an error if you request GPUISP but object instantiation fails - Barnabas - Fixes indentation splat in unpacked shader - I love whitespace :( - Laurent - Leaves the upload tables in place - I thought we noted to do this in weekly meeting I'm open/happy to drop this code though its not really necessary now. - Leaves conditional compilation in shaders. The reason being with conditional compilation we can still run the original unmodifed shaders - which gives a nice base to mess with the demosiac phase in isolation. v4: - Drops AWB since the CCM contains it already - Includes Gamma - Includes Contrast - testable via camshark - Includes Saturation - testable via camshark - Includes a scaler from Robert - Includes synch changes from Robert - Includes all feedback incorporated from Pavel - Generates a default 65k CCM if none is supplied - Various Doxygen torments fixed along the way - And is the "top half" of the precursor series as the GPUISP series becomes 44 patches long this is an unreasonable number to merge in one go. - Full testable branch Link: https://gitlab.freedesktop.org/camera/libcamera-softisp/-/tree/v0.5.2-gpuisp-v4e?ref_type=heads - The first part of the series is in the precurso here Link: https://gitlab.freedesktop.org/camera/libcamera-softisp/-/commits/v0.5.2-gpuisp-v4e-split That precursor is just a tag about half way through the integrated series. Bryan O'Donoghue (23): libcamera: software_isp: gbm: Add a GBM helper class for GPU surface access libcamera: software_isp: egl: Add a eGL base helper class qcam: viewfinder_gl: Set no-op Bayer shader values libcamera: shaders: Use highp not mediump for float precision libcamera: shaders: Extend debayer shaders to apply CCM gains libcamera: shaders: Extend bayer shaders to support swapping R and B on output libcamera: shaders: Add support for black level compensation libcamera: shaders: Add support for Gamma libcamera: shaders: Add support for contrast libcamera: software_isp: Add member variables to track selected input/output pixelFormat libcamera: software_isp: Add a Size_ member variable to pass to eGL later libcamera: software_isp: debayer_egl: Add an eGL Debayer class libcamera: software_isp: debayer_cpu: Make getInputConfig and getOutputConfig static libcamera: software_isp: debayer_egl: Make DebayerEGL an environment option libcamera: software_isp: debayer_egl: Make gpuisp default softisp mode ipa: software_isp: Add a selfInitialising flag to IPAContext libcamera: software_isp: ccm: Add self-initialising identity CCM to Ccm::init ipa: libipa: module: Add createSelfEnumeratingAlgorithm ipa: simple: Add a flag to indicate gpuIspEnabled ipa: software_isp: Call createSelfEnumeratingAlgorithm() to statically instantiate CCM algo libcamera: software_isp: lut: Skip calculation lookup tables if gpuIspEnabled is true libcamera: software_isp: lut: Change default Gamma to 1.0/2.2 libcamera: software_isp: Add a gpuisp todo list Hans de Goede (1): libcamera: shaders: Fix input sampling when width != stride Milan Zamazal (2): libcamera: shaders: Rename bayer_8 to bayer_unpacked libcamera: software_isp: GPU support for unpacked 10/12-bit formats include/libcamera/internal/egl.h | 186 +++++ include/libcamera/internal/gbm.h | 39 ++ include/libcamera/internal/meson.build | 1 + include/libcamera/ipa/soft.mojom | 3 +- src/apps/qcam/assets/shader/shaders.qrc | 4 +- src/apps/qcam/viewfinder_gl.cpp | 41 +- src/apps/qcam/viewfinder_gl.h | 12 + src/ipa/libipa/module.cpp | 34 + src/ipa/libipa/module.h | 47 +- src/ipa/simple/algorithms/ccm.cpp | 22 +- src/ipa/simple/algorithms/lut.cpp | 72 +- src/ipa/simple/ipa_context.h | 2 + src/ipa/simple/soft_simple.cpp | 9 + src/libcamera/egl.cpp | 619 +++++++++++++++++ src/libcamera/gbm.cpp | 130 ++++ src/libcamera/meson.build | 33 + src/libcamera/shaders/RGB.frag | 2 +- src/libcamera/shaders/YUV_2_planes.frag | 2 +- src/libcamera/shaders/YUV_3_planes.frag | 2 +- src/libcamera/shaders/YUV_packed.frag | 2 +- src/libcamera/shaders/bayer_1x_packed.frag | 79 ++- .../{bayer_8.frag => bayer_unpacked.frag} | 95 ++- .../{bayer_8.vert => bayer_unpacked.vert} | 6 +- src/libcamera/shaders/meson.build | 4 +- src/libcamera/software_isp/debayer.cpp | 15 + src/libcamera/software_isp/debayer.h | 3 + src/libcamera/software_isp/debayer_cpu.h | 4 +- src/libcamera/software_isp/debayer_egl.cpp | 641 ++++++++++++++++++ src/libcamera/software_isp/debayer_egl.h | 142 ++++ src/libcamera/software_isp/gpuisp-todo.txt | 40 ++ src/libcamera/software_isp/meson.build | 8 + src/libcamera/software_isp/software_isp.cpp | 37 +- 32 files changed, 2258 insertions(+), 78 deletions(-) create mode 100644 include/libcamera/internal/egl.h create mode 100644 include/libcamera/internal/gbm.h create mode 100644 src/libcamera/egl.cpp create mode 100644 src/libcamera/gbm.cpp rename src/libcamera/shaders/{bayer_8.frag => bayer_unpacked.frag} (51%) rename src/libcamera/shaders/{bayer_8.vert => bayer_unpacked.vert} (90%) create mode 100644 src/libcamera/software_isp/debayer_egl.cpp create mode 100644 src/libcamera/software_isp/debayer_egl.h create mode 100644 src/libcamera/software_isp/gpuisp-todo.txt