FFmpeg
libswresample
rematrix_template.c
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2011-2012 Michael Niedermayer (michaelni@gmx.at)
3
*
4
* This file is part of libswresample
5
*
6
* libswresample is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
10
*
11
* libswresample 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 GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with libswresample; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
#if defined(TEMPLATE_REMATRIX_FLT)
22
# define R(x) x
23
# define SAMPLE float
24
# define COEFF float
25
# define INTER float
26
# define RENAME(x) x ## _float
27
#elif defined(TEMPLATE_REMATRIX_DBL)
28
# define R(x) x
29
# define SAMPLE double
30
# define COEFF double
31
# define INTER double
32
# define RENAME(x) x ## _double
33
#elif defined(TEMPLATE_REMATRIX_S16)
34
# define SAMPLE int16_t
35
# define COEFF int
36
# define INTER int
37
# ifdef TEMPLATE_CLIP
38
# define R(x) av_clip_int16(((x) + 16384)>>15)
39
# define RENAME(x) x ## _clip_s16
40
# else
41
# define R(x) (((x) + 16384)>>15)
42
# define RENAME(x) x ## _s16
43
# endif
44
#elif defined(TEMPLATE_REMATRIX_S32)
45
# define R(x) (((x) + 16384)>>15)
46
# define SAMPLE int32_t
47
# define COEFF int
48
# define INTER int64_t
49
# define RENAME(x) x ## _s32
50
#endif
51
52
typedef
void (
RENAME
(
mix_any_func_type
))(
SAMPLE
**
out
,
const
SAMPLE
**in1, COEFF *coeffp,
integer
len
);
53
54
static
void
RENAME
(sum2)(
SAMPLE
*
out
,
const
SAMPLE
*in1,
const
SAMPLE
*in2, COEFF *coeffp,
integer
index1,
integer
index2,
integer
len
){
55
int
i
;
56
INTER coeff1 = coeffp[index1];
57
INTER coeff2 = coeffp[index2];
58
59
for
(
i
=0;
i
<
len
;
i
++)
60
out
[
i
] =
R
(coeff1*in1[
i
] + coeff2*in2[
i
]);
61
}
62
63
static
void
RENAME
(
copy
)(
SAMPLE
*
out
,
const
SAMPLE
*in, COEFF *coeffp,
integer
index
,
integer
len
){
64
int
i
;
65
INTER
coeff
= coeffp[
index
];
66
for
(
i
=0;
i
<
len
;
i
++)
67
out
[
i
] =
R
(
coeff
*in[
i
]);
68
}
69
70
static
void
RENAME
(mix6to2)(
SAMPLE
**
out
,
const
SAMPLE
**in, COEFF *coeffp,
integer
len
){
71
int
i
;
72
73
for
(
i
=0;
i
<
len
;
i
++) {
74
INTER t = in[2][
i
]*(INTER)coeffp[0*6+2] + in[3][
i
]*(INTER)coeffp[0*6+3];
75
out
[0][
i
] =
R
(t + in[0][
i
]*(INTER)coeffp[0*6+0] + in[4][
i
]*(INTER)coeffp[0*6+4]);
76
out
[1][
i
] =
R
(t + in[1][
i
]*(INTER)coeffp[1*6+1] + in[5][
i
]*(INTER)coeffp[1*6+5]);
77
}
78
}
79
80
static
void
RENAME
(mix8to2)(
SAMPLE
**
out
,
const
SAMPLE
**in, COEFF *coeffp,
integer
len
){
81
int
i
;
82
83
for
(
i
=0;
i
<
len
;
i
++) {
84
INTER t = in[2][
i
]*(INTER)coeffp[0*8+2] + in[3][
i
]*(INTER)coeffp[0*8+3];
85
out
[0][
i
] =
R
(t + in[0][
i
]*(INTER)coeffp[0*8+0] + in[4][
i
]*(INTER)coeffp[0*8+4] + in[6][
i
]*(INTER)coeffp[0*8+6]);
86
out
[1][
i
] =
R
(t + in[1][
i
]*(INTER)coeffp[1*8+1] + in[5][
i
]*(INTER)coeffp[1*8+5] + in[7][
i
]*(INTER)coeffp[1*8+7]);
87
}
88
}
89
90
static
RENAME
(
mix_any_func_type
) *
RENAME
(get_mix_any_func)(
SwrContext
*
s
){
91
if
(
s
->out_ch_layout ==
AV_CH_LAYOUT_STEREO
&& (
s
->in_ch_layout ==
AV_CH_LAYOUT_5POINT1
||
s
->in_ch_layout ==
AV_CH_LAYOUT_5POINT1_BACK
)
92
&&
s
->matrix[0][2] ==
s
->matrix[1][2] &&
s
->matrix[0][3] ==
s
->matrix[1][3]
93
&& !
s
->matrix[0][1] && !
s
->matrix[0][5] && !
s
->matrix[1][0] && !
s
->matrix[1][4]
94
)
95
return
RENAME
(mix6to2);
96
97
if
(
s
->out_ch_layout ==
AV_CH_LAYOUT_STEREO
&&
s
->in_ch_layout ==
AV_CH_LAYOUT_7POINT1
98
&&
s
->matrix[0][2] ==
s
->matrix[1][2] &&
s
->matrix[0][3] ==
s
->matrix[1][3]
99
&& !
s
->matrix[0][1] && !
s
->matrix[0][5] && !
s
->matrix[1][0] && !
s
->matrix[1][4]
100
&& !
s
->matrix[0][7] && !
s
->matrix[1][6]
101
)
102
return
RENAME
(mix8to2);
103
104
return
NULL
;
105
}
106
107
#undef R
108
#undef SAMPLE
109
#undef COEFF
110
#undef INTER
111
#undef RENAME
mix_any_func_type
void() mix_any_func_type(uint8_t **out, const uint8_t **in1, void *coeffp, integer len)
Definition:
swresample_internal.h:43
out
FILE * out
Definition:
movenc.c:54
index
fg index
Definition:
ffmpeg_filter.c:167
R
#define R
Definition:
huffyuvdsp.h:34
integer
int integer
Definition:
swresample_internal.h:37
AV_CH_LAYOUT_STEREO
#define AV_CH_LAYOUT_STEREO
Definition:
channel_layout.h:91
s
#define s(width, name)
Definition:
cbs_vp9.c:257
SwrContext
The libswresample context.
Definition:
swresample_internal.h:95
NULL
#define NULL
Definition:
coverity.c:32
AV_CH_LAYOUT_5POINT1
#define AV_CH_LAYOUT_5POINT1
Definition:
channel_layout.h:101
copy
static void copy(const float *p1, float *p2, const int length)
Definition:
vf_vaguedenoiser.c:187
AV_CH_LAYOUT_5POINT1_BACK
#define AV_CH_LAYOUT_5POINT1_BACK
Definition:
channel_layout.h:103
i
#define i(width, name, range_min, range_max)
Definition:
cbs_h2645.c:271
RENAME
#define RENAME(name)
Definition:
ffv1.h:195
AV_CH_LAYOUT_7POINT1
#define AV_CH_LAYOUT_7POINT1
Definition:
channel_layout.h:112
len
int len
Definition:
vorbis_enc_data.h:426
SAMPLE
#define SAMPLE(tab, x, y)
Value of the luma sample at position (x, y) in the 2D array tab.
Definition:
hevcdec.h:74
coeff
static const double coeff[2][5]
Definition:
vf_owdenoise.c:78
Generated on Wed Aug 24 2022 21:38:31 for FFmpeg by
1.8.17