diff options
Diffstat (limited to 'src/images/SkJpegEncoder.cpp')
-rw-r--r-- | src/images/SkJpegEncoder.cpp | 29 |
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. |