35 #define FRONT_CENTER 2
36 #define LOW_FREQUENCY 3
39 #define FRONT_LEFT_OF_CENTER 6
40 #define FRONT_RIGHT_OF_CENTER 7
45 #define TOP_FRONT_LEFT 12
46 #define TOP_FRONT_CENTER 13
47 #define TOP_FRONT_RIGHT 14
48 #define TOP_BACK_LEFT 15
49 #define TOP_BACK_CENTER 16
50 #define TOP_BACK_RIGHT 17
51 #define STEREO_LEFT 29
52 #define STEREO_RIGHT 30
55 #define SURROUND_DIRECT_LEFT 33
56 #define SURROUND_DIRECT_RIGHT 34
57 #define LOW_FREQUENCY_2 35
59 #define SQRT3_2 1.22474487139158904909
63 return (!layout || (layout & (layout - 1)));
88 double center_mix_level,
double surround_mix_level,
89 double lfe_mix_level,
int normalize,
90 double *matrix_out,
int stride,
93 int i, j, out_i, out_j;
94 double matrix[64][64] = {{0}};
97 int in_channels, out_channels;
103 unaccounted = in_layout & ~out_layout;
108 memset(matrix_out, 0, out_channels * stride *
sizeof(*matrix_out));
121 for (i = 0; i < 64; i++) {
122 if (in_layout & out_layout & (1ULL << i))
136 if (out_layout & AV_CH_FRONT_CENTER) {
140 if (in_layout & AV_CH_FRONT_CENTER)
156 if (unaccounted & (AV_CH_BACK_LEFT | AV_CH_SIDE_LEFT)) {
167 }
else if (out_layout & AV_CH_FRONT_CENTER) {
174 if (out_layout & AV_CH_BACK_CENTER) {
180 if (in_layout & AV_CH_SIDE_LEFT) {
202 }
else if (out_layout & AV_CH_FRONT_CENTER) {
210 if (out_layout & AV_CH_BACK_LEFT) {
213 if (in_layout & AV_CH_BACK_LEFT) {
220 }
else if (out_layout & AV_CH_BACK_CENTER) {
238 }
else if (out_layout & AV_CH_FRONT_CENTER) {
249 }
else if (out_layout & AV_CH_FRONT_CENTER) {
257 if (out_layout & AV_CH_FRONT_CENTER) {
268 for (out_i = i = 0; out_i < out_channels && i < 64; i++) {
270 for (out_j = j = 0; out_j < in_channels && j < 64; j++) {
271 matrix_out[out_i * stride + out_j] = matrix[i][j];
272 sum += fabs(matrix[i][j]);
273 if (in_layout & (1ULL << j))
276 maxcoef =
FFMAX(maxcoef, sum);
277 if (out_layout & (1ULL << i))
282 if (normalize && maxcoef > 1.0) {
283 for (i = 0; i < out_channels; i++)
284 for (j = 0; j < in_channels; j++)
285 matrix_out[i * stride + j] /= maxcoef;