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

Side by Side Diff: ui/gfx/buffer_format_util.cc

Issue 2376293003: gpu: support RG_88 GpuMemoryBuffer (Closed)
Patch Set: resolve hubbe's review Created 4 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 | « gpu/ipc/client/gpu_memory_buffer_impl_shared_memory.cc ('k') | ui/gfx/buffer_types.h » ('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 "ui/gfx/buffer_format_util.h" 5 #include "ui/gfx/buffer_format_util.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/macros.h" 8 #include "base/macros.h"
9 #include "base/numerics/safe_math.h" 9 #include "base/numerics/safe_math.h"
10 10
11 namespace gfx { 11 namespace gfx {
12 namespace { 12 namespace {
13 13
14 const BufferFormat kBufferFormats[] = { 14 const BufferFormat kBufferFormats[] = {BufferFormat::ATC,
15 BufferFormat::ATC, BufferFormat::ATCIA, 15 BufferFormat::ATCIA,
16 BufferFormat::DXT1, BufferFormat::DXT5, 16 BufferFormat::DXT1,
17 BufferFormat::ETC1, BufferFormat::R_8, 17 BufferFormat::DXT5,
18 BufferFormat::BGR_565, BufferFormat::RGBA_4444, 18 BufferFormat::ETC1,
19 BufferFormat::RGBX_8888, BufferFormat::RGBA_8888, 19 BufferFormat::R_8,
20 BufferFormat::BGRX_8888, BufferFormat::BGRA_8888, 20 BufferFormat::RG_88,
21 BufferFormat::UYVY_422, BufferFormat::YUV_420_BIPLANAR, 21 BufferFormat::BGR_565,
22 BufferFormat::YVU_420}; 22 BufferFormat::RGBA_4444,
23 BufferFormat::RGBX_8888,
24 BufferFormat::RGBA_8888,
25 BufferFormat::BGRX_8888,
26 BufferFormat::BGRA_8888,
27 BufferFormat::UYVY_422,
28 BufferFormat::YUV_420_BIPLANAR,
29 BufferFormat::YVU_420};
23 30
24 static_assert(arraysize(kBufferFormats) == 31 static_assert(arraysize(kBufferFormats) ==
25 (static_cast<int>(BufferFormat::LAST) + 1), 32 (static_cast<int>(BufferFormat::LAST) + 1),
26 "BufferFormat::LAST must be last value of kBufferFormats"); 33 "BufferFormat::LAST must be last value of kBufferFormats");
27 34
28 35
29 bool RowSizeForBufferFormatChecked( 36 bool RowSizeForBufferFormatChecked(
30 size_t width, BufferFormat format, size_t plane, size_t* size_in_bytes) { 37 size_t width, BufferFormat format, size_t plane, size_t* size_in_bytes) {
31 base::CheckedNumeric<size_t> checked_size = width; 38 base::CheckedNumeric<size_t> checked_size = width;
32 switch (format) { 39 switch (format) {
33 case BufferFormat::ATCIA: 40 case BufferFormat::ATCIA:
34 case BufferFormat::DXT5: 41 case BufferFormat::DXT5:
35 DCHECK_EQ(0u, plane); 42 DCHECK_EQ(0u, plane);
36 *size_in_bytes = width; 43 *size_in_bytes = width;
37 return true; 44 return true;
38 case BufferFormat::ATC: 45 case BufferFormat::ATC:
39 case BufferFormat::DXT1: 46 case BufferFormat::DXT1:
40 case BufferFormat::ETC1: 47 case BufferFormat::ETC1:
41 DCHECK_EQ(0u, plane); 48 DCHECK_EQ(0u, plane);
42 DCHECK_EQ(0u, width % 2); 49 DCHECK_EQ(0u, width % 2);
43 *size_in_bytes = width / 2; 50 *size_in_bytes = width / 2;
44 return true; 51 return true;
45 case BufferFormat::R_8: 52 case BufferFormat::R_8:
46 checked_size += 3; 53 checked_size += 3;
47 if (!checked_size.IsValid()) 54 if (!checked_size.IsValid())
48 return false; 55 return false;
49 *size_in_bytes = checked_size.ValueOrDie() & ~0x3; 56 *size_in_bytes = checked_size.ValueOrDie() & ~0x3;
50 return true; 57 return true;
58 case BufferFormat::RG_88:
51 case BufferFormat::BGR_565: 59 case BufferFormat::BGR_565:
52 case BufferFormat::RGBA_4444: 60 case BufferFormat::RGBA_4444:
53 case BufferFormat::UYVY_422: 61 case BufferFormat::UYVY_422:
54 checked_size *= 2; 62 checked_size *= 2;
55 if (!checked_size.IsValid()) 63 if (!checked_size.IsValid())
56 return false; 64 return false;
57 *size_in_bytes = checked_size.ValueOrDie(); 65 *size_in_bytes = checked_size.ValueOrDie();
58 return true; 66 return true;
59 case BufferFormat::BGRX_8888: 67 case BufferFormat::BGRX_8888:
60 case BufferFormat::RGBX_8888: 68 case BufferFormat::RGBX_8888:
(...skipping 25 matching lines...) Expand all
86 } 94 }
87 95
88 size_t NumberOfPlanesForBufferFormat(BufferFormat format) { 96 size_t NumberOfPlanesForBufferFormat(BufferFormat format) {
89 switch (format) { 97 switch (format) {
90 case BufferFormat::ATC: 98 case BufferFormat::ATC:
91 case BufferFormat::ATCIA: 99 case BufferFormat::ATCIA:
92 case BufferFormat::DXT1: 100 case BufferFormat::DXT1:
93 case BufferFormat::DXT5: 101 case BufferFormat::DXT5:
94 case BufferFormat::ETC1: 102 case BufferFormat::ETC1:
95 case BufferFormat::R_8: 103 case BufferFormat::R_8:
104 case BufferFormat::RG_88:
96 case BufferFormat::BGR_565: 105 case BufferFormat::BGR_565:
97 case BufferFormat::RGBA_4444: 106 case BufferFormat::RGBA_4444:
98 case BufferFormat::RGBX_8888: 107 case BufferFormat::RGBX_8888:
99 case BufferFormat::RGBA_8888: 108 case BufferFormat::RGBA_8888:
100 case BufferFormat::BGRX_8888: 109 case BufferFormat::BGRX_8888:
101 case BufferFormat::BGRA_8888: 110 case BufferFormat::BGRA_8888:
102 case BufferFormat::UYVY_422: 111 case BufferFormat::UYVY_422:
103 return 1; 112 return 1;
104 case BufferFormat::YUV_420_BIPLANAR: 113 case BufferFormat::YUV_420_BIPLANAR:
105 return 2; 114 return 2;
106 case BufferFormat::YVU_420: 115 case BufferFormat::YVU_420:
107 return 3; 116 return 3;
108 } 117 }
109 NOTREACHED(); 118 NOTREACHED();
110 return 0; 119 return 0;
111 } 120 }
112 121
113 size_t SubsamplingFactorForBufferFormat(BufferFormat format, size_t plane) { 122 size_t SubsamplingFactorForBufferFormat(BufferFormat format, size_t plane) {
114 switch (format) { 123 switch (format) {
115 case BufferFormat::ATC: 124 case BufferFormat::ATC:
116 case BufferFormat::ATCIA: 125 case BufferFormat::ATCIA:
117 case BufferFormat::DXT1: 126 case BufferFormat::DXT1:
118 case BufferFormat::DXT5: 127 case BufferFormat::DXT5:
119 case BufferFormat::ETC1: 128 case BufferFormat::ETC1:
120 case BufferFormat::R_8: 129 case BufferFormat::R_8:
130 case BufferFormat::RG_88:
121 case BufferFormat::BGR_565: 131 case BufferFormat::BGR_565:
122 case BufferFormat::RGBA_4444: 132 case BufferFormat::RGBA_4444:
123 case BufferFormat::RGBX_8888: 133 case BufferFormat::RGBX_8888:
124 case BufferFormat::RGBA_8888: 134 case BufferFormat::RGBA_8888:
125 case BufferFormat::BGRX_8888: 135 case BufferFormat::BGRX_8888:
126 case BufferFormat::BGRA_8888: 136 case BufferFormat::BGRA_8888:
127 case BufferFormat::UYVY_422: 137 case BufferFormat::UYVY_422:
128 return 1; 138 return 1;
129 case BufferFormat::YVU_420: { 139 case BufferFormat::YVU_420: {
130 static size_t factor[] = {1, 2, 2}; 140 static size_t factor[] = {1, 2, 2};
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 BufferFormat format, 191 BufferFormat format,
182 size_t plane) { 192 size_t plane) {
183 DCHECK_LT(plane, gfx::NumberOfPlanesForBufferFormat(format)); 193 DCHECK_LT(plane, gfx::NumberOfPlanesForBufferFormat(format));
184 switch (format) { 194 switch (format) {
185 case BufferFormat::ATC: 195 case BufferFormat::ATC:
186 case BufferFormat::ATCIA: 196 case BufferFormat::ATCIA:
187 case BufferFormat::DXT1: 197 case BufferFormat::DXT1:
188 case BufferFormat::DXT5: 198 case BufferFormat::DXT5:
189 case BufferFormat::ETC1: 199 case BufferFormat::ETC1:
190 case BufferFormat::R_8: 200 case BufferFormat::R_8:
201 case BufferFormat::RG_88:
191 case BufferFormat::BGR_565: 202 case BufferFormat::BGR_565:
192 case BufferFormat::RGBA_4444: 203 case BufferFormat::RGBA_4444:
193 case BufferFormat::RGBX_8888: 204 case BufferFormat::RGBX_8888:
194 case BufferFormat::RGBA_8888: 205 case BufferFormat::RGBA_8888:
195 case BufferFormat::BGRX_8888: 206 case BufferFormat::BGRX_8888:
196 case BufferFormat::BGRA_8888: 207 case BufferFormat::BGRA_8888:
197 case BufferFormat::UYVY_422: 208 case BufferFormat::UYVY_422:
198 return 0; 209 return 0;
199 case BufferFormat::YVU_420: { 210 case BufferFormat::YVU_420: {
200 static size_t offset_in_2x2_sub_sampling_sizes[] = {0, 4, 5}; 211 static size_t offset_in_2x2_sub_sampling_sizes[] = {0, 4, 5};
201 DCHECK_LT(plane, arraysize(offset_in_2x2_sub_sampling_sizes)); 212 DCHECK_LT(plane, arraysize(offset_in_2x2_sub_sampling_sizes));
202 return offset_in_2x2_sub_sampling_sizes[plane] * 213 return offset_in_2x2_sub_sampling_sizes[plane] *
203 (size.width() / 2 + size.height() / 2); 214 (size.width() / 2 + size.height() / 2);
204 } 215 }
205 case gfx::BufferFormat::YUV_420_BIPLANAR: { 216 case gfx::BufferFormat::YUV_420_BIPLANAR: {
206 static size_t offset_in_2x2_sub_sampling_sizes[] = {0, 4}; 217 static size_t offset_in_2x2_sub_sampling_sizes[] = {0, 4};
207 DCHECK_LT(plane, arraysize(offset_in_2x2_sub_sampling_sizes)); 218 DCHECK_LT(plane, arraysize(offset_in_2x2_sub_sampling_sizes));
208 return offset_in_2x2_sub_sampling_sizes[plane] * 219 return offset_in_2x2_sub_sampling_sizes[plane] *
209 (size.width() / 2 + size.height() / 2); 220 (size.width() / 2 + size.height() / 2);
210 } 221 }
211 } 222 }
212 NOTREACHED(); 223 NOTREACHED();
213 return 0; 224 return 0;
214 } 225 }
215 226
216 } // namespace gfx 227 } // namespace gfx
OLDNEW
« no previous file with comments | « gpu/ipc/client/gpu_memory_buffer_impl_shared_memory.cc ('k') | ui/gfx/buffer_types.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698