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

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

Issue 919693002: Make SkImageGenerator::getPixels() return an enum. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 10 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') | src/images/SkDecodingImageGenerator.cpp » ('J')
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 27 matching lines...) Expand all
38 /** 38 /**
39 * On success, installs a discardable pixelref into destination, based on encod ed data. 39 * On success, installs a discardable pixelref into destination, based on encod ed data.
40 * Regardless of success or failure, the caller must still balance their owners hip of encoded. 40 * Regardless of success or failure, the caller must still balance their owners hip of encoded.
41 */ 41 */
42 SK_API bool SkInstallDiscardablePixelRef(SkData* encoded, SkBitmap* destination) ; 42 SK_API bool SkInstallDiscardablePixelRef(SkData* encoded, SkBitmap* destination) ;
43 43
44 /** 44 /**
45 * An interface that allows a purgeable PixelRef (such as a 45 * An interface that allows a purgeable PixelRef (such as a
46 * SkDiscardablePixelRef) to decode and re-decode an image as needed. 46 * SkDiscardablePixelRef) to decode and re-decode an image as needed.
47 */ 47 */
48 class SK_API SkImageGenerator { 48 class SK_API SkImageGenerator : public SkNoncopyable {
scroggo 2015/02/11 16:01:25 Hal, was this previously deliberately copyable?
49 public: 49 public:
50 /** 50 /**
51 * The PixelRef which takes ownership of this SkImageGenerator 51 * The PixelRef which takes ownership of this SkImageGenerator
52 * will call the image generator's destructor. 52 * will call the image generator's destructor.
53 */ 53 */
54 virtual ~SkImageGenerator() { } 54 virtual ~SkImageGenerator() { }
55 55
56 /** 56 /**
57 * Return a ref to the encoded (i.e. compressed) representation, 57 * Return a ref to the encoded (i.e. compressed) representation,
58 * of this data. 58 * of this data.
59 * 59 *
60 * If non-NULL is returned, the caller is responsible for calling 60 * If non-NULL is returned, the caller is responsible for calling
61 * unref() on the data when it is finished. 61 * unref() on the data when it is finished.
62 */ 62 */
63 SkData* refEncodedData() { return this->onRefEncodedData(); } 63 SkData* refEncodedData() { return this->onRefEncodedData(); }
64 64
65 /** 65 /**
66 * Return some information about the image, allowing the owner of 66 * Return some information about the image, allowing the owner of
67 * this object to allocate pixels. 67 * this object to allocate pixels.
68 * 68 *
69 * Repeated calls to this function should give the same results, 69 * Repeated calls to this function should give the same results,
70 * allowing the PixelRef to be immutable. 70 * allowing the PixelRef to be immutable.
71 * 71 *
72 * @return false if anything goes wrong. 72 * @return false if anything goes wrong.
73 */ 73 */
74 bool getInfo(SkImageInfo* info); 74 bool getInfo(SkImageInfo* info);
75 75
76 /** 76 /**
77 * Used to describe the result of a call to getPixels().
78 *
79 * Result is the union of possible results from subclasses.
80 */
81 enum Result {
82 /**
83 * The generator cannot convert to match the request.
hal.canary 2015/02/12 14:54:59 /** The generator cannot convert ColorType to mat
scroggo 2015/02/12 15:28:36 I don't think that's quite accurate. The AlphaType
84 */
85 kInvalidConversion,
86 /**
87 * The generator cannot scale to requested size.
88 */
89 kInvalidScale,
90 /**
91 * Parameters (besides info) are invalid. e.g. NULL pixels, rowBytes
92 * too small, etc.
93 */
94 kInvalidParameters,
scroggo 2015/02/11 16:01:25 We could have more specific enums (e.g. kNullPixel
95 /**
96 * The input did not contain a valid image.
97 */
98 kInvalidInput,
99 /**
100 * Fulfilling this request requires rewinding the input, which is not
101 * supported for this input.
102 */
103 kCouldNotRewind,
104 /**
105 * This method is not implemented by this generator.
106 */
107 kUnimplemented,
108 /**
109 * The input is incomplete. A partial image was generated.
110 */
111 kIncompleteInput,
scroggo 2015/02/11 16:01:25 For SkImageDecoder::Result, I made incomplete and
112 /**
113 * General return value for success.
114 */
115 kSuccess,
116 };
117
118 /**
77 * Decode into the given pixels, a block of memory of size at 119 * Decode into the given pixels, a block of memory of size at
78 * least (info.fHeight - 1) * rowBytes + (info.fWidth * 120 * least (info.fHeight - 1) * rowBytes + (info.fWidth *
79 * bytesPerPixel) 121 * bytesPerPixel)
80 * 122 *
81 * Repeated calls to this function should give the same results, 123 * Repeated calls to this function should give the same results,
82 * allowing the PixelRef to be immutable. 124 * allowing the PixelRef to be immutable.
83 * 125 *
84 * @param info A description of the format (config, size) 126 * @param info A description of the format (config, size)
85 * expected by the caller. This can simply be identical 127 * expected by the caller. This can simply be identical
86 * to the info returned by getInfo(). 128 * to the info returned by getInfo().
87 * 129 *
88 * This contract also allows the caller to specify 130 * This contract also allows the caller to specify
89 * different output-configs, which the implementation can 131 * different output-configs, which the implementation can
90 * decide to support or not. 132 * decide to support or not.
91 * 133 *
134 * A size that does not match getInfo() implies a request
135 * to scale.
djsollen 2015/02/12 14:22:15 add a little more info here that the generator can
scroggo 2015/02/12 15:28:36 Done.
136 *
92 * If info is kIndex8_SkColorType, then the caller must provide storage for up to 256 137 * If info is kIndex8_SkColorType, then the caller must provide storage for up to 256
93 * SkPMColor values in ctable. On success the generator must copy N colors into that storage, 138 * SkPMColor values in ctable. On success the generator must copy N colors into that storage,
94 * (where N is the logical number of table entries) and set ctableCount to N. 139 * (where N is the logical number of table entries) and set ctableCount to N.
95 * 140 *
96 * If info is not kIndex8_SkColorType, then the last two parameters may be NULL. If ctableCount 141 * If info is not kIndex8_SkColorType, then the last two parameters may be NULL. If ctableCount
97 * is not null, it will be set to 0. 142 * is not null, it will be set to 0.
98 * 143 *
99 * @return false if anything goes wrong or if the image info is 144 * @return false if anything goes wrong or if the image info is
100 * unsupported. 145 * unsupported.
101 */ 146 */
102 bool getPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, 147 Result getPixels(const SkImageInfo& info, void* pixels, size_t rowBytes,
reed1 2015/02/12 14:46:08 perhaps for a diff CL -- but I think it is more co
scroggo 2015/02/12 15:28:36 Interesting... I just looked at the the definition
103 SkPMColor ctable[], int* ctableCount); 148 SkPMColor ctable[], int* ctableCount);
104 149
105 /** 150 /**
106 * Simplified version of getPixels() that asserts that info is NOT kIndex8_ SkColorType. 151 * Simplified version of getPixels() that asserts that info is NOT kIndex8_ SkColorType.
107 */ 152 */
108 bool getPixels(const SkImageInfo& info, void* pixels, size_t rowBytes); 153 Result getPixels(const SkImageInfo& info, void* pixels, size_t rowBytes);
109 154
110 /** 155 /**
111 * If planes or rowBytes is NULL or if any entry in planes is NULL or if an y entry in rowBytes 156 * If planes or rowBytes is NULL or if any entry in planes is NULL or if an y entry in rowBytes
112 * is 0, this imagegenerator should output the sizes and return true if it can efficiently 157 * is 0, this imagegenerator should output the sizes and return true if it can efficiently
113 * return YUV planar data. If it cannot, it should return false. Note that either planes and 158 * return YUV planar data. If it cannot, it should return false. Note that either planes and
114 * rowBytes are both fully defined and non NULL/non 0 or they are both NULL or have NULL or 0 159 * rowBytes are both fully defined and non NULL/non 0 or they are both NULL or have NULL or 0
115 * entries only. Having only partial planes/rowBytes information is not sup ported. 160 * entries only. Having only partial planes/rowBytes information is not sup ported.
116 * 161 *
117 * If all planes and rowBytes entries are non NULL or non 0, then it should copy the 162 * If all planes and rowBytes entries are non NULL or non 0, then it should copy the
118 * associated YUV data into those planes of memory supplied by the caller. It should validate 163 * associated YUV data into those planes of memory supplied by the caller. It should validate
119 * that the sizes match what it expected. If the sizes do not match, it sho uld return false. 164 * that the sizes match what it expected. If the sizes do not match, it sho uld return false.
120 */ 165 */
121 bool getYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBytes[3], 166 bool getYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBytes[3],
122 SkYUVColorSpace* colorSpace); 167 SkYUVColorSpace* colorSpace);
123 168
124 /** 169 /**
125 * If the default image decoder system can interpret the specified (encoded ) data, then 170 * If the default image decoder system can interpret the specified (encoded ) data, then
126 * this returns a new ImageGenerator for it. Otherwise this returns NULL. E ither way 171 * this returns a new ImageGenerator for it. Otherwise this returns NULL. E ither way
127 * the caller is still responsible for managing their ownership of the data . 172 * the caller is still responsible for managing their ownership of the data .
128 */ 173 */
129 static SkImageGenerator* NewFromData(SkData*); 174 static SkImageGenerator* NewFromData(SkData*);
130 175
131 protected: 176 protected:
132 virtual SkData* onRefEncodedData(); 177 virtual SkData* onRefEncodedData();
133 virtual bool onGetInfo(SkImageInfo* info); 178 virtual bool onGetInfo(SkImageInfo* info);
134 virtual bool onGetPixels(const SkImageInfo& info, 179 virtual Result onGetPixels(const SkImageInfo& info,
135 void* pixels, size_t rowBytes, 180 void* pixels, size_t rowBytes,
136 SkPMColor ctable[], int* ctableCount); 181 SkPMColor ctable[], int* ctableCount);
137 virtual bool onGetYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBy tes[3]); 182 virtual bool onGetYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBy tes[3]);
138 virtual bool onGetYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBy tes[3], 183 virtual bool onGetYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBy tes[3],
139 SkYUVColorSpace* colorSpace); 184 SkYUVColorSpace* colorSpace);
140 }; 185 };
141 186
142 #endif // SkImageGenerator_DEFINED 187 #endif // SkImageGenerator_DEFINED
OLDNEW
« no previous file with comments | « no previous file | src/core/SkImageGenerator.cpp » ('j') | src/images/SkDecodingImageGenerator.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698