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

Side by Side Diff: src/core/SkImageGenerator.cpp

Issue 863053002: new API for retrieving YUV data (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: update dox Created 5 years, 11 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 | « include/core/SkPixelRef.h ('k') | src/core/SkPixelRef.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 2014 Google Inc. 2 * Copyright 2014 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 #include "SkImageGenerator.h" 8 #include "SkImageGenerator.h"
9 9
10 bool SkImageGenerator::getInfo(SkImageInfo* info) { 10 bool SkImageGenerator::getInfo(SkImageInfo* info) {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 } 48 }
49 49
50 bool SkImageGenerator::getPixels(const SkImageInfo& info, void* pixels, size_t r owBytes) { 50 bool SkImageGenerator::getPixels(const SkImageInfo& info, void* pixels, size_t r owBytes) {
51 SkASSERT(kIndex_8_SkColorType != info.colorType()); 51 SkASSERT(kIndex_8_SkColorType != info.colorType());
52 if (kIndex_8_SkColorType == info.colorType()) { 52 if (kIndex_8_SkColorType == info.colorType()) {
53 return false; 53 return false;
54 } 54 }
55 return this->getPixels(info, pixels, rowBytes, NULL, NULL); 55 return this->getPixels(info, pixels, rowBytes, NULL, NULL);
56 } 56 }
57 57
58 #ifdef SK_SUPPORT_LEGACY_IMAGEGENERATOR_YUV_API
58 bool SkImageGenerator::getYUV8Planes(SkISize sizes[3], void* planes[3], size_t r owBytes[3], 59 bool SkImageGenerator::getYUV8Planes(SkISize sizes[3], void* planes[3], size_t r owBytes[3],
59 SkYUVColorSpace* colorSpace) { 60 SkYUVColorSpace* colorSpace) {
60 #ifdef SK_DEBUG 61 #ifdef SK_DEBUG
61 // In all cases, we need the sizes array 62 // In all cases, we need the sizes array
62 SkASSERT(sizes); 63 SkASSERT(sizes);
63 64
64 bool isValidWithPlanes = (planes) && (rowBytes) && 65 bool isValidWithPlanes = (planes) && (rowBytes) &&
65 ((planes[0]) && (planes[1]) && (planes[2]) && 66 ((planes[0]) && (planes[1]) && (planes[2]) &&
66 (0 != rowBytes[0]) && (0 != rowBytes[1]) && (0 != rowBytes[2])); 67 (0 != rowBytes[0]) && (0 != rowBytes[1]) && (0 != rowBytes[2]));
67 bool isValidWithoutPlanes = 68 bool isValidWithoutPlanes =
(...skipping 15 matching lines...) Expand all
83 (sizes[1].fHeight >= 0) && 84 (sizes[1].fHeight >= 0) &&
84 (sizes[2].fWidth >= 0) && 85 (sizes[2].fWidth >= 0) &&
85 (sizes[2].fHeight >= 0) && 86 (sizes[2].fHeight >= 0) &&
86 (rowBytes[0] >= (size_t)sizes[0].fWidth) && 87 (rowBytes[0] >= (size_t)sizes[0].fWidth) &&
87 (rowBytes[1] >= (size_t)sizes[1].fWidth) && 88 (rowBytes[1] >= (size_t)sizes[1].fWidth) &&
88 (rowBytes[2] >= (size_t)sizes[2].fWidth))); 89 (rowBytes[2] >= (size_t)sizes[2].fWidth)));
89 #endif 90 #endif
90 91
91 return this->onGetYUV8Planes(sizes, planes, rowBytes, colorSpace); 92 return this->onGetYUV8Planes(sizes, planes, rowBytes, colorSpace);
92 } 93 }
94 #endif
93 95
94 bool SkImageGenerator::onGetYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBytes[3]) { 96 bool SkImageGenerator::queryYUV8(SkISize logicalSizes[3], SkISize optimalAllocat ionSizes[3]) {
95 return false; 97 SkISize logicalStorage[3], optimalStorage[3];
98 if (!logicalSizes) {
99 logicalSizes = logicalStorage;
100 }
101 if (!optimalAllocationSizes) {
102 optimalAllocationSizes = optimalStorage;
103 }
104 return this->onQueryYUV8(logicalSizes, optimalAllocationSizes);
96 } 105 }
97 106
98 bool SkImageGenerator::onGetYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBytes[3], 107 bool SkImageGenerator::getYUV8(const SkISize allocationSizes[3], void* planes[3] ,
99 SkYUVColorSpace* colorSpace) { 108 SkYUVColorSpace* colorSpace) {
100 // In order to maintain compatibility with clients that implemented the orig inal 109 SkASSERT(allocationSizes);
101 // onGetYUV8Planes interface, we assume that the color space is JPEG. 110 SkASSERT(planes);
102 // TODO(rileya): remove this and the old onGetYUV8Planes once clients switch over to 111
103 // the new interface. 112 for (int i = 0; i < 3; ++i) {
104 if (colorSpace) { 113 if (allocationSizes[i].width() <= 0 || allocationSizes[i].height() <= 0) {
105 *colorSpace = kJPEG_SkYUVColorSpace; 114 return false;
115 }
116 if (!planes[i]) {
117 return false;
118 }
106 } 119 }
107 return this->onGetYUV8Planes(sizes, planes, rowBytes); 120
121 SkYUVColorSpace colorSpaceStorage;
122 if (!colorSpace) {
123 colorSpace = &colorSpaceStorage;
124 }
125 return this->onGetYUV8(allocationSizes, planes, colorSpace);
108 } 126 }
109 127
110 //////////////////////////////////////////////////////////////////////////////// ///////////// 128 //////////////////////////////////////////////////////////////////////////////// /////////////
111 129
112 SkData* SkImageGenerator::onRefEncodedData() { 130 SkData* SkImageGenerator::onRefEncodedData() {
113 return NULL; 131 return NULL;
114 } 132 }
115 133
116 bool SkImageGenerator::onGetInfo(SkImageInfo*) { 134 bool SkImageGenerator::onGetInfo(SkImageInfo*) {
117 return false; 135 return false;
118 } 136 }
119 137
120 bool SkImageGenerator::onGetPixels(const SkImageInfo&, void*, size_t, SkPMColor* , int*) { 138 bool SkImageGenerator::onGetPixels(const SkImageInfo&, void*, size_t, SkPMColor* , int*) {
121 return false; 139 return false;
122 } 140 }
141
142 bool SkImageGenerator::onQueryYUV8(SkISize logicalSizes[3], SkISize optimalAlloc ationSizes[3]) {
143 #ifdef SK_SUPPORT_LEGACY_IMAGEGENERATOR_YUV_API
144 if (this->getYUV8Planes(logicalSizes, NULL, NULL, NULL)) {
145 memcpy(optimalAllocationSizes, logicalSizes, sizeof(SkISize) * 3);
146 return true;
147 }
148 #endif
149 return false;
150 }
151
152 bool SkImageGenerator::onGetYUV8(const SkISize allocationSizes[3], void* planes[ 3],
153 SkYUVColorSpace* colorSpace) {
154 #ifdef SK_SUPPORT_LEGACY_IMAGEGENERATOR_YUV_API
155 SkISize tmpSizes[3];
156 size_t rowBytes[3];
157 for (int i = 0; i < 3; ++i) {
158 tmpSizes[i] = allocationSizes[i];
159 rowBytes[i] = allocationSizes[i].width();
160 }
161 if (this->getYUV8Planes(tmpSizes, planes, rowBytes, colorSpace)) {
162 return true;
163 }
164 #endif
165 return false;
166 }
167
168 #ifdef SK_SUPPORT_LEGACY_IMAGEGENERATOR_YUV_API
169 bool SkImageGenerator::onGetYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBytes[3]) {
170 return false;
171 }
172
173 bool SkImageGenerator::onGetYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBytes[3],
174 SkYUVColorSpace* colorSpace) {
175 // In order to maintain compatibility with clients that implemented the orig inal
176 // onGetYUV8Planes interface, we assume that the color space is JPEG.
177 // TODO(rileya): remove this and the old onGetYUV8Planes once clients switch over to
178 // the new interface.
179 if (colorSpace) {
180 *colorSpace = kJPEG_SkYUVColorSpace;
181 }
182 return this->onGetYUV8Planes(sizes, planes, rowBytes);
183 }
184 #endif
185
OLDNEW
« no previous file with comments | « include/core/SkPixelRef.h ('k') | src/core/SkPixelRef.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698