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.