| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "build/build_config.h" | 5 #include "build/build_config.h" |
| 6 #include "media/base/simd/convert_rgb_to_yuv.h" | 6 #include "media/base/simd/convert_rgb_to_yuv.h" |
| 7 #include "media/base/simd/yuv_to_rgb_table.h" | 7 #include "media/base/simd/yuv_to_rgb_table.h" |
| 8 | 8 |
| 9 #if defined(COMPILER_MSVC) | 9 #if defined(COMPILER_MSVC) |
| 10 #include <intrin.h> | 10 #include <intrin.h> |
| 11 #else | 11 #else |
| 12 #include <mmintrin.h> | 12 #include <mmintrin.h> |
| 13 #include <emmintrin.h> | 13 #include <emmintrin.h> |
| 14 #endif | 14 #endif |
| 15 | 15 |
| 16 namespace media { | 16 namespace media { |
| 17 | 17 |
| 18 #define FIX_SHIFT 12 | 18 #define FIX_SHIFT 12 |
| 19 #define FIX(x) ((x) * (1 << FIX_SHIFT)) | 19 #define FIX(x) ((x) * (1 << FIX_SHIFT)) |
| 20 | 20 |
| 21 // Define a convenient macro to do static cast. |
| 22 #define INT16_FIX(x) static_cast<int16>(FIX(x)) |
| 23 |
| 21 SIMD_ALIGNED(const int16 ConvertRGBAToYUV_kTable[8 * 3]) = { | 24 SIMD_ALIGNED(const int16 ConvertRGBAToYUV_kTable[8 * 3]) = { |
| 22 FIX(0.098), FIX(0.504), FIX(0.257), 0, | 25 INT16_FIX(0.098), INT16_FIX(0.504), INT16_FIX(0.257), 0, |
| 23 FIX(0.098), FIX(0.504), FIX(0.257), 0, | 26 INT16_FIX(0.098), INT16_FIX(0.504), INT16_FIX(0.257), 0, |
| 24 FIX(0.439), -FIX(0.291), -FIX(0.148), 0, | 27 INT16_FIX(0.439), -INT16_FIX(0.291), -INT16_FIX(0.148), 0, |
| 25 FIX(0.439), -FIX(0.291), -FIX(0.148), 0, | 28 INT16_FIX(0.439), -INT16_FIX(0.291), -INT16_FIX(0.148), 0, |
| 26 -FIX(0.071), -FIX(0.368), FIX(0.439), 0, | 29 -INT16_FIX(0.071), -INT16_FIX(0.368), INT16_FIX(0.439), 0, |
| 27 -FIX(0.071), -FIX(0.368), FIX(0.439), 0, | 30 -INT16_FIX(0.071), -INT16_FIX(0.368), INT16_FIX(0.439), 0, |
| 28 }; | 31 }; |
| 29 | 32 |
| 33 #undef INT16_FIX |
| 34 |
| 30 // This is the final offset for the conversion from signed yuv values to | 35 // This is the final offset for the conversion from signed yuv values to |
| 31 // unsigned values. It is arranged so that offset of 16 is applied to Y | 36 // unsigned values. It is arranged so that offset of 16 is applied to Y |
| 32 // components and 128 is added to UV components for 2 pixels. | 37 // components and 128 is added to UV components for 2 pixels. |
| 33 SIMD_ALIGNED(const int32 kYOffset[4]) = {16, 16, 16, 16}; | 38 SIMD_ALIGNED(const int32 kYOffset[4]) = {16, 16, 16, 16}; |
| 34 | 39 |
| 35 static inline int Clamp(int value) { | 40 static inline int Clamp(int value) { |
| 36 if (value < 0) | 41 if (value < 0) |
| 37 return 0; | 42 return 0; |
| 38 if (value > 255) | 43 if (value > 255) |
| 39 return 255; | 44 return 255; |
| (...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 383 ++vplane; | 388 ++vplane; |
| 384 width -= 2; | 389 width -= 2; |
| 385 } | 390 } |
| 386 | 391 |
| 387 // Handle the last pixel in the last row. | 392 // Handle the last pixel in the last row. |
| 388 if (width) | 393 if (width) |
| 389 ConvertRGBToYUV_V1H1(rgbframe, yplane, uplane, vplane); | 394 ConvertRGBToYUV_V1H1(rgbframe, yplane, uplane, vplane); |
| 390 } | 395 } |
| 391 | 396 |
| 392 } // namespace media | 397 } // namespace media |
| OLD | NEW |