@@ -29,6 +29,7 @@ class MediaDevice;
class Size;
class SizeRange;
struct StreamConfiguration;
+class Rectangle;
class V4L2M2MDevice;
class V4L2M2MConverter : public Converter
@@ -56,6 +57,8 @@ public:
int queueBuffers(FrameBuffer *input,
const std::map<unsigned int, FrameBuffer *> &outputs);
+ int setSelection(unsigned int output, unsigned int target, Rectangle *rect);
+
private:
class Stream : protected Loggable
{
@@ -74,6 +77,8 @@ private:
int queueBuffers(FrameBuffer *input, FrameBuffer *output);
+ int setSelection(unsigned int target, Rectangle *rect);
+
protected:
std::string logPrefix() const override;
@@ -155,6 +155,15 @@ int V4L2M2MConverter::Stream::queueBuffers(FrameBuffer *input, FrameBuffer *outp
return 0;
}
+int V4L2M2MConverter::Stream::setSelection(unsigned int target, Rectangle *rect)
+{
+ int ret = m2m_->output()->setSelection(target, rect);
+ if (ret < 0)
+ return ret;
+
+ return 0;
+}
+
std::string V4L2M2MConverter::Stream::logPrefix() const
{
return "stream" + std::to_string(index_);
@@ -370,6 +379,23 @@ int V4L2M2MConverter::exportBuffers(unsigned int output, unsigned int count,
return streams_[output].exportBuffers(count, buffers);
}
+/**
+ * \brief Set a selection rectangle \a rect for \a target
+ * \param[in] output Index of the output stream
+ * \param[in] target The selection target defined by the V4L2_SEL_TGT_* flags
+ * \param[inout] rect The selection rectangle to be applied
+ *
+ * \return 0 on success or a negative error code otherwise
+ */
+int V4L2M2MConverter::setSelection(unsigned int output, unsigned int target,
+ Rectangle *rect)
+{
+ if (output >= streams_.size())
+ return -EINVAL;
+
+ return streams_[output].setSelection(target, rect);
+}
+
/**
* \copydoc libcamera::Converter::start
*/
Add a helper to set selection rectangle on the video node to support cropping and scaling capabilites. Signed-off-by: Umang Jain <umang.jain@ideasonboard.com> --- .../internal/converter/converter_v4l2_m2m.h | 5 ++++ .../converter/converter_v4l2_m2m.cpp | 26 +++++++++++++++++++ 2 files changed, 31 insertions(+)