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

Side by Side Diff: third_party/WebKit/Source/platform/image-decoders/ImageDecoder.h

Issue 2454123002: Refactor image decoders to use 'colorSpace' instead of 'colorProfile' (Closed)
Patch Set: Created 4 years, 1 month 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) 2006 Apple Computer, Inc. All rights reserved. 2 * Copyright (C) 2006 Apple Computer, Inc. All rights reserved.
3 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. 3 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 // animated images. 203 // animated images.
204 virtual float frameDurationAtIndex(size_t) const { return 0; } 204 virtual float frameDurationAtIndex(size_t) const { return 0; }
205 205
206 // Number of bytes in the decoded frame. Returns 0 if the decoder doesn't 206 // Number of bytes in the decoded frame. Returns 0 if the decoder doesn't
207 // have this frame cached (either because it hasn't been decoded, or because 207 // have this frame cached (either because it hasn't been decoded, or because
208 // it has been cleared). 208 // it has been cleared).
209 virtual size_t frameBytesAtIndex(size_t) const; 209 virtual size_t frameBytesAtIndex(size_t) const;
210 210
211 ImageOrientation orientation() const { return m_orientation; } 211 ImageOrientation orientation() const { return m_orientation; }
212 212
213 bool ignoresGammaAndColorProfile() const { 213 bool ignoresColorSpace() const { return m_ignoreColorSpace; }
214 return m_ignoreGammaAndColorProfile;
215 }
216 static void setTargetColorProfile(const WebVector<char>&); 214 static void setTargetColorProfile(const WebVector<char>&);
217 215
218 // Note that hasColorProfile refers to the existence of a not-ignored 216 // Note that hasColorSpace refers to the existence of a not-ignored
219 // embedded color profile, and is independent of whether or not that 217 // embedded color space, and is independent of whether or not that
220 // profile's transform has been baked into the pixel values. 218 // space's transform has been baked into the pixel values.
221 bool hasColorProfile() const { return m_hasColorProfile; } 219 bool hasColorSpace() const { return m_srcSpace.get(); }
222 void setColorSpaceAndComputeTransform(const char* iccData, 220 void setColorSpaceAndComputeTransform(const char* iccData,
223 unsigned iccLength, 221 unsigned iccLength);
224 bool useSRGB); 222 void setColorSpaceAndComputeTransform(sk_sp<SkColorSpace> srcSpace);
225 223
226 // Transformation from encoded color space to target color space. 224 // Transformation from encoded color space to target color space.
227 SkColorSpaceXform* colorTransform() { 225 SkColorSpaceXform* colorTransform() {
228 return m_sourceToOutputDeviceColorTransform.get(); 226 return m_sourceToOutputDeviceColorTransform.get();
229 } 227 }
230 228
231 // Sets the "decode failure" flag. For caller convenience (since so 229 // Sets the "decode failure" flag. For caller convenience (since so
232 // many callers want to return false after calling this), returns false 230 // many callers want to return false after calling this), returns false
233 // to enable easy tailcalling. Subclasses may override this to also 231 // to enable easy tailcalling. Subclasses may override this to also
234 // clean up any local data. 232 // clean up any local data.
(...skipping 26 matching lines...) Expand all
261 259
262 virtual bool canDecodeToYUV() { return false; } 260 virtual bool canDecodeToYUV() { return false; }
263 virtual bool decodeToYUV() { return false; } 261 virtual bool decodeToYUV() { return false; }
264 virtual void setImagePlanes(std::unique_ptr<ImagePlanes>) {} 262 virtual void setImagePlanes(std::unique_ptr<ImagePlanes>) {}
265 263
266 protected: 264 protected:
267 ImageDecoder(AlphaOption alphaOption, 265 ImageDecoder(AlphaOption alphaOption,
268 GammaAndColorProfileOption colorOptions, 266 GammaAndColorProfileOption colorOptions,
269 size_t maxDecodedBytes) 267 size_t maxDecodedBytes)
270 : m_premultiplyAlpha(alphaOption == AlphaPremultiplied), 268 : m_premultiplyAlpha(alphaOption == AlphaPremultiplied),
271 m_ignoreGammaAndColorProfile(colorOptions == 269 m_ignoreColorSpace(colorOptions == GammaAndColorProfileIgnored),
272 GammaAndColorProfileIgnored),
273 m_maxDecodedBytes(maxDecodedBytes), 270 m_maxDecodedBytes(maxDecodedBytes),
274 m_purgeAggressively(false) {} 271 m_purgeAggressively(false) {}
275 272
276 // Calculates the most recent frame whose image data may be needed in 273 // Calculates the most recent frame whose image data may be needed in
277 // order to decode frame |frameIndex|, based on frame disposal methods 274 // order to decode frame |frameIndex|, based on frame disposal methods
278 // and |frameRectIsOpaque|, where |frameRectIsOpaque| signifies whether 275 // and |frameRectIsOpaque|, where |frameRectIsOpaque| signifies whether
279 // the rectangle of frame at |frameIndex| is known to be opaque. 276 // the rectangle of frame at |frameIndex| is known to be opaque.
280 // If no previous frame's data is required, returns WTF::kNotFound. 277 // If no previous frame's data is required, returns WTF::kNotFound.
281 // 278 //
282 // This function requires that the previous frame's 279 // This function requires that the previous frame's
(...skipping 18 matching lines...) Expand all
301 // returns that number. 298 // returns that number.
302 virtual size_t decodeFrameCount() { return 1; } 299 virtual size_t decodeFrameCount() { return 1; }
303 300
304 // Performs any additional setup of the requested frame after it has been 301 // Performs any additional setup of the requested frame after it has been
305 // initially created, e.g. setting a duration or disposal method. 302 // initially created, e.g. setting a duration or disposal method.
306 virtual void initializeNewFrame(size_t) {} 303 virtual void initializeNewFrame(size_t) {}
307 304
308 // Decodes the requested frame. 305 // Decodes the requested frame.
309 virtual void decode(size_t) = 0; 306 virtual void decode(size_t) = 0;
310 307
311 // Returns the embedded image color profile. 308 // Returns the embedded image color space.
312 const ImageFrame::ICCProfile& colorProfile() const { return m_colorProfile; } 309 sk_sp<SkColorSpace> colorSpace() const { return m_srcSpace; }
313 310
314 RefPtr<SegmentReader> m_data; // The encoded data. 311 RefPtr<SegmentReader> m_data; // The encoded data.
315 Vector<ImageFrame, 1> m_frameBufferCache; 312 Vector<ImageFrame, 1> m_frameBufferCache;
316 const bool m_premultiplyAlpha; 313 const bool m_premultiplyAlpha;
317 const bool m_ignoreGammaAndColorProfile; 314 const bool m_ignoreColorSpace;
318 ImageOrientation m_orientation; 315 ImageOrientation m_orientation;
319 316
320 // The maximum amount of memory a decoded image should require. Ideally, 317 // The maximum amount of memory a decoded image should require. Ideally,
321 // image decoders should downsample large images to fit under this limit 318 // image decoders should downsample large images to fit under this limit
322 // (and then return the downsampled size from decodedSize()). Ignoring 319 // (and then return the downsampled size from decodedSize()). Ignoring
323 // this limit can cause excessive memory use or even crashes on low- 320 // this limit can cause excessive memory use or even crashes on low-
324 // memory devices. 321 // memory devices.
325 const size_t m_maxDecodedBytes; 322 const size_t m_maxDecodedBytes;
326 323
327 // While decoding, we may learn that there are so many animation frames that 324 // While decoding, we may learn that there are so many animation frames that
(...skipping 14 matching lines...) Expand all
342 unsigned long long total_size = static_cast<unsigned long long>(width) * 339 unsigned long long total_size = static_cast<unsigned long long>(width) *
343 static_cast<unsigned long long>(height); 340 static_cast<unsigned long long>(height);
344 return total_size > ((1 << 29) - 1); 341 return total_size > ((1 << 29) - 1);
345 } 342 }
346 343
347 IntSize m_size; 344 IntSize m_size;
348 bool m_sizeAvailable = false; 345 bool m_sizeAvailable = false;
349 bool m_isAllDataReceived = false; 346 bool m_isAllDataReceived = false;
350 bool m_failed = false; 347 bool m_failed = false;
351 348
352 bool m_hasColorProfile = false; 349 sk_sp<SkColorSpace> m_srcSpace = nullptr;
353 ImageFrame::ICCProfile m_colorProfile;
354
355 std::unique_ptr<SkColorSpaceXform> m_sourceToOutputDeviceColorTransform; 350 std::unique_ptr<SkColorSpaceXform> m_sourceToOutputDeviceColorTransform;
356 }; 351 };
357 352
358 } // namespace blink 353 } // namespace blink
359 354
360 #endif 355 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698