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

Side by Side Diff: src/codec/SkJpegCodec.cpp

Issue 1287423002: Scanline decoding for bmp (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix windows errors Created 5 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
« no previous file with comments | « src/codec/SkCodec_libpng.cpp ('k') | src/codec/SkMaskSwizzler.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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.h" 8 #include "SkCodec.h"
9 #include "SkJpegCodec.h" 9 #include "SkJpegCodec.h"
10 #include "SkJpegDecoderMgr.h" 10 #include "SkJpegDecoderMgr.h"
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 // If we cannot read enough rows, assume the input is incomplete 348 // If we cannot read enough rows, assume the input is incomplete
349 if (rowsDecoded != 1) { 349 if (rowsDecoded != 1) {
350 // Fill the remainder of the image with black. This error handling 350 // Fill the remainder of the image with black. This error handling
351 // behavior is unspecified but SkCodec consistently uses black as 351 // behavior is unspecified but SkCodec consistently uses black as
352 // the fill color for opaque images. If the destination is kGray, 352 // the fill color for opaque images. If the destination is kGray,
353 // the low 8 bits of SK_ColorBLACK will be used. Conveniently, 353 // the low 8 bits of SK_ColorBLACK will be used. Conveniently,
354 // these are zeros, which is the representation for black in kGray. 354 // these are zeros, which is the representation for black in kGray.
355 // If the destination is kRGB_565, the low 16 bits of SK_ColorBLACK 355 // If the destination is kRGB_565, the low 16 bits of SK_ColorBLACK
356 // will be used. Conveniently, these are zeros, which is the 356 // will be used. Conveniently, these are zeros, which is the
357 // representation for black in kRGB_565. 357 // representation for black in kRGB_565.
358 if (kNo_ZeroInitialized == options.fZeroInitialized || 358 SkSwizzler::Fill(dstRow, dstInfo, dstRowBytes, dstHeight - y,
359 kN32_SkColorType == dstInfo.colorType()) { 359 SK_ColorBLACK, nullptr, options.fZeroInitialized);
360 SkSwizzler::Fill(dstRow, dstInfo, dstRowBytes, dstHeight - y,
361 SK_ColorBLACK, nullptr);
362 }
363 360
364 // Prevent libjpeg from failing on incomplete decode 361 // Prevent libjpeg from failing on incomplete decode
365 dinfo->output_scanline = dstHeight; 362 dinfo->output_scanline = dstHeight;
366 363
367 // Finish the decode and indicate that the input was incomplete. 364 // Finish the decode and indicate that the input was incomplete.
368 chromium_jpeg_finish_decompress(dinfo); 365 chromium_jpeg_finish_decompress(dinfo);
369 return fDecoderMgr->returnFailure("Incomplete image data", kIncomple teInput); 366 return fDecoderMgr->returnFailure("Incomplete image data", kIncomple teInput);
370 } 367 }
371 368
372 // Convert to RGBA if necessary 369 // Convert to RGBA if necessary
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 } else { 506 } else {
510 // write data directly to dst 507 // write data directly to dst
511 dstRow = (JSAMPLE*) dst; 508 dstRow = (JSAMPLE*) dst;
512 } 509 }
513 510
514 for (int y = 0; y < count; y++) { 511 for (int y = 0; y < count; y++) {
515 // Read row of the image 512 // Read row of the image
516 uint32_t rowsDecoded = 513 uint32_t rowsDecoded =
517 chromium_jpeg_read_scanlines(fCodec->fDecoderMgr->dinfo(), & dstRow, 1); 514 chromium_jpeg_read_scanlines(fCodec->fDecoderMgr->dinfo(), & dstRow, 1);
518 if (rowsDecoded != 1) { 515 if (rowsDecoded != 1) {
519 if (SkCodec::kNo_ZeroInitialized == fOpts.fZeroInitialized || 516 SkSwizzler::Fill(dstRow, this->dstInfo(), rowBytes, count - y,
520 kN32_SkColorType == this->dstInfo().colorType()) { 517 SK_ColorBLACK, nullptr, fOpts.fZeroInitialized);
521 SkSwizzler::Fill(dstRow, this->dstInfo(), rowBytes,
522 count - y, SK_ColorBLACK, nullptr);
523 }
524 fCodec->fDecoderMgr->dinfo()->output_scanline = this->dstInfo(). height(); 518 fCodec->fDecoderMgr->dinfo()->output_scanline = this->dstInfo(). height();
525 return SkCodec::kIncompleteInput; 519 return SkCodec::kIncompleteInput;
526 } 520 }
527 521
528 // Convert to RGBA if necessary 522 // Convert to RGBA if necessary
529 if (JCS_CMYK == fCodec->fDecoderMgr->dinfo()->out_color_space) { 523 if (JCS_CMYK == fCodec->fDecoderMgr->dinfo()->out_color_space) {
530 convert_CMYK_to_RGBA(dstRow, fCodec->fDecoderMgr->dinfo()->outpu t_width); 524 convert_CMYK_to_RGBA(dstRow, fCodec->fDecoderMgr->dinfo()->outpu t_width);
531 } 525 }
532 526
533 if(fSwizzler) { 527 if(fSwizzler) {
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 SkAutoTDelete<SkJpegCodec> codec(static_cast<SkJpegCodec*>(SkJpegCodec::NewF romStream(stream))); 575 SkAutoTDelete<SkJpegCodec> codec(static_cast<SkJpegCodec*>(SkJpegCodec::NewF romStream(stream)));
582 if (!codec) { 576 if (!codec) {
583 return nullptr; 577 return nullptr;
584 } 578 }
585 579
586 const SkImageInfo& srcInfo = codec->getInfo(); 580 const SkImageInfo& srcInfo = codec->getInfo();
587 581
588 // Return the new scanline decoder 582 // Return the new scanline decoder
589 return new SkJpegScanlineDecoder(srcInfo, codec.detach()); 583 return new SkJpegScanlineDecoder(srcInfo, codec.detach());
590 } 584 }
OLDNEW
« no previous file with comments | « src/codec/SkCodec_libpng.cpp ('k') | src/codec/SkMaskSwizzler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698