21#if defined(TEMPLATE_REMATRIX_FLT)
26# define RENAME(x) x ## _float
27#elif defined(TEMPLATE_REMATRIX_DBL)
32# define RENAME(x) x ## _double
33#elif defined(TEMPLATE_REMATRIX_S16)
34# define SAMPLE int16_t
38# define R(x) av_clip_int16(((x) + 16384)>>15)
39# define RENAME(x) x ## _clip_s16
41# define R(x) (((x) + 16384)>>15)
42# define RENAME(x) x ## _s16
44#elif defined(TEMPLATE_REMATRIX_S32)
45# define R(x) (((x) + 16384)>>15)
46# define SAMPLE int32_t
49# define RENAME(x) x ## _s32
52static void RENAME(sum2)(
void *out_,
const void *in1_,
const void *in2_,
55 const SAMPLE *in1 = in1_, *in2 = in2_;
56 const COEFF *coeffp = coeffp_;
59 INTER coeff1 = coeffp[index1];
60 INTER coeff2 = coeffp[index2];
63 out[
i] =
R(coeff1*in1[
i] + coeff2*in2[
i]);
66static void RENAME(
copy)(
void *out_,
const void *in_,
const void *coeffp_,
69 const COEFF *coeffp = coeffp_;
78static void RENAME(mix6to2)(uint8_t *
const *out_,
const uint8_t *
const *in_,
81 const SAMPLE *
const *
const in = (
const SAMPLE *
const *)in_;
83 const COEFF *coeffp = coeffp_;
87 INTER t = in[2][
i]*(INTER)coeffp[0*6+2] + in[3][
i]*(INTER)coeffp[0*6+3];
88 out[0][
i] =
R(t + in[0][
i]*(INTER)coeffp[0*6+0] + in[4][
i]*(INTER)coeffp[0*6+4]);
89 out[1][
i] =
R(t + in[1][
i]*(INTER)coeffp[1*6+1] + in[5][
i]*(INTER)coeffp[1*6+5]);
93static void RENAME(mix8to2)(uint8_t *
const *out_,
const uint8_t *
const *in_,
96 const SAMPLE *
const *
const in = (
const SAMPLE *
const *)in_;
98 const COEFF *coeffp = coeffp_;
102 INTER t = in[2][
i]*(INTER)coeffp[0*8+2] + in[3][
i]*(INTER)coeffp[0*8+3];
103 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]);
104 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]);
113 &&
s->matrix[0][2] ==
s->matrix[1][2] &&
s->matrix[0][3] ==
s->matrix[1][3]
114 && !
s->matrix[0][1] && !
s->matrix[0][5] && !
s->matrix[1][0] && !
s->matrix[1][4]
120 &&
s->matrix[0][2] ==
s->matrix[1][2] &&
s->matrix[0][3] ==
s->matrix[1][3]
121 && !
s->matrix[0][1] && !
s->matrix[0][5] && !
s->matrix[1][0] && !
s->matrix[1][4]
122 && !
s->matrix[0][7] && !
s->matrix[1][6]
#define i(width, name, range_min, range_max)
#define AV_CHANNEL_LAYOUT_5POINT1_BACK
#define AV_CHANNEL_LAYOUT_STEREO
int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1)
Check whether two channel layouts are semantically the same, i.e.
#define AV_CHANNEL_LAYOUT_5POINT1
#define AV_CHANNEL_LAYOUT_7POINT1
#define SAMPLE(tab, x, y)
Value of the luma sample at position (x, y) in the 2D array tab.
An AVChannelLayout holds information about the channel layout of audio data.
The libswresample context.
void mix_any_func_type(uint8_t *const *out, const uint8_t *const *in1, const void *coeffp, integer len)
static const double coeff[2][5]
static void copy(const float *p1, float *p2, const int length)