Home | History | Annotate | Download | only in simd
      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