OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/base_paths.h" | 5 #include "base/base_paths.h" |
6 #include "base/cpu.h" | 6 #include "base/cpu.h" |
7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/path_service.h" | 9 #include "base/path_service.h" |
10 #include "media/base/djb2.h" | 10 #include "media/base/djb2.h" |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 | 98 |
99 // Convert a frame of YUV to 32 bit ARGB. | 99 // Convert a frame of YUV to 32 bit ARGB. |
100 media::ConvertYUVToRGB32(yuv_bytes.get(), | 100 media::ConvertYUVToRGB32(yuv_bytes.get(), |
101 yuv_bytes.get() + kSourceUOffset, | 101 yuv_bytes.get() + kSourceUOffset, |
102 yuv_bytes.get() + kSourceVOffset, | 102 yuv_bytes.get() + kSourceVOffset, |
103 rgb_converted_bytes.get(), // RGB output | 103 rgb_converted_bytes.get(), // RGB output |
104 kSourceWidth, kSourceHeight, // Dimensions | 104 kSourceWidth, kSourceHeight, // Dimensions |
105 kSourceWidth, // YStride | 105 kSourceWidth, // YStride |
106 kSourceWidth / 2, // UVStride | 106 kSourceWidth / 2, // UVStride |
107 kSourceWidth * kBpp, // RGBStride | 107 kSourceWidth * kBpp, // RGBStride |
108 media::YV12); | 108 media::YV12, |
| 109 media::YUV_RANGE_RESTRICTED); |
109 | 110 |
110 #if defined(OS_ANDROID) | 111 #if defined(OS_ANDROID) |
111 SwapRedAndBlueChannels(rgb_converted_bytes.get(), kRGBSizeConverted); | 112 SwapRedAndBlueChannels(rgb_converted_bytes.get(), kRGBSizeConverted); |
112 #endif | 113 #endif |
113 | 114 |
114 uint32 rgb_hash = DJB2Hash(rgb_converted_bytes.get(), kRGBSizeConverted, | 115 uint32 rgb_hash = DJB2Hash(rgb_converted_bytes.get(), kRGBSizeConverted, |
115 kDJB2HashSeed); | 116 kDJB2HashSeed); |
116 EXPECT_EQ(2413171226u, rgb_hash); | 117 EXPECT_EQ(2413171226u, rgb_hash); |
117 } | 118 } |
118 | 119 |
119 TEST(YUVConvertTest, YV16) { | 120 TEST(YUVConvertTest, YV16) { |
120 // Allocate all surfaces. | 121 // Allocate all surfaces. |
121 scoped_ptr<uint8[]> yuv_bytes; | 122 scoped_ptr<uint8[]> yuv_bytes; |
122 scoped_ptr<uint8[]> rgb_bytes(new uint8[kRGBSize]); | 123 scoped_ptr<uint8[]> rgb_bytes(new uint8[kRGBSize]); |
123 scoped_ptr<uint8[]> rgb_converted_bytes(new uint8[kRGBSizeConverted]); | 124 scoped_ptr<uint8[]> rgb_converted_bytes(new uint8[kRGBSizeConverted]); |
124 | 125 |
125 // Read YUV reference data from file. | 126 // Read YUV reference data from file. |
126 ReadYV16Data(&yuv_bytes); | 127 ReadYV16Data(&yuv_bytes); |
127 | 128 |
128 // Convert a frame of YUV to 32 bit ARGB. | 129 // Convert a frame of YUV to 32 bit ARGB. |
129 media::ConvertYUVToRGB32(yuv_bytes.get(), // Y | 130 media::ConvertYUVToRGB32(yuv_bytes.get(), // Y |
130 yuv_bytes.get() + kSourceUOffset, // U | 131 yuv_bytes.get() + kSourceUOffset, // U |
131 yuv_bytes.get() + kSourceYSize * 3 / 2, // V | 132 yuv_bytes.get() + kSourceYSize * 3 / 2, // V |
132 rgb_converted_bytes.get(), // RGB output | 133 rgb_converted_bytes.get(), // RGB output |
133 kSourceWidth, kSourceHeight, // Dimensions | 134 kSourceWidth, kSourceHeight, // Dimensions |
134 kSourceWidth, // YStride | 135 kSourceWidth, // YStride |
135 kSourceWidth / 2, // UVStride | 136 kSourceWidth / 2, // UVStride |
136 kSourceWidth * kBpp, // RGBStride | 137 kSourceWidth * kBpp, // RGBStride |
137 media::YV16); | 138 media::YV16, |
| 139 media::YUV_RANGE_RESTRICTED); |
138 | 140 |
139 #if defined(OS_ANDROID) | 141 #if defined(OS_ANDROID) |
140 SwapRedAndBlueChannels(rgb_converted_bytes.get(), kRGBSizeConverted); | 142 SwapRedAndBlueChannels(rgb_converted_bytes.get(), kRGBSizeConverted); |
141 #endif | 143 #endif |
142 | 144 |
143 uint32 rgb_hash = DJB2Hash(rgb_converted_bytes.get(), kRGBSizeConverted, | 145 uint32 rgb_hash = DJB2Hash(rgb_converted_bytes.get(), kRGBSizeConverted, |
144 kDJB2HashSeed); | 146 kDJB2HashSeed); |
145 EXPECT_EQ(4222342047u, rgb_hash); | 147 EXPECT_EQ(4222342047u, rgb_hash); |
146 } | 148 } |
147 | 149 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
193 media::ScaleYUVToRGB32(y_plane(), // Y | 195 media::ScaleYUVToRGB32(y_plane(), // Y |
194 u_plane(), // U | 196 u_plane(), // U |
195 v_plane(), // V | 197 v_plane(), // V |
196 rgb_bytes_.get(), // RGB output | 198 rgb_bytes_.get(), // RGB output |
197 kSourceWidth, kSourceHeight, // Dimensions | 199 kSourceWidth, kSourceHeight, // Dimensions |
198 kSourceWidth, kSourceHeight, // Dimensions | 200 kSourceWidth, kSourceHeight, // Dimensions |
199 kSourceWidth, // YStride | 201 kSourceWidth, // YStride |
200 kSourceWidth / 2, // UvStride | 202 kSourceWidth / 2, // UvStride |
201 kSourceWidth * kBpp, // RgbStride | 203 kSourceWidth * kBpp, // RgbStride |
202 GetParam().yuv_type, | 204 GetParam().yuv_type, |
| 205 media::YUV_RANGE_RESTRICTED, |
203 media::ROTATE_0, | 206 media::ROTATE_0, |
204 GetParam().scale_filter); | 207 GetParam().scale_filter); |
205 | 208 |
206 uint32 yuv_hash = DJB2Hash(rgb_bytes_.get(), kRGBSize, kDJB2HashSeed); | 209 uint32 yuv_hash = DJB2Hash(rgb_bytes_.get(), kRGBSize, kDJB2HashSeed); |
207 | 210 |
208 media::ConvertYUVToRGB32(y_plane(), // Y | 211 media::ConvertYUVToRGB32(y_plane(), // Y |
209 u_plane(), // U | 212 u_plane(), // U |
210 v_plane(), // V | 213 v_plane(), // V |
211 rgb_bytes_.get(), // RGB output | 214 rgb_bytes_.get(), // RGB output |
212 kSourceWidth, kSourceHeight, // Dimensions | 215 kSourceWidth, kSourceHeight, // Dimensions |
213 kSourceWidth, // YStride | 216 kSourceWidth, // YStride |
214 kSourceWidth / 2, // UVStride | 217 kSourceWidth / 2, // UVStride |
215 kSourceWidth * kBpp, // RGBStride | 218 kSourceWidth * kBpp, // RGBStride |
216 GetParam().yuv_type); | 219 GetParam().yuv_type, |
| 220 media::YUV_RANGE_RESTRICTED); |
217 | 221 |
218 uint32 rgb_hash = DJB2Hash(rgb_bytes_.get(), kRGBSize, kDJB2HashSeed); | 222 uint32 rgb_hash = DJB2Hash(rgb_bytes_.get(), kRGBSize, kDJB2HashSeed); |
219 | 223 |
220 EXPECT_EQ(yuv_hash, rgb_hash); | 224 EXPECT_EQ(yuv_hash, rgb_hash); |
221 } | 225 } |
222 | 226 |
223 TEST_P(YUVScaleTest, Normal) { | 227 TEST_P(YUVScaleTest, Normal) { |
224 media::ScaleYUVToRGB32(y_plane(), // Y | 228 media::ScaleYUVToRGB32(y_plane(), // Y |
225 u_plane(), // U | 229 u_plane(), // U |
226 v_plane(), // V | 230 v_plane(), // V |
227 rgb_bytes_.get(), // RGB output | 231 rgb_bytes_.get(), // RGB output |
228 kSourceWidth, kSourceHeight, // Dimensions | 232 kSourceWidth, kSourceHeight, // Dimensions |
229 kScaledWidth, kScaledHeight, // Dimensions | 233 kScaledWidth, kScaledHeight, // Dimensions |
230 kSourceWidth, // YStride | 234 kSourceWidth, // YStride |
231 kSourceWidth / 2, // UvStride | 235 kSourceWidth / 2, // UvStride |
232 kScaledWidth * kBpp, // RgbStride | 236 kScaledWidth * kBpp, // RgbStride |
233 GetParam().yuv_type, | 237 GetParam().yuv_type, |
| 238 media::YUV_RANGE_RESTRICTED, |
234 media::ROTATE_0, | 239 media::ROTATE_0, |
235 GetParam().scale_filter); | 240 GetParam().scale_filter); |
236 | 241 |
237 #if defined(OS_ANDROID) | 242 #if defined(OS_ANDROID) |
238 SwapRedAndBlueChannels(rgb_bytes_.get(), kRGBSizeScaled); | 243 SwapRedAndBlueChannels(rgb_bytes_.get(), kRGBSizeScaled); |
239 #endif | 244 #endif |
240 | 245 |
241 uint32 rgb_hash = DJB2Hash(rgb_bytes_.get(), kRGBSizeScaled, kDJB2HashSeed); | 246 uint32 rgb_hash = DJB2Hash(rgb_bytes_.get(), kRGBSizeScaled, kDJB2HashSeed); |
242 EXPECT_EQ(GetParam().rgb_hash, rgb_hash); | 247 EXPECT_EQ(GetParam().rgb_hash, rgb_hash); |
243 } | 248 } |
244 | 249 |
245 TEST_P(YUVScaleTest, ZeroSourceSize) { | 250 TEST_P(YUVScaleTest, ZeroSourceSize) { |
246 media::ScaleYUVToRGB32(y_plane(), // Y | 251 media::ScaleYUVToRGB32(y_plane(), // Y |
247 u_plane(), // U | 252 u_plane(), // U |
248 v_plane(), // V | 253 v_plane(), // V |
249 rgb_bytes_.get(), // RGB output | 254 rgb_bytes_.get(), // RGB output |
250 0, 0, // Dimensions | 255 0, 0, // Dimensions |
251 kScaledWidth, kScaledHeight, // Dimensions | 256 kScaledWidth, kScaledHeight, // Dimensions |
252 kSourceWidth, // YStride | 257 kSourceWidth, // YStride |
253 kSourceWidth / 2, // UvStride | 258 kSourceWidth / 2, // UvStride |
254 kScaledWidth * kBpp, // RgbStride | 259 kScaledWidth * kBpp, // RgbStride |
255 GetParam().yuv_type, | 260 GetParam().yuv_type, |
| 261 media::YUV_RANGE_RESTRICTED, |
256 media::ROTATE_0, | 262 media::ROTATE_0, |
257 GetParam().scale_filter); | 263 GetParam().scale_filter); |
258 | 264 |
259 // Testing for out-of-bound read/writes with AddressSanitizer. | 265 // Testing for out-of-bound read/writes with AddressSanitizer. |
260 } | 266 } |
261 | 267 |
262 TEST_P(YUVScaleTest, ZeroDestinationSize) { | 268 TEST_P(YUVScaleTest, ZeroDestinationSize) { |
263 media::ScaleYUVToRGB32(y_plane(), // Y | 269 media::ScaleYUVToRGB32(y_plane(), // Y |
264 u_plane(), // U | 270 u_plane(), // U |
265 v_plane(), // V | 271 v_plane(), // V |
266 rgb_bytes_.get(), // RGB output | 272 rgb_bytes_.get(), // RGB output |
267 kSourceWidth, kSourceHeight, // Dimensions | 273 kSourceWidth, kSourceHeight, // Dimensions |
268 0, 0, // Dimensions | 274 0, 0, // Dimensions |
269 kSourceWidth, // YStride | 275 kSourceWidth, // YStride |
270 kSourceWidth / 2, // UvStride | 276 kSourceWidth / 2, // UvStride |
271 kScaledWidth * kBpp, // RgbStride | 277 kScaledWidth * kBpp, // RgbStride |
272 GetParam().yuv_type, | 278 GetParam().yuv_type, |
| 279 media::YUV_RANGE_RESTRICTED, |
273 media::ROTATE_0, | 280 media::ROTATE_0, |
274 GetParam().scale_filter); | 281 GetParam().scale_filter); |
275 | 282 |
276 // Testing for out-of-bound read/writes with AddressSanitizer. | 283 // Testing for out-of-bound read/writes with AddressSanitizer. |
277 } | 284 } |
278 | 285 |
279 TEST_P(YUVScaleTest, OddWidthAndHeightNotCrash) { | 286 TEST_P(YUVScaleTest, OddWidthAndHeightNotCrash) { |
280 media::ScaleYUVToRGB32(y_plane(), // Y | 287 media::ScaleYUVToRGB32(y_plane(), // Y |
281 u_plane(), // U | 288 u_plane(), // U |
282 v_plane(), // V | 289 v_plane(), // V |
283 rgb_bytes_.get(), // RGB output | 290 rgb_bytes_.get(), // RGB output |
284 kSourceWidth, kSourceHeight, // Dimensions | 291 kSourceWidth, kSourceHeight, // Dimensions |
285 3, 3, // Dimensions | 292 3, 3, // Dimensions |
286 kSourceWidth, // YStride | 293 kSourceWidth, // YStride |
287 kSourceWidth / 2, // UvStride | 294 kSourceWidth / 2, // UvStride |
288 kScaledWidth * kBpp, // RgbStride | 295 kScaledWidth * kBpp, // RgbStride |
289 GetParam().yuv_type, | 296 GetParam().yuv_type, |
| 297 media::YUV_RANGE_RESTRICTED, |
290 media::ROTATE_0, | 298 media::ROTATE_0, |
291 GetParam().scale_filter); | 299 GetParam().scale_filter); |
292 } | 300 } |
293 | 301 |
294 INSTANTIATE_TEST_CASE_P( | 302 INSTANTIATE_TEST_CASE_P( |
295 YUVScaleFormats, YUVScaleTest, | 303 YUVScaleFormats, YUVScaleTest, |
296 ::testing::Values( | 304 ::testing::Values( |
297 YUVScaleTestData(media::YV12, media::FILTER_NONE, 4136904952u), | 305 YUVScaleTestData(media::YV12, media::FILTER_NONE, 4136904952u), |
298 YUVScaleTestData(media::YV16, media::FILTER_NONE, 1501777547u), | 306 YUVScaleTestData(media::YV16, media::FILTER_NONE, 1501777547u), |
299 YUVScaleTestData(media::YV12, media::FILTER_BILINEAR, 3164274689u), | 307 YUVScaleTestData(media::YV12, media::FILTER_BILINEAR, 3164274689u), |
(...skipping 16 matching lines...) Expand all Loading... |
316 unsigned char expected[8] = { 255, 255, 104, 255, 4, 5, 6, 7 }; | 324 unsigned char expected[8] = { 255, 255, 104, 255, 4, 5, 6, 7 }; |
317 // Convert a frame of YUV to 32 bit ARGB. | 325 // Convert a frame of YUV to 32 bit ARGB. |
318 media::ConvertYUVToRGB32(&y, // Y | 326 media::ConvertYUVToRGB32(&y, // Y |
319 &u, // U | 327 &u, // U |
320 &v, // V | 328 &v, // V |
321 &rgb[0], // RGB output | 329 &rgb[0], // RGB output |
322 1, 1, // Dimensions | 330 1, 1, // Dimensions |
323 0, // YStride | 331 0, // YStride |
324 0, // UVStride | 332 0, // UVStride |
325 0, // RGBStride | 333 0, // RGBStride |
326 media::YV12); | 334 media::YV12, |
| 335 media::YUV_RANGE_RESTRICTED); |
327 | 336 |
328 #if defined(OS_ANDROID) | 337 #if defined(OS_ANDROID) |
329 SwapRedAndBlueChannels(rgb, kBpp); | 338 SwapRedAndBlueChannels(rgb, kBpp); |
330 #endif | 339 #endif |
331 | 340 |
332 int expected_test = memcmp(rgb, expected, sizeof(expected)); | 341 int expected_test = memcmp(rgb, expected, sizeof(expected)); |
333 EXPECT_EQ(0, expected_test); | 342 EXPECT_EQ(0, expected_test); |
334 } | 343 } |
335 | 344 |
336 TEST(YUVConvertTest, RGB24ToYUV) { | 345 TEST(YUVConvertTest, RGB24ToYUV) { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
377 | 386 |
378 // Convert a frame of YUV to 32 bit ARGB. | 387 // Convert a frame of YUV to 32 bit ARGB. |
379 media::ConvertYUVToRGB32(yuv_bytes.get(), | 388 media::ConvertYUVToRGB32(yuv_bytes.get(), |
380 yuv_bytes.get() + kSourceUOffset, | 389 yuv_bytes.get() + kSourceUOffset, |
381 yuv_bytes.get() + kSourceVOffset, | 390 yuv_bytes.get() + kSourceVOffset, |
382 rgb_bytes.get(), // RGB output | 391 rgb_bytes.get(), // RGB output |
383 kSourceWidth, kSourceHeight, // Dimensions | 392 kSourceWidth, kSourceHeight, // Dimensions |
384 kSourceWidth, // YStride | 393 kSourceWidth, // YStride |
385 kSourceWidth / 2, // UVStride | 394 kSourceWidth / 2, // UVStride |
386 kSourceWidth * kBpp, // RGBStride | 395 kSourceWidth * kBpp, // RGBStride |
387 media::YV12); | 396 media::YV12, |
| 397 media::YUV_RANGE_RESTRICTED); |
388 | 398 |
389 // Convert RGB32 to YV12. | 399 // Convert RGB32 to YV12. |
390 media::ConvertRGB32ToYUV(rgb_bytes.get(), | 400 media::ConvertRGB32ToYUV(rgb_bytes.get(), |
391 yuv_converted_bytes.get(), | 401 yuv_converted_bytes.get(), |
392 yuv_converted_bytes.get() + kSourceUOffset, | 402 yuv_converted_bytes.get() + kSourceUOffset, |
393 yuv_converted_bytes.get() + kSourceVOffset, | 403 yuv_converted_bytes.get() + kSourceVOffset, |
394 kSourceWidth, kSourceHeight, // Dimensions | 404 kSourceWidth, kSourceHeight, // Dimensions |
395 kSourceWidth * 4, // RGBStride | 405 kSourceWidth * 4, // RGBStride |
396 kSourceWidth, // YStride | 406 kSourceWidth, // YStride |
397 kSourceWidth / 2); // UVStride | 407 kSourceWidth / 2); // UVStride |
398 | 408 |
399 // Convert YV12 back to RGB32. | 409 // Convert YV12 back to RGB32. |
400 media::ConvertYUVToRGB32(yuv_converted_bytes.get(), | 410 media::ConvertYUVToRGB32(yuv_converted_bytes.get(), |
401 yuv_converted_bytes.get() + kSourceUOffset, | 411 yuv_converted_bytes.get() + kSourceUOffset, |
402 yuv_converted_bytes.get() + kSourceVOffset, | 412 yuv_converted_bytes.get() + kSourceVOffset, |
403 rgb_converted_bytes.get(), // RGB output | 413 rgb_converted_bytes.get(), // RGB output |
404 kSourceWidth, kSourceHeight, // Dimensions | 414 kSourceWidth, kSourceHeight, // Dimensions |
405 kSourceWidth, // YStride | 415 kSourceWidth, // YStride |
406 kSourceWidth / 2, // UVStride | 416 kSourceWidth / 2, // UVStride |
407 kSourceWidth * kBpp, // RGBStride | 417 kSourceWidth * kBpp, // RGBStride |
408 media::YV12); | 418 media::YV12, |
| 419 media::YUV_RANGE_RESTRICTED); |
409 | 420 |
410 int error = 0; | 421 int error = 0; |
411 for (int i = 0; i < kRGBSize; ++i) { | 422 for (int i = 0; i < kRGBSize; ++i) { |
412 int diff = rgb_converted_bytes[i] - rgb_bytes[i]; | 423 int diff = rgb_converted_bytes[i] - rgb_bytes[i]; |
413 if (diff < 0) | 424 if (diff < 0) |
414 diff = -diff; | 425 diff = -diff; |
415 error += diff; | 426 error += diff; |
416 } | 427 } |
417 | 428 |
418 // Make sure error is within bound. | 429 // Make sure error is within bound. |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
532 // Convert a frame of YUV to 32 bit ARGB. | 543 // Convert a frame of YUV to 32 bit ARGB. |
533 media::ConvertYUVToRGB32( | 544 media::ConvertYUVToRGB32( |
534 yuv_bytes.get(), | 545 yuv_bytes.get(), |
535 yuv_bytes.get() + kSourceUOffset, | 546 yuv_bytes.get() + kSourceUOffset, |
536 yuv_bytes.get() + kSourceVOffset, | 547 yuv_bytes.get() + kSourceVOffset, |
537 rgb_bytes.get(), // RGB output | 548 rgb_bytes.get(), // RGB output |
538 kSourceWidth, kSourceHeight, // Dimensions | 549 kSourceWidth, kSourceHeight, // Dimensions |
539 kSourceWidth, // YStride | 550 kSourceWidth, // YStride |
540 kSourceWidth / 2, // UVStride | 551 kSourceWidth / 2, // UVStride |
541 kSourceWidth * kBpp, // RGBStride | 552 kSourceWidth * kBpp, // RGBStride |
542 media::YV12); | 553 media::YV12, |
| 554 media::YUV_RANGE_RESTRICTED); |
543 | 555 |
544 // Convert RGB32 to YV12 with SSE2 version. | 556 // Convert RGB32 to YV12 with SSE2 version. |
545 media::ConvertRGB32ToYUV_SSE2( | 557 media::ConvertRGB32ToYUV_SSE2( |
546 rgb_bytes.get(), | 558 rgb_bytes.get(), |
547 yuv_converted_bytes.get(), | 559 yuv_converted_bytes.get(), |
548 yuv_converted_bytes.get() + kSourceUOffset, | 560 yuv_converted_bytes.get() + kSourceUOffset, |
549 yuv_converted_bytes.get() + kSourceVOffset, | 561 yuv_converted_bytes.get() + kSourceVOffset, |
550 kSourceWidth, kSourceHeight, // Dimensions | 562 kSourceWidth, kSourceHeight, // Dimensions |
551 kSourceWidth * 4, // RGBStride | 563 kSourceWidth * 4, // RGBStride |
552 kSourceWidth, // YStride | 564 kSourceWidth, // YStride |
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
961 EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(), | 973 EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(), |
962 rgb_bytes_converted.get(), | 974 rgb_bytes_converted.get(), |
963 kWidth * kBpp)); | 975 kWidth * kBpp)); |
964 } | 976 } |
965 | 977 |
966 #endif // defined(ARCH_CPU_X86_64) | 978 #endif // defined(ARCH_CPU_X86_64) |
967 | 979 |
968 #endif // defined(ARCH_CPU_X86_FAMILY) | 980 #endif // defined(ARCH_CPU_X86_FAMILY) |
969 | 981 |
970 } // namespace media | 982 } // namespace media |
OLD | NEW |