diff --git a/include/libcamera/internal/bayer_format.h b/include/libcamera/internal/bayer_format.h
index 78ba3969913d..3601dccb7228 100644
--- a/include/libcamera/internal/bayer_format.h
+++ b/include/libcamera/internal/bayer_format.h
@@ -47,6 +47,7 @@ public:
 	}
 
 	static const BayerFormat &fromMbusCode(unsigned int mbusCode);
+	unsigned int toMbusCode() const;
 	bool isValid() const { return bitDepth != 0; }
 
 	std::string toString() const;
diff --git a/src/libcamera/bayer_format.cpp b/src/libcamera/bayer_format.cpp
index f27cc1662d25..fdbc4af1dcc0 100644
--- a/src/libcamera/bayer_format.cpp
+++ b/src/libcamera/bayer_format.cpp
@@ -226,6 +226,17 @@ const BayerFormat &BayerFormat::fromMbusCode(unsigned int mbusCode)
 		return it->second;
 }
 
+/**
+ * \brief Retrieve the media bus code corresponding this this BayerFormat
+ * \return The corresponding media bus code, or zero if none was found
+ */
+unsigned int BayerFormat::toMbusCode() const
+{
+	auto it = std::find_if(mbusCodeToBayer.begin(), mbusCodeToBayer.end(),
+			       [this](const auto &i) { return i.second == *this; });
+	return it != mbusCodeToBayer.end() ? it->first : 0;
+}
+
 /**
  * \fn BayerFormat::isValid()
  * \brief Return whether a BayerFormat is valid
