12#include <initializer_list>
33struct StreamConfiguration;
67 virtual std::tuple<unsigned int, unsigned int>
74 const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs) = 0;
77 std::vector<std::unique_ptr<FrameBuffer>> *buffers) = 0;
83 const std::map<const Stream *, FrameBuffer *> &outputs,
93 const std::string &
deviceNode()
const {
return deviceNode_; }
101 std::string deviceNode_;
110 const std::vector<std::string> &
compatibles()
const {
return compatibles_; }
112 static std::unique_ptr<Converter>
create(std::shared_ptr<MediaDevice> media);
113 static std::vector<ConverterFactoryBase *> &
factories();
114 static std::vector<std::string>
names();
121 virtual std::unique_ptr<Converter>
122 createInstance(std::shared_ptr<MediaDevice> media)
const = 0;
125 std::vector<std::string> compatibles_;
128template<
typename _Converter>
137 std::unique_ptr<Converter>
createInstance(std::shared_ptr<MediaDevice> media)
const override
139 return std::make_unique<_Converter>(media);
143#define REGISTER_CONVERTER(name, converter, compatibles) \
144 static ConverterFactory<converter> global_##converter##Factory(name, compatibles);
Utilities to help constructing class interfaces.
#define LIBCAMERA_DISABLE_COPY_AND_MOVE(klass)
Disable copy and move construction and assignment of the klass.
Definition class.h:29
Base class for converter factories.
Definition converter.h:105
static std::vector< ConverterFactoryBase * > & factories()
Retrieve the list of all converter factories.
Definition converter.cpp:404
const std::vector< std::string > & compatibles() const
Definition converter.h:110
static std::vector< std::string > names()
Retrieve the list of all converter factory names.
Definition converter.cpp:383
static std::unique_ptr< Converter > create(std::shared_ptr< MediaDevice > media)
Create an instance of the converter corresponding to the media device.
Definition converter.cpp:339
Registration of ConverterFactory classes and creation of instances.
Definition converter.h:130
ConverterFactory(const char *name, std::initializer_list< std::string > compatibles)
Construct a converter factory.
Definition converter.h:132
std::unique_ptr< Converter > createInstance(std::shared_ptr< MediaDevice > media) const override
Create an instance of the Converter corresponding to the factory.
Definition converter.h:137
Abstract Base Class for converter.
Definition converter.h:36
virtual bool isConfigured(const Stream *stream) const =0
Check if a given stream is configured.
virtual int queueBuffers(FrameBuffer *input, const std::map< const Stream *, FrameBuffer * > &outputs, const V4L2Request *request=nullptr)=0
Queue buffers to converter device.
const std::string & deviceNode() const
The converter device node attribute accessor.
Definition converter.h:93
Signal< FrameBuffer * > outputBufferReady
A signal emitted on each frame buffer completion of the output queue.
Definition converter.h:91
virtual void stop()=0
Stop the converter streaming operation.
virtual bool isValid() const =0
Check if the converter configuration is valid.
virtual std::tuple< unsigned int, unsigned int > strideAndFrameSize(const PixelFormat &pixelFormat, const Size &size)=0
Retrieve the output stride and frame size for an input configutation.
virtual int loadConfiguration(const std::string &filename)=0
Load converter configuration from file.
virtual std::pair< Rectangle, Rectangle > inputCropBounds()=0
Retrieve the crop bounds of the converter.
virtual std::vector< PixelFormat > formats(PixelFormat input)=0
Retrieve the list of supported pixel formats for an input pixel format.
virtual int exportBuffers(const Stream *stream, unsigned int count, std::vector< std::unique_ptr< FrameBuffer > > *buffers)=0
Export buffers from the converter device.
virtual int start()=0
Start the converter streaming operation.
virtual Size adjustOutputSize(const PixelFormat &pixFmt, const Size &size, Alignment align=Alignment::Down)=0
Adjust the converter output size to a valid value.
Alignment
The alignment mode specified when adjusting the converter input or output sizes.
Definition converter.h:45
@ Down
Adjust the Converter sizes to a smaller valid size.
@ Up
Adjust the Converter sizes to a larger valid size.
Features features() const
Retrieve the features supported by the converter.
Definition converter.h:95
virtual int validateOutput(StreamConfiguration *cfg, bool *adjusted, Alignment align=Alignment::Down)=0
Validate and possibily adjust cfg to a valid converter output.
Feature
Specify the features supported by the converter.
Definition converter.h:38
@ None
No extra features supported by the converter.
@ InputCrop
Cropping capability at input is supported by the converter.
virtual int setInputCrop(const Stream *stream, Rectangle *rect)=0
Set the crop rectangle rect for stream.
Features features_
Stores the features supported by the converter.
Definition converter.h:98
Signal< FrameBuffer * > inputBufferReady
A signal emitted when the input frame buffer completes.
Definition converter.h:90
virtual int configure(const StreamConfiguration &inputCfg, const std::vector< std::reference_wrapper< StreamConfiguration > > &outputCfgs)=0
Configure a set of output stream conversion from an input stream.
virtual std::pair< Rectangle, Rectangle > inputCropBounds(const Stream *stream)=0
Retrieve the crop bounds for stream.
Flags< Feature > Features
A bitwise combination of features supported by the converter.
Definition converter.h:43
virtual SizeRange sizes(const Size &input)=0
Retrieve the range of minimum and maximum output sizes for an input size.
virtual Size adjustInputSize(const PixelFormat &pixFmt, const Size &size, Alignment align=Alignment::Down)=0
Adjust the converter input size to a valid value.
Frame buffer data and its associated dynamic metadata.
Definition framebuffer.h:50
Describe a rectangle's position and dimensions.
Definition geometry.h:247
Generic signal and slot communication mechanism.
Definition signal.h:39
Describe a range of sizes.
Definition geometry.h:205
Describe a two-dimensional size.
Definition geometry.h:51
Video stream for a camera.
Definition stream.h:76
V4L2Request object and API.
Definition v4l2_request.h:22
Data structures related to geometric objects.
Top-level libcamera namespace.
Definition backtrace.h:17
Signal & slot implementation.
Configuration parameters for a stream.
Definition stream.h:40