summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/libcamera/internal/converter.h5
-rw-r--r--include/libcamera/internal/converter/converter_v4l2_m2m.h11
2 files changed, 16 insertions, 0 deletions
diff --git a/include/libcamera/internal/converter.h b/include/libcamera/internal/converter.h
index 6623de4d..ffbb6f34 100644
--- a/include/libcamera/internal/converter.h
+++ b/include/libcamera/internal/converter.h
@@ -14,6 +14,7 @@
#include <memory>
#include <string>
#include <tuple>
+#include <utility>
#include <vector>
#include <libcamera/base/class.h>
@@ -35,6 +36,7 @@ class Converter
public:
enum class Feature {
None = 0,
+ InputCrop = (1 << 0),
};
using Features = Flags<Feature>;
@@ -63,6 +65,9 @@ public:
virtual int queueBuffers(FrameBuffer *input,
const std::map<const Stream *, FrameBuffer *> &outputs) = 0;
+ virtual int setInputCrop(const Stream *stream, Rectangle *rect) = 0;
+ virtual std::pair<Rectangle, Rectangle> inputCropBounds(const Stream *stream) = 0;
+
Signal<FrameBuffer *> inputBufferReady;
Signal<FrameBuffer *> outputBufferReady;
diff --git a/include/libcamera/internal/converter/converter_v4l2_m2m.h b/include/libcamera/internal/converter/converter_v4l2_m2m.h
index b9e59899..0bc0d053 100644
--- a/include/libcamera/internal/converter/converter_v4l2_m2m.h
+++ b/include/libcamera/internal/converter/converter_v4l2_m2m.h
@@ -30,6 +30,7 @@ class Size;
class SizeRange;
class Stream;
struct StreamConfiguration;
+class Rectangle;
class V4L2M2MDevice;
class V4L2M2MConverter : public Converter
@@ -57,6 +58,9 @@ public:
int queueBuffers(FrameBuffer *input,
const std::map<const Stream *, FrameBuffer *> &outputs);
+ int setInputCrop(const Stream *stream, Rectangle *rect);
+ std::pair<Rectangle, Rectangle> inputCropBounds(const Stream *stream);
+
private:
class V4L2M2MStream : protected Loggable
{
@@ -75,6 +79,11 @@ private:
int queueBuffers(FrameBuffer *input, FrameBuffer *output);
+ int setInputSelection(unsigned int target, Rectangle *rect);
+ int getInputSelection(unsigned int target, Rectangle *rect);
+
+ std::pair<Rectangle, Rectangle> inputCropBounds();
+
protected:
std::string logPrefix() const override;
@@ -88,6 +97,8 @@ private:
unsigned int inputBufferCount_;
unsigned int outputBufferCount_;
+
+ std::pair<Rectangle, Rectangle> inputCropBounds_;
};
std::unique_ptr<V4L2M2MDevice> m2m_;