-#ifndef _YCBCR_INPUT_H
-#define _YCBCR_INPUT_H 1
-
-// YCbCrInput is for handling planar 8-bit Y'CbCr (also sometimes, usually rather
-// imprecisely, called “YUV”), which is typically what you get from a video decoder.
-// It upsamples planes as needed, using the default linear upsampling OpenGL gives you.
-
+#ifndef _MOVIT_YCBCR_INPUT_H
+#define _MOVIT_YCBCR_INPUT_H 1
+
+// YCbCrInput is for handling Y'CbCr (also sometimes, usually rather
+// imprecisely, called “YUV”), which is typically what you get from a video
+// decoder. It supports these formats:
+//
+// * 8-bit planar Y'CbCr, possibly subsampled (e.g. 4:2:0).
+// * 8-bit semiplanar Y'CbCr (Y' in one plane, CbCr in another),
+// possibly subsampled.
+// * 8-bit interleaved (chunked) Y'CbCr, no subsampling (4:4:4 only).
+// * All of the above in 10- and 12-bit versions, where each sample is
+// stored in a 16-bit int (so the 6 or 4 top bits are wasted).
+// * 10-bit interleaved (chunked) Y'CbCr packed into 32-bit words
+// (10:10:10:2), no subsampling (4:4:4 only).
+//
+// For the planar and semiplanar cases, it upsamples planes as needed, using
+// the default linear upsampling OpenGL gives you. Note that YCbCr422InterleavedInput
+// supports the important special case of 8-bit 4:2:2 interleaved.
+
+#include <epoxy/gl.h>
+#include <assert.h>
+#include <string>
+
+#include "effect.h"
+#include "effect_chain.h"
+#include "image_format.h"