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

Side by Side Diff: Source/core/platform/graphics/ImageSource.h

Issue 15969015: Reland again "Decode GIF image frames on demand". (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: For landing Created 7 years, 6 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. All rights reserved. 2 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 73
74 enum GammaAndColorProfileOption { 74 enum GammaAndColorProfileOption {
75 GammaAndColorProfileApplied, 75 GammaAndColorProfileApplied,
76 GammaAndColorProfileIgnored 76 GammaAndColorProfileIgnored
77 }; 77 };
78 78
79 ImageSource(AlphaOption alphaOption = AlphaPremultiplied, GammaAndColorProfi leOption gammaAndColorProfileOption = GammaAndColorProfileApplied); 79 ImageSource(AlphaOption alphaOption = AlphaPremultiplied, GammaAndColorProfi leOption gammaAndColorProfileOption = GammaAndColorProfileApplied);
80 ~ImageSource(); 80 ~ImageSource();
81 81
82 // Tells the ImageSource that the Image no longer cares about decoded frame 82 // Tells the ImageSource that the Image no longer cares about decoded frame
83 // data -- at all (if |destroyAll| is true), or before frame 83 // data except for the specified frame. Callers may pass WTF::notFound to
84 // |clearBeforeFrame| (if |destroyAll| is false). The ImageSource should 84 // clear all frames.
85 // delete cached decoded data for these frames where possible to keep memory
86 // usage low. When |destroyAll| is true, the ImageSource should also reset
87 // any local state so that decoding can begin again.
88 // 85 //
89 // Implementations that delete less than what's specified above waste 86 // In response, the ImageSource should delete cached decoded data for other
90 // memory. Implementations that delete more may burn CPU re-decoding frames 87 // frames where possible to keep memory use low. The expectation is that in
91 // that could otherwise have been cached, or encounter errors if they're 88 // the future, the caller may call createFrameAtIndex() with an index larger
92 // asked to decode frames they can't decode due to the loss of previous 89 // than the one passed to this function, and the implementation may then
93 // decoded frames. 90 // make use of the preserved frame data here in decoding that frame.
91 // By contrast, callers who call this function and then later ask for an
92 // earlier frame may require more work to be done, e.g. redecoding the image
93 // from the beginning.
94 // 94 //
95 // Callers should not call clear(false, n) and subsequently call 95 // Implementations may elect to preserve more frames than the one requested
96 // createFrameAtIndex(m) with m < n, unless they first call clear(true). 96 // here if doing so is likely to save CPU time in the future, but will pay
97 // This ensures that stateful ImageSources/decoders will work properly. 97 // an increased memory cost to do so.
98 // 98 //
99 // The |data| and |allDataReceived| parameters should be supplied by callers 99 // Returns the number of bytes of frame data actually cleared.
100 // who set |destroyAll| to true if they wish to be able to continue using 100 size_t clearCacheExceptFrame(size_t);
101 // the ImageSource. This way implementations which choose to destroy their
102 // decoders in some cases can reconstruct them correctly.
103 void clear(bool destroyAll,
104 size_t clearBeforeFrame = 0,
105 SharedBuffer* data = 0,
106 bool allDataReceived = false);
107 101
108 bool initialized() const; 102 bool initialized() const;
109 103
110 void setData(SharedBuffer* data, bool allDataReceived); 104 void setData(SharedBuffer* data, bool allDataReceived);
111 String filenameExtension() const; 105 String filenameExtension() const;
112 106
113 bool isSizeAvailable(); 107 bool isSizeAvailable();
114 IntSize size(RespectImageOrientationEnum = DoNotRespectImageOrientation) con st; 108 IntSize size(RespectImageOrientationEnum = DoNotRespectImageOrientation) con st;
115 IntSize frameSizeAtIndex(size_t, RespectImageOrientationEnum = DoNotRespectI mageOrientation) const; 109 IntSize frameSizeAtIndex(size_t, RespectImageOrientationEnum = DoNotRespectI mageOrientation) const;
116 110
117 bool getHotSpot(IntPoint&) const; 111 bool getHotSpot(IntPoint&) const;
118 112
119 size_t bytesDecodedToDetermineProperties() const; 113 size_t bytesDecodedToDetermineProperties() const;
120 114
121 int repetitionCount(); 115 int repetitionCount();
122 116
123 size_t frameCount() const; 117 size_t frameCount() const;
124 118
125 // Callers should not call this after calling clear() with a higher index;
126 // see comments on clear() above.
127 PassNativeImagePtr createFrameAtIndex(size_t); 119 PassNativeImagePtr createFrameAtIndex(size_t);
128 120
129 float frameDurationAtIndex(size_t) const; 121 float frameDurationAtIndex(size_t) const;
130 bool frameHasAlphaAtIndex(size_t) const; // Whether or not the frame actuall y used any alpha. 122 bool frameHasAlphaAtIndex(size_t) const; // Whether or not the frame actuall y used any alpha.
131 bool frameIsCompleteAtIndex(size_t) const; // Whether or not the frame is fu lly received. 123 bool frameIsCompleteAtIndex(size_t) const; // Whether or not the frame is fu lly received.
132 ImageOrientation orientationAtIndex(size_t) const; // EXIF image orientation 124 ImageOrientation orientationAtIndex(size_t) const; // EXIF image orientation
133 125
134 // Return the number of bytes in the decoded frame. If the frame is not yet 126 // Return the number of bytes in the decoded frame. If the frame is not yet
135 // decoded then return 0. 127 // decoded then return 0.
136 unsigned frameBytesAtIndex(size_t) const; 128 unsigned frameBytesAtIndex(size_t) const;
137 129
138 void reportMemoryUsage(MemoryObjectInfo*) const; 130 void reportMemoryUsage(MemoryObjectInfo*) const;
139 131
140 private: 132 private:
141 OwnPtr<NativeImageDecoderPtr> m_decoder; 133 OwnPtr<NativeImageDecoderPtr> m_decoder;
142 134
143 AlphaOption m_alphaOption; 135 AlphaOption m_alphaOption;
144 GammaAndColorProfileOption m_gammaAndColorProfileOption; 136 GammaAndColorProfileOption m_gammaAndColorProfileOption;
145 }; 137 };
146 138
147 } 139 }
148 140
149 #endif 141 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698