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

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

Issue 13980003: Add animation support for WebP images (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Create and use zeroFillPixelData() Created 7 years, 5 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 | « Source/core/core.gypi ('k') | Source/core/platform/image-decoders/ImageDecoder.cpp » ('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 (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 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 *dest = SkPackARGB32NoCheck(a, r, g, b); 208 *dest = SkPackARGB32NoCheck(a, r, g, b);
209 } 209 }
210 210
211 inline void setRGBARaw(PixelData* dest, unsigned r, unsigned g, unsigned b, unsigned a) 211 inline void setRGBARaw(PixelData* dest, unsigned r, unsigned g, unsigned b, unsigned a)
212 { 212 {
213 ASSERT(!m_premultiplyAlpha); 213 ASSERT(!m_premultiplyAlpha);
214 214
215 *dest = SkPackARGB32NoCheck(a, r, g, b); 215 *dest = SkPackARGB32NoCheck(a, r, g, b);
216 } 216 }
217 217
218 void zeroFillFrameRect(const IntRect&);
219
218 private: 220 private:
219 int width() const 221 int width() const
220 { 222 {
221 return m_bitmap->bitmap().width(); 223 return m_bitmap->bitmap().width();
222 } 224 }
223 225
224 int height() const 226 int height() const
225 { 227 {
226 return m_bitmap->bitmap().height(); 228 return m_bitmap->bitmap().height();
227 } 229 }
228 230
229 RefPtr<NativeImageSkia> m_bitmap; 231 RefPtr<NativeImageSkia> m_bitmap;
230 SkBitmap::Allocator* m_allocator; 232 SkBitmap::Allocator* m_allocator;
231 bool m_hasAlpha; 233 bool m_hasAlpha;
232 IntRect m_originalFrameRect; // This will always just be the entire 234 // This will always just be the entire buffer except for GIF or WebP
233 // buffer except for GIF frames whose 235 // frames whose original rect was smaller than the overall image size.
234 // original rect was smaller than the 236 IntRect m_originalFrameRect;
235 // overall image size.
236 FrameStatus m_status; 237 FrameStatus m_status;
237 unsigned m_duration; 238 unsigned m_duration;
238 FrameDisposalMethod m_disposalMethod; 239 FrameDisposalMethod m_disposalMethod;
239 bool m_premultiplyAlpha; 240 bool m_premultiplyAlpha;
240 241
241 // The frame that must be decoded before this frame can be decoded. 242 // The frame that must be decoded before this frame can be decoded.
242 // WTF::notFound if this frame doesn't require any previous frame. 243 // WTF::notFound if this frame doesn't require any previous frame.
243 // This is used by ImageDecoder::clearCacheExceptFrame(), and will never 244 // This is used by ImageDecoder::clearCacheExceptFrame(), and will never
244 // be read for image formats that do not have multiple frames. 245 // be read for image formats that do not have multiple frames.
245 size_t m_requiredPreviousFrameIndex; 246 size_t m_requiredPreviousFrameIndex;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 // decode call out and use it here. 285 // decode call out and use it here.
285 virtual bool isSizeAvailable() 286 virtual bool isSizeAvailable()
286 { 287 {
287 return !m_failed && m_sizeAvailable; 288 return !m_failed && m_sizeAvailable;
288 } 289 }
289 290
290 virtual IntSize size() const { return m_size; } 291 virtual IntSize size() const { return m_size; }
291 292
292 // This will only differ from size() for ICO (where each frame is a 293 // This will only differ from size() for ICO (where each frame is a
293 // different icon) or other formats where different frames are different 294 // different icon) or other formats where different frames are different
294 // sizes. This does NOT differ from size() for GIF, since decoding GIFs 295 // sizes. This does NOT differ from size() for GIF or WebP, since
295 // composites any smaller frames against previous frames to create full- 296 // decoding GIF or WebP composites any smaller frames against previous
296 // size frames. 297 // frames to create full-size frames.
297 virtual IntSize frameSizeAtIndex(size_t) const 298 virtual IntSize frameSizeAtIndex(size_t) const
298 { 299 {
299 return size(); 300 return size();
300 } 301 }
301 302
302 // Returns whether the size is legal (i.e. not going to result in 303 // Returns whether the size is legal (i.e. not going to result in
303 // overflow elsewhere). If not, marks decoding as failed. 304 // overflow elsewhere). If not, marks decoding as failed.
304 virtual bool setSize(unsigned width, unsigned height) 305 virtual bool setSize(unsigned width, unsigned height)
305 { 306 {
306 if (isOverSize(width, height)) 307 if (isOverSize(width, height))
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 // to enable easy tailcalling. Subclasses may override this to also 398 // to enable easy tailcalling. Subclasses may override this to also
398 // clean up any local data. 399 // clean up any local data.
399 virtual bool setFailed() 400 virtual bool setFailed()
400 { 401 {
401 m_failed = true; 402 m_failed = true;
402 return false; 403 return false;
403 } 404 }
404 405
405 bool failed() const { return m_failed; } 406 bool failed() const { return m_failed; }
406 407
407 // Clears decoded pixel data from all frames except the provided frame, 408 // Clears decoded pixel data from all frames except the provided frame.
408 // unless that frame has status FrameEmpty, in which case we instead 409 // Callers may pass WTF::notFound to clear all frames.
409 // preserve the most recent frame whose data is required in order to 410 // Note: If |m_frameBufferCache| contains only one frame, it won't be cl eared.
410 // decode this frame. Callers may pass WTF::notFound to clear all frames .
411 //
412 // Returns the number of bytes of frame data actually cleared. 411 // Returns the number of bytes of frame data actually cleared.
413 size_t clearCacheExceptFrame(size_t); 412 virtual size_t clearCacheExceptFrame(size_t);
414 413
415 // If the image has a cursor hot-spot, stores it in the argument 414 // If the image has a cursor hot-spot, stores it in the argument
416 // and returns true. Otherwise returns false. 415 // and returns true. Otherwise returns false.
417 virtual bool hotSpot(IntPoint&) const { return false; } 416 virtual bool hotSpot(IntPoint&) const { return false; }
418 417
419 virtual void reportMemoryUsage(MemoryObjectInfo*) const; 418 virtual void reportMemoryUsage(MemoryObjectInfo*) const;
420 419
421 virtual void setMemoryAllocator(SkBitmap::Allocator* allocator) 420 virtual void setMemoryAllocator(SkBitmap::Allocator* allocator)
422 { 421 {
423 // FIXME: this doesn't work for images with multiple frames. 422 // FIXME: this doesn't work for images with multiple frames.
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 463
465 IntSize m_size; 464 IntSize m_size;
466 bool m_sizeAvailable; 465 bool m_sizeAvailable;
467 bool m_isAllDataReceived; 466 bool m_isAllDataReceived;
468 bool m_failed; 467 bool m_failed;
469 }; 468 };
470 469
471 } // namespace WebCore 470 } // namespace WebCore
472 471
473 #endif 472 #endif
OLDNEW
« no previous file with comments | « Source/core/core.gypi ('k') | Source/core/platform/image-decoders/ImageDecoder.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698