OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 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 "SkCodec.h" | 8 #include "SkCodec.h" |
9 #include "SkCodecPriv.h" | 9 #include "SkCodecPriv.h" |
10 #include "SkColorPriv.h" | 10 #include "SkColorPriv.h" |
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
508 fIsXtransImage = fIsScalable ? (cfaPatternSize.v == 6 && cfaPatternSize.
h == 6) : false; | 508 fIsXtransImage = fIsScalable ? (cfaPatternSize.v == 6 && cfaPatternSize.
h == 6) : false; |
509 } | 509 } |
510 | 510 |
511 bool initFromPiex() { | 511 bool initFromPiex() { |
512 // Does not take the ownership of rawStream. | 512 // Does not take the ownership of rawStream. |
513 SkPiexStream piexStream(fStream.get()); | 513 SkPiexStream piexStream(fStream.get()); |
514 ::piex::PreviewImageData imageData; | 514 ::piex::PreviewImageData imageData; |
515 if (::piex::IsRaw(&piexStream) | 515 if (::piex::IsRaw(&piexStream) |
516 && ::piex::GetPreviewImageData(&piexStream, &imageData) == ::piex::E
rror::kOk) | 516 && ::piex::GetPreviewImageData(&piexStream, &imageData) == ::piex::E
rror::kOk) |
517 { | 517 { |
| 518 // Verify the size information, as it is only optional information f
or PIEX. |
| 519 if (imageData.full_width == 0 || imageData.full_height == 0) { |
| 520 return false; |
| 521 } |
| 522 |
518 dng_point cfaPatternSize(imageData.cfa_pattern_dim[1], imageData.cfa
_pattern_dim[0]); | 523 dng_point cfaPatternSize(imageData.cfa_pattern_dim[1], imageData.cfa
_pattern_dim[0]); |
519 this->init(static_cast<int>(imageData.full_width), | 524 this->init(static_cast<int>(imageData.full_width), |
520 static_cast<int>(imageData.full_height), cfaPatternSize); | 525 static_cast<int>(imageData.full_height), cfaPatternSize); |
521 return true; | 526 return true; |
522 } | 527 } |
523 return false; | 528 return false; |
524 } | 529 } |
525 | 530 |
526 bool readDng() { | 531 bool readDng() { |
527 try { | 532 try { |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
663 } | 668 } |
664 | 669 |
665 swizzler->swizzle(dstRow, &srcRow[0]); | 670 swizzler->swizzle(dstRow, &srcRow[0]); |
666 dstRow = SkTAddOffset<void>(dstRow, dstRowBytes); | 671 dstRow = SkTAddOffset<void>(dstRow, dstRowBytes); |
667 } | 672 } |
668 return kSuccess; | 673 return kSuccess; |
669 } | 674 } |
670 | 675 |
671 SkISize SkRawCodec::onGetScaledDimensions(float desiredScale) const { | 676 SkISize SkRawCodec::onGetScaledDimensions(float desiredScale) const { |
672 SkASSERT(desiredScale <= 1.f); | 677 SkASSERT(desiredScale <= 1.f); |
| 678 |
673 const SkISize dim = this->getInfo().dimensions(); | 679 const SkISize dim = this->getInfo().dimensions(); |
| 680 SkASSERT(dim.fWidth != 0 && dim.fHeight != 0); |
| 681 |
674 if (!fDngImage->isScalable()) { | 682 if (!fDngImage->isScalable()) { |
675 return dim; | 683 return dim; |
676 } | 684 } |
677 | 685 |
678 // Limits the minimum size to be 80 on the short edge. | 686 // Limits the minimum size to be 80 on the short edge. |
679 const float shortEdge = static_cast<float>(SkTMin(dim.fWidth, dim.fHeight)); | 687 const float shortEdge = static_cast<float>(SkTMin(dim.fWidth, dim.fHeight)); |
680 if (desiredScale < 80.f / shortEdge) { | 688 if (desiredScale < 80.f / shortEdge) { |
681 desiredScale = 80.f / shortEdge; | 689 desiredScale = 80.f / shortEdge; |
682 } | 690 } |
683 | 691 |
(...skipping 17 matching lines...) Expand all Loading... |
701 SkISize sizeFloor = this->onGetScaledDimensions(1.f / std::floor(fullShortEd
ge / shortEdge)); | 709 SkISize sizeFloor = this->onGetScaledDimensions(1.f / std::floor(fullShortEd
ge / shortEdge)); |
702 SkISize sizeCeil = this->onGetScaledDimensions(1.f / std::ceil(fullShortEdge
/ shortEdge)); | 710 SkISize sizeCeil = this->onGetScaledDimensions(1.f / std::ceil(fullShortEdge
/ shortEdge)); |
703 return sizeFloor == dim || sizeCeil == dim; | 711 return sizeFloor == dim || sizeCeil == dim; |
704 } | 712 } |
705 | 713 |
706 SkRawCodec::~SkRawCodec() {} | 714 SkRawCodec::~SkRawCodec() {} |
707 | 715 |
708 SkRawCodec::SkRawCodec(SkDngImage* dngImage) | 716 SkRawCodec::SkRawCodec(SkDngImage* dngImage) |
709 : INHERITED(dngImage->getImageInfo(), nullptr) | 717 : INHERITED(dngImage->getImageInfo(), nullptr) |
710 , fDngImage(dngImage) {} | 718 , fDngImage(dngImage) {} |
OLD | NEW |