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

Side by Side Diff: skia/public/interfaces/bitmap_skbitmap_struct_traits.cc

Issue 2014013002: Add SkBitmap StructTraits for skia::mojo::Bitmap. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Sync and rebase. Created 4 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
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "skia/public/interfaces/bitmap_skbitmap_struct_traits.h"
6
7 namespace mojo {
8
9 namespace {
10
11 SkColorType MojoColorTypeToSk(skia::mojom::ColorType type) {
12 switch (type) {
13 case skia::mojom::ColorType::UNKNOWN:
14 return kUnknown_SkColorType;
15 case skia::mojom::ColorType::ALPHA_8:
16 return kAlpha_8_SkColorType;
17 case skia::mojom::ColorType::RGB_565:
18 return kRGB_565_SkColorType;
19 case skia::mojom::ColorType::ARGB_4444:
20 return kARGB_4444_SkColorType;
21 case skia::mojom::ColorType::RGBA_8888:
22 return kRGBA_8888_SkColorType;
23 case skia::mojom::ColorType::BGRA_8888:
24 return kBGRA_8888_SkColorType;
25 case skia::mojom::ColorType::INDEX_8:
26 return kIndex_8_SkColorType;
27 case skia::mojom::ColorType::GRAY_8:
28 return kGray_8_SkColorType;
29 }
30 NOTREACHED();
31 return kUnknown_SkColorType;
32 }
33
34 SkAlphaType MojoAlphaTypeToSk(skia::mojom::AlphaType type) {
35 switch (type) {
36 case skia::mojom::AlphaType::UNKNOWN:
37 return kUnknown_SkAlphaType;
38 case skia::mojom::AlphaType::ALPHA_TYPE_OPAQUE:
39 return kOpaque_SkAlphaType;
40 case skia::mojom::AlphaType::PREMUL:
41 return kPremul_SkAlphaType;
42 case skia::mojom::AlphaType::UNPREMUL:
43 return kUnpremul_SkAlphaType;
44 }
45 NOTREACHED();
46 return kUnknown_SkAlphaType;
47 }
48
49 SkColorProfileType MojoProfileTypeToSk(skia::mojom::ColorProfileType type) {
50 switch (type) {
51 case skia::mojom::ColorProfileType::LINEAR:
52 return kLinear_SkColorProfileType;
53 case skia::mojom::ColorProfileType::SRGB:
54 return kSRGB_SkColorProfileType;
55 }
56 NOTREACHED();
57 return kLinear_SkColorProfileType;
58 }
59
60 skia::mojom::ColorType SkColorTypeToMojo(SkColorType type) {
61 switch (type) {
62 case kUnknown_SkColorType:
63 return skia::mojom::ColorType::UNKNOWN;
64 case kAlpha_8_SkColorType:
65 return skia::mojom::ColorType::ALPHA_8;
66 case kRGB_565_SkColorType:
67 return skia::mojom::ColorType::RGB_565;
68 case kARGB_4444_SkColorType:
69 return skia::mojom::ColorType::ARGB_4444;
70 case kRGBA_8888_SkColorType:
71 return skia::mojom::ColorType::RGBA_8888;
72 case kBGRA_8888_SkColorType:
73 return skia::mojom::ColorType::BGRA_8888;
74 case kIndex_8_SkColorType:
75 return skia::mojom::ColorType::INDEX_8;
76 case kGray_8_SkColorType:
77 return skia::mojom::ColorType::GRAY_8;
78 case kRGBA_F16_SkColorType:
79 NOTREACHED();
80 return skia::mojom::ColorType::UNKNOWN;
81 }
82 NOTREACHED();
83 return skia::mojom::ColorType::UNKNOWN;
84 }
85
86 skia::mojom::AlphaType SkAlphaTypeToMojo(SkAlphaType type) {
87 switch (type) {
88 case kUnknown_SkAlphaType:
89 return skia::mojom::AlphaType::UNKNOWN;
90 case kOpaque_SkAlphaType:
91 return skia::mojom::AlphaType::ALPHA_TYPE_OPAQUE;
92 case kPremul_SkAlphaType:
93 return skia::mojom::AlphaType::PREMUL;
94 case kUnpremul_SkAlphaType:
95 return skia::mojom::AlphaType::UNPREMUL;
96 }
97 NOTREACHED();
98 return skia::mojom::AlphaType::UNKNOWN;
99 }
100
101 skia::mojom::ColorProfileType SkProfileTypeToMojo(SkColorProfileType type) {
102 switch (type) {
103 case kLinear_SkColorProfileType:
104 return skia::mojom::ColorProfileType::LINEAR;
105 case kSRGB_SkColorProfileType:
106 return skia::mojom::ColorProfileType::SRGB;
107 }
108 NOTREACHED();
109 return skia::mojom::ColorProfileType::LINEAR;
110 }
111
112 } // namespace
113
114 // static
115 size_t ArrayTraits<BitmapBuffer>::GetSize(const BitmapBuffer& b) {
116 return b.size;
117 }
118
119 // static
120 uint8_t* ArrayTraits<BitmapBuffer>::GetData(BitmapBuffer& b) {
121 return b.data;
122 }
123
124 // static
125 const uint8_t* ArrayTraits<BitmapBuffer>::GetData(const BitmapBuffer& b) {
126 return b.data;
127 }
128
129 // static
130 uint8_t& ArrayTraits<BitmapBuffer>::GetAt(BitmapBuffer& b, size_t i) {
131 return *(b.data + i);
132 }
133
134 // static
135 const uint8_t& ArrayTraits<BitmapBuffer>::GetAt(const BitmapBuffer& b,
136 size_t i) {
137 return *(b.data + i);
138 }
139
140 // static
141 void ArrayTraits<BitmapBuffer>::Resize(BitmapBuffer& b, size_t size) {
142 CHECK_EQ(size, b.size);
143 }
144
145 // static
146 bool StructTraits<skia::mojom::Bitmap, SkBitmap>::IsNull(const SkBitmap& b) {
147 return b.isNull();
148 }
149
150 // static
151 void StructTraits<skia::mojom::Bitmap, SkBitmap>::SetToNull(SkBitmap* b) {
152 b->reset();
153 }
154
155 // static
156 skia::mojom::ColorType StructTraits<skia::mojom::Bitmap, SkBitmap>::color_type(
157 const SkBitmap& b) {
158 return SkColorTypeToMojo(b.colorType());
159 }
160
161 // static
162 skia::mojom::AlphaType StructTraits<skia::mojom::Bitmap, SkBitmap>::alpha_type(
163 const SkBitmap& b) {
164 return SkAlphaTypeToMojo(b.alphaType());
165 }
166
167 // static
168 skia::mojom::ColorProfileType
169 StructTraits<skia::mojom::Bitmap, SkBitmap>::profile_type(const SkBitmap& b) {
170 return SkProfileTypeToMojo(b.profileType());
171 }
172
173 // static
174 uint32_t StructTraits<skia::mojom::Bitmap, SkBitmap>::width(const SkBitmap& b) {
175 return b.width() < 0 ? 0 : static_cast<uint32_t>(b.width());
176 }
177
178 // static
179 uint32_t StructTraits<skia::mojom::Bitmap, SkBitmap>::height(
180 const SkBitmap& b) {
181 return b.height() < 0 ? 0 : static_cast<uint32_t>(b.height());
182 }
183
184 // static
185 BitmapBuffer StructTraits<skia::mojom::Bitmap, SkBitmap>::pixel_data(
186 const SkBitmap& b) {
187 BitmapBuffer bitmap_buffer;
188 bitmap_buffer.data = static_cast<uint8_t*>(b.getPixels());
189 bitmap_buffer.size = b.getSize();
190 return bitmap_buffer;
191 }
192
193 // static
194 bool StructTraits<skia::mojom::Bitmap, SkBitmap>::Read(
195 skia::mojom::BitmapDataView data,
196 SkBitmap* b) {
197 // TODO: Ensure width and height are reasonable, eg. <= kMaxBitmapSize?
198 *b = SkBitmap();
199 if (!b->tryAllocPixels(SkImageInfo::Make(
200 data.width(), data.height(), MojoColorTypeToSk(data.color_type()),
201 MojoAlphaTypeToSk(data.alpha_type()),
202 MojoProfileTypeToSk(data.profile_type())))) {
203 return false;
204 }
205
206 // If the image is empty, return success after setting the image info.
207 if (data.width() == 0 || data.height() == 0)
208 return true;
209
210 SkAutoPixmapUnlock pixmap;
211 if (static_cast<uint32_t>(b->width()) != data.width() ||
212 static_cast<uint32_t>(b->height()) != data.height() ||
213 !b->requestLock(&pixmap) || !b->lockPixelsAreWritable() ||
214 !b->readyToDraw()) {
215 return false;
216 }
217
218 BitmapBuffer bitmap_buffer;
219 bitmap_buffer.data = static_cast<uint8_t*>(b->getPixels());
220 bitmap_buffer.size = b->getSize();
221 if (!data.ReadPixelData(&bitmap_buffer))
222 return false;
223
224 b->notifyPixelsChanged();
225 return true;
226 }
227
228 // static
229 void* StructTraits<skia::mojom::Bitmap, SkBitmap>::SetUpContext(
230 const SkBitmap& b) {
231 b.lockPixels();
232 return nullptr;
233 }
234
235 // static
236 void StructTraits<skia::mojom::Bitmap, SkBitmap>::TearDownContext(
237 const SkBitmap& b,
238 void* context) {
239 b.unlockPixels();
240 }
241
242 } // namespace mojo
OLDNEW
« no previous file with comments | « skia/public/interfaces/bitmap_skbitmap_struct_traits.h ('k') | skia/public/interfaces/skbitmap.typemap » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698