FFmpeg
Loading...
Searching...
No Matches
swscale_loongarch.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2022 Loongson Technology Corporation Limited
3 * Contributed by Hao Chen(chenhao@loongson.cn)
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22#ifndef SWSCALE_LOONGARCH_SWSCALE_LOONGARCH_H
23#define SWSCALE_LOONGARCH_SWSCALE_LOONGARCH_H
24
25#include "libswscale/swscale.h"
27#include "config.h"
28
29void ff_hscale_8_to_15_lsx(SwsInternal *c, int16_t *dst, int dstW,
30 const uint8_t *src, const int16_t *filter,
31 const int32_t *filterPos, int filterSize);
32
33void ff_hscale_8_to_19_lsx(SwsInternal *c, int16_t *_dst, int dstW,
34 const uint8_t *src, const int16_t *filter,
35 const int32_t *filterPos, int filterSize);
36
37void ff_hscale_16_to_15_lsx(SwsInternal *c, int16_t *_dst, int dstW,
38 const uint8_t *_src, const int16_t *filter,
39 const int32_t *filterPos, int filterSize);
40
41void ff_hscale_16_to_15_sub_lsx(SwsInternal *c, int16_t *_dst, int dstW,
42 const uint8_t *_src, const int16_t *filter,
43 const int32_t *filterPos, int filterSize, int sh);
44
45void ff_hscale_16_to_19_lsx(SwsInternal *c, int16_t *_dst, int dstW,
46 const uint8_t *_src, const int16_t *filter,
47 const int32_t *filterPos, int filterSize);
48
49void ff_hscale_16_to_19_sub_lsx(SwsInternal *c, int16_t *_dst, int dstW,
50 const uint8_t *_src, const int16_t *filter,
51 const int32_t *filterPos, int filterSize, int sh);
52
53void lumRangeFromJpeg_lsx(int16_t *dst, int width);
54void chrRangeFromJpeg_lsx(int16_t *dstU, int16_t *dstV, int width);
55void lumRangeToJpeg_lsx(int16_t *dst, int width);
56void chrRangeToJpeg_lsx(int16_t *dstU, int16_t *dstV, int width);
57
58void planar_rgb_to_uv_lsx(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4],
59 int width, int32_t *rgb2yuv, void *opq);
60
61void planar_rgb_to_y_lsx(uint8_t *_dst, const uint8_t *src[4], int width,
62 int32_t *rgb2yuv, void *opq);
63
64void yuv2planeX_8_lsx(const int16_t *filter, int filterSize,
65 const int16_t **src, uint8_t *dest, int dstW,
66 const uint8_t *dither, int offset);
67
68void yuv2plane1_8_lsx(const int16_t *src, uint8_t *dest, int dstW,
69 const uint8_t *dither, int offset);
70
71void yuy2ToUV_lsx(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1,
72 const uint8_t *src2, int width, uint32_t *unused, void *opq);
73
74void yvy2ToUV_lsx(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1,
75 const uint8_t *src2, int width, uint32_t *unused, void *opq);
76
77void uyvyToUV_lsx(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1,
78 const uint8_t *src2, int width, uint32_t *unused, void *opq);
79
80void nv12ToUV_lsx(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1,
81 const uint8_t *src2, int width, uint32_t *unused, void *opq);
82
83void nv21ToUV_lsx(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1,
84 const uint8_t *src2, int width, uint32_t *unused, void *opq);
85
86void abgrToA_lsx(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1,
87 const uint8_t *unused2, int width, uint32_t *unused, void *opq);
88
89void rgbaToA_lsx(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1,
90 const uint8_t *unused2, int width, uint32_t *unused, void *opq);
91
93
95 yuv2planar1_fn *yuv2plane1,
97 yuv2interleavedX_fn *yuv2nv12cX,
98 yuv2packed1_fn *yuv2packed1,
99 yuv2packed2_fn *yuv2packed2,
100 yuv2packedX_fn *yuv2packedX,
101 yuv2anyX_fn *yuv2anyX);
102
103int yuv420_rgb24_lsx(SwsInternal *c, const uint8_t *const src[], const int srcStride[],
104 int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[]);
105
106int yuv420_bgr24_lsx(SwsInternal *c, const uint8_t *const src[], const int srcStride[],
107 int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[]);
108
109int yuv420_rgba32_lsx(SwsInternal *c, const uint8_t *const src[], const int srcStride[],
110 int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[]);
111
112int yuv420_bgra32_lsx(SwsInternal *c, const uint8_t *const src[], const int srcStride[],
113 int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[]);
114
115int yuv420_argb32_lsx(SwsInternal *c, const uint8_t *const src[], const int srcStride[],
116 int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[]);
117
118int yuv420_abgr32_lsx(SwsInternal *c, const uint8_t *const src[], const int srcStride[],
119 int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[]);
120
121#if HAVE_LASX
122void ff_hscale_8_to_15_lasx(SwsInternal *c, int16_t *dst, int dstW,
123 const uint8_t *src, const int16_t *filter,
124 const int32_t *filterPos, int filterSize);
125
126void ff_hscale_8_to_19_lasx(SwsInternal *c, int16_t *_dst, int dstW,
127 const uint8_t *src, const int16_t *filter,
128 const int32_t *filterPos, int filterSize);
129
130void ff_hscale_16_to_19_lasx(SwsInternal *c, int16_t *_dst, int dstW,
131 const uint8_t *_src, const int16_t *filter,
132 const int32_t *filterPos, int filterSize);
133
134void ff_hscale_16_to_15_lasx(SwsInternal *c, int16_t *dst, int dstW,
135 const uint8_t *_src, const int16_t *filter,
136 const int32_t *filterPos, int filterSize);
137
138void lumRangeFromJpeg_lasx(int16_t *dst, int width);
139void chrRangeFromJpeg_lasx(int16_t *dstU, int16_t *dstV, int width);
140void lumRangeToJpeg_lasx(int16_t *dst, int width);
141void chrRangeToJpeg_lasx(int16_t *dstU, int16_t *dstV, int width);
142
143void planar_rgb_to_uv_lasx(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4],
144 int width, int32_t *rgb2yuv, void *opq);
145
146void planar_rgb_to_y_lasx(uint8_t *_dst, const uint8_t *src[4], int width,
147 int32_t *rgb2yuv, void *opq);
148
149int yuv420_rgb24_lasx(SwsInternal *c, const uint8_t *const src[], const int srcStride[],
150 int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[]);
151
152int yuv420_bgr24_lasx(SwsInternal *c, const uint8_t *const src[], const int srcStride[],
153 int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[]);
154
155int yuv420_rgba32_lasx(SwsInternal *c, const uint8_t *const src[], const int srcStride[],
156 int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[]);
157
158int yuv420_bgra32_lasx(SwsInternal *c, const uint8_t *const src[], const int srcStride[],
159 int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[]);
160
161int yuv420_argb32_lasx(SwsInternal *c, const uint8_t *const src[], const int srcStride[],
162 int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[]);
163
164int yuv420_abgr32_lasx(SwsInternal *c, const uint8_t *const src[], const int srcStride[],
165 int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[]);
166
167void ff_interleave_bytes_lasx(const uint8_t *src1, const uint8_t *src2,
168 uint8_t *dest, int width, int height,
169 int src1Stride, int src2Stride, int dstStride);
170
171void yuv2planeX_8_lasx(const int16_t *filter, int filterSize,
172 const int16_t **src, uint8_t *dest, int dstW,
173 const uint8_t *dither, int offset);
174
175void yuv2plane1_8_lasx(const int16_t *src, uint8_t *dest, int dstW,
176 const uint8_t *dither, int offset);
177
178void yuy2ToUV_lasx(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1,
179 const uint8_t *src2, int width, uint32_t *unused, void *opq);
180
181void yvy2ToUV_lasx(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1,
182 const uint8_t *src2, int width, uint32_t *unused, void *opq);
183
184void uyvyToUV_lasx(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1,
185 const uint8_t *src2, int width, uint32_t *unused, void *opq);
186
187void nv12ToUV_lasx(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1,
188 const uint8_t *src2, int width, uint32_t *unused, void *opq);
189
190void nv21ToUV_lasx(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1,
191 const uint8_t *src2, int width, uint32_t *unused, void *opq);
192
193void abgrToA_lasx(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1,
194 const uint8_t *unused2, int width, uint32_t *unused, void *opq);
195
196void rgbaToA_lasx(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1,
197 const uint8_t *unused2, int width, uint32_t *unused, void *opq);
198
200
202 yuv2planar1_fn *yuv2plane1,
204 yuv2interleavedX_fn *yuv2nv12cX,
205 yuv2packed1_fn *yuv2packed1,
206 yuv2packed2_fn *yuv2packed2,
207 yuv2packedX_fn *yuv2packedX,
208 yuv2anyX_fn *yuv2anyX);
209#endif // #if HAVE_LASX
210
211#endif /* SWSCALE_LOONGARCH_SWSCALE_LOONGARCH_H */
uint8_t * _dst
Definition dsp.h:56
uint8_t ptrdiff_t const uint8_t * _src
Definition dsp.h:56
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition dsp.h:87
int32_t
static void fn rgb2yuv(uint8_t *_yuv[3], const ptrdiff_t yuv_stride[3], int16_t *rgb[3], ptrdiff_t s, int w, int h, const int16_t rgb2yuv_coeffs[3][3][8], const int16_t yuv_offset[8])
const pixel * src2
void planar_rgb_to_uv_lasx(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4], int width, int32_t *rgb2yuv, void *opq)
Definition input_lasx.c:25
av_cold void ff_sws_init_input_lasx(SwsInternal *c)
Definition input_lasx.c:204
void planar_rgb_to_y_lasx(uint8_t *_dst, const uint8_t *src[4], int width, int32_t *rgb2yuv, void *opq)
Definition input_lasx.c:127
unsigned offset
Definition libaomenc.c:763
#define av_cold
Definition attributes.h:117
void yuv2planeX_8_lasx(const int16_t *filter, int filterSize, const int16_t **src, uint8_t *dest, int dstW, const uint8_t *dither, int offset)
Definition output_lasx.c:25
av_cold void ff_sws_init_output_lasx(SwsInternal *c, yuv2planar1_fn *yuv2plane1, yuv2planarX_fn *yuv2planeX, yuv2interleavedX_fn *yuv2nv12cX, yuv2packed1_fn *yuv2packed1, yuv2packed2_fn *yuv2packed2, yuv2packedX_fn *yuv2packedX, yuv2anyX_fn *yuv2anyX)
void ff_interleave_bytes_lasx(const uint8_t *src1, const uint8_t *src2, uint8_t *dest, int width, int height, int src1Stride, int src2Stride, int dstStride)
external API header
void(* yuv2packed1_fn)(SwsInternal *c, const int16_t *lumSrc, const int16_t *chrUSrc[2], const int16_t *chrVSrc[2], const int16_t *alpSrc, uint8_t *dest, int dstW, int uvalpha, int y)
Write one line of horizontally scaled Y/U/V/A to packed-pixel YUV/RGB output without any additional v...
void(* yuv2planarX_fn)(const int16_t *filter, int filterSize, const int16_t **src, uint8_t *dest, int dstW, const uint8_t *dither, int offset)
Write one line of horizontally scaled data to planar output with multi-point vertical scaling between...
void(* yuv2packedX_fn)(SwsInternal *c, const int16_t *lumFilter, const int16_t **lumSrc, int lumFilterSize, const int16_t *chrFilter, const int16_t **chrUSrc, const int16_t **chrVSrc, int chrFilterSize, const int16_t **alpSrc, uint8_t *dest, int dstW, int y)
Write one line of horizontally scaled Y/U/V/A to packed-pixel YUV/RGB output by doing multi-point ver...
void(* yuv2planar1_fn)(const int16_t *src, uint8_t *dest, int dstW, const uint8_t *dither, int offset)
Write one line of horizontally scaled data to planar output without any additional vertical scaling (...
void(* yuv2anyX_fn)(SwsInternal *c, const int16_t *lumFilter, const int16_t **lumSrc, int lumFilterSize, const int16_t *chrFilter, const int16_t **chrUSrc, const int16_t **chrVSrc, int chrFilterSize, const int16_t **alpSrc, uint8_t **dest, int dstW, int y)
Write one line of horizontally scaled Y/U/V/A to YUV/RGB output by doing multi-point vertical scaling...
void(* yuv2packed2_fn)(SwsInternal *c, const int16_t *lumSrc[2], const int16_t *chrUSrc[2], const int16_t *chrVSrc[2], const int16_t *alpSrc[2], uint8_t *dest, int dstW, int yalpha, int uvalpha, int y)
Write one line of horizontally scaled Y/U/V/A to packed-pixel YUV/RGB output by doing bilinear scalin...
void(* yuv2interleavedX_fn)(enum AVPixelFormat dstFormat, const uint8_t *chrDither, const int16_t *chrFilter, int chrFilterSize, const int16_t **chrUSrc, const int16_t **chrVSrc, uint8_t *dest, int dstW)
Write one line of horizontally scaled chroma to interleaved output with multi-point vertical scaling ...
void ff_hscale_16_to_19_lasx(SwsInternal *c, int16_t *_dst, int dstW, const uint8_t *_src, const int16_t *filter, const int32_t *filterPos, int filterSize)
void ff_hscale_8_to_15_lasx(SwsInternal *c, int16_t *dst, int dstW, const uint8_t *src, const int16_t *filter, const int32_t *filterPos, int filterSize)
void ff_hscale_16_to_15_lasx(SwsInternal *c, int16_t *dst, int dstW, const uint8_t *_src, const int16_t *filter, const int32_t *filterPos, int filterSize)
void ff_hscale_8_to_19_lasx(SwsInternal *c, int16_t *_dst, int dstW, const uint8_t *src, const int16_t *filter, const int32_t *filterPos, int filterSize)
void ff_hscale_8_to_15_lsx(SwsInternal *c, int16_t *dst, int dstW, const uint8_t *src, const int16_t *filter, const int32_t *filterPos, int filterSize)
void ff_hscale_8_to_19_lsx(SwsInternal *c, int16_t *_dst, int dstW, const uint8_t *src, const int16_t *filter, const int32_t *filterPos, int filterSize)
int yuv420_argb32_lsx(SwsInternal *c, const uint8_t *const src[], const int srcStride[], int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[])
void ff_hscale_16_to_15_sub_lsx(SwsInternal *c, int16_t *_dst, int dstW, const uint8_t *_src, const int16_t *filter, const int32_t *filterPos, int filterSize, int sh)
av_cold void ff_sws_init_input_lsx(SwsInternal *c)
Definition input_lsx.c:24
void lumRangeToJpeg_lsx(int16_t *dst, int width)
void yuy2ToUV_lsx(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, int width, uint32_t *unused, void *opq)
void planar_rgb_to_y_lsx(uint8_t *_dst, const uint8_t *src[4], int width, int32_t *rgb2yuv, void *opq)
void nv12ToUV_lsx(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, int width, uint32_t *unused, void *opq)
int yuv420_rgba32_lsx(SwsInternal *c, const uint8_t *const src[], const int srcStride[], int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[])
void nv21ToUV_lsx(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, int width, uint32_t *unused, void *opq)
int yuv420_bgra32_lsx(SwsInternal *c, const uint8_t *const src[], const int srcStride[], int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[])
int yuv420_rgb24_lsx(SwsInternal *c, const uint8_t *const src[], const int srcStride[], int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[])
void ff_hscale_16_to_15_lsx(SwsInternal *c, int16_t *_dst, int dstW, const uint8_t *_src, const int16_t *filter, const int32_t *filterPos, int filterSize)
Definition swscale_lsx.c:26
void yuv2planeX_8_lsx(const int16_t *filter, int filterSize, const int16_t **src, uint8_t *dest, int dstW, const uint8_t *dither, int offset)
void rgbaToA_lsx(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *unused, void *opq)
void uyvyToUV_lsx(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, int width, uint32_t *unused, void *opq)
av_cold void ff_sws_init_output_lsx(SwsInternal *c, yuv2planar1_fn *yuv2plane1, yuv2planarX_fn *yuv2planeX, yuv2interleavedX_fn *yuv2nv12cX, yuv2packed1_fn *yuv2packed1, yuv2packed2_fn *yuv2packed2, yuv2packedX_fn *yuv2packedX, yuv2anyX_fn *yuv2anyX)
void chrRangeFromJpeg_lsx(int16_t *dstU, int16_t *dstV, int width)
void ff_hscale_16_to_19_lsx(SwsInternal *c, int16_t *_dst, int dstW, const uint8_t *_src, const int16_t *filter, const int32_t *filterPos, int filterSize)
Definition swscale_lsx.c:42
void ff_hscale_16_to_19_sub_lsx(SwsInternal *c, int16_t *_dst, int dstW, const uint8_t *_src, const int16_t *filter, const int32_t *filterPos, int filterSize, int sh)
void yvy2ToUV_lsx(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, int width, uint32_t *unused, void *opq)
void planar_rgb_to_uv_lsx(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4], int width, int32_t *rgb2yuv, void *opq)
void chrRangeToJpeg_lsx(int16_t *dstU, int16_t *dstV, int width)
void yuv2plane1_8_lsx(const int16_t *src, uint8_t *dest, int dstW, const uint8_t *dither, int offset)
void abgrToA_lsx(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *unused, void *opq)
int yuv420_bgr24_lsx(SwsInternal *c, const uint8_t *const src[], const int srcStride[], int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[])
int yuv420_abgr32_lsx(SwsInternal *c, const uint8_t *const src[], const int srcStride[], int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[])
void lumRangeFromJpeg_lsx(int16_t *dst, int width)
static void FUNC yuv2planeX(const int16_t *filter, int filterSize, const int16_t **src, uint8_t *dest, int dstW, const uint8_t *dither, int offset)
void(* filter)(uint8_t *src, ptrdiff_t stride, int qscale)
Definition h263dsp.c:29
#define src1
Definition h264pred.c:141
#define src
Definition vp8dsp.c:248
#define height
Definition dsp.h:89
#define width
Definition dsp.h:89
static const uint16_t dither[8][8]
Definition vf_gradfun.c:46
static double c[64]