convert_yuv_to_rgb.h revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef MEDIA_BASE_SIMD_CONVERT_YUV_TO_RGB_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MEDIA_BASE_SIMD_CONVERT_YUV_TO_RGB_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/base/yuv_convert.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace media {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void (*ConvertYUVToRGB32Proc)(const uint8*,
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      const uint8*,
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      const uint8*,
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      uint8*,
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      int,
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      int,
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      int,
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      int,
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      int,
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      YUVType);
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)typedef void (*ConvertYUVAToARGBProc)(const uint8*,
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                      const uint8*,
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                      const uint8*,
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                      const uint8*,
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                      uint8*,
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                      int,
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                      int,
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                      int,
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                      int,
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                      int,
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                      int,
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                      YUVType);
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ConvertYUVToRGB32_C(const uint8* yplane,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const uint8* uplane,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const uint8* vplane,
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         uint8* rgbframe,
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         int width,
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         int height,
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         int ystride,
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         int uvstride,
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         int rgbstride,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         YUVType yuv_type);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ConvertYUVAToARGB_C(const uint8* yplane,
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                         const uint8* uplane,
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                         const uint8* vplane,
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                         const uint8* aplane,
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                         uint8* rgbframe,
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                         int width,
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                         int height,
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                         int ystride,
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                         int uvstride,
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                         int avstride,
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                         int rgbstride,
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                         YUVType yuv_type);
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ConvertYUVToRGB32_SSE(const uint8* yplane,
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           const uint8* uplane,
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           const uint8* vplane,
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           uint8* rgbframe,
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           int width,
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           int height,
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           int ystride,
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           int uvstride,
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           int rgbstride,
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           YUVType yuv_type);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ConvertYUVToRGB32_MMX(const uint8* yplane,
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           const uint8* uplane,
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           const uint8* vplane,
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           uint8* rgbframe,
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           int width,
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           int height,
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           int ystride,
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           int uvstride,
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           int rgbstride,
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           YUVType yuv_type);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ConvertYUVAToARGB_MMX(const uint8* yplane,
84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                           const uint8* uplane,
85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                           const uint8* vplane,
86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                           const uint8* aplane,
87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                           uint8* rgbframe,
88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                           int width,
89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                           int height,
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                           int ystride,
91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                           int uvstride,
92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                           int avstride,
93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                           int rgbstride,
94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                           YUVType yuv_type);
95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace media
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Assembly functions are declared without namespace.
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" {
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// We use ptrdiff_t instead of int for yasm routine parameters to portably
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// sign-extend int. On Win64, MSVC does not sign-extend the value in the stack
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// home of int function parameters, and yasm routines are unaware of this lack
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// of extension and fault.  ptrdiff_t is portably sign-extended and fixes this
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// issue on at least Win64.  The C-equivalent RowProc versions' prototypes
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// include the same change to ptrdiff_t to reuse the typedefs.
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void (*ConvertYUVToRGB32RowProc)(const uint8*,
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          const uint8*,
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          const uint8*,
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          uint8*,
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                          ptrdiff_t);
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)typedef void (*ConvertYUVAToARGBRowProc)(const uint8*,
115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                         const uint8*,
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                         const uint8*,
117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                         const uint8*,
118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                         uint8*,
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                         ptrdiff_t);
120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void (*ScaleYUVToRGB32RowProc)(const uint8*,
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       const uint8*,
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       const uint8*,
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       uint8*,
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                       ptrdiff_t,
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                       ptrdiff_t);
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ConvertYUVToRGB32Row_C(const uint8* yplane,
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            const uint8* uplane,
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            const uint8* vplane,
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            uint8* rgbframe,
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            ptrdiff_t width);
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ConvertYUVAToARGBRow_C(const uint8* yplane,
135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                            const uint8* uplane,
136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                            const uint8* vplane,
137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                            const uint8* aplane,
138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                            uint8* rgbframe,
139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                            ptrdiff_t width);
140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ConvertYUVToRGB32Row_MMX(const uint8* yplane,
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              const uint8* uplane,
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              const uint8* vplane,
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              uint8* rgbframe,
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              ptrdiff_t width);
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ConvertYUVAToARGBRow_MMX(const uint8* yplane,
148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              const uint8* uplane,
149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              const uint8* vplane,
150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              const uint8* aplane,
151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              uint8* rgbframe,
152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                              ptrdiff_t width);
153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ConvertYUVToRGB32Row_SSE(const uint8* yplane,
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              const uint8* uplane,
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              const uint8* vplane,
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              uint8* rgbframe,
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              ptrdiff_t width);
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ScaleYUVToRGB32Row_C(const uint8* y_buf,
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const uint8* u_buf,
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const uint8* v_buf,
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          uint8* rgb_buf,
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                          ptrdiff_t width,
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                          ptrdiff_t source_dx);
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ScaleYUVToRGB32Row_MMX(const uint8* y_buf,
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            const uint8* u_buf,
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            const uint8* v_buf,
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            uint8* rgb_buf,
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            ptrdiff_t width,
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            ptrdiff_t source_dx);
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ScaleYUVToRGB32Row_SSE(const uint8* y_buf,
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            const uint8* u_buf,
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            const uint8* v_buf,
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            uint8* rgb_buf,
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            ptrdiff_t width,
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            ptrdiff_t source_dx);
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ScaleYUVToRGB32Row_SSE2_X64(const uint8* y_buf,
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const uint8* u_buf,
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const uint8* v_buf,
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 uint8* rgb_buf,
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 ptrdiff_t width,
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 ptrdiff_t source_dx);
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LinearScaleYUVToRGB32Row_C(const uint8* y_buf,
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                const uint8* u_buf,
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                const uint8* v_buf,
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                uint8* rgb_buf,
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                ptrdiff_t width,
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                ptrdiff_t source_dx);
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LinearScaleYUVToRGB32RowWithRange_C(const uint8* y_buf,
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         const uint8* u_buf,
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         const uint8* v_buf,
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         uint8* rgb_buf,
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         int dest_width,
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         int source_x,
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         int source_dx);
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LinearScaleYUVToRGB32Row_MMX(const uint8* y_buf,
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  const uint8* u_buf,
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  const uint8* v_buf,
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  uint8* rgb_buf,
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                  ptrdiff_t width,
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                  ptrdiff_t source_dx);
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LinearScaleYUVToRGB32Row_SSE(const uint8* y_buf,
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  const uint8* u_buf,
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  const uint8* v_buf,
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  uint8* rgb_buf,
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                  ptrdiff_t width,
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                  ptrdiff_t source_dx);
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LinearScaleYUVToRGB32Row_MMX_X64(const uint8* y_buf,
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      const uint8* u_buf,
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      const uint8* v_buf,
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      uint8* rgb_buf,
2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      ptrdiff_t width,
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      ptrdiff_t source_dx);
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // extern "C"
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // MEDIA_BASE_SIMD_CONVERT_YUV_TO_RGB_H_
227