Add downsampling option to SkJpegEncoder

Bug: 713862
Change-Id: Ibad6ecf836ccfd355499e1bace7bcd4ba772a97a
Reviewed-on: https://skia-review.googlesource.com/15891
Commit-Queue: Matt Sarett <msarett@google.com>
Reviewed-by: Leon Scroggins <scroggo@google.com>
diff --git a/src/images/SkJpegEncoder.cpp b/src/images/SkJpegEncoder.cpp
index d87fed8..4b37cd3 100644
--- a/src/images/SkJpegEncoder.cpp
+++ b/src/images/SkJpegEncoder.cpp
@@ -152,6 +152,35 @@
     fCInfo.input_components = numComponents;
     jpeg_set_defaults(&fCInfo);
 
+    if (kGray_8_SkColorType != srcInfo.colorType()) {
+        switch (options.fDownsample) {
+            case SkJpegEncoder::Downsample::k420:
+                SkASSERT(2 == fCInfo.comp_info[0].h_samp_factor);
+                SkASSERT(2 == fCInfo.comp_info[0].v_samp_factor);
+                SkASSERT(1 == fCInfo.comp_info[1].h_samp_factor);
+                SkASSERT(1 == fCInfo.comp_info[1].v_samp_factor);
+                SkASSERT(1 == fCInfo.comp_info[2].h_samp_factor);
+                SkASSERT(1 == fCInfo.comp_info[2].v_samp_factor);
+                break;
+            case SkJpegEncoder::Downsample::k422:
+                fCInfo.comp_info[0].h_samp_factor = 2;
+                fCInfo.comp_info[0].v_samp_factor = 1;
+                fCInfo.comp_info[1].h_samp_factor = 1;
+                fCInfo.comp_info[1].v_samp_factor = 1;
+                fCInfo.comp_info[2].h_samp_factor = 1;
+                fCInfo.comp_info[2].v_samp_factor = 1;
+                break;
+            case SkJpegEncoder::Downsample::k444:
+                fCInfo.comp_info[0].h_samp_factor = 1;
+                fCInfo.comp_info[0].v_samp_factor = 1;
+                fCInfo.comp_info[1].h_samp_factor = 1;
+                fCInfo.comp_info[1].v_samp_factor = 1;
+                fCInfo.comp_info[2].h_samp_factor = 1;
+                fCInfo.comp_info[2].v_samp_factor = 1;
+                break;
+        }
+    }
+
     // Tells libjpeg-turbo to compute optimal Huffman coding tables
     // for the image.  This improves compression at the cost of
     // slower encode performance.