diff --git a/Modules/yuvconvert.c b/Modules/yuvconvert.c
new file mode 100644
index 0000000..1b0ea63
--- /dev/null
+++ b/Modules/yuvconvert.c
@@ -0,0 +1,117 @@
+#include "yuv.h"
+
+void
+yuv_sv411_to_cl422dc(int invert, void *data, void *yuv, int width, int height)
+{
+	struct yuv411 *in = data;
+	struct yuv422 *out_even = yuv;
+	struct yuv422 *out_odd = out_even + width / 2;
+	int i, j;		/* counters */
+
+	for (i = height / 2; i--; ) {
+		for (j = width / 4; j--; ) {
+			YUV422_Y0(*out_even) = YUV411_Y00(*in);
+			YUV422_U0(*out_even) = YUV411_U00(*in);
+			YUV422_V0(*out_even) = YUV411_V00(*in);
+			YUV422_Y1(*out_even) = YUV411_Y01(*in);
+			out_even++;
+			YUV422_Y0(*out_even) = YUV411_Y02(*in);
+			YUV422_U0(*out_even) = YUV411_U02(*in);
+			YUV422_V0(*out_even) = YUV411_V02(*in);
+			YUV422_Y1(*out_even) = YUV411_Y03(*in);
+			out_even++;
+			YUV422_Y0(*out_odd) = YUV411_Y10(*in);
+			YUV422_U0(*out_odd) = YUV411_U10(*in);
+			YUV422_V0(*out_odd) = YUV411_V10(*in);
+			YUV422_Y1(*out_odd) = YUV411_Y11(*in);
+			out_odd++;
+			YUV422_Y0(*out_odd) = YUV411_Y12(*in);
+			YUV422_U0(*out_odd) = YUV411_U12(*in);
+			YUV422_V0(*out_odd) = YUV411_V12(*in);
+			YUV422_Y1(*out_odd) = YUV411_Y13(*in);
+			out_odd++;
+			in++;
+		}
+		out_even += width / 2;
+		out_odd += width / 2;
+	}
+}
+
+void
+yuv_sv411_to_cl422dc_quartersize(int invert, void *data, void *yuv,
+				 int width, int height)
+{
+	int w4 = width / 4;	/* quarter of width is used often */
+	struct yuv411 *in_even = data;
+	struct yuv411 *in_odd = in_even + w4;
+	struct yuv422 *out_even = yuv;
+	struct yuv422 *out_odd = out_even + w4;
+	int i, j;		/* counters */
+	int u, v;		/* U and V values */
+
+	for (i = height / 4; i--; ) {
+		for (j = w4; j--; ) {
+			u = YUV411_U00(*in_even);
+			v = YUV411_V00(*in_even);
+
+			YUV422_Y0(*out_even) = YUV411_Y00(*in_even);
+			YUV422_U0(*out_even) = u;
+			YUV422_V0(*out_even) = v;
+			YUV422_Y1(*out_even) = YUV411_Y02(*in_even);
+
+			YUV422_Y0(*out_odd) = YUV411_Y10(*in_odd);
+			YUV422_U0(*out_odd) = u;
+			YUV422_V0(*out_odd) = v;
+			YUV422_Y1(*out_odd) = YUV411_Y12(*in_odd);
+
+			in_even++;
+			in_odd++;
+			out_even++;
+			out_odd++;
+		}
+		in_even += w4;
+		in_odd += w4;
+		out_even += w4;
+		out_odd += w4;
+	}
+}
+
+void
+yuv_sv411_to_cl422dc_sixteenthsize(int invert, void *data, void *yuv,
+				   int width, int height)
+{
+	int w4_3 = 3 * width / 4; /* three quarters of width is used often */
+	int w8 = width / 8;	/* and so is one eighth */
+	struct yuv411 *in_even = data;
+	struct yuv411 *in_odd = in_even + width / 2;
+	struct yuv422 *out_even = yuv;
+	struct yuv422 *out_odd = out_even + w8;
+	int i, j;		/* counters */
+	int u, v;		/* U and V values */
+
+	for (i = height / 8; i--; ) {
+		for (j = w8; j--; ) {
+			u = YUV411_U00(in_even[0]);
+			v = YUV411_V00(in_even[0]);
+
+			YUV422_Y0(*out_even) = YUV411_Y00(in_even[0]);
+			YUV422_U0(*out_even) = u;
+			YUV422_V0(*out_even) = v;
+			YUV422_Y1(*out_even) = YUV411_Y00(in_even[1]);
+
+			YUV422_Y0(*out_odd) = YUV411_Y00(in_odd[0]);
+			YUV422_U0(*out_odd) = u;
+			YUV422_V0(*out_odd) = v;
+			YUV422_Y1(*out_odd) = YUV411_Y00(in_even[1]);
+
+			in_even += 2;
+			in_odd += 2;
+			out_even++;
+			out_odd++;
+		}
+		in_even += w4_3;
+		in_odd += w4_3;
+		out_even += w8;
+		out_odd += w8;
+	}
+}
