Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(68)

Side by Side Diff: src/codec/SkCodecPriv.h

Issue 1835083002: Support RGBA/BGRA swizzles using SkEncodedInfo (Closed) Base URL: https://skia.googlesource.com/skia.git@skencodedinfo
Patch Set: Fix bugs Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/codec/SkBmpStandardCodec.cpp ('k') | src/codec/SkGifCodec.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2015 The Android Open Source Project 2 * Copyright 2015 The Android Open Source Project
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef SkCodecPriv_DEFINED 8 #ifndef SkCodecPriv_DEFINED
9 #define SkCodecPriv_DEFINED 9 #define SkCodecPriv_DEFINED
10 10
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 return false; 125 return false;
126 } 126 }
127 127
128 // Ensure the alpha type is valid 128 // Ensure the alpha type is valid
129 if (!valid_alpha(dst.alphaType(), src.alphaType())) { 129 if (!valid_alpha(dst.alphaType(), src.alphaType())) {
130 return false; 130 return false;
131 } 131 }
132 132
133 // Check for supported color types 133 // Check for supported color types
134 switch (dst.colorType()) { 134 switch (dst.colorType()) {
135 case kN32_SkColorType: 135 case kRGBA_8888_SkColorType:
136 case kBGRA_8888_SkColorType:
136 return true; 137 return true;
137 case kRGB_565_SkColorType: 138 case kRGB_565_SkColorType:
138 return kOpaque_SkAlphaType == dst.alphaType(); 139 return kOpaque_SkAlphaType == dst.alphaType();
139 case kGray_8_SkColorType: 140 case kGray_8_SkColorType:
140 if (kOpaque_SkAlphaType != dst.alphaType()) { 141 if (kOpaque_SkAlphaType != dst.alphaType()) {
141 return false; 142 return false;
142 } 143 }
143 // Fall through 144 // Fall through
144 default: 145 default:
145 return dst.colorType() == src.colorType(); 146 return dst.colorType() == src.colorType();
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 } 269 }
269 270
270 inline uint16_t get_endian_short(const uint8_t* data, bool littleEndian) { 271 inline uint16_t get_endian_short(const uint8_t* data, bool littleEndian) {
271 if (littleEndian) { 272 if (littleEndian) {
272 return (data[1] << 8) | (data[0]); 273 return (data[1] << 8) | (data[0]);
273 } 274 }
274 275
275 return (data[0] << 8) | (data[1]); 276 return (data[0] << 8) | (data[1]);
276 } 277 }
277 278
279 inline SkPMColor premultiply_argb_as_rgba(U8CPU a, U8CPU r, U8CPU g, U8CPU b) {
280 if (a != 255) {
281 r = SkMulDiv255Round(r, a);
282 g = SkMulDiv255Round(g, a);
283 b = SkMulDiv255Round(b, a);
284 }
285
286 return SkPackARGB_as_RGBA(a, r, g, b);
287 }
288
289 inline SkPMColor premultiply_argb_as_bgra(U8CPU a, U8CPU r, U8CPU g, U8CPU b) {
290 if (a != 255) {
291 r = SkMulDiv255Round(r, a);
292 g = SkMulDiv255Round(g, a);
293 b = SkMulDiv255Round(b, a);
294 }
295
296 return SkPackARGB_as_BGRA(a, r, g, b);
297 }
298
299 inline bool is_rgba(SkColorType colorType) {
300 #ifdef SK_PMCOLOR_IS_RGBA
301 return (kBGRA_8888_SkColorType != colorType);
302 #else
303 return (kRGBA_8888_SkColorType == colorType);
304 #endif
305 }
306
307 // Method for coverting to a 32 bit pixel.
308 typedef uint32_t (*PackColorProc)(U8CPU a, U8CPU r, U8CPU g, U8CPU b);
309
310 inline PackColorProc choose_pack_color_proc(bool isPremul, SkColorType colorType ) {
311 bool isRGBA = is_rgba(colorType);
312 if (isPremul) {
313 if (isRGBA) {
314 return &premultiply_argb_as_rgba;
315 } else {
316 return &premultiply_argb_as_bgra;
317 }
318 } else {
319 if (isRGBA) {
320 return &SkPackARGB_as_RGBA;
321 } else {
322 return &SkPackARGB_as_BGRA;
323 }
324 }
325 }
326
278 #endif // SkCodecPriv_DEFINED 327 #endif // SkCodecPriv_DEFINED
OLDNEW
« no previous file with comments | « src/codec/SkBmpStandardCodec.cpp ('k') | src/codec/SkGifCodec.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698