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 3 // found in the LICENSE file. 4 5 #if defined(_MSC_VER) 6 #include <intrin.h> 7 #else 8 #include <mmintrin.h> 9 #endif 10 11 #include "media/base/simd/convert_yuv_to_rgb.h" 12 #include "media/base/simd/yuv_to_rgb_table.h" 13 #include "media/base/yuv_convert.h" 14 15 namespace media { 16 17 void ConvertYUVAToARGB_MMX(const uint8* yplane, 18 const uint8* uplane, 19 const uint8* vplane, 20 const uint8* aplane, 21 uint8* rgbframe, 22 int width, 23 int height, 24 int ystride, 25 int uvstride, 26 int astride, 27 int rgbstride, 28 YUVType yuv_type) { 29 unsigned int y_shift = GetVerticalShift(yuv_type); 30 for (int y = 0; y < height; ++y) { 31 uint8* rgb_row = rgbframe + y * rgbstride; 32 const uint8* y_ptr = yplane + y * ystride; 33 const uint8* u_ptr = uplane + (y >> y_shift) * uvstride; 34 const uint8* v_ptr = vplane + (y >> y_shift) * uvstride; 35 const uint8* a_ptr = aplane + y * astride; 36 37 ConvertYUVAToARGBRow_MMX(y_ptr, 38 u_ptr, 39 v_ptr, 40 a_ptr, 41 rgb_row, 42 width, 43 GetLookupTable(yuv_type)); 44 } 45 46 EmptyRegisterState(); 47 } 48 49 void ConvertYUVToRGB32_SSE(const uint8* yplane, 50 const uint8* uplane, 51 const uint8* vplane, 52 uint8* rgbframe, 53 int width, 54 int height, 55 int ystride, 56 int uvstride, 57 int rgbstride, 58 YUVType yuv_type) { 59 unsigned int y_shift = GetVerticalShift(yuv_type); 60 for (int y = 0; y < height; ++y) { 61 uint8* rgb_row = rgbframe + y * rgbstride; 62 const uint8* y_ptr = yplane + y * ystride; 63 const uint8* u_ptr = uplane + (y >> y_shift) * uvstride; 64 const uint8* v_ptr = vplane + (y >> y_shift) * uvstride; 65 66 ConvertYUVToRGB32Row_SSE(y_ptr, 67 u_ptr, 68 v_ptr, 69 rgb_row, 70 width, 71 GetLookupTable(yuv_type)); 72 } 73 74 EmptyRegisterState(); 75 } 76 77 } // namespace media 78