/src/ffmpeg/libswscale/rgb2rgb.h
Line | Count | Source |
1 | | /* |
2 | | * software RGB to RGB converter |
3 | | * pluralize by Software PAL8 to RGB converter |
4 | | * Software YUV to YUV converter |
5 | | * Software YUV to RGB converter |
6 | | * Written by Nick Kurshev. |
7 | | * YUV & runtime CPU stuff by Michael (michaelni@gmx.at) |
8 | | * |
9 | | * This file is part of FFmpeg. |
10 | | * |
11 | | * FFmpeg is free software; you can redistribute it and/or |
12 | | * modify it under the terms of the GNU Lesser General Public |
13 | | * License as published by the Free Software Foundation; either |
14 | | * version 2.1 of the License, or (at your option) any later version. |
15 | | * |
16 | | * FFmpeg is distributed in the hope that it will be useful, |
17 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
18 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
19 | | * Lesser General Public License for more details. |
20 | | * |
21 | | * You should have received a copy of the GNU Lesser General Public |
22 | | * License along with FFmpeg; if not, write to the Free Software |
23 | | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
24 | | */ |
25 | | |
26 | | #ifndef SWSCALE_RGB2RGB_H |
27 | | #define SWSCALE_RGB2RGB_H |
28 | | |
29 | | #include <stdint.h> |
30 | | |
31 | | /* A full collection of RGB to RGB(BGR) converters */ |
32 | | extern void (*rgb24tobgr32)(const uint8_t *src, uint8_t *dst, int src_size); |
33 | | extern void (*rgb24tobgr16)(const uint8_t *src, uint8_t *dst, int src_size); |
34 | | extern void (*rgb24tobgr15)(const uint8_t *src, uint8_t *dst, int src_size); |
35 | | extern void (*rgb32tobgr24)(const uint8_t *src, uint8_t *dst, int src_size); |
36 | | extern void (*rgb32to16)(const uint8_t *src, uint8_t *dst, int src_size); |
37 | | extern void (*rgb32to15)(const uint8_t *src, uint8_t *dst, int src_size); |
38 | | extern void (*rgb15to16)(const uint8_t *src, uint8_t *dst, int src_size); |
39 | | extern void (*rgb15tobgr24)(const uint8_t *src, uint8_t *dst, int src_size); |
40 | | extern void (*rgb15to32)(const uint8_t *src, uint8_t *dst, int src_size); |
41 | | extern void (*rgb16to15)(const uint8_t *src, uint8_t *dst, int src_size); |
42 | | extern void (*rgb16tobgr24)(const uint8_t *src, uint8_t *dst, int src_size); |
43 | | extern void (*rgb16to32)(const uint8_t *src, uint8_t *dst, int src_size); |
44 | | extern void (*rgb24tobgr24)(const uint8_t *src, uint8_t *dst, int src_size); |
45 | | extern void (*rgb24to16)(const uint8_t *src, uint8_t *dst, int src_size); |
46 | | extern void (*rgb24to15)(const uint8_t *src, uint8_t *dst, int src_size); |
47 | | extern void (*rgb32tobgr16)(const uint8_t *src, uint8_t *dst, int src_size); |
48 | | extern void (*rgb32tobgr15)(const uint8_t *src, uint8_t *dst, int src_size); |
49 | | |
50 | | extern void (*shuffle_bytes_0321)(const uint8_t *src, uint8_t *dst, int src_size); |
51 | | extern void (*shuffle_bytes_2103)(const uint8_t *src, uint8_t *dst, int src_size); |
52 | | extern void (*shuffle_bytes_1230)(const uint8_t *src, uint8_t *dst, int src_size); |
53 | | extern void (*shuffle_bytes_3012)(const uint8_t *src, uint8_t *dst, int src_size); |
54 | | extern void (*shuffle_bytes_3210)(const uint8_t *src, uint8_t *dst, int src_size); |
55 | | extern void (*shuffle_bytes_3102)(const uint8_t *src, uint8_t *dst, int src_size); |
56 | | extern void (*shuffle_bytes_2013)(const uint8_t *src, uint8_t *dst, int src_size); |
57 | | extern void (*shuffle_bytes_2130)(const uint8_t *src, uint8_t *dst, int src_size); |
58 | | extern void (*shuffle_bytes_1203)(const uint8_t *src, uint8_t *dst, int src_size); |
59 | | |
60 | | void rgb64tobgr48_nobswap(const uint8_t *src, uint8_t *dst, int src_size); |
61 | | void rgb64tobgr48_bswap(const uint8_t *src, uint8_t *dst, int src_size); |
62 | | void rgb48tobgr48_nobswap(const uint8_t *src, uint8_t *dst, int src_size); |
63 | | void rgb48tobgr48_bswap(const uint8_t *src, uint8_t *dst, int src_size); |
64 | | void rgb64to48_nobswap(const uint8_t *src, uint8_t *dst, int src_size); |
65 | | void rgb64to48_bswap(const uint8_t *src, uint8_t *dst, int src_size); |
66 | | void rgb48tobgr64_nobswap(const uint8_t *src, uint8_t *dst, int src_size); |
67 | | void rgb48tobgr64_bswap(const uint8_t *src, uint8_t *dst, int src_size); |
68 | | void rgb48to64_nobswap(const uint8_t *src, uint8_t *dst, int src_size); |
69 | | void rgb48to64_bswap(const uint8_t *src, uint8_t *dst, int src_size); |
70 | | void rgb24to32(const uint8_t *src, uint8_t *dst, int src_size); |
71 | | void rgb32to24(const uint8_t *src, uint8_t *dst, int src_size); |
72 | | void rgb16tobgr32(const uint8_t *src, uint8_t *dst, int src_size); |
73 | | void rgb16to24(const uint8_t *src, uint8_t *dst, int src_size); |
74 | | void rgb16tobgr16(const uint8_t *src, uint8_t *dst, int src_size); |
75 | | void rgb16tobgr15(const uint8_t *src, uint8_t *dst, int src_size); |
76 | | void rgb15tobgr32(const uint8_t *src, uint8_t *dst, int src_size); |
77 | | void rgb15to24(const uint8_t *src, uint8_t *dst, int src_size); |
78 | | void rgb15tobgr16(const uint8_t *src, uint8_t *dst, int src_size); |
79 | | void rgb15tobgr15(const uint8_t *src, uint8_t *dst, int src_size); |
80 | | void rgb12tobgr12(const uint8_t *src, uint8_t *dst, int src_size); |
81 | | void rgb12to15(const uint8_t *src, uint8_t *dst, int src_size); |
82 | | |
83 | | void x2rgb10to48_nobswap(const uint8_t *src, uint8_t *dst, int src_size); |
84 | | void x2rgb10to48_bswap(const uint8_t *src, uint8_t *dst, int src_size); |
85 | | void x2rgb10tobgr48_nobswap(const uint8_t *src, uint8_t *dst, int src_size); |
86 | | void x2rgb10tobgr48_bswap(const uint8_t *src, uint8_t *dst, int src_size); |
87 | | void x2rgb10to64_nobswap(const uint8_t *src, uint8_t *dst, int src_size); |
88 | | void x2rgb10to64_bswap(const uint8_t *src, uint8_t *dst, int src_size); |
89 | | void x2rgb10tobgr64_nobswap(const uint8_t *src, uint8_t *dst, int src_size); |
90 | | void x2rgb10tobgr64_bswap(const uint8_t *src, uint8_t *dst, int src_size); |
91 | | |
92 | | void ff_rgb24toyv12_c(const uint8_t *src, uint8_t *ydst, uint8_t *udst, |
93 | | uint8_t *vdst, int width, int height, int lumStride, |
94 | | int chromStride, int srcStride, const int32_t *rgb2yuv); |
95 | | |
96 | | extern void (*yv12toyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, |
97 | | int width, int height, |
98 | | int lumStride, int chromStride, int dstStride); |
99 | | |
100 | | extern void (*yuv422ptoyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, |
101 | | int width, int height, |
102 | | int lumStride, int chromStride, int dstStride); |
103 | | |
104 | | extern void (*yv12touyvy)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, |
105 | | int width, int height, |
106 | | int lumStride, int chromStride, int dstStride); |
107 | | |
108 | | extern void (*yuv422ptouyvy)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, |
109 | | int width, int height, |
110 | | int lumStride, int chromStride, int dstStride); |
111 | | |
112 | | /** |
113 | | * Height should be a multiple of 2 and width should be a multiple of 2. |
114 | | * (If this is a problem for anyone then tell me, and I will fix it.) |
115 | | */ |
116 | | extern void (*ff_rgb24toyv12)(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst, |
117 | | int width, int height, |
118 | | int lumStride, int chromStride, int srcStride, |
119 | | const int32_t *rgb2yuv); |
120 | | extern void (*planar2x)(const uint8_t *src, uint8_t *dst, int width, int height, |
121 | | int srcStride, int dstStride); |
122 | | |
123 | | extern void (*interleaveBytes)(const uint8_t *src1, const uint8_t *src2, uint8_t *dst, |
124 | | int width, int height, int src1Stride, |
125 | | int src2Stride, int dstStride); |
126 | | |
127 | | extern void (*deinterleaveBytes)(const uint8_t *src, uint8_t *dst1, uint8_t *dst2, |
128 | | int width, int height, int srcStride, |
129 | | int dst1Stride, int dst2Stride); |
130 | | |
131 | | extern void (*uyvytoyuv420)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, |
132 | | int width, int height, |
133 | | int lumStride, int chromStride, int srcStride); |
134 | | extern void (*uyvytoyuv422)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, |
135 | | int width, int height, |
136 | | int lumStride, int chromStride, int srcStride); |
137 | | extern void (*yuyvtoyuv420)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, |
138 | | int width, int height, |
139 | | int lumStride, int chromStride, int srcStride); |
140 | | extern void (*yuyvtoyuv422)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, |
141 | | int width, int height, |
142 | | int lumStride, int chromStride, int srcStride); |
143 | | |
144 | | void ff_sws_rgb2rgb_init(void); |
145 | | |
146 | | /** |
147 | | * Packs the chroma positions from..to-1 of one line as YUYV when |
148 | | * luma_first is set and as UYVY otherwise. |
149 | | */ |
150 | | static inline void ff_pack_yuv422_line(uint8_t *dst, const uint8_t *ysrc, |
151 | | const uint8_t *usrc, const uint8_t *vsrc, |
152 | | int from, int to, int luma_first) |
153 | 0 | { |
154 | 0 | for (int i = from; i < to; i++) { |
155 | 0 | dst[4 * i + !luma_first] = ysrc[2 * i]; |
156 | 0 | dst[4 * i + 2 + !luma_first] = ysrc[2 * i + 1]; |
157 | 0 | dst[4 * i + luma_first] = usrc[i]; |
158 | 0 | dst[4 * i + 2 + luma_first] = vsrc[i]; |
159 | 0 | } |
160 | 0 | } Unexecuted instantiation: utils.c:ff_pack_yuv422_line Unexecuted instantiation: output.c:ff_pack_yuv422_line Unexecuted instantiation: rgb2rgb.c:ff_pack_yuv422_line Unexecuted instantiation: swscale_unscaled.c:ff_pack_yuv422_line |
161 | | |
162 | | void rgb2rgb_init_aarch64(void); |
163 | | void rgb2rgb_init_riscv(void); |
164 | | void rgb2rgb_init_x86(void); |
165 | | void rgb2rgb_init_loongarch(void); |
166 | | |
167 | | #endif /* SWSCALE_RGB2RGB_H */ |