diff --git a/include/libcamera/internal/vector.h b/include/libcamera/internal/vector.h
index ed7490e1..475bc522 100644
--- a/include/libcamera/internal/vector.h
+++ b/include/libcamera/internal/vector.h
@@ -111,6 +111,14 @@ public:
 		return apply(*this, scalar, std::divides<>{});
 	}
 
+	constexpr Vector operator>>(unsigned int shift) const
+	{
+		Vector result;
+		std::transform(data_.begin(), data_.end(), result.data_.begin(),
+			       [shift](T v) { return v >> shift; });
+		return result;
+	}
+
 	Vector &operator+=(const Vector &other)
 	{
 		return apply(other, [](T a, T b) { return a + b; });
@@ -151,6 +159,13 @@ public:
 		return apply(scalar, [](T a, T b) { return a / b; });
 	}
 
+	Vector &operator>>=(unsigned int shift)
+	{
+		std::for_each(data_.begin(), data_.end(),
+			      [shift](T &v) { v >>= shift; });
+		return *this;
+	}
+
 	constexpr Vector min(const Vector &other) const
 	{
 		return apply(*this, other, [](T a, T b) { return std::min(a, b); });
