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

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

Issue 1641273003: Support decoding opaque to *premul (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Test opaque to premul in dm Created 4 years, 10 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 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 // Return false on edge cases 68 // Return false on edge cases
69 if (srcCoord < startCoord || get_dst_coord(srcCoord, sampleFactor) >= scaled Dim) { 69 if (srcCoord < startCoord || get_dst_coord(srcCoord, sampleFactor) >= scaled Dim) {
70 return false; 70 return false;
71 } 71 }
72 72
73 // Every sampleFactor rows are necessary 73 // Every sampleFactor rows are necessary
74 return ((srcCoord - startCoord) % sampleFactor) == 0; 74 return ((srcCoord - startCoord) % sampleFactor) == 0;
75 } 75 }
76 76
77 inline bool valid_alpha(SkAlphaType dstAlpha, SkAlphaType srcAlpha) { 77 inline bool valid_alpha(SkAlphaType dstAlpha, SkAlphaType srcAlpha) {
78 // Check for supported alpha types 78 if (kUnknown_SkAlphaType == dstAlpha) {
79 return false;
80 }
81
79 if (srcAlpha != dstAlpha) { 82 if (srcAlpha != dstAlpha) {
80 if (kOpaque_SkAlphaType == srcAlpha) { 83 if (kOpaque_SkAlphaType == srcAlpha) {
81 // If the source is opaque, we must decode to opaque 84 // If the source is opaque, we can support any.
82 return false; 85 return true;
83 } 86 }
84 87
85 // The source is not opaque 88 // The source is not opaque
86 switch (dstAlpha) { 89 switch (dstAlpha) {
87 case kPremul_SkAlphaType: 90 case kPremul_SkAlphaType:
88 case kUnpremul_SkAlphaType: 91 case kUnpremul_SkAlphaType:
89 // The source is not opaque, so either of these is okay 92 // The source is not opaque, so either of these is okay
90 break; 93 break;
91 default: 94 default:
92 // We cannot decode a non-opaque image to opaque (or unknown) 95 // We cannot decode a non-opaque image to opaque (or unknown)
93 return false; 96 return false;
94 } 97 }
95 } 98 }
96 return true; 99 return true;
97 } 100 }
98 101
99 /* 102 /*
100 * Most of our codecs support the same conversions: 103 * Most of our codecs support the same conversions:
101 * - profileType must be the same 104 * - profileType must be the same
102 * - opaque only to opaque (and 565 only if opaque) 105 * - opaque to any alpha type
106 * - 565 only if opaque
103 * - premul to unpremul and vice versa 107 * - premul to unpremul and vice versa
104 * - always support N32 108 * - always support N32
105 * - otherwise match the src color type 109 * - otherwise match the src color type
106 */ 110 */
107 inline bool conversion_possible(const SkImageInfo& dst, const SkImageInfo& src) { 111 inline bool conversion_possible(const SkImageInfo& dst, const SkImageInfo& src) {
108 if (dst.profileType() != src.profileType()) { 112 if (dst.profileType() != src.profileType()) {
109 return false; 113 return false;
110 } 114 }
111 115
112 // Ensure the alpha type is valid 116 // Ensure the alpha type is valid
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 #endif 234 #endif
231 } 235 }
232 236
233 #ifdef SK_PRINT_CODEC_MESSAGES 237 #ifdef SK_PRINT_CODEC_MESSAGES
234 #define SkCodecPrintf SkDebugf 238 #define SkCodecPrintf SkDebugf
235 #else 239 #else
236 #define SkCodecPrintf(...) 240 #define SkCodecPrintf(...)
237 #endif 241 #endif
238 242
239 #endif // SkCodecPriv_DEFINED 243 #endif // SkCodecPriv_DEFINED
OLDNEW
« dm/DM.cpp ('K') | « src/codec/SkCodec.cpp ('k') | src/codec/SkGifCodec.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698