swscale: add nv12/nv21->yuv420 converter
[ffmpeg.git] / libswscale / rgb2rgb_template.c
index 3da2b0b2aaaa20529d9b918d9e6e7895cf9d7b22..65ea5dda8cf8e128547d7406680b26859da0f45c 100644 (file)
@@ -708,6 +708,24 @@ static void interleaveBytes_c(const uint8_t *src1, const uint8_t *src2,
     }
 }
 
+static void deinterleaveBytes_c(const uint8_t *src, uint8_t *dst1, uint8_t *dst2,
+                                int width, int height, int srcStride,
+                                int dst1Stride, int dst2Stride)
+{
+    int h;
+
+    for (h = 0; h < height; h++) {
+        int w;
+        for (w = 0; w < width; w++) {
+            dst1[w] = src[2 * w + 0];
+            dst2[w] = src[2 * w + 1];
+        }
+        src  += srcStride;
+        dst1 += dst1Stride;
+        dst2 += dst2Stride;
+    }
+}
+
 static inline void vu9_to_vu12_c(const uint8_t *src1, const uint8_t *src2,
                                  uint8_t *dst1, uint8_t *dst2,
                                  int width, int height,
@@ -937,6 +955,7 @@ static av_cold void rgb2rgb_init_c(void)
     planar2x           = planar2x_c;
     rgb24toyv12        = rgb24toyv12_c;
     interleaveBytes    = interleaveBytes_c;
+    deinterleaveBytes  = deinterleaveBytes_c;
     vu9_to_vu12        = vu9_to_vu12_c;
     yvu9_to_yuy2       = yvu9_to_yuy2_c;