+#include "v210enc.h"
+
+#define CLIP(v) av_clip(v, 4, 1019)
+#define CLIP8(v) av_clip(v, 1, 254)
+
+#define WRITE_PIXELS(a, b, c) \
+ do { \
+ val = CLIP(*a++); \
+ val |= (CLIP(*b++) << 10) | \
+ (CLIP(*c++) << 20); \
+ AV_WL32(dst, val); \
+ dst += 4; \
+ } while (0)
+
+#define WRITE_PIXELS8(a, b, c) \
+ do { \
+ val = (CLIP8(*a++) << 2); \
+ val |= (CLIP8(*b++) << 12) | \
+ (CLIP8(*c++) << 22); \
+ AV_WL32(dst, val); \
+ dst += 4; \
+ } while (0)
+
+static void v210_planar_pack_8_c(const uint8_t *y, const uint8_t *u,
+ const uint8_t *v, uint8_t *dst, ptrdiff_t width)
+{
+ uint32_t val;
+ int i;
+
+ /* unroll this to match the assembly */
+ for( i = 0; i < width-11; i += 12 ){
+ WRITE_PIXELS8(u, y, v);
+ WRITE_PIXELS8(y, u, y);
+ WRITE_PIXELS8(v, y, u);
+ WRITE_PIXELS8(y, v, y);
+ WRITE_PIXELS8(u, y, v);
+ WRITE_PIXELS8(y, u, y);
+ WRITE_PIXELS8(v, y, u);
+ WRITE_PIXELS8(y, v, y);
+ }
+}
+
+static void v210_planar_pack_10_c(const uint16_t *y, const uint16_t *u,
+ const uint16_t *v, uint8_t *dst, ptrdiff_t width)
+{
+ uint32_t val;
+ int i;
+
+ for( i = 0; i < width-5; i += 6 ){
+ WRITE_PIXELS(u, y, v);
+ WRITE_PIXELS(y, u, y);
+ WRITE_PIXELS(v, y, u);
+ WRITE_PIXELS(y, v, y);
+ }
+}