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

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

Issue 1277893002: Let SkWebpCodec decode to 565 (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 4 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 | « no previous file | no next file » | 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 "SkWebpCodec.h" 8 #include "SkWebpCodec.h"
9 #include "SkTemplates.h" 9 #include "SkTemplates.h"
10 10
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 SkCodec* SkWebpCodec::NewFromStream(SkStream* stream) { 75 SkCodec* SkWebpCodec::NewFromStream(SkStream* stream) {
76 SkAutoTDelete<SkStream> streamDeleter(stream); 76 SkAutoTDelete<SkStream> streamDeleter(stream);
77 SkImageInfo info; 77 SkImageInfo info;
78 if (webp_parse_header(stream, &info)) { 78 if (webp_parse_header(stream, &info)) {
79 return SkNEW_ARGS(SkWebpCodec, (info, streamDeleter.detach())); 79 return SkNEW_ARGS(SkWebpCodec, (info, streamDeleter.detach()));
80 } 80 }
81 return NULL; 81 return NULL;
82 } 82 }
83 83
84 static bool conversion_possible(const SkImageInfo& dst, const SkImageInfo& src) { 84 static bool conversion_possible(const SkImageInfo& dst, const SkImageInfo& src) {
85 if (dst.profileType() != src.profileType()) {
86 return false;
87 }
85 switch (dst.colorType()) { 88 switch (dst.colorType()) {
86 // Both byte orders are supported. 89 // Both byte orders are supported.
87 case kBGRA_8888_SkColorType: 90 case kBGRA_8888_SkColorType:
88 case kRGBA_8888_SkColorType: 91 case kRGBA_8888_SkColorType:
89 break; 92 break;
93 case kRGB_565_SkColorType:
94 if (src.alphaType() == kOpaque_SkAlphaType
95 && dst.alphaType() == kOpaque_SkAlphaType)
96 {
msarett 2015/08/06 19:30:03 nit: I think the bracket should go on the previous
scroggo 2015/08/06 20:42:44 Maybe? In general the { does not get its own line,
97 return true;
98 }
90 default: 99 default:
91 return false; 100 return false;
92 } 101 }
93 if (dst.profileType() != src.profileType()) {
94 return false;
95 }
96 if (dst.alphaType() == src.alphaType()) { 102 if (dst.alphaType() == src.alphaType()) {
97 return true; 103 return true;
98 } 104 }
99 return kPremul_SkAlphaType == dst.alphaType() && 105 return kPremul_SkAlphaType == dst.alphaType() &&
100 kUnpremul_SkAlphaType == src.alphaType(); 106 kUnpremul_SkAlphaType == src.alphaType();
101 } 107 }
102 108
103 SkISize SkWebpCodec::onGetScaledDimensions(float desiredScale) const { 109 SkISize SkWebpCodec::onGetScaledDimensions(float desiredScale) const {
104 SkISize dim = this->getInfo().dimensions(); 110 SkISize dim = this->getInfo().dimensions();
105 // SkCodec treats zero dimensional images as errors, so the minimum size 111 // SkCodec treats zero dimensional images as errors, so the minimum size
106 // that we will recommend is 1x1. 112 // that we will recommend is 1x1.
107 dim.fWidth = SkTMax(1, SkScalarRoundToInt(desiredScale * dim.fWidth)); 113 dim.fWidth = SkTMax(1, SkScalarRoundToInt(desiredScale * dim.fWidth));
108 dim.fHeight = SkTMax(1, SkScalarRoundToInt(desiredScale * dim.fHeight)); 114 dim.fHeight = SkTMax(1, SkScalarRoundToInt(desiredScale * dim.fHeight));
109 return dim; 115 return dim;
110 } 116 }
111 117
112 static WEBP_CSP_MODE webp_decode_mode(SkColorType ct, bool premultiply) { 118 static WEBP_CSP_MODE webp_decode_mode(SkColorType ct, bool premultiply) {
113 switch (ct) { 119 switch (ct) {
114 case kBGRA_8888_SkColorType: 120 case kBGRA_8888_SkColorType:
115 return premultiply ? MODE_bgrA : MODE_BGRA; 121 return premultiply ? MODE_bgrA : MODE_BGRA;
116 case kRGBA_8888_SkColorType: 122 case kRGBA_8888_SkColorType:
117 return premultiply ? MODE_rgbA : MODE_RGBA; 123 return premultiply ? MODE_rgbA : MODE_RGBA;
124 case kRGB_565_SkColorType:
125 return MODE_RGB_565;
118 default: 126 default:
119 return MODE_LAST; 127 return MODE_LAST;
120 } 128 }
121 } 129 }
122 130
123 // The WebP decoding API allows us to incrementally pass chunks of bytes as we r eceive them to the 131 // The WebP decoding API allows us to incrementally pass chunks of bytes as we r eceive them to the
124 // decoder with WebPIAppend. In order to do so, we need to read chunks from the SkStream. This size 132 // decoder with WebPIAppend. In order to do so, we need to read chunks from the SkStream. This size
125 // is arbitrary. 133 // is arbitrary.
126 static const size_t BUFFER_SIZE = 4096; 134 static const size_t BUFFER_SIZE = 4096;
127 135
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 // Break out of the switch statement. Continue the loop. 253 // Break out of the switch statement. Continue the loop.
246 break; 254 break;
247 default: 255 default:
248 return kInvalidInput; 256 return kInvalidInput;
249 } 257 }
250 } 258 }
251 } 259 }
252 260
253 SkWebpCodec::SkWebpCodec(const SkImageInfo& info, SkStream* stream) 261 SkWebpCodec::SkWebpCodec(const SkImageInfo& info, SkStream* stream)
254 : INHERITED(info, stream) {} 262 : INHERITED(info, stream) {}
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698