- add sources.
[platform/framework/web/crosswalk.git] / src / media / base / simd / convert_yuv_to_rgb.h
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 #ifndef MEDIA_BASE_SIMD_CONVERT_YUV_TO_RGB_H_
6 #define MEDIA_BASE_SIMD_CONVERT_YUV_TO_RGB_H_
7
8 #include "base/basictypes.h"
9 #include "media/base/yuv_convert.h"
10
11 namespace media {
12
13 // These methods are exported for testing purposes only.  Library users should
14 // only call the methods listed in yuv_convert.h.
15
16 MEDIA_EXPORT void ConvertYUVToRGB32_C(const uint8* yplane,
17                                       const uint8* uplane,
18                                       const uint8* vplane,
19                                       uint8* rgbframe,
20                                       int width,
21                                       int height,
22                                       int ystride,
23                                       int uvstride,
24                                       int rgbstride,
25                                       YUVType yuv_type);
26
27 MEDIA_EXPORT void ConvertYUVToRGB32Row_C(const uint8* yplane,
28                                          const uint8* uplane,
29                                          const uint8* vplane,
30                                          uint8* rgbframe,
31                                          ptrdiff_t width);
32
33 MEDIA_EXPORT void ConvertYUVAToARGB_C(const uint8* yplane,
34                                       const uint8* uplane,
35                                       const uint8* vplane,
36                                       const uint8* aplane,
37                                       uint8* rgbframe,
38                                       int width,
39                                       int height,
40                                       int ystride,
41                                       int uvstride,
42                                       int avstride,
43                                       int rgbstride,
44                                       YUVType yuv_type);
45
46 MEDIA_EXPORT void ConvertYUVAToARGBRow_C(const uint8* yplane,
47                                          const uint8* uplane,
48                                          const uint8* vplane,
49                                          const uint8* aplane,
50                                          uint8* rgbframe,
51                                          ptrdiff_t width);
52
53 MEDIA_EXPORT void ConvertYUVToRGB32_SSE(const uint8* yplane,
54                                         const uint8* uplane,
55                                         const uint8* vplane,
56                                         uint8* rgbframe,
57                                         int width,
58                                         int height,
59                                         int ystride,
60                                         int uvstride,
61                                         int rgbstride,
62                                         YUVType yuv_type);
63
64 MEDIA_EXPORT void ConvertYUVToRGB32_MMX(const uint8* yplane,
65                                         const uint8* uplane,
66                                         const uint8* vplane,
67                                         uint8* rgbframe,
68                                         int width,
69                                         int height,
70                                         int ystride,
71                                         int uvstride,
72                                         int rgbstride,
73                                         YUVType yuv_type);
74
75 MEDIA_EXPORT void ConvertYUVAToARGB_MMX(const uint8* yplane,
76                                         const uint8* uplane,
77                                         const uint8* vplane,
78                                         const uint8* aplane,
79                                         uint8* rgbframe,
80                                         int width,
81                                         int height,
82                                         int ystride,
83                                         int uvstride,
84                                         int avstride,
85                                         int rgbstride,
86                                         YUVType yuv_type);
87
88 MEDIA_EXPORT void ScaleYUVToRGB32Row_C(const uint8* y_buf,
89                                        const uint8* u_buf,
90                                        const uint8* v_buf,
91                                        uint8* rgb_buf,
92                                        ptrdiff_t width,
93                                        ptrdiff_t source_dx);
94
95 MEDIA_EXPORT void LinearScaleYUVToRGB32Row_C(const uint8* y_buf,
96                                              const uint8* u_buf,
97                                              const uint8* v_buf,
98                                              uint8* rgb_buf,
99                                              ptrdiff_t width,
100                                              ptrdiff_t source_dx);
101
102 MEDIA_EXPORT void LinearScaleYUVToRGB32RowWithRange_C(const uint8* y_buf,
103                                                       const uint8* u_buf,
104                                                       const uint8* v_buf,
105                                                       uint8* rgb_buf,
106                                                       int dest_width,
107                                                       int source_x,
108                                                       int source_dx);
109
110 }  // namespace media
111
112 // Assembly functions are declared without namespace.
113 extern "C" {
114
115 // We use ptrdiff_t instead of int for yasm routine parameters to portably
116 // sign-extend int. On Win64, MSVC does not sign-extend the value in the stack
117 // home of int function parameters, and yasm routines are unaware of this lack
118 // of extension and fault.  ptrdiff_t is portably sign-extended and fixes this
119 // issue on at least Win64.  The C-equivalent RowProc versions' prototypes
120 // include the same change to ptrdiff_t to reuse the typedefs.
121
122 MEDIA_EXPORT void ConvertYUVToRGB32Row_MMX(const uint8* yplane,
123                                            const uint8* uplane,
124                                            const uint8* vplane,
125                                            uint8* rgbframe,
126                                            ptrdiff_t width);
127
128 MEDIA_EXPORT void ConvertYUVAToARGBRow_MMX(const uint8* yplane,
129                                            const uint8* uplane,
130                                            const uint8* vplane,
131                                            const uint8* aplane,
132                                            uint8* rgbframe,
133                                            ptrdiff_t width);
134
135 MEDIA_EXPORT void ConvertYUVToRGB32Row_SSE(const uint8* yplane,
136                                            const uint8* uplane,
137                                            const uint8* vplane,
138                                            uint8* rgbframe,
139                                            ptrdiff_t width);
140
141 MEDIA_EXPORT void ScaleYUVToRGB32Row_MMX(const uint8* y_buf,
142                                          const uint8* u_buf,
143                                          const uint8* v_buf,
144                                          uint8* rgb_buf,
145                                          ptrdiff_t width,
146                                          ptrdiff_t source_dx);
147
148 MEDIA_EXPORT void ScaleYUVToRGB32Row_SSE(const uint8* y_buf,
149                                          const uint8* u_buf,
150                                          const uint8* v_buf,
151                                          uint8* rgb_buf,
152                                          ptrdiff_t width,
153                                          ptrdiff_t source_dx);
154
155 MEDIA_EXPORT void ScaleYUVToRGB32Row_SSE2_X64(const uint8* y_buf,
156                                               const uint8* u_buf,
157                                               const uint8* v_buf,
158                                               uint8* rgb_buf,
159                                               ptrdiff_t width,
160                                               ptrdiff_t source_dx);
161
162 MEDIA_EXPORT void LinearScaleYUVToRGB32Row_MMX(const uint8* y_buf,
163                                                const uint8* u_buf,
164                                                const uint8* v_buf,
165                                                uint8* rgb_buf,
166                                                ptrdiff_t width,
167                                                ptrdiff_t source_dx);
168
169 MEDIA_EXPORT void LinearScaleYUVToRGB32Row_SSE(const uint8* y_buf,
170                                                const uint8* u_buf,
171                                                const uint8* v_buf,
172                                                uint8* rgb_buf,
173                                                ptrdiff_t width,
174                                                ptrdiff_t source_dx);
175
176 MEDIA_EXPORT void LinearScaleYUVToRGB32Row_MMX_X64(const uint8* y_buf,
177                                                    const uint8* u_buf,
178                                                    const uint8* v_buf,
179                                                    uint8* rgb_buf,
180                                                    ptrdiff_t width,
181                                                    ptrdiff_t source_dx);
182
183 }  // extern "C"
184
185 #endif  // MEDIA_BASE_SIMD_CONVERT_YUV_TO_RGB_H_