@@ -17,6 +17,7 @@
#include <vector>
#include <libcamera/base/class.h>
+#include <libcamera/base/flags.h>
#include <libcamera/base/signal.h>
#include <libcamera/geometry.h>
@@ -32,7 +33,13 @@ struct StreamConfiguration;
class Converter
{
public:
- Converter(MediaDevice *media);
+ enum class Feature {
+ None = 0,
+ };
+
+ using Features = Flags<Feature>;
+
+ Converter(MediaDevice *media, Features features = Feature::None);
virtual ~Converter();
virtual int loadConfiguration(const std::string &filename) = 0;
@@ -61,8 +68,12 @@ public:
const std::string &deviceNode() const { return deviceNode_; }
+ Features getFeatures() const { return features_; }
+
private:
std::string deviceNode_;
+
+ Features features_;
};
class ConverterFactoryBase
@@ -35,7 +35,7 @@ class V4L2M2MDevice;
class V4L2M2MConverter : public Converter
{
public:
- V4L2M2MConverter(MediaDevice *media);
+ V4L2M2MConverter(MediaDevice *media, Features features = Feature::None);
int loadConfiguration([[maybe_unused]] const std::string &filename) { return 0; }
bool isValid() const { return m2m_ != nullptr; }
@@ -34,14 +34,27 @@ LOG_DEFINE_CATEGORY(Converter)
* parameters from the same input stream.
*/
+/**
+ * \enum Converter::Feature
+ * \brief Specify the features supported by the converter
+ * \var Converter::Feature::None
+ * \brief No extra features supported by the converter
+ */
+
+/**
+ * \typedef Converter::Features
+ * \brief A bitwise combination of features supported by the converter
+ */
+
/**
* \brief Construct a Converter instance
* \param[in] media The media device implementing the converter
+ * \param[in] features Features flags representing supported features
*
* This searches for the entity implementing the data streaming function in the
* media graph entities and use its device node as the converter device node.
*/
-Converter::Converter(MediaDevice *media)
+Converter::Converter(MediaDevice *media, Features features)
{
const std::vector<MediaEntity *> &entities = media->entities();
auto it = std::find_if(entities.begin(), entities.end(),
@@ -56,6 +69,7 @@ Converter::Converter(MediaDevice *media)
}
deviceNode_ = (*it)->deviceNode();
+ features_ = features;
}
Converter::~Converter()
@@ -163,6 +177,12 @@ Converter::~Converter()
* \return The converter device node string
*/
+/**
+ * \fn Converter::getFeatures()
+ * \brief Gets the supported features by the converter
+ * \return The converter Features flag
+ */
+
/**
* \class ConverterFactoryBase
* \brief Base class for converter factories
@@ -191,10 +191,11 @@ void V4L2M2MConverter::V4L2M2MStream::captureBufferReady(FrameBuffer *buffer)
* \fn V4L2M2MConverter::V4L2M2MConverter
* \brief Construct a V4L2M2MConverter instance
* \param[in] media The media device implementing the converter
+ * \param[in] features Features flags representing supported features
*/
-V4L2M2MConverter::V4L2M2MConverter(MediaDevice *media)
- : Converter(media)
+V4L2M2MConverter::V4L2M2MConverter(MediaDevice *media, Features features)
+ : Converter(media, features)
{
if (deviceNode().empty())
return;