]> git.sesse.net Git - vlc/blob - modules/arm_neon/chroma_neon.h
enable the macosx GUI to handle negative stop-time
[vlc] / modules / arm_neon / chroma_neon.h
1 /*****************************************************************************
2  * chroma_neon.h
3  *****************************************************************************
4  * Copyright (C) 2011 RĂ©mi Denis-Courmont
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU Lesser General Public License as published by
8  * the Free Software Foundation; either version 2.1 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
19  *****************************************************************************/
20
21 /* Planes must start on a 16-bytes boundary. Pitches must be multiples of 16
22  * bytes even for subsampled components. */
23
24 /* Planar picture buffer.
25  * Pitch corresponds to luminance component in bytes. Chrominance pitches are
26  * inferred from the color subsampling ratio. */
27 struct yuv_planes
28 {
29     void *y, *u, *v;
30     size_t pitch;
31 };
32
33 /* Planar chroma buffers.
34  * Pitch is in bytes. */
35 struct uv_planes
36 {
37     void *u, *v;
38     size_t pitch;
39 };
40
41 /* Packed picture buffer. Pitch is in bytes (_not_ pixels). */
42 struct yuv_pack
43 {
44     void *yuv;
45     size_t pitch;
46 };
47
48 /* I420 to YUYV conversion. */
49 void i420_yuyv_neon (struct yuv_pack *const out,
50                      const struct yuv_planes *const in,
51                      int width, int height) asm("i420_yuyv_neon");
52
53 /* I420 to UYVY conversion. */
54 void i420_uyvy_neon (struct yuv_pack *const out,
55                      const struct yuv_planes *const in,
56                      int width, int height) asm("i420_uyvy_neon");
57
58 /* I422 to YUYV conversion. */
59 void i422_yuyv_neon (struct yuv_pack *const out,
60                      const struct yuv_planes *const in,
61                      int width, int height) asm("i422_yuyv_neon");
62
63 /* I422 to UYVY conversion. */
64 void i422_uyvy_neon (struct yuv_pack *const out,
65                      const struct yuv_planes *const in,
66                      int width, int height) asm("i422_uyvy_neon");
67
68 /* YUYV to I422 conversion. */
69 void yuyv_i422_neon (struct yuv_planes *const out,
70                      const struct yuv_pack *const in,
71                      int width, int height) asm("yuyv_i422_neon");
72
73 /* UYVY to I422 conversion. */
74 void uyvy_i422_neon (struct yuv_planes *const out,
75                      const struct yuv_pack *const in,
76                      int width, int height) asm("uyvy_i422_neon");
77
78 /* Semiplanar to planar conversion. */
79 void deinterleave_chroma_neon (struct uv_planes *const out,
80                                const struct yuv_pack *const in,
81                                int width, int height) asm("deinterleave_chroma_neon");
82
83 /* I420 to RGBA conversion. */
84 void i420_rgb_neon (struct yuv_pack *const out,
85                     const struct yuv_planes *const in,
86                     int width, int height) asm("i420_rgb_neon");
87
88 /* I420 to RV16 conversion. */
89 void i420_rv16_neon (struct yuv_pack *const out,
90                      const struct yuv_planes *const in,
91                      int width, int height) asm("i420_rv16_neon");
92
93 /* NV21 to RGBA conversion. */
94 void nv21_rgb_neon (struct yuv_pack *const out,
95                     const struct yuv_planes *const in,
96                     int width, int height) asm("nv21_rgb_neon");
97
98 /* NV12 to RGBA conversion. */
99 void nv12_rgb_neon (struct yuv_pack *const out,
100                     const struct yuv_planes *const in,
101                     int width, int height) asm("nv12_rgb_neon");