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

Side by Side Diff: skia/public/type_converters.cc

Issue 1906773003: Enable SkBitmap to be used by Mojo in Blink (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 | « skia/public/type_converters.h ('k') | skia/skia.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "skia/public/type_converters.h" 5 #include "skia/public/type_converters.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 #include <string.h> 9 #include <string.h>
10 10
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "third_party/skia/include/core/SkBitmap.h" 12 #include "third_party/skia/include/core/SkBitmap.h"
13 13
14 namespace mojo { 14 namespace mojo {
15 15
16 namespace { 16 namespace {
17 17
18 SkColorType MojoColorTypeToSk(skia::mojom::ColorType type) { 18 SkColorType MojoColorTypeToSk(blink::mojom::ColorType type) {
19 switch (type) { 19 switch (type) {
20 case skia::mojom::ColorType::UNKNOWN: 20 case blink::mojom::ColorType::UNKNOWN:
21 return kUnknown_SkColorType; 21 return kUnknown_SkColorType;
22 case skia::mojom::ColorType::ALPHA_8: 22 case blink::mojom::ColorType::ALPHA_8:
23 return kAlpha_8_SkColorType; 23 return kAlpha_8_SkColorType;
24 case skia::mojom::ColorType::RGB_565: 24 case blink::mojom::ColorType::RGB_565:
25 return kRGB_565_SkColorType; 25 return kRGB_565_SkColorType;
26 case skia::mojom::ColorType::ARGB_4444: 26 case blink::mojom::ColorType::ARGB_4444:
27 return kARGB_4444_SkColorType; 27 return kARGB_4444_SkColorType;
28 case skia::mojom::ColorType::RGBA_8888: 28 case blink::mojom::ColorType::RGBA_8888:
29 return kRGBA_8888_SkColorType; 29 return kRGBA_8888_SkColorType;
30 case skia::mojom::ColorType::BGRA_8888: 30 case blink::mojom::ColorType::BGRA_8888:
31 return kBGRA_8888_SkColorType; 31 return kBGRA_8888_SkColorType;
32 case skia::mojom::ColorType::INDEX_8: 32 case blink::mojom::ColorType::INDEX_8:
33 return kIndex_8_SkColorType; 33 return kIndex_8_SkColorType;
34 case skia::mojom::ColorType::GRAY_8: 34 case blink::mojom::ColorType::GRAY_8:
35 return kGray_8_SkColorType; 35 return kGray_8_SkColorType;
36 default: 36 default:
37 NOTREACHED(); 37 NOTREACHED();
38 } 38 }
39 return kUnknown_SkColorType; 39 return kUnknown_SkColorType;
40 } 40 }
41 41
42 SkAlphaType MojoAlphaTypeToSk(skia::mojom::AlphaType type) { 42 SkAlphaType MojoAlphaTypeToSk(blink::mojom::AlphaType type) {
43 switch (type) { 43 switch (type) {
44 case skia::mojom::AlphaType::UNKNOWN: 44 case blink::mojom::AlphaType::UNKNOWN:
45 return kUnknown_SkAlphaType; 45 return kUnknown_SkAlphaType;
46 case skia::mojom::AlphaType::ALPHA_TYPE_OPAQUE: 46 case blink::mojom::AlphaType::ALPHA_TYPE_OPAQUE:
47 return kOpaque_SkAlphaType; 47 return kOpaque_SkAlphaType;
48 case skia::mojom::AlphaType::PREMUL: 48 case blink::mojom::AlphaType::PREMUL:
49 return kPremul_SkAlphaType; 49 return kPremul_SkAlphaType;
50 case skia::mojom::AlphaType::UNPREMUL: 50 case blink::mojom::AlphaType::UNPREMUL:
51 return kUnpremul_SkAlphaType; 51 return kUnpremul_SkAlphaType;
52 default: 52 default:
53 NOTREACHED(); 53 NOTREACHED();
54 } 54 }
55 return kUnknown_SkAlphaType; 55 return kUnknown_SkAlphaType;
56 } 56 }
57 57
58 skia::mojom::ColorType SkColorTypeToMojo(SkColorType type) { 58 blink::mojom::ColorType SkColorTypeToMojo(SkColorType type) {
59 switch (type) { 59 switch (type) {
60 case kUnknown_SkColorType: 60 case kUnknown_SkColorType:
61 return skia::mojom::ColorType::UNKNOWN; 61 return blink::mojom::ColorType::UNKNOWN;
62 case kAlpha_8_SkColorType: 62 case kAlpha_8_SkColorType:
63 return skia::mojom::ColorType::ALPHA_8; 63 return blink::mojom::ColorType::ALPHA_8;
64 case kRGB_565_SkColorType: 64 case kRGB_565_SkColorType:
65 return skia::mojom::ColorType::RGB_565; 65 return blink::mojom::ColorType::RGB_565;
66 case kARGB_4444_SkColorType: 66 case kARGB_4444_SkColorType:
67 return skia::mojom::ColorType::ARGB_4444; 67 return blink::mojom::ColorType::ARGB_4444;
68 case kRGBA_8888_SkColorType: 68 case kRGBA_8888_SkColorType:
69 return skia::mojom::ColorType::RGBA_8888; 69 return blink::mojom::ColorType::RGBA_8888;
70 case kBGRA_8888_SkColorType: 70 case kBGRA_8888_SkColorType:
71 return skia::mojom::ColorType::BGRA_8888; 71 return blink::mojom::ColorType::BGRA_8888;
72 case kIndex_8_SkColorType: 72 case kIndex_8_SkColorType:
73 return skia::mojom::ColorType::INDEX_8; 73 return blink::mojom::ColorType::INDEX_8;
74 case kGray_8_SkColorType: 74 case kGray_8_SkColorType:
75 return skia::mojom::ColorType::GRAY_8; 75 return blink::mojom::ColorType::GRAY_8;
76 default: 76 default:
77 NOTREACHED(); 77 NOTREACHED();
78 } 78 }
79 return skia::mojom::ColorType::UNKNOWN; 79 return blink::mojom::ColorType::UNKNOWN;
80 } 80 }
81 81
82 skia::mojom::AlphaType SkAlphaTypeToMojo(SkAlphaType type) { 82 blink::mojom::AlphaType SkAlphaTypeToMojo(SkAlphaType type) {
83 switch (type) { 83 switch (type) {
84 case kUnknown_SkAlphaType: 84 case kUnknown_SkAlphaType:
85 return skia::mojom::AlphaType::UNKNOWN; 85 return blink::mojom::AlphaType::UNKNOWN;
86 case kOpaque_SkAlphaType: 86 case kOpaque_SkAlphaType:
87 return skia::mojom::AlphaType::ALPHA_TYPE_OPAQUE; 87 return blink::mojom::AlphaType::ALPHA_TYPE_OPAQUE;
88 case kPremul_SkAlphaType: 88 case kPremul_SkAlphaType:
89 return skia::mojom::AlphaType::PREMUL; 89 return blink::mojom::AlphaType::PREMUL;
90 case kUnpremul_SkAlphaType: 90 case kUnpremul_SkAlphaType:
91 return skia::mojom::AlphaType::UNPREMUL; 91 return blink::mojom::AlphaType::UNPREMUL;
92 default: 92 default:
93 NOTREACHED(); 93 NOTREACHED();
94 } 94 }
95 return skia::mojom::AlphaType::UNKNOWN; 95 return blink::mojom::AlphaType::UNKNOWN;
96 } 96 }
97 97
98 } // namespace 98 } // namespace
99 99
100 SkBitmap TypeConverter<SkBitmap, skia::mojom::BitmapPtr>::Convert( 100 SkBitmap TypeConverter<SkBitmap, blink::mojom::BitmapPtr>::Convert(
101 const skia::mojom::BitmapPtr& image) { 101 const blink::mojom::BitmapPtr& image) {
102 SkBitmap bitmap; 102 SkBitmap bitmap;
103 if (image.is_null()) 103 if (image.is_null())
104 return bitmap; 104 return bitmap;
105 if (!bitmap.tryAllocPixels(SkImageInfo::Make( 105 if (!bitmap.tryAllocPixels(SkImageInfo::Make(
106 image->width, image->height, MojoColorTypeToSk(image->color_type), 106 image->width, image->height, MojoColorTypeToSk(image->color_type),
107 MojoAlphaTypeToSk(image->alpha_type)))) { 107 MojoAlphaTypeToSk(image->alpha_type)))) {
108 return SkBitmap(); 108 return SkBitmap();
109 } 109 }
110 if (bitmap.getSize() != image->pixel_data.size() || !bitmap.getPixels()) { 110 if (bitmap.getSize() != image->pixel_data.size() || !bitmap.getPixels()) {
111 return SkBitmap(); 111 return SkBitmap();
112 } 112 }
113 113
114 memcpy(bitmap.getPixels(), &image->pixel_data[0], bitmap.getSize()); 114 memcpy(bitmap.getPixels(), &image->pixel_data[0], bitmap.getSize());
115 return bitmap; 115 return bitmap;
116 } 116 }
117 117
118 skia::mojom::BitmapPtr TypeConverter<skia::mojom::BitmapPtr, SkBitmap>::Convert( 118 blink::mojom::BitmapPtr TypeConverter<blink::mojom::BitmapPtr, SkBitmap>::Conver t(
119 const SkBitmap& bitmap) { 119 const SkBitmap& bitmap) {
120 if (bitmap.isNull()) 120 if (bitmap.isNull())
121 return nullptr; 121 return nullptr;
122 122
123 // NOTE: This code doesn't correctly serialize Index8 bitmaps. 123 // NOTE: This code doesn't correctly serialize Index8 bitmaps.
124 const SkImageInfo& info = bitmap.info(); 124 const SkImageInfo& info = bitmap.info();
125 DCHECK_NE(info.colorType(), kIndex_8_SkColorType); 125 DCHECK_NE(info.colorType(), kIndex_8_SkColorType);
126 if (info.colorType() == kIndex_8_SkColorType) 126 if (info.colorType() == kIndex_8_SkColorType)
127 return nullptr; 127 return nullptr;
128 skia::mojom::BitmapPtr result = skia::mojom::Bitmap::New(); 128 blink::mojom::BitmapPtr result = blink::mojom::Bitmap::New();
129 result->color_type = SkColorTypeToMojo(info.colorType()); 129 result->color_type = SkColorTypeToMojo(info.colorType());
130 result->alpha_type = SkAlphaTypeToMojo(info.alphaType()); 130 result->alpha_type = SkAlphaTypeToMojo(info.alphaType());
131 result->width = info.width(); 131 result->width = info.width();
132 result->height = info.height(); 132 result->height = info.height();
133 size_t size = bitmap.getSize(); 133 size_t size = bitmap.getSize();
134 size_t row_bytes = bitmap.rowBytes(); 134 size_t row_bytes = bitmap.rowBytes();
135 result->pixel_data = mojo::Array<uint8_t>::New(size); 135 result->pixel_data = mojo::Array<uint8_t>::New(size);
136 if (!bitmap.readPixels(info, &result->pixel_data[0], row_bytes, 0, 0)) 136 if (!bitmap.readPixels(info, &result->pixel_data[0], row_bytes, 0, 0))
137 return nullptr; 137 return nullptr;
138 return result; 138 return result;
139 } 139 }
140 140
141 } // namespace mojo 141 } // namespace mojo
OLDNEW
« no previous file with comments | « skia/public/type_converters.h ('k') | skia/skia.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698