diff --git a/include/libcamera/internal/converter/converter_v4l2_m2m.h b/include/libcamera/internal/converter/converter_v4l2_m2m.h
index 2697eed9..f61beef8 100644
--- a/include/libcamera/internal/converter/converter_v4l2_m2m.h
+++ b/include/libcamera/internal/converter/converter_v4l2_m2m.h
@@ -61,6 +61,26 @@ public:
 	int setCrop(const Stream *stream, Rectangle *rect);
 	std::pair<Rectangle, Rectangle> getCropBounds(const Stream *stream);
 
+protected:
+	class Mapping
+	{
+	public:
+		Mapping(const Size &input, const Size &output, const std::vector<uint32_t> &map)
+			: input_(input), output_(output), map_(map) {}
+		Size inputSize() const { return input_; }
+		Size outputSize() const { return output_; }
+		std::size_t size() const { return map_.size(); }
+		const uint32_t *mapping() const { return map_.data(); }
+
+	private:
+		Size input_;
+		Size output_;
+		std::vector<uint32_t> map_;
+	};
+
+	int applyMapping(const Stream *stream, Mapping &mapping);
+	std::vector<Mapping> mappings_;
+
 private:
 	class V4L2M2MStream : protected Loggable
 	{
