| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
| 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 #include "SkMipMap.h" | 8 #include "SkMipMap.h" |
| 9 #include "SkBitmap.h" | 9 #include "SkBitmap.h" |
| 10 #include "SkColorPriv.h" | 10 #include "SkColorPriv.h" |
| (...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 297 if (levelCount < 0) { | 297 if (levelCount < 0) { |
| 298 return 0; | 298 return 0; |
| 299 } | 299 } |
| 300 int64_t size = sk_64_mul(levelCount + 1, sizeof(Level)) + pixelSize; | 300 int64_t size = sk_64_mul(levelCount + 1, sizeof(Level)) + pixelSize; |
| 301 if (!sk_64_isS32(size)) { | 301 if (!sk_64_isS32(size)) { |
| 302 return 0; | 302 return 0; |
| 303 } | 303 } |
| 304 return sk_64_asS32(size); | 304 return sk_64_asS32(size); |
| 305 } | 305 } |
| 306 | 306 |
| 307 static bool treat_like_srgb(const SkImageInfo& info) { | |
| 308 if (info.colorSpace()) { | |
| 309 return info.colorSpace()->gammaCloseToSRGB(); | |
| 310 } else { | |
| 311 return kSRGB_SkColorProfileType == info.profileType(); | |
| 312 } | |
| 313 } | |
| 314 | |
| 315 SkMipMap* SkMipMap::Build(const SkPixmap& src, SkSourceGammaTreatment treatment, | 307 SkMipMap* SkMipMap::Build(const SkPixmap& src, SkSourceGammaTreatment treatment, |
| 316 SkDiscardableFactoryProc fact) { | 308 SkDiscardableFactoryProc fact) { |
| 317 typedef void FilterProc(void*, const void* srcPtr, size_t srcRB, int count); | 309 typedef void FilterProc(void*, const void* srcPtr, size_t srcRB, int count); |
| 318 | 310 |
| 319 FilterProc* proc_1_2 = nullptr; | 311 FilterProc* proc_1_2 = nullptr; |
| 320 FilterProc* proc_1_3 = nullptr; | 312 FilterProc* proc_1_3 = nullptr; |
| 321 FilterProc* proc_2_1 = nullptr; | 313 FilterProc* proc_2_1 = nullptr; |
| 322 FilterProc* proc_2_2 = nullptr; | 314 FilterProc* proc_2_2 = nullptr; |
| 323 FilterProc* proc_2_3 = nullptr; | 315 FilterProc* proc_2_3 = nullptr; |
| 324 FilterProc* proc_3_1 = nullptr; | 316 FilterProc* proc_3_1 = nullptr; |
| 325 FilterProc* proc_3_2 = nullptr; | 317 FilterProc* proc_3_2 = nullptr; |
| 326 FilterProc* proc_3_3 = nullptr; | 318 FilterProc* proc_3_3 = nullptr; |
| 327 | 319 |
| 328 const SkColorType ct = src.colorType(); | 320 const SkColorType ct = src.colorType(); |
| 329 const SkAlphaType at = src.alphaType(); | 321 const SkAlphaType at = src.alphaType(); |
| 330 const bool srgbGamma = (SkSourceGammaTreatment::kRespect == treatment) | 322 const bool srgbGamma = (SkSourceGammaTreatment::kRespect == treatment) |
| 331 && treat_like_srgb(src.info()); | 323 && src.info().gammaCloseToSRGB(); |
| 332 | 324 |
| 333 switch (ct) { | 325 switch (ct) { |
| 334 case kRGBA_8888_SkColorType: | 326 case kRGBA_8888_SkColorType: |
| 335 case kBGRA_8888_SkColorType: | 327 case kBGRA_8888_SkColorType: |
| 336 if (srgbGamma) { | 328 if (srgbGamma) { |
| 337 proc_1_2 = downsample_1_2<ColorTypeFilter_S32>; | 329 proc_1_2 = downsample_1_2<ColorTypeFilter_S32>; |
| 338 proc_1_3 = downsample_1_3<ColorTypeFilter_S32>; | 330 proc_1_3 = downsample_1_3<ColorTypeFilter_S32>; |
| 339 proc_2_1 = downsample_2_1<ColorTypeFilter_S32>; | 331 proc_2_1 = downsample_2_1<ColorTypeFilter_S32>; |
| 340 proc_2_2 = downsample_2_2<ColorTypeFilter_S32>; | 332 proc_2_2 = downsample_2_2<ColorTypeFilter_S32>; |
| 341 proc_2_3 = downsample_2_3<ColorTypeFilter_S32>; | 333 proc_2_3 = downsample_2_3<ColorTypeFilter_S32>; |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 633 return false; | 625 return false; |
| 634 } | 626 } |
| 635 if (index > fCount - 1) { | 627 if (index > fCount - 1) { |
| 636 return false; | 628 return false; |
| 637 } | 629 } |
| 638 if (levelPtr) { | 630 if (levelPtr) { |
| 639 *levelPtr = fLevels[index]; | 631 *levelPtr = fLevels[index]; |
| 640 } | 632 } |
| 641 return true; | 633 return true; |
| 642 } | 634 } |
| OLD | NEW |