OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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_libpng.h" | 8 #include "SkCodec_libpng.h" |
9 #include "SkCodecPriv.h" | 9 #include "SkCodecPriv.h" |
10 #include "SkColorPriv.h" | 10 #include "SkColorPriv.h" |
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
496 public: | 496 public: |
497 SkPngScanlineDecoder(const SkImageInfo& dstInfo, SkPngCodec* codec) | 497 SkPngScanlineDecoder(const SkImageInfo& dstInfo, SkPngCodec* codec) |
498 : INHERITED(dstInfo) | 498 : INHERITED(dstInfo) |
499 , fCodec(codec) | 499 , fCodec(codec) |
500 , fHasAlpha(false) | 500 , fHasAlpha(false) |
501 { | 501 { |
502 fStorage.reset(dstInfo.width() * SkSwizzler::BytesPerPixel(fCodec->fSrcC
onfig)); | 502 fStorage.reset(dstInfo.width() * SkSwizzler::BytesPerPixel(fCodec->fSrcC
onfig)); |
503 fSrcRow = static_cast<uint8_t*>(fStorage.get()); | 503 fSrcRow = static_cast<uint8_t*>(fStorage.get()); |
504 } | 504 } |
505 | 505 |
506 SkImageGenerator::Result onGetScanlines(void* dst, int count, size_t rowByte
s) SK_OVERRIDE { | 506 SkImageGenerator::Result onGetScanlines(void* dst, int count, size_t rowByte
s) override { |
507 if (setjmp(png_jmpbuf(fCodec->fPng_ptr))) { | 507 if (setjmp(png_jmpbuf(fCodec->fPng_ptr))) { |
508 SkDebugf("setjmp long jump!\n"); | 508 SkDebugf("setjmp long jump!\n"); |
509 return SkImageGenerator::kInvalidInput; | 509 return SkImageGenerator::kInvalidInput; |
510 } | 510 } |
511 | 511 |
512 for (int i = 0; i < count; i++) { | 512 for (int i = 0; i < count; i++) { |
513 png_read_rows(fCodec->fPng_ptr, &fSrcRow, png_bytepp_NULL, 1); | 513 png_read_rows(fCodec->fPng_ptr, &fSrcRow, png_bytepp_NULL, 1); |
514 fCodec->fSwizzler->setDstRow(dst); | 514 fCodec->fSwizzler->setDstRow(dst); |
515 fHasAlpha |= !SkSwizzler::IsOpaque(fCodec->fSwizzler->next(fSrcRow))
; | 515 fHasAlpha |= !SkSwizzler::IsOpaque(fCodec->fSwizzler->next(fSrcRow))
; |
516 dst = SkTAddOffset<void>(dst, rowBytes); | 516 dst = SkTAddOffset<void>(dst, rowBytes); |
517 } | 517 } |
518 return SkImageGenerator::kSuccess; | 518 return SkImageGenerator::kSuccess; |
519 } | 519 } |
520 | 520 |
521 SkImageGenerator::Result onSkipScanlines(int count) SK_OVERRIDE { | 521 SkImageGenerator::Result onSkipScanlines(int count) override { |
522 // FIXME: Could we use the return value of setjmp to specify the type of | 522 // FIXME: Could we use the return value of setjmp to specify the type of |
523 // error? | 523 // error? |
524 if (setjmp(png_jmpbuf(fCodec->fPng_ptr))) { | 524 if (setjmp(png_jmpbuf(fCodec->fPng_ptr))) { |
525 SkDebugf("setjmp long jump!\n"); | 525 SkDebugf("setjmp long jump!\n"); |
526 return SkImageGenerator::kInvalidInput; | 526 return SkImageGenerator::kInvalidInput; |
527 } | 527 } |
528 | 528 |
529 png_read_rows(fCodec->fPng_ptr, png_bytepp_NULL, png_bytepp_NULL, count)
; | 529 png_read_rows(fCodec->fPng_ptr, png_bytepp_NULL, png_bytepp_NULL, count)
; |
530 return SkImageGenerator::kSuccess; | 530 return SkImageGenerator::kSuccess; |
531 } | 531 } |
532 | 532 |
533 void onFinish() SK_OVERRIDE { | 533 void onFinish() override { |
534 fCodec->finish(); | 534 fCodec->finish(); |
535 } | 535 } |
536 | 536 |
537 bool onReallyHasAlpha() const SK_OVERRIDE { return fHasAlpha; } | 537 bool onReallyHasAlpha() const override { return fHasAlpha; } |
538 | 538 |
539 private: | 539 private: |
540 SkPngCodec* fCodec; // Unowned. | 540 SkPngCodec* fCodec; // Unowned. |
541 bool fHasAlpha; | 541 bool fHasAlpha; |
542 SkAutoMalloc fStorage; | 542 SkAutoMalloc fStorage; |
543 uint8_t* fSrcRow; | 543 uint8_t* fSrcRow; |
544 | 544 |
545 typedef SkScanlineDecoder INHERITED; | 545 typedef SkScanlineDecoder INHERITED; |
546 }; | 546 }; |
547 | 547 |
(...skipping 21 matching lines...) Expand all Loading... |
569 | 569 |
570 SkASSERT(fNumberPasses != INVALID_NUMBER_PASSES); | 570 SkASSERT(fNumberPasses != INVALID_NUMBER_PASSES); |
571 if (fNumberPasses > 1) { | 571 if (fNumberPasses > 1) { |
572 // We cannot efficiently do scanline decoding. | 572 // We cannot efficiently do scanline decoding. |
573 return NULL; | 573 return NULL; |
574 } | 574 } |
575 | 575 |
576 return SkNEW_ARGS(SkPngScanlineDecoder, (dstInfo, this)); | 576 return SkNEW_ARGS(SkPngScanlineDecoder, (dstInfo, this)); |
577 } | 577 } |
578 | 578 |
OLD | NEW |