FFmpeg
Loading...
Searching...
No Matches
rgb2rgb.c
Go to the documentation of this file.
1/*
2 * This file is part of FFmpeg.
3 *
4 * FFmpeg is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * FFmpeg is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with FFmpeg; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
19#include <stdint.h>
20
21#include "config.h"
24#include "libavutil/cpu.h"
25#include "libavutil/bswap.h"
26#include "libswscale/rgb2rgb.h"
27#include "libswscale/swscale.h"
29
30// Only handle width aligned to 16
31void ff_rgb24toyv12_neon(const uint8_t *src, uint8_t *ydst, uint8_t *udst,
32 uint8_t *vdst, int width, int height, int lumStride,
33 int chromStride, int srcStride, const int32_t *rgb2yuv);
34
35static void rgb24toyv12(const uint8_t *src, uint8_t *ydst, uint8_t *udst,
36 uint8_t *vdst, int width, int height, int lumStride,
37 int chromStride, int srcStride, const int32_t *rgb2yuv)
38{
39 int width_align = width & (~15);
40
41 if (width_align > 0)
42 ff_rgb24toyv12_neon(src, ydst, udst, vdst, width_align, height,
43 lumStride, chromStride, srcStride, rgb2yuv);
44 if (width_align < width) {
45 src += width_align * 3;
46 ydst += width_align;
47 udst += width_align / 2;
48 vdst += width_align / 2;
49 ff_rgb24toyv12_c(src, ydst, udst, vdst, width - width_align, height,
50 lumStride, chromStride, srcStride, rgb2yuv);
51 }
52}
53
54void ff_rgb24tobgr24_neon(const uint8_t *src, uint8_t *dst, int src_size);
55void ff_rgb32tobgr24_neon(const uint8_t *src, uint8_t *dst, int src_size);
56void ff_rgb24tobgr32_neon(const uint8_t *src, uint8_t *dst, int src_size);
57
58void ff_interleave_bytes_neon(const uint8_t *src1, const uint8_t *src2,
59 uint8_t *dest, int width, int height,
60 int src1Stride, int src2Stride, int dstStride);
61void ff_deinterleave_bytes_neon(const uint8_t *src, uint8_t *dst1, uint8_t *dst2,
62 int width, int height, int srcStride,
63 int dst1Stride, int dst2Stride);
64void ff_shuffle_bytes_0321_neon(const uint8_t *src, uint8_t *dst, int src_size);
65void ff_shuffle_bytes_2103_neon(const uint8_t *src, uint8_t *dst, int src_size);
66void ff_shuffle_bytes_1230_neon(const uint8_t *src, uint8_t *dst, int src_size);
67void ff_shuffle_bytes_3012_neon(const uint8_t *src, uint8_t *dst, int src_size);
68void ff_shuffle_bytes_3210_neon(const uint8_t *src, uint8_t *dst, int src_size);
69void ff_shuffle_bytes_3102_neon(const uint8_t *src, uint8_t *dst, int src_size);
70void ff_shuffle_bytes_2013_neon(const uint8_t *src, uint8_t *dst, int src_size);
71void ff_shuffle_bytes_2130_neon(const uint8_t *src, uint8_t *dst, int src_size);
72void ff_shuffle_bytes_1203_neon(const uint8_t *src, uint8_t *dst, int src_size);
73
74void ff_uyvytoyuv422_neon(uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
75 const uint8_t *src, int width, int height,
76 int lumStride, int chromStride, int srcStride);
77void ff_uyvytoyuv420_neon(uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
78 const uint8_t *src, int width, int height,
79 int lumStride, int chromStride, int srcStride);
80void ff_yuyvtoyuv420_neon(uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
81 const uint8_t *src, int width, int height,
82 int lumStride, int chromStride, int srcStride);
83void ff_yuyvtoyuv422_neon(uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
84 const uint8_t *src, int width, int height,
85 int lumStride, int chromStride, int srcStride);
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition dsp.h:87
void ff_yuyvtoyuv420_neon(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, int width, int height, int lumStride, int chromStride, int srcStride)
void ff_uyvytoyuv422_neon(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, int width, int height, int lumStride, int chromStride, int srcStride)
void ff_rgb24tobgr32_neon(const uint8_t *src, uint8_t *dst, int src_size)
void ff_yuyvtoyuv422_neon(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, int width, int height, int lumStride, int chromStride, int srcStride)
void ff_shuffle_bytes_3210_neon(const uint8_t *src, uint8_t *dst, int src_size)
void ff_interleave_bytes_neon(const uint8_t *src1, const uint8_t *src2, uint8_t *dest, int width, int height, int src1Stride, int src2Stride, int dstStride)
void ff_shuffle_bytes_2130_neon(const uint8_t *src, uint8_t *dst, int src_size)
void ff_rgb24tobgr24_neon(const uint8_t *src, uint8_t *dst, int src_size)
void ff_deinterleave_bytes_neon(const uint8_t *src, uint8_t *dst1, uint8_t *dst2, int width, int height, int srcStride, int dst1Stride, int dst2Stride)
void ff_shuffle_bytes_0321_neon(const uint8_t *src, uint8_t *dst, int src_size)
void ff_uyvytoyuv420_neon(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, int width, int height, int lumStride, int chromStride, int srcStride)
void ff_shuffle_bytes_3102_neon(const uint8_t *src, uint8_t *dst, int src_size)
void ff_shuffle_bytes_2103_neon(const uint8_t *src, uint8_t *dst, int src_size)
void ff_rgb24toyv12_neon(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst, int width, int height, int lumStride, int chromStride, int srcStride, const int32_t *rgb2yuv)
void ff_shuffle_bytes_3012_neon(const uint8_t *src, uint8_t *dst, int src_size)
void ff_shuffle_bytes_1203_neon(const uint8_t *src, uint8_t *dst, int src_size)
void ff_shuffle_bytes_2013_neon(const uint8_t *src, uint8_t *dst, int src_size)
void ff_shuffle_bytes_1230_neon(const uint8_t *src, uint8_t *dst, int src_size)
av_cold void rgb2rgb_init_aarch64(void)
Definition rgb2rgb.c:86
void ff_rgb32tobgr24_neon(const uint8_t *src, uint8_t *dst, int src_size)
static void rgb24toyv12(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst, int width, int height, int lumStride, int chromStride, int srcStride, const int32_t *rgb2yuv)
Definition rgb2rgb.c:35
int32_t
byte swapping routines
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
#define have_neon(flags)
Definition cpu.h:26
Macro definitions for various function/variable attributes.
#define av_cold
Definition attributes.h:117
static atomic_int cpu_flags
Definition cpu.c:56
int av_get_cpu_flags(void)
Return the flags which specify extensions supported by the CPU.
Definition cpu.c:109
void(* rgb24tobgr32)(const uint8_t *src, uint8_t *dst, int src_size)
Definition rgb2rgb.c:38
void(* shuffle_bytes_2013)(const uint8_t *src, uint8_t *dst, int src_size)
Definition rgb2rgb.c:60
void(* ff_rgb24toyv12)(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst, int width, int height, int lumStride, int chromStride, int srcStride, const int32_t *rgb2yuv)
Height should be a multiple of 2 and width should be a multiple of 2.
Definition rgb2rgb.c:81
void(* shuffle_bytes_3102)(const uint8_t *src, uint8_t *dst, int src_size)
Definition rgb2rgb.c:59
void(* uyvytoyuv420)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, int width, int height, int lumStride, int chromStride, int srcStride)
Definition rgb2rgb.c:94
void(* shuffle_bytes_2130)(const uint8_t *src, uint8_t *dst, int src_size)
Definition rgb2rgb.c:61
void(* shuffle_bytes_3210)(const uint8_t *src, uint8_t *dst, int src_size)
Definition rgb2rgb.c:58
void(* shuffle_bytes_3012)(const uint8_t *src, uint8_t *dst, int src_size)
Definition rgb2rgb.c:57
void(* shuffle_bytes_2103)(const uint8_t *src, uint8_t *dst, int src_size)
Definition rgb2rgb.c:55
void(* shuffle_bytes_1203)(const uint8_t *src, uint8_t *dst, int src_size)
Definition rgb2rgb.c:62
void(* yuyvtoyuv420)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, int width, int height, int lumStride, int chromStride, int srcStride)
Definition rgb2rgb.c:100
void(* interleaveBytes)(const uint8_t *src1, const uint8_t *src2, uint8_t *dst, int width, int height, int src1Stride, int src2Stride, int dstStride)
Definition rgb2rgb.c:88
void(* shuffle_bytes_1230)(const uint8_t *src, uint8_t *dst, int src_size)
Definition rgb2rgb.c:56
void(* rgb32tobgr24)(const uint8_t *src, uint8_t *dst, int src_size)
Definition rgb2rgb.c:35
void(* deinterleaveBytes)(const uint8_t *src, uint8_t *dst1, uint8_t *dst2, int width, int height, int srcStride, int dst1Stride, int dst2Stride)
Definition rgb2rgb.c:91
void(* yuyvtoyuv422)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, int width, int height, int lumStride, int chromStride, int srcStride)
Definition rgb2rgb.c:103
void(* uyvytoyuv422)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, int width, int height, int lumStride, int chromStride, int srcStride)
Definition rgb2rgb.c:97
void(* rgb24tobgr24)(const uint8_t *src, uint8_t *dst, int src_size)
Definition rgb2rgb.c:39
void(* shuffle_bytes_0321)(const uint8_t *src, uint8_t *dst, int src_size)
Definition rgb2rgb.c:54
void ff_rgb24toyv12_c(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst, int width, int height, int lumStride, int chromStride, int srcStride, const int32_t *rgb2yuv)
width should be a multiple of 2.
external API header
#define src1
Definition h264pred.c:141
#define src
Definition vp8dsp.c:248
#define height
Definition dsp.h:89
#define width
Definition dsp.h:89