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:
parent
2929cdcc58
commit
831a7fefa9
2 changed files with 33 additions and 34 deletions
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue