Message ID | 20240627134656.582462-2-umang.jain@ideasonboard.com |
---|---|
State | Superseded |
Headers | show |
Series |
|
Related | show |
On Thu, Jun 27, 2024 at 07:16:52PM +0530, Umang Jain wrote: > This patch intends to extend the converter interface to have feature > flags, which enables each converter to expose the set of features > it supports. > > Signed-off-by: Umang Jain <umang.jain@ideasonboard.com> > --- > include/libcamera/internal/converter.h | 13 ++++++++++- > .../internal/converter/converter_v4l2_m2m.h | 2 +- > src/libcamera/converter.cpp | 22 ++++++++++++++++++- > .../converter/converter_v4l2_m2m.cpp | 5 +++-- > 4 files changed, 37 insertions(+), 5 deletions(-) > > diff --git a/include/libcamera/internal/converter.h b/include/libcamera/internal/converter.h > index b51563d7..15bc7dca 100644 > --- a/include/libcamera/internal/converter.h > +++ b/include/libcamera/internal/converter.h > @@ -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 = (1 << 0), I would've expected 0 (the lack of any flags) to indicate that "no feature is supported". Paul > + }; > + > + 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 > diff --git a/include/libcamera/internal/converter/converter_v4l2_m2m.h b/include/libcamera/internal/converter/converter_v4l2_m2m.h > index b9e59899..91701dbe 100644 > --- a/include/libcamera/internal/converter/converter_v4l2_m2m.h > +++ b/include/libcamera/internal/converter/converter_v4l2_m2m.h > @@ -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; } > diff --git a/src/libcamera/converter.cpp b/src/libcamera/converter.cpp > index c5e38937..2dc7d984 100644 > --- a/src/libcamera/converter.cpp > +++ b/src/libcamera/converter.cpp > @@ -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 > diff --git a/src/libcamera/converter/converter_v4l2_m2m.cpp b/src/libcamera/converter/converter_v4l2_m2m.cpp > index 2e77872e..4aeb7dd9 100644 > --- a/src/libcamera/converter/converter_v4l2_m2m.cpp > +++ b/src/libcamera/converter/converter_v4l2_m2m.cpp > @@ -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; > -- > 2.44.0 >
diff --git a/include/libcamera/internal/converter.h b/include/libcamera/internal/converter.h index b51563d7..15bc7dca 100644 --- a/include/libcamera/internal/converter.h +++ b/include/libcamera/internal/converter.h @@ -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 = (1 << 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 diff --git a/include/libcamera/internal/converter/converter_v4l2_m2m.h b/include/libcamera/internal/converter/converter_v4l2_m2m.h index b9e59899..91701dbe 100644 --- a/include/libcamera/internal/converter/converter_v4l2_m2m.h +++ b/include/libcamera/internal/converter/converter_v4l2_m2m.h @@ -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; } diff --git a/src/libcamera/converter.cpp b/src/libcamera/converter.cpp index c5e38937..2dc7d984 100644 --- a/src/libcamera/converter.cpp +++ b/src/libcamera/converter.cpp @@ -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 diff --git a/src/libcamera/converter/converter_v4l2_m2m.cpp b/src/libcamera/converter/converter_v4l2_m2m.cpp index 2e77872e..4aeb7dd9 100644 --- a/src/libcamera/converter/converter_v4l2_m2m.cpp +++ b/src/libcamera/converter/converter_v4l2_m2m.cpp @@ -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;
This patch intends to extend the converter interface to have feature flags, which enables each converter to expose the set of features it supports. Signed-off-by: Umang Jain <umang.jain@ideasonboard.com> --- include/libcamera/internal/converter.h | 13 ++++++++++- .../internal/converter/converter_v4l2_m2m.h | 2 +- src/libcamera/converter.cpp | 22 ++++++++++++++++++- .../converter/converter_v4l2_m2m.cpp | 5 +++-- 4 files changed, 37 insertions(+), 5 deletions(-)