aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/images/SkJpegEncoder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/images/SkJpegEncoder.cpp')
-rw-r--r--src/images/SkJpegEncoder.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/images/SkJpegEncoder.cpp b/src/images/SkJpegEncoder.cpp
index d87fed81bc..4b37cd3be3 100644
--- a/src/images/SkJpegEncoder.cpp
+++ b/src/images/SkJpegEncoder.cpp
@@ -152,6 +152,35 @@ bool SkJpegEncoderMgr::setParams(const SkImageInfo& srcInfo, const SkJpegEncoder
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.