Message ID | 20250611013245.133785-11-bryan.odonoghue@linaro.org |
---|---|
State | New |
Headers | show |
Series |
|
Related | show |
Hi Bryan, Bryan O'Donoghue <bryan.odonoghue@linaro.org> writes: > Move the parameter selection code into the Debayer base class in-order to > facilitate reuse of the lookup tables in the eGL shaders. > > Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> > --- > src/libcamera/software_isp/debayer.cpp | 40 ++++++++++++++++++++++ > src/libcamera/software_isp/debayer.h | 5 +++ > src/libcamera/software_isp/debayer_cpu.cpp | 29 +++------------- > 3 files changed, 49 insertions(+), 25 deletions(-) > > diff --git a/src/libcamera/software_isp/debayer.cpp b/src/libcamera/software_isp/debayer.cpp > index 29fdcbbf..75e4bffa 100644 > --- a/src/libcamera/software_isp/debayer.cpp > +++ b/src/libcamera/software_isp/debayer.cpp > @@ -187,4 +187,44 @@ Debayer::~Debayer() > * \brief Signals when the output buffer is ready > */ > > +/** > + * \fn void Debayer::setParams(DebayerParams ¶ms) > + * \brief Select the bayer params to use for the next frame debayer > + * \param[in] params The parameters to be used in debayering > + */ > +void Debayer::setParams(DebayerParams ¶ms) > +{ > + green_ = params.green; > + greenCcm_ = params.greenCcm; > + if (swapRedBlueGains_) { > + red_ = params.blue; > + blue_ = params.red; > + redCcm_ = params.blueCcm; > + blueCcm_ = params.redCcm; > + for (unsigned int i = 0; i < 256; i++) { > + std::swap(redCcm_[i].r, redCcm_[i].b); > + std::swap(blueCcm_[i].r, blueCcm_[i].b); > + } > + } else { > + red_ = params.red; > + blue_ = params.blue; > + redCcm_ = params.redCcm; > + blueCcm_ = params.blueCcm; > + } > + gammaLut_ = params.gammaLut; > +} > + > +/** > + * \fn void Debayer::dmaSyncBegin(DebayerParams ¶ms) > + * \brief Common CPU/GPU Dma Sync Buffer begin > + */ > +void Debayer::dmaSyncBegin(std::vector<DmaSyncer> &dmaSyncers, FrameBuffer *input, FrameBuffer *output) Is this related to parameter setting in any way? > +{ > + for (const FrameBuffer::Plane &plane : input->planes()) > + dmaSyncers.emplace_back(plane.fd, DmaSyncer::SyncType::Read); > + > + for (const FrameBuffer::Plane &plane : output->planes()) > + dmaSyncers.emplace_back(plane.fd, DmaSyncer::SyncType::Write); > +} > + > } /* namespace libcamera */ > diff --git a/src/libcamera/software_isp/debayer.h b/src/libcamera/software_isp/debayer.h > index 01b6e916..0af66b55 100644 > --- a/src/libcamera/software_isp/debayer.h > +++ b/src/libcamera/software_isp/debayer.h > @@ -20,6 +20,7 @@ > #include <libcamera/geometry.h> > #include <libcamera/stream.h> > > +#include "libcamera/internal/dma_buf_allocator.h" > #include "libcamera/internal/software_isp/benchmark.h" > #include "libcamera/internal/software_isp/debayer_params.h" > > @@ -82,6 +83,10 @@ public: > > private: > virtual Size patternSize(PixelFormat inputFormat) = 0; > + > +protected: > + void setParams(DebayerParams ¶ms); > + void dmaSyncBegin(std::vector<DmaSyncer> &dmaSyncers, FrameBuffer *input, FrameBuffer *output); > }; > > } /* namespace libcamera */ > diff --git a/src/libcamera/software_isp/debayer_cpu.cpp b/src/libcamera/software_isp/debayer_cpu.cpp > index 13db8a8c..4ef573a3 100644 > --- a/src/libcamera/software_isp/debayer_cpu.cpp > +++ b/src/libcamera/software_isp/debayer_cpu.cpp > @@ -22,7 +22,6 @@ > #include <libcamera/formats.h> > > #include "libcamera/internal/bayer_format.h" > -#include "libcamera/internal/dma_buf_allocator.h" > #include "libcamera/internal/framebuffer.h" > #include "libcamera/internal/mapped_framebuffer.h" > > @@ -740,30 +739,10 @@ void DebayerCpu::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output > bench_.startFrame(); > > std::vector<DmaSyncer> dmaSyncers; > - for (const FrameBuffer::Plane &plane : input->planes()) > - dmaSyncers.emplace_back(plane.fd, DmaSyncer::SyncType::Read); > - > - for (const FrameBuffer::Plane &plane : output->planes()) > - dmaSyncers.emplace_back(plane.fd, DmaSyncer::SyncType::Write); > - > - green_ = params.green; > - greenCcm_ = params.greenCcm; > - if (swapRedBlueGains_) { > - red_ = params.blue; > - blue_ = params.red; > - redCcm_ = params.blueCcm; > - blueCcm_ = params.redCcm; > - for (unsigned int i = 0; i < 256; i++) { > - std::swap(redCcm_[i].r, redCcm_[i].b); > - std::swap(blueCcm_[i].r, blueCcm_[i].b); > - } > - } else { > - red_ = params.red; > - blue_ = params.blue; > - redCcm_ = params.redCcm; > - blueCcm_ = params.blueCcm; > - } > - gammaLut_ = params.gammaLut; > + > + dmaSyncBegin(dmaSyncers, input, output); > + > + setParams(params); > > /* Copy metadata from the input buffer */ > FrameMetadata &metadata = output->_d()->metadata();
diff --git a/src/libcamera/software_isp/debayer.cpp b/src/libcamera/software_isp/debayer.cpp index 29fdcbbf..75e4bffa 100644 --- a/src/libcamera/software_isp/debayer.cpp +++ b/src/libcamera/software_isp/debayer.cpp @@ -187,4 +187,44 @@ Debayer::~Debayer() * \brief Signals when the output buffer is ready */ +/** + * \fn void Debayer::setParams(DebayerParams ¶ms) + * \brief Select the bayer params to use for the next frame debayer + * \param[in] params The parameters to be used in debayering + */ +void Debayer::setParams(DebayerParams ¶ms) +{ + green_ = params.green; + greenCcm_ = params.greenCcm; + if (swapRedBlueGains_) { + red_ = params.blue; + blue_ = params.red; + redCcm_ = params.blueCcm; + blueCcm_ = params.redCcm; + for (unsigned int i = 0; i < 256; i++) { + std::swap(redCcm_[i].r, redCcm_[i].b); + std::swap(blueCcm_[i].r, blueCcm_[i].b); + } + } else { + red_ = params.red; + blue_ = params.blue; + redCcm_ = params.redCcm; + blueCcm_ = params.blueCcm; + } + gammaLut_ = params.gammaLut; +} + +/** + * \fn void Debayer::dmaSyncBegin(DebayerParams ¶ms) + * \brief Common CPU/GPU Dma Sync Buffer begin + */ +void Debayer::dmaSyncBegin(std::vector<DmaSyncer> &dmaSyncers, FrameBuffer *input, FrameBuffer *output) +{ + for (const FrameBuffer::Plane &plane : input->planes()) + dmaSyncers.emplace_back(plane.fd, DmaSyncer::SyncType::Read); + + for (const FrameBuffer::Plane &plane : output->planes()) + dmaSyncers.emplace_back(plane.fd, DmaSyncer::SyncType::Write); +} + } /* namespace libcamera */ diff --git a/src/libcamera/software_isp/debayer.h b/src/libcamera/software_isp/debayer.h index 01b6e916..0af66b55 100644 --- a/src/libcamera/software_isp/debayer.h +++ b/src/libcamera/software_isp/debayer.h @@ -20,6 +20,7 @@ #include <libcamera/geometry.h> #include <libcamera/stream.h> +#include "libcamera/internal/dma_buf_allocator.h" #include "libcamera/internal/software_isp/benchmark.h" #include "libcamera/internal/software_isp/debayer_params.h" @@ -82,6 +83,10 @@ public: private: virtual Size patternSize(PixelFormat inputFormat) = 0; + +protected: + void setParams(DebayerParams ¶ms); + void dmaSyncBegin(std::vector<DmaSyncer> &dmaSyncers, FrameBuffer *input, FrameBuffer *output); }; } /* namespace libcamera */ diff --git a/src/libcamera/software_isp/debayer_cpu.cpp b/src/libcamera/software_isp/debayer_cpu.cpp index 13db8a8c..4ef573a3 100644 --- a/src/libcamera/software_isp/debayer_cpu.cpp +++ b/src/libcamera/software_isp/debayer_cpu.cpp @@ -22,7 +22,6 @@ #include <libcamera/formats.h> #include "libcamera/internal/bayer_format.h" -#include "libcamera/internal/dma_buf_allocator.h" #include "libcamera/internal/framebuffer.h" #include "libcamera/internal/mapped_framebuffer.h" @@ -740,30 +739,10 @@ void DebayerCpu::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output bench_.startFrame(); std::vector<DmaSyncer> dmaSyncers; - for (const FrameBuffer::Plane &plane : input->planes()) - dmaSyncers.emplace_back(plane.fd, DmaSyncer::SyncType::Read); - - for (const FrameBuffer::Plane &plane : output->planes()) - dmaSyncers.emplace_back(plane.fd, DmaSyncer::SyncType::Write); - - green_ = params.green; - greenCcm_ = params.greenCcm; - if (swapRedBlueGains_) { - red_ = params.blue; - blue_ = params.red; - redCcm_ = params.blueCcm; - blueCcm_ = params.redCcm; - for (unsigned int i = 0; i < 256; i++) { - std::swap(redCcm_[i].r, redCcm_[i].b); - std::swap(blueCcm_[i].r, blueCcm_[i].b); - } - } else { - red_ = params.red; - blue_ = params.blue; - redCcm_ = params.redCcm; - blueCcm_ = params.blueCcm; - } - gammaLut_ = params.gammaLut; + + dmaSyncBegin(dmaSyncers, input, output); + + setParams(params); /* Copy metadata from the input buffer */ FrameMetadata &metadata = output->_d()->metadata();
Move the parameter selection code into the Debayer base class in-order to facilitate reuse of the lookup tables in the eGL shaders. Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> --- src/libcamera/software_isp/debayer.cpp | 40 ++++++++++++++++++++++ src/libcamera/software_isp/debayer.h | 5 +++ src/libcamera/software_isp/debayer_cpu.cpp | 29 +++------------- 3 files changed, 49 insertions(+), 25 deletions(-)