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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp

Issue 2878333004: Use SkJpegEncoder in WebKit platform (Closed)
Patch Set: Create instead of Make Created 3 years, 7 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 (c) 2008, Google Inc. All rights reserved. 2 * Copyright (c) 2008, Google Inc. All rights reserved.
3 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> 3 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org>
4 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. 4 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are 7 * modification, are permitted provided that the following conditions are
8 * met: 8 * met:
9 * 9 *
10 * * Redistributions of source code must retain the above copyright 10 * * Redistributions of source code must retain the above copyright
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 #include "platform/graphics/GraphicsContext.h" 42 #include "platform/graphics/GraphicsContext.h"
43 #include "platform/graphics/ImageBufferClient.h" 43 #include "platform/graphics/ImageBufferClient.h"
44 #include "platform/graphics/RecordingImageBufferSurface.h" 44 #include "platform/graphics/RecordingImageBufferSurface.h"
45 #include "platform/graphics/StaticBitmapImage.h" 45 #include "platform/graphics/StaticBitmapImage.h"
46 #include "platform/graphics/UnacceleratedImageBufferSurface.h" 46 #include "platform/graphics/UnacceleratedImageBufferSurface.h"
47 #include "platform/graphics/gpu/DrawingBuffer.h" 47 #include "platform/graphics/gpu/DrawingBuffer.h"
48 #include "platform/graphics/gpu/Extensions3DUtil.h" 48 #include "platform/graphics/gpu/Extensions3DUtil.h"
49 #include "platform/graphics/paint/PaintImage.h" 49 #include "platform/graphics/paint/PaintImage.h"
50 #include "platform/graphics/paint/PaintRecord.h" 50 #include "platform/graphics/paint/PaintRecord.h"
51 #include "platform/graphics/skia/SkiaUtils.h" 51 #include "platform/graphics/skia/SkiaUtils.h"
52 #include "platform/image-encoders/JPEGImageEncoder.h" 52 #include "platform/image-encoders/ImageEncoder.h"
53 #include "platform/image-encoders/PNGImageEncoder.h" 53 #include "platform/image-encoders/PNGImageEncoder.h"
54 #include "platform/image-encoders/WEBPImageEncoder.h" 54 #include "platform/image-encoders/WEBPImageEncoder.h"
55 #include "platform/network/mime/MIMETypeRegistry.h" 55 #include "platform/network/mime/MIMETypeRegistry.h"
56 #include "platform/wtf/CheckedNumeric.h" 56 #include "platform/wtf/CheckedNumeric.h"
57 #include "platform/wtf/MathExtras.h" 57 #include "platform/wtf/MathExtras.h"
58 #include "platform/wtf/PtrUtil.h" 58 #include "platform/wtf/PtrUtil.h"
59 #include "platform/wtf/Vector.h" 59 #include "platform/wtf/Vector.h"
60 #include "platform/wtf/text/Base64.h" 60 #include "platform/wtf/text/Base64.h"
61 #include "platform/wtf/text/WTFString.h" 61 #include "platform/wtf/text/WTFString.h"
62 #include "platform/wtf/typed_arrays/ArrayBufferContents.h" 62 #include "platform/wtf/typed_arrays/ArrayBufferContents.h"
63 #include "public/platform/Platform.h" 63 #include "public/platform/Platform.h"
64 #include "public/platform/WebGraphicsContext3DProvider.h" 64 #include "public/platform/WebGraphicsContext3DProvider.h"
65 #include "skia/ext/texture_handle.h" 65 #include "skia/ext/texture_handle.h"
66 #include "third_party/skia/include/core/SkSwizzle.h" 66 #include "third_party/skia/include/core/SkSwizzle.h"
67 #include "third_party/skia/include/encode/SkJpegEncoder.h"
67 #include "third_party/skia/include/gpu/GrContext.h" 68 #include "third_party/skia/include/gpu/GrContext.h"
68 #include "third_party/skia/include/gpu/gl/GrGLTypes.h" 69 #include "third_party/skia/include/gpu/gl/GrGLTypes.h"
69 70
70 namespace blink { 71 namespace blink {
71 72
72 std::unique_ptr<ImageBuffer> ImageBuffer::Create( 73 std::unique_ptr<ImageBuffer> ImageBuffer::Create(
73 std::unique_ptr<ImageBufferSurface> surface) { 74 std::unique_ptr<ImageBufferSurface> surface) {
74 if (!surface->IsValid()) 75 if (!surface->IsValid())
75 return nullptr; 76 return nullptr;
76 return WTF::WrapUnique(new ImageBuffer(std::move(surface))); 77 return WTF::WrapUnique(new ImageBuffer(std::move(surface)));
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after
537 538
538 void ImageBuffer::SetNeedsCompositingUpdate() { 539 void ImageBuffer::SetNeedsCompositingUpdate() {
539 if (client_) 540 if (client_)
540 client_->SetNeedsCompositingUpdate(); 541 client_->SetNeedsCompositingUpdate();
541 } 542 }
542 543
543 bool ImageDataBuffer::EncodeImage(const String& mime_type, 544 bool ImageDataBuffer::EncodeImage(const String& mime_type,
544 const double& quality, 545 const double& quality,
545 Vector<unsigned char>* encoded_image) const { 546 Vector<unsigned char>* encoded_image) const {
546 if (mime_type == "image/jpeg") { 547 if (mime_type == "image/jpeg") {
547 if (!JPEGImageEncoder::Encode(*this, quality, encoded_image)) 548 SkImageInfo info =
548 return false; 549 SkImageInfo::Make(Width(), Height(), kRGBA_8888_SkColorType,
549 } else if (mime_type == "image/webp") { 550 kUnpremul_SkAlphaType, nullptr);
551 size_t rowBytes =
552 Width() * SkColorTypeBytesPerPixel(kRGBA_8888_SkColorType);
553 SkPixmap src(info, Pixels(), rowBytes);
554
555 SkJpegEncoder::Options options;
556 options.fQuality = ImageEncoder::ComputeJpegQuality(quality);
557 options.fAlphaOption = SkJpegEncoder::AlphaOption::kBlendOnBlack;
558 options.fBlendBehavior = SkTransferFunctionBehavior::kIgnore;
559 if (options.fQuality == 100) {
560 options.fDownsample = SkJpegEncoder::Downsample::k444;
561 }
562 return ImageEncoder::Encode(encoded_image, src, options);
563 }
564
565 if (mime_type == "image/webp") {
550 int compression_quality = WEBPImageEncoder::kDefaultCompressionQuality; 566 int compression_quality = WEBPImageEncoder::kDefaultCompressionQuality;
551 if (quality >= 0.0 && quality <= 1.0) 567 if (quality >= 0.0 && quality <= 1.0)
552 compression_quality = static_cast<int>(quality * 100 + 0.5); 568 compression_quality = static_cast<int>(quality * 100 + 0.5);
553 if (!WEBPImageEncoder::Encode(*this, compression_quality, encoded_image)) 569 return WEBPImageEncoder::Encode(*this, compression_quality, encoded_image);
554 return false;
555 } else {
556 if (!PNGImageEncoder::Encode(*this, encoded_image))
557 return false;
558 DCHECK_EQ(mime_type, "image/png");
559 } 570 }
560 571
561 return true; 572 DCHECK_EQ(mime_type, "image/png");
573 return PNGImageEncoder::Encode(*this, encoded_image);
562 } 574 }
563 575
564 String ImageDataBuffer::ToDataURL(const String& mime_type, 576 String ImageDataBuffer::ToDataURL(const String& mime_type,
565 const double& quality) const { 577 const double& quality) const {
566 DCHECK(MIMETypeRegistry::IsSupportedImageMIMETypeForEncoding(mime_type)); 578 DCHECK(MIMETypeRegistry::IsSupportedImageMIMETypeForEncoding(mime_type));
567 579
568 Vector<unsigned char> result; 580 Vector<unsigned char> result;
569 if (!EncodeImage(mime_type, quality, &result)) 581 if (!EncodeImage(mime_type, quality, &result))
570 return "data:,"; 582 return "data:,";
571 583
572 return "data:" + mime_type + ";base64," + Base64Encode(result); 584 return "data:" + mime_type + ";base64," + Base64Encode(result);
573 } 585 }
574 586
575 } // namespace blink 587 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/BUILD.gn ('k') | third_party/WebKit/Source/platform/image-encoders/ImageEncoder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698