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

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

Issue 2319293003: Checking for valid colorType, alphaType, colorSpace in SkCodec (Closed)
Patch Set: Created 4 years, 3 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
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 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 break; 100 break;
101 default: 101 default:
102 // We cannot decode a non-opaque image to opaque (or unknown) 102 // We cannot decode a non-opaque image to opaque (or unknown)
103 return false; 103 return false;
104 } 104 }
105 } 105 }
106 return true; 106 return true;
107 } 107 }
108 108
109 /* 109 /*
110 * Original version of conversion_possible that does not account for color space s.
111 * Used by codecs that have not been updated to support color spaces.
112 * This is not synonymous with decoding in "legacy mode". Codecs should be able
scroggo 2016/09/08 16:33:11 I vote we use a different name. Conversion possibl
msarett 2016/09/08 16:49:45 Works for me - also removed this part of the comme
113 * to support decodes in "legacy mode" and in "color correct modes". Codecs tha t
114 * still use this function ignore color spaces and always decode in "legacy mode ".
115 *
110 * Most of our codecs support the same conversions: 116 * Most of our codecs support the same conversions:
111 * - opaque to any alpha type 117 * - opaque to any alpha type
112 * - 565 only if opaque 118 * - 565 only if opaque
113 * - premul to unpremul and vice versa 119 * - premul to unpremul and vice versa
114 * - always support N32 120 * - always support RGBA, BGRA
115 * - otherwise match the src color type 121 * - otherwise match the src color type
116 */ 122 */
117 static inline bool conversion_possible(const SkImageInfo& dst, const SkImageInfo & src) { 123 static inline bool legacy_conversion_possible(const SkImageInfo& dst, const SkIm ageInfo& src) {
118 // Ensure the alpha type is valid 124 // Ensure the alpha type is valid
119 if (!valid_alpha(dst.alphaType(), src.alphaType())) { 125 if (!valid_alpha(dst.alphaType(), src.alphaType())) {
120 return false; 126 return false;
121 } 127 }
122 128
123 // Check for supported color types 129 // Check for supported color types
124 switch (dst.colorType()) { 130 switch (dst.colorType()) {
125 case kRGBA_8888_SkColorType: 131 case kRGBA_8888_SkColorType:
126 case kBGRA_8888_SkColorType: 132 case kBGRA_8888_SkColorType:
127 return true; 133 return true;
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 // We never perform a color xform in legacy mode. 334 // We never perform a color xform in legacy mode.
329 bool isLegacy = nullptr == dstInfo.colorSpace(); 335 bool isLegacy = nullptr == dstInfo.colorSpace();
330 336
331 return !isLegacy && (needsPremul || isF16 || srcDstNotEqual); 337 return !isLegacy && (needsPremul || isF16 || srcDstNotEqual);
332 } 338 }
333 339
334 static inline SkAlphaType select_alpha_xform(SkAlphaType dstAlphaType, SkAlphaTy pe srcAlphaType) { 340 static inline SkAlphaType select_alpha_xform(SkAlphaType dstAlphaType, SkAlphaTy pe srcAlphaType) {
335 return (kOpaque_SkAlphaType == srcAlphaType) ? kOpaque_SkAlphaType : dstAlph aType; 341 return (kOpaque_SkAlphaType == srcAlphaType) ? kOpaque_SkAlphaType : dstAlph aType;
336 } 342 }
337 343
344 /*
345 * Alpha Type Conversions
346 * - kOpaque to kOpaque, kUnpremul, kPremul is valid
347 * - kUnpremul to kUnpremul, kPremul is valid
348 *
349 * Color Type Conversions
350 * - Always support kRGBA_8888, kBGRA_8888
351 * - Support kRGBA_F16 when there is a linear dst color space
352 * - Support kIndex8 if it matches the src
353 * - Support k565, kGray8 if kOpaque and color correction is not required
354 */
355 static inline bool conversion_possible(const SkImageInfo& dst, const SkImageInfo & src) {
356 // Ensure the alpha type is valid.
357 if (!valid_alpha(dst.alphaType(), src.alphaType())) {
358 return false;
359 }
360
361 // Check for supported color types.
362 switch (dst.colorType()) {
363 case kRGBA_8888_SkColorType:
364 case kBGRA_8888_SkColorType:
365 return true;
366 case kRGBA_F16_SkColorType:
367 return dst.colorSpace() && dst.colorSpace()->gammaIsLinear();
368 case kIndex_8_SkColorType:
369 return kIndex_8_SkColorType == src.colorType();
370 case kRGB_565_SkColorType:
371 case kGray_8_SkColorType:
372 return kOpaque_SkAlphaType == src.alphaType() && !needs_color_xform( dst, src);
373 default:
374 return false;
375 }
376 }
377
338 #endif // SkCodecPriv_DEFINED 378 #endif // SkCodecPriv_DEFINED
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698