2 |
|
|
3 |
#define FIX(X) (1 << 16) / (X) + 1 |
#define FIX(X) (1 << 16) / (X) + 1 |
4 |
|
|
5 |
uint8_t intra_matrix_changed; |
uint8_t custom_intra_matrix = 0; |
6 |
uint8_t inter_matrix_changed; |
uint8_t custom_inter_matrix = 0; |
7 |
|
|
8 |
|
uint8_t default_intra_matrix[64] = { |
9 |
|
8,17,18,19,21,23,25,27, |
10 |
|
17,18,19,21,23,25,27,28, |
11 |
|
20,21,22,23,24,26,28,30, |
12 |
|
21,22,23,24,26,28,30,32, |
13 |
|
22,23,24,26,28,30,32,35, |
14 |
|
23,24,26,28,30,32,35,38, |
15 |
|
25,26,28,30,32,35,38,41, |
16 |
|
27,28,30,32,35,38,41,45 |
17 |
|
}; |
18 |
|
|
19 |
int16_t intra_matrix[64] = { |
int16_t intra_matrix[64] = { |
20 |
8,17,18,19,21,23,25,27, |
8,17,18,19,21,23,25,27, |
38 |
FIX(27),FIX(28),FIX(30),FIX(32),FIX(35),FIX(38),FIX(41),FIX(45) |
FIX(27),FIX(28),FIX(30),FIX(32),FIX(35),FIX(38),FIX(41),FIX(45) |
39 |
}; |
}; |
40 |
|
|
41 |
|
uint8_t default_inter_matrix[64] = { |
42 |
|
16,17,18,19,20,21,22,23, |
43 |
|
17,18,19,20,21,22,23,24, |
44 |
|
18,19,20,21,22,23,24,25, |
45 |
|
19,20,21,22,23,24,26,27, |
46 |
|
20,21,22,23,25,26,27,28, |
47 |
|
21,22,23,24,26,27,28,30, |
48 |
|
22,23,24,26,27,28,30,31, |
49 |
|
23,24,25,27,28,30,31,33 |
50 |
|
}; |
51 |
|
|
52 |
int16_t inter_matrix[64] = { |
int16_t inter_matrix[64] = { |
53 |
16,17,18,19,20,21,22,23, |
16,17,18,19,20,21,22,23, |
54 |
17,18,19,20,21,22,23,24, |
17,18,19,20,21,22,23,24, |
72 |
}; |
}; |
73 |
|
|
74 |
uint8_t get_intra_matrix_status(void) { |
uint8_t get_intra_matrix_status(void) { |
75 |
return intra_matrix_changed; |
return custom_intra_matrix; |
76 |
} |
} |
77 |
|
|
78 |
uint8_t get_inter_matrix_status(void) { |
uint8_t get_inter_matrix_status(void) { |
79 |
return inter_matrix_changed; |
return custom_inter_matrix; |
80 |
} |
} |
81 |
|
|
82 |
void set_intra_matrix_status(uint8_t status) { |
void set_intra_matrix_status(uint8_t status) { |
83 |
intra_matrix_changed = status; |
custom_intra_matrix = status; |
84 |
} |
} |
85 |
|
|
86 |
void set_inter_matrix_status(uint8_t status) { |
void set_inter_matrix_status(uint8_t status) { |
87 |
inter_matrix_changed = status; |
custom_inter_matrix = status; |
88 |
} |
} |
89 |
|
|
90 |
int16_t *get_intra_matrix(void) { |
int16_t *get_intra_matrix(void) { |
91 |
return intra_matrix; |
return intra_matrix; |
92 |
} |
} |
93 |
|
|
94 |
int16_t *get_inter_matrix(void) { |
uint8_t *get_default_intra_matrix(void) { |
95 |
return inter_matrix; |
return default_intra_matrix; |
96 |
|
} |
97 |
|
|
98 |
|
uint8_t *get_default_inter_matrix(void) { |
99 |
|
return default_inter_matrix; |
100 |
} |
} |
101 |
|
|
102 |
uint8_t set_intra_matrix(uint8_t *matrix) |
uint8_t set_intra_matrix(uint8_t *matrix) |
103 |
{ |
{ |
104 |
int i; |
int i, change = 0; |
105 |
|
|
106 |
intra_matrix_changed = 0; |
custom_intra_matrix = 0; |
107 |
|
|
108 |
for(i = 0; i < 64; i++) { |
for(i = 0; i < 64; i++) { |
109 |
|
if((int16_t) default_intra_matrix[i] != matrix[i]) |
110 |
|
custom_intra_matrix = 1; |
111 |
if(intra_matrix[i] != matrix[i]) |
if(intra_matrix[i] != matrix[i]) |
112 |
intra_matrix_changed = 1; |
change = 1; |
113 |
|
|
114 |
intra_matrix[i] = (int16_t) matrix[i]; |
intra_matrix[i] = (int16_t) matrix[i]; |
115 |
intra_matrix_fix[i] = FIX(intra_matrix[i]); |
intra_matrix_fix[i] = FIX(intra_matrix[i]); |
116 |
} |
} |
117 |
return intra_matrix_changed; |
return custom_intra_matrix | change; |
118 |
} |
} |
119 |
|
|
120 |
|
|
121 |
uint8_t set_inter_matrix(uint8_t *matrix) |
uint8_t set_inter_matrix(uint8_t *matrix) |
122 |
{ |
{ |
123 |
int i; |
int i, change = 0; |
124 |
|
|
125 |
inter_matrix_changed = 0; |
custom_inter_matrix = 0; |
126 |
|
|
127 |
for(i = 0; i < 64; i++) { |
for(i = 0; i < 64; i++) { |
128 |
|
if((int16_t) default_inter_matrix[i] != matrix[i]) |
129 |
|
custom_inter_matrix = 1; |
130 |
if(inter_matrix[i] != matrix[i]) |
if(inter_matrix[i] != matrix[i]) |
131 |
inter_matrix_changed = 1; |
change = 1; |
132 |
|
|
133 |
inter_matrix[i] = (int16_t) matrix[i]; |
inter_matrix[i] = (int16_t) matrix[i]; |
134 |
inter_matrix_fix[i] = FIX(inter_matrix[i]); |
inter_matrix_fix[i] = FIX(inter_matrix[i]); |
135 |
} |
} |
136 |
return inter_matrix_changed; |
return custom_inter_matrix | change; |
137 |
} |
} |