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

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

Issue 2689453002: Introduce gfx::BufferFormat::YUYV_422
Patch Set: rebase to ToT Created 3 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
« no previous file with comments | « gpu/ipc/host/gpu_memory_buffer_support.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::RG_88, BufferFormat::BGR_565, 18 BufferFormat::ETC1,
19 BufferFormat::RGBA_4444, BufferFormat::RGBX_8888, 19 BufferFormat::R_8,
20 BufferFormat::RGBA_8888, BufferFormat::BGRX_8888, 20 BufferFormat::RG_88,
21 BufferFormat::BGRA_8888, BufferFormat::RGBA_F16, 21 BufferFormat::BGR_565,
22 BufferFormat::UYVY_422, BufferFormat::YUV_420_BIPLANAR, 22 BufferFormat::RGBA_4444,
23 BufferFormat::YVU_420}; 23 BufferFormat::RGBX_8888,
24 BufferFormat::RGBA_8888,
25 BufferFormat::BGRX_8888,
26 BufferFormat::BGRA_8888,
27 BufferFormat::RGBA_F16,
28 BufferFormat::UYVY_422,
29 BufferFormat::YUYV_422,
30 BufferFormat::YUV_420_BIPLANAR,
31 BufferFormat::YVU_420};
24 32
25 static_assert(arraysize(kBufferFormats) == 33 static_assert(arraysize(kBufferFormats) ==
26 (static_cast<int>(BufferFormat::LAST) + 1), 34 (static_cast<int>(BufferFormat::LAST) + 1),
27 "BufferFormat::LAST must be last value of kBufferFormats"); 35 "BufferFormat::LAST must be last value of kBufferFormats");
28 36
29 37
30 bool RowSizeForBufferFormatChecked( 38 bool RowSizeForBufferFormatChecked(
31 size_t width, BufferFormat format, size_t plane, size_t* size_in_bytes) { 39 size_t width, BufferFormat format, size_t plane, size_t* size_in_bytes) {
32 base::CheckedNumeric<size_t> checked_size = width; 40 base::CheckedNumeric<size_t> checked_size = width;
33 switch (format) { 41 switch (format) {
(...skipping 12 matching lines...) Expand all
46 case BufferFormat::R_8: 54 case BufferFormat::R_8:
47 checked_size += 3; 55 checked_size += 3;
48 if (!checked_size.IsValid()) 56 if (!checked_size.IsValid())
49 return false; 57 return false;
50 *size_in_bytes = (checked_size & ~0x3).ValueOrDie(); 58 *size_in_bytes = (checked_size & ~0x3).ValueOrDie();
51 return true; 59 return true;
52 case BufferFormat::RG_88: 60 case BufferFormat::RG_88:
53 case BufferFormat::BGR_565: 61 case BufferFormat::BGR_565:
54 case BufferFormat::RGBA_4444: 62 case BufferFormat::RGBA_4444:
55 case BufferFormat::UYVY_422: 63 case BufferFormat::UYVY_422:
64 case BufferFormat::YUYV_422:
56 checked_size *= 2; 65 checked_size *= 2;
57 checked_size += 3; 66 checked_size += 3;
58 if (!checked_size.IsValid()) 67 if (!checked_size.IsValid())
59 return false; 68 return false;
60 *size_in_bytes = (checked_size & ~0x3).ValueOrDie(); 69 *size_in_bytes = (checked_size & ~0x3).ValueOrDie();
61 return true; 70 return true;
62 case BufferFormat::BGRX_8888: 71 case BufferFormat::BGRX_8888:
63 case BufferFormat::RGBX_8888: 72 case BufferFormat::RGBX_8888:
64 case BufferFormat::RGBA_8888: 73 case BufferFormat::RGBA_8888:
65 case BufferFormat::BGRA_8888: 74 case BufferFormat::BGRA_8888:
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 case BufferFormat::R_8: 113 case BufferFormat::R_8:
105 case BufferFormat::RG_88: 114 case BufferFormat::RG_88:
106 case BufferFormat::BGR_565: 115 case BufferFormat::BGR_565:
107 case BufferFormat::RGBA_4444: 116 case BufferFormat::RGBA_4444:
108 case BufferFormat::RGBX_8888: 117 case BufferFormat::RGBX_8888:
109 case BufferFormat::RGBA_8888: 118 case BufferFormat::RGBA_8888:
110 case BufferFormat::BGRX_8888: 119 case BufferFormat::BGRX_8888:
111 case BufferFormat::BGRA_8888: 120 case BufferFormat::BGRA_8888:
112 case BufferFormat::RGBA_F16: 121 case BufferFormat::RGBA_F16:
113 case BufferFormat::UYVY_422: 122 case BufferFormat::UYVY_422:
123 case BufferFormat::YUYV_422:
114 return 1; 124 return 1;
115 case BufferFormat::YUV_420_BIPLANAR: 125 case BufferFormat::YUV_420_BIPLANAR:
116 return 2; 126 return 2;
117 case BufferFormat::YVU_420: 127 case BufferFormat::YVU_420:
118 return 3; 128 return 3;
119 } 129 }
120 NOTREACHED(); 130 NOTREACHED();
121 return 0; 131 return 0;
122 } 132 }
123 133
124 size_t SubsamplingFactorForBufferFormat(BufferFormat format, size_t plane) { 134 size_t SubsamplingFactorForBufferFormat(BufferFormat format, size_t plane) {
125 switch (format) { 135 switch (format) {
126 case BufferFormat::ATC: 136 case BufferFormat::ATC:
127 case BufferFormat::ATCIA: 137 case BufferFormat::ATCIA:
128 case BufferFormat::DXT1: 138 case BufferFormat::DXT1:
129 case BufferFormat::DXT5: 139 case BufferFormat::DXT5:
130 case BufferFormat::ETC1: 140 case BufferFormat::ETC1:
131 case BufferFormat::R_8: 141 case BufferFormat::R_8:
132 case BufferFormat::RG_88: 142 case BufferFormat::RG_88:
133 case BufferFormat::BGR_565: 143 case BufferFormat::BGR_565:
134 case BufferFormat::RGBA_4444: 144 case BufferFormat::RGBA_4444:
135 case BufferFormat::RGBX_8888: 145 case BufferFormat::RGBX_8888:
136 case BufferFormat::RGBA_8888: 146 case BufferFormat::RGBA_8888:
137 case BufferFormat::BGRX_8888: 147 case BufferFormat::BGRX_8888:
138 case BufferFormat::BGRA_8888: 148 case BufferFormat::BGRA_8888:
139 case BufferFormat::RGBA_F16: 149 case BufferFormat::RGBA_F16:
140 case BufferFormat::UYVY_422: 150 case BufferFormat::UYVY_422:
151 case BufferFormat::YUYV_422:
141 return 1; 152 return 1;
142 case BufferFormat::YVU_420: { 153 case BufferFormat::YVU_420: {
143 static size_t factor[] = {1, 2, 2}; 154 static size_t factor[] = {1, 2, 2};
144 DCHECK_LT(static_cast<size_t>(plane), arraysize(factor)); 155 DCHECK_LT(static_cast<size_t>(plane), arraysize(factor));
145 return factor[plane]; 156 return factor[plane];
146 } 157 }
147 case BufferFormat::YUV_420_BIPLANAR: { 158 case BufferFormat::YUV_420_BIPLANAR: {
148 static size_t factor[] = {1, 2}; 159 static size_t factor[] = {1, 2};
149 DCHECK_LT(static_cast<size_t>(plane), arraysize(factor)); 160 DCHECK_LT(static_cast<size_t>(plane), arraysize(factor));
150 return factor[plane]; 161 return factor[plane];
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 case BufferFormat::R_8: 214 case BufferFormat::R_8:
204 case BufferFormat::RG_88: 215 case BufferFormat::RG_88:
205 case BufferFormat::BGR_565: 216 case BufferFormat::BGR_565:
206 case BufferFormat::RGBA_4444: 217 case BufferFormat::RGBA_4444:
207 case BufferFormat::RGBX_8888: 218 case BufferFormat::RGBX_8888:
208 case BufferFormat::RGBA_8888: 219 case BufferFormat::RGBA_8888:
209 case BufferFormat::BGRX_8888: 220 case BufferFormat::BGRX_8888:
210 case BufferFormat::BGRA_8888: 221 case BufferFormat::BGRA_8888:
211 case BufferFormat::RGBA_F16: 222 case BufferFormat::RGBA_F16:
212 case BufferFormat::UYVY_422: 223 case BufferFormat::UYVY_422:
224 case BufferFormat::YUYV_422:
213 return 0; 225 return 0;
214 case BufferFormat::YVU_420: { 226 case BufferFormat::YVU_420: {
215 static size_t offset_in_2x2_sub_sampling_sizes[] = {0, 4, 5}; 227 static size_t offset_in_2x2_sub_sampling_sizes[] = {0, 4, 5};
216 DCHECK_LT(plane, arraysize(offset_in_2x2_sub_sampling_sizes)); 228 DCHECK_LT(plane, arraysize(offset_in_2x2_sub_sampling_sizes));
217 return offset_in_2x2_sub_sampling_sizes[plane] * 229 return offset_in_2x2_sub_sampling_sizes[plane] *
218 (size.width() / 2 + size.height() / 2); 230 (size.width() / 2 + size.height() / 2);
219 } 231 }
220 case gfx::BufferFormat::YUV_420_BIPLANAR: { 232 case gfx::BufferFormat::YUV_420_BIPLANAR: {
221 static size_t offset_in_2x2_sub_sampling_sizes[] = {0, 4}; 233 static size_t offset_in_2x2_sub_sampling_sizes[] = {0, 4};
222 DCHECK_LT(plane, arraysize(offset_in_2x2_sub_sampling_sizes)); 234 DCHECK_LT(plane, arraysize(offset_in_2x2_sub_sampling_sizes));
223 return offset_in_2x2_sub_sampling_sizes[plane] * 235 return offset_in_2x2_sub_sampling_sizes[plane] *
224 (size.width() / 2 + size.height() / 2); 236 (size.width() / 2 + size.height() / 2);
225 } 237 }
226 } 238 }
227 NOTREACHED(); 239 NOTREACHED();
228 return 0; 240 return 0;
229 } 241 }
230 242
231 } // namespace gfx 243 } // namespace gfx
OLDNEW
« no previous file with comments | « gpu/ipc/host/gpu_memory_buffer_support.cc ('k') | ui/gfx/buffer_types.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698