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

Side by Side Diff: include/core/SkImageGenerator.h

Issue 1404923004: Proposal for SkImageGenerator::canDecodeAndScale API Base URL: https://chromium.googlesource.com/skia.git@master
Patch Set: Created 5 years, 2 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 | src/core/SkImageGenerator.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 2013 Google Inc. 2 * Copyright 2013 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 #ifndef SkImageGenerator_DEFINED 8 #ifndef SkImageGenerator_DEFINED
9 #define SkImageGenerator_DEFINED 9 #define SkImageGenerator_DEFINED
10 10
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 * 101 *
102 * If info is not kIndex8_SkColorType, then the last two parameters may be NULL. If ctableCount 102 * If info is not kIndex8_SkColorType, then the last two parameters may be NULL. If ctableCount
103 * is not null, it will be set to 0. 103 * is not null, it will be set to 0.
104 * 104 *
105 * @return true on success. 105 * @return true on success.
106 */ 106 */
107 bool getPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, 107 bool getPixels(const SkImageInfo& info, void* pixels, size_t rowBytes,
108 SkPMColor ctable[], int* ctableCount); 108 SkPMColor ctable[], int* ctableCount);
109 109
110 /** 110 /**
111 * Some generators can efficiently scale their contents and provide multipl e
112 * different pixel formats while decoding.
113 * If scaling is supported, the generator may only support certain scaled d imensions.
114 * Call this with the desired scale and color type, and it will return true if scaling
115 * and specified color type is supported.
116 *
117 * @param colorType A description of the color type expected by the caller.
118 * Returns true if it is the same as getInfo() or if decoder impleme ntations
119 * support this output.
120 *
121 * @param scale Vale larger than 0 and less or equal to 1.
122 *
123 * @param availableSize If specified colorType and scale on decode is suppo rted,
124 * this holds a value of equal or nearest larger possible decode out put.
125 * Can be NULL, in which case caller specifies no interest in gettin g the value.
126 *
127 * @param lowerSize If specified colorType and scale on decode is supported ,
128 * this holds a value of nearest lower possible decode output.
129 * Can be NULL, in which case caller specifies no interest in gettin g the value.
130 *
131 * Disclaimer: This method was added later to this class and it is possible
132 * that some of the SkImageGenerator implementations are not overriding it to
133 * precisely declare supported decoding. Purpose of this call is an attempt to prevent
134 * fruitless memory allocations (from within Skia) before calling getPixels - it is
135 * still OK to call getPixels even this method is not overridden in generat or implementation.
136 */
137 bool canDecodeAndScale(const SkColorType colorType, const SkScalar scale = S K_Scalar1,
scroggo 2015/10/15 16:26:32 Should this also specify an alpha type? Or should
138 SkISize *availableSize = nullptr, SkISize *lowerSize = nullptr);
scroggo 2015/10/15 16:26:32 I like that the sizes are named to distinguish wha
139
140 /**
111 * Simplified version of getPixels() that asserts that info is NOT kIndex8_ SkColorType and 141 * Simplified version of getPixels() that asserts that info is NOT kIndex8_ SkColorType and
112 * uses the default Options. 142 * uses the default Options.
113 */ 143 */
114 bool getPixels(const SkImageInfo& info, void* pixels, size_t rowBytes); 144 bool getPixels(const SkImageInfo& info, void* pixels, size_t rowBytes);
115 145
116 /** 146 /**
117 * If planes or rowBytes is NULL or if any entry in planes is NULL or if an y entry in rowBytes 147 * If planes or rowBytes is NULL or if any entry in planes is NULL or if an y entry in rowBytes
118 * is 0, this imagegenerator should output the sizes and return true if it can efficiently 148 * is 0, this imagegenerator should output the sizes and return true if it can efficiently
119 * return YUV planar data. If it cannot, it should return false. Note that either planes and 149 * return YUV planar data. If it cannot, it should return false. Note that either planes and
120 * rowBytes are both fully defined and non NULL/non 0 or they are both NULL or have NULL or 0 150 * rowBytes are both fully defined and non NULL/non 0 or they are both NULL or have NULL or 0
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 virtual bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBy tes, 221 virtual bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBy tes,
192 SkPMColor ctable[], int* ctableCount); 222 SkPMColor ctable[], int* ctableCount);
193 virtual bool onGetYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBy tes[3]); 223 virtual bool onGetYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBy tes[3]);
194 virtual bool onGetYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBy tes[3], 224 virtual bool onGetYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBy tes[3],
195 SkYUVColorSpace* colorSpace); 225 SkYUVColorSpace* colorSpace);
196 226
197 virtual GrTexture* onGenerateTexture(GrContext*, SkImageUsageType, const SkI Rect*) { 227 virtual GrTexture* onGenerateTexture(GrContext*, SkImageUsageType, const SkI Rect*) {
198 return nullptr; 228 return nullptr;
199 } 229 }
200 230
231 virtual bool onCanDecodeAndScale(const SkColorType colorType, const SkScalar scale,
232 SkISize *availableSize, SkISize *lowerSize);
233
201 bool tryGenerateBitmap(SkBitmap* bm, const SkImageInfo* optionalInfo, SkBitm ap::Allocator*); 234 bool tryGenerateBitmap(SkBitmap* bm, const SkImageInfo* optionalInfo, SkBitm ap::Allocator*);
202 235
203 private: 236 private:
204 const SkImageInfo fInfo; 237 const SkImageInfo fInfo;
205 const uint32_t fUniqueID; 238 const uint32_t fUniqueID;
206 239
207 // This is our default impl, which may be different on different platforms. 240 // This is our default impl, which may be different on different platforms.
208 // It is called from NewFromEncoded() after it has checked for any runtime f actory. 241 // It is called from NewFromEncoded() after it has checked for any runtime f actory.
209 // The SkData will never be NULL, as that will have been checked by NewFromE ncoded. 242 // The SkData will never be NULL, as that will have been checked by NewFromE ncoded.
210 static SkImageGenerator* NewFromEncodedImpl(SkData*); 243 static SkImageGenerator* NewFromEncodedImpl(SkData*);
211 }; 244 };
212 245
213 #endif // SkImageGenerator_DEFINED 246 #endif // SkImageGenerator_DEFINED
OLDNEW
« no previous file with comments | « no previous file | src/core/SkImageGenerator.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698