libcamera: software_isp: Move useful items from DebayerCpu to Debayer base class

The DebayerCpu class has a number of variables, embedded structures and
methods which are useful to DebayerGpu implementation.

Move relevant variables and methods to base class.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
This commit is contained in:
Bryan O'Donoghue 2024-05-19 00:10:16 +01:00
parent 2929cdcc58
commit 831a7fefa9
2 changed files with 33 additions and 34 deletions

View file

@ -14,11 +14,13 @@
#include <stdint.h> #include <stdint.h>
#include <libcamera/base/log.h> #include <libcamera/base/log.h>
#include <libcamera/base/object.h>
#include <libcamera/base/signal.h> #include <libcamera/base/signal.h>
#include <libcamera/geometry.h> #include <libcamera/geometry.h>
#include <libcamera/stream.h> #include <libcamera/stream.h>
#include "libcamera/internal/software_isp/benchmark.h"
#include "libcamera/internal/software_isp/debayer_params.h" #include "libcamera/internal/software_isp/debayer_params.h"
namespace libcamera { namespace libcamera {
@ -27,7 +29,7 @@ class FrameBuffer;
LOG_DECLARE_CATEGORY(Debayer) LOG_DECLARE_CATEGORY(Debayer)
class Debayer class Debayer : public Object
{ {
public: public:
virtual ~Debayer() = 0; virtual ~Debayer() = 0;
@ -45,9 +47,38 @@ public:
virtual SizeRange sizes(PixelFormat inputFormat, const Size &inputSize) = 0; virtual SizeRange sizes(PixelFormat inputFormat, const Size &inputSize) = 0;
virtual const SharedFD &getStatsFD() = 0;
unsigned int frameSize() { return outputConfig_.frameSize; }
Signal<FrameBuffer *> inputBufferReady; Signal<FrameBuffer *> inputBufferReady;
Signal<FrameBuffer *> outputBufferReady; Signal<FrameBuffer *> outputBufferReady;
struct DebayerInputConfig {
Size patternSize;
unsigned int bpp; /* Memory used per pixel, not precision */
unsigned int stride;
std::vector<PixelFormat> outputFormats;
};
struct DebayerOutputConfig {
unsigned int bpp; /* Memory used per pixel, not precision */
unsigned int stride;
unsigned int frameSize;
};
DebayerInputConfig inputConfig_;
DebayerOutputConfig outputConfig_;
DebayerParams::LookupTable red_;
DebayerParams::LookupTable green_;
DebayerParams::LookupTable blue_;
DebayerParams::CcmLookupTable redCcm_;
DebayerParams::CcmLookupTable greenCcm_;
DebayerParams::CcmLookupTable blueCcm_;
DebayerParams::LookupTable gammaLut_;
bool swapRedBlueGains_;
Benchmark bench_;
private: private:
virtual Size patternSize(PixelFormat inputFormat) = 0; virtual Size patternSize(PixelFormat inputFormat) = 0;
}; };

View file

@ -17,7 +17,6 @@
#include <libcamera/base/object.h> #include <libcamera/base/object.h>
#include "libcamera/internal/software_isp/benchmark.h"
#include "libcamera/internal/bayer_format.h" #include "libcamera/internal/bayer_format.h"
#include "libcamera/internal/software_isp/swstats_cpu.h" #include "libcamera/internal/software_isp/swstats_cpu.h"
@ -25,7 +24,7 @@
namespace libcamera { namespace libcamera {
class DebayerCpu : public Debayer, public Object class DebayerCpu : public Debayer
{ {
public: public:
DebayerCpu(std::unique_ptr<SwStatsCpu> stats); DebayerCpu(std::unique_ptr<SwStatsCpu> stats);
@ -48,13 +47,6 @@ public:
*/ */
const SharedFD &getStatsFD() { return stats_->getStatsFD(); } const SharedFD &getStatsFD() { return stats_->getStatsFD(); }
/**
* \brief Get the output frame size
*
* \return The output frame size
*/
unsigned int frameSize() { return outputConfig_.frameSize; }
private: private:
/** /**
* \brief Called to debayer 1 line of Bayer input data to output format * \brief Called to debayer 1 line of Bayer input data to output format
@ -111,19 +103,6 @@ private:
template<bool addAlphaByte, bool ccmEnabled> template<bool addAlphaByte, bool ccmEnabled>
void debayer10P_RGRG_BGR888(uint8_t *dst, const uint8_t *src[]); void debayer10P_RGRG_BGR888(uint8_t *dst, const uint8_t *src[]);
struct DebayerInputConfig {
Size patternSize;
unsigned int bpp; /* Memory used per pixel, not precision */
unsigned int stride;
std::vector<PixelFormat> outputFormats;
};
struct DebayerOutputConfig {
unsigned int bpp; /* Memory used per pixel, not precision */
unsigned int stride;
unsigned int frameSize;
};
int getInputConfig(PixelFormat inputFormat, DebayerInputConfig &config); int getInputConfig(PixelFormat inputFormat, DebayerInputConfig &config);
int getOutputConfig(PixelFormat outputFormat, DebayerOutputConfig &config); int getOutputConfig(PixelFormat outputFormat, DebayerOutputConfig &config);
int setupStandardBayerOrder(BayerFormat::Order order); int setupStandardBayerOrder(BayerFormat::Order order);
@ -139,20 +118,11 @@ private:
/* Max. supported Bayer pattern height is 4, debayering this requires 5 lines */ /* Max. supported Bayer pattern height is 4, debayering this requires 5 lines */
static constexpr unsigned int kMaxLineBuffers = 5; static constexpr unsigned int kMaxLineBuffers = 5;
DebayerParams::LookupTable red_;
DebayerParams::LookupTable green_;
DebayerParams::LookupTable blue_;
DebayerParams::CcmLookupTable redCcm_;
DebayerParams::CcmLookupTable greenCcm_;
DebayerParams::CcmLookupTable blueCcm_;
DebayerParams::LookupTable gammaLut_;
debayerFn debayer0_; debayerFn debayer0_;
debayerFn debayer1_; debayerFn debayer1_;
debayerFn debayer2_; debayerFn debayer2_;
debayerFn debayer3_; debayerFn debayer3_;
Rectangle window_; Rectangle window_;
DebayerInputConfig inputConfig_;
DebayerOutputConfig outputConfig_;
std::unique_ptr<SwStatsCpu> stats_; std::unique_ptr<SwStatsCpu> stats_;
std::vector<uint8_t> lineBuffers_[kMaxLineBuffers]; std::vector<uint8_t> lineBuffers_[kMaxLineBuffers];
unsigned int lineBufferLength_; unsigned int lineBufferLength_;
@ -160,8 +130,6 @@ private:
unsigned int lineBufferIndex_; unsigned int lineBufferIndex_;
unsigned int xShift_; /* Offset of 0/1 applied to window_.x */ unsigned int xShift_; /* Offset of 0/1 applied to window_.x */
bool enableInputMemcpy_; bool enableInputMemcpy_;
bool swapRedBlueGains_;
Benchmark bench_;
}; };
} /* namespace libcamera */ } /* namespace libcamera */