Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | List of all members
SkJpegEncoderMgr Class Referencefinal
Inheritance diagram for SkJpegEncoderMgr:
SkNoncopyable

Public Member Functions

bool setParams (const SkImageInfo &srcInfo, const SkJpegEncoder::Options &options)
 
bool setParams (const SkYUVAPixmapInfo &srcInfo, const SkJpegEncoder::Options &options)
 
jpeg_compress_struct * cinfo ()
 
skjpeg_error_mgrerrorMgr ()
 
transform_scanline_proc proc () const
 
 ~SkJpegEncoderMgr ()
 

Static Public Member Functions

static std::unique_ptr< SkJpegEncoderMgrMake (SkWStream *stream)
 

Detailed Description

Definition at line 47 of file SkJpegEncoderImpl.cpp.

Constructor & Destructor Documentation

◆ ~SkJpegEncoderMgr()

SkJpegEncoderMgr::~SkJpegEncoderMgr ( )
inline

Definition at line 66 of file SkJpegEncoderImpl.cpp.

66{ jpeg_destroy_compress(&fCInfo); }

Member Function Documentation

◆ cinfo()

jpeg_compress_struct * SkJpegEncoderMgr::cinfo ( )
inline

Definition at line 60 of file SkJpegEncoderImpl.cpp.

60{ return &fCInfo; }

◆ errorMgr()

skjpeg_error_mgr * SkJpegEncoderMgr::errorMgr ( )
inline

Definition at line 62 of file SkJpegEncoderImpl.cpp.

62{ return &fErrMgr; }

◆ Make()

static std::unique_ptr< SkJpegEncoderMgr > SkJpegEncoderMgr::Make ( SkWStream stream)
inlinestatic

Definition at line 53 of file SkJpegEncoderImpl.cpp.

53 {
54 return std::unique_ptr<SkJpegEncoderMgr>(new SkJpegEncoderMgr(stream));
55 }

◆ proc()

transform_scanline_proc SkJpegEncoderMgr::proc ( ) const
inline

Definition at line 64 of file SkJpegEncoderImpl.cpp.

64{ return fProc; }

◆ setParams() [1/2]

bool SkJpegEncoderMgr::setParams ( const SkImageInfo srcInfo,
const SkJpegEncoder::Options options 
)

Definition at line 82 of file SkJpegEncoderImpl.cpp.

83 {
84 auto chooseProc8888 = [&]() {
85 if (kUnpremul_SkAlphaType == srcInfo.alphaType() &&
88 }
89 return (transform_scanline_proc) nullptr;
90 };
91
92 J_COLOR_SPACE jpegColorType = JCS_EXT_RGBA;
93 int numComponents = 0;
94 switch (srcInfo.colorType()) {
96 fProc = chooseProc8888();
97 jpegColorType = JCS_EXT_RGBA;
98 numComponents = 4;
99 break;
101 fProc = chooseProc8888();
102 jpegColorType = JCS_EXT_BGRA;
103 numComponents = 4;
104 break;
107 jpegColorType = JCS_RGB;
108 numComponents = 3;
109 break;
112 return false;
113 }
114
116 jpegColorType = JCS_RGB;
117 numComponents = 3;
118 break;
122 jpegColorType = JCS_GRAYSCALE;
123 numComponents = 1;
124 break;
126 if (kUnpremul_SkAlphaType == srcInfo.alphaType() &&
129 } else {
131 }
132 jpegColorType = JCS_EXT_RGBA;
133 numComponents = 4;
134 break;
135 default:
136 return false;
137 }
138
139 fCInfo.image_width = srcInfo.width();
140 fCInfo.image_height = srcInfo.height();
141 fCInfo.in_color_space = jpegColorType;
142 fCInfo.input_components = numComponents;
143 jpeg_set_defaults(&fCInfo);
144
145 if (numComponents != 1) {
146 switch (options.fDownsample) {
148 SkASSERT(2 == fCInfo.comp_info[0].h_samp_factor);
149 SkASSERT(2 == fCInfo.comp_info[0].v_samp_factor);
150 SkASSERT(1 == fCInfo.comp_info[1].h_samp_factor);
151 SkASSERT(1 == fCInfo.comp_info[1].v_samp_factor);
152 SkASSERT(1 == fCInfo.comp_info[2].h_samp_factor);
153 SkASSERT(1 == fCInfo.comp_info[2].v_samp_factor);
154 break;
156 fCInfo.comp_info[0].h_samp_factor = 2;
157 fCInfo.comp_info[0].v_samp_factor = 1;
158 SkASSERT(1 == fCInfo.comp_info[1].h_samp_factor);
159 SkASSERT(1 == fCInfo.comp_info[1].v_samp_factor);
160 SkASSERT(1 == fCInfo.comp_info[2].h_samp_factor);
161 SkASSERT(1 == fCInfo.comp_info[2].v_samp_factor);
162 break;
164 fCInfo.comp_info[0].h_samp_factor = 1;
165 fCInfo.comp_info[0].v_samp_factor = 1;
166 SkASSERT(1 == fCInfo.comp_info[1].h_samp_factor);
167 SkASSERT(1 == fCInfo.comp_info[1].v_samp_factor);
168 SkASSERT(1 == fCInfo.comp_info[2].h_samp_factor);
169 SkASSERT(1 == fCInfo.comp_info[2].v_samp_factor);
170 break;
171 }
172 }
173
174 // Tells libjpeg-turbo to compute optimal Huffman coding tables
175 // for the image. This improves compression at the cost of
176 // slower encode performance.
177 fCInfo.optimize_coding = TRUE;
178 return true;
179}
const char * options
kUnpremul_SkAlphaType
#define SkASSERT(cond)
Definition SkAssert.h:116
@ kR8_unorm_SkColorType
Definition SkColorType.h:54
@ kARGB_4444_SkColorType
pixel with 4 bits for alpha, red, green, blue; in 16-bit word
Definition SkColorType.h:23
@ kBGRA_8888_SkColorType
pixel with 8 bits for blue, green, red, alpha; in 32-bit word
Definition SkColorType.h:26
@ kRGBA_F16_SkColorType
pixel with half floats for red, green, blue, alpha;
Definition SkColorType.h:38
@ kAlpha_8_SkColorType
pixel with alpha in 8-bit byte
Definition SkColorType.h:21
@ kGray_8_SkColorType
pixel with grayscale level in 8-bit byte
Definition SkColorType.h:35
@ kRGB_565_SkColorType
pixel with 5 bits red, 6 bits green, 5 bits blue, in 16-bit word
Definition SkColorType.h:22
@ kRGBA_8888_SkColorType
pixel with 8 bits for red, green, blue, alpha; in 32-bit word
Definition SkColorType.h:24
static void transform_scanline_to_premul_legacy(char *dst, const char *src, int width, int)
static void transform_scanline_F16_to_8888(char *dst, const char *src, int width, int)
void(* transform_scanline_proc)(char *dst, const char *src, int width, int bpp)
static void transform_scanline_565(char *dst, const char *src, int width, int)
static void transform_scanline_F16_to_premul_8888(char *dst, const char *src, int width, int)
static void transform_scanline_444(char *dst, const char *src, int width, int)
int width() const
SkAlphaType alphaType() const
SkColorType colorType() const
int height() const

◆ setParams() [2/2]

bool SkJpegEncoderMgr::setParams ( const SkYUVAPixmapInfo srcInfo,
const SkJpegEncoder::Options options 
)

Definition at line 218 of file SkJpegEncoderImpl.cpp.

219 {
220 fCInfo.image_width = srcInfo.yuvaInfo().width();
221 fCInfo.image_height = srcInfo.yuvaInfo().height();
222 fCInfo.in_color_space = JCS_YCbCr;
223 fCInfo.input_components = 3;
224 jpeg_set_defaults(&fCInfo);
225
226 // Support no color space conversion.
227 if (srcInfo.yuvColorSpace() != kJPEG_Full_SkYUVColorSpace) {
228 return false;
229 }
230
231 // Support only 8-bit data.
232 switch (srcInfo.dataType()) {
234 break;
235 default:
236 return false;
237 }
238
239 // Support only Y,U,V and Y,UV configurations (they are the only ones supported by
240 // yuva_copy_row).
241 switch (srcInfo.yuvaInfo().planeConfig()) {
244 break;
245 default:
246 return false;
247 }
248
249 // Specify to the encoder to use the same subsampling as the input image. The U and V planes
250 // always have a sampling factor of 1.
251 auto [ssHoriz, ssVert] = SkYUVAInfo::SubsamplingFactors(srcInfo.yuvaInfo().subsampling());
252 fCInfo.comp_info[0].h_samp_factor = ssHoriz;
253 fCInfo.comp_info[0].v_samp_factor = ssVert;
254
255 fCInfo.optimize_coding = TRUE;
256 return true;
257}
@ kJPEG_Full_SkYUVColorSpace
describes full range
Definition SkImageInfo.h:69
int width() const
Definition SkYUVAInfo.h:172
@ kY_U_V
Plane 0: Y, Plane 1: U, Plane 2: V.
@ kY_UV
Plane 0: Y, Plane 1: UV.
int height() const
Definition SkYUVAInfo.h:173
PlaneConfig planeConfig() const
Definition SkYUVAInfo.h:160
static std::tuple< int, int > SubsamplingFactors(Subsampling)
Subsampling subsampling() const
Definition SkYUVAInfo.h:161
SkYUVColorSpace yuvColorSpace() const
const SkYUVAInfo & yuvaInfo() const
@ kUnorm8
8 bit unsigned normalized
DataType dataType() const

The documentation for this class was generated from the following file: