diff --git a/components/codecs/src/opencv_encoder.cpp b/components/codecs/src/opencv_encoder.cpp
index 313d1e9b90c5f42748f65675eb14fb1e671ca2be..75f1a0553d9d8996fc4de710401c1b124bd6e411 100644
--- a/components/codecs/src/opencv_encoder.cpp
+++ b/components/codecs/src/opencv_encoder.cpp
@@ -28,9 +28,9 @@ bool OpenCVEncoder::supports(ftl::codecs::codec_t codec) {
 }
 
 bool OpenCVEncoder::encode(const cv::cuda::GpuMat &in, ftl::codecs::Packet &pkt) {
-	bool is_colour = in.type() == CV_8UC4 || in.type() == CV_8UC1;
+	bool is_colour = in.type() == CV_8UC4;
 
-	if (pkt.codec == codec_t::Any) pkt.codec = (is_colour && in.type() != CV_8UC1) ? codec_t::JPG : codec_t::PNG;
+	if (pkt.codec == codec_t::Any) pkt.codec = (is_colour) ? codec_t::JPG : codec_t::PNG;
 	if (!supports(pkt.codec)) return false;
 
 	if (!is_colour && pkt.codec == codec_t::JPG) {
@@ -50,7 +50,7 @@ bool OpenCVEncoder::encode(const cv::cuda::GpuMat &in, ftl::codecs::Packet &pkt)
 
 	in.download(tmp_);
 
-	if (!is_colour) {
+	if (!is_colour && in.type() == CV_32F) {
 		tmp_.convertTo(tmp_, CV_16U, 1000.0f);
 	}