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, |
71 |
FIX(23),FIX(24),FIX(25),FIX(27),FIX(28),FIX(30),FIX(31),FIX(33) |
FIX(23),FIX(24),FIX(25),FIX(27),FIX(28),FIX(30),FIX(31),FIX(33) |
72 |
}; |
}; |
73 |
|
|
74 |
uint8_t get_intra_matrix_status(void) { |
uint8_t |
75 |
return intra_matrix_changed; |
get_intra_matrix_status(void) |
76 |
|
{ |
77 |
|
return custom_intra_matrix; |
78 |
} |
} |
79 |
|
|
80 |
uint8_t get_inter_matrix_status(void) { |
uint8_t |
81 |
return inter_matrix_changed; |
get_inter_matrix_status(void) |
82 |
|
{ |
83 |
|
return custom_inter_matrix; |
84 |
} |
} |
85 |
|
|
86 |
void set_intra_matrix_status(uint8_t status) { |
void |
87 |
intra_matrix_changed = status; |
set_intra_matrix_status(uint8_t status) |
88 |
|
{ |
89 |
|
custom_intra_matrix = status; |
90 |
} |
} |
91 |
|
|
92 |
void set_inter_matrix_status(uint8_t status) { |
void |
93 |
inter_matrix_changed = status; |
set_inter_matrix_status(uint8_t status) |
94 |
|
{ |
95 |
|
custom_inter_matrix = status; |
96 |
} |
} |
97 |
|
|
98 |
int16_t *get_intra_matrix(void) { |
int16_t * |
99 |
|
get_intra_matrix(void) |
100 |
|
{ |
101 |
return intra_matrix; |
return intra_matrix; |
102 |
} |
} |
103 |
|
|
104 |
int16_t *get_inter_matrix(void) { |
int16_t * |
105 |
|
get_inter_matrix(void) |
106 |
|
{ |
107 |
return inter_matrix; |
return inter_matrix; |
108 |
} |
} |
109 |
|
|
110 |
uint8_t set_intra_matrix(uint8_t *matrix) |
uint8_t * |
111 |
|
get_default_intra_matrix(void) |
112 |
|
{ |
113 |
|
return default_intra_matrix; |
114 |
|
} |
115 |
|
|
116 |
|
uint8_t * |
117 |
|
get_default_inter_matrix(void) |
118 |
|
{ |
119 |
|
return default_inter_matrix; |
120 |
|
} |
121 |
|
|
122 |
|
uint8_t |
123 |
|
set_intra_matrix(uint8_t * matrix) |
124 |
{ |
{ |
125 |
int i; |
int i, change = 0; |
126 |
|
|
127 |
intra_matrix_changed = 0; |
custom_intra_matrix = 0; |
128 |
|
|
129 |
for(i = 0; i < 64; i++) { |
for(i = 0; i < 64; i++) { |
130 |
|
if ((int16_t) default_intra_matrix[i] != matrix[i]) |
131 |
|
custom_intra_matrix = 1; |
132 |
if(intra_matrix[i] != matrix[i]) |
if(intra_matrix[i] != matrix[i]) |
133 |
intra_matrix_changed = 1; |
change = 1; |
134 |
|
|
135 |
intra_matrix[i] = (int16_t) matrix[i]; |
intra_matrix[i] = (int16_t) matrix[i]; |
136 |
intra_matrix_fix[i] = FIX(intra_matrix[i]); |
intra_matrix_fix[i] = FIX(intra_matrix[i]); |
137 |
} |
} |
138 |
return intra_matrix_changed; |
return custom_intra_matrix | change; |
139 |
} |
} |
140 |
|
|
141 |
|
|
142 |
uint8_t set_inter_matrix(uint8_t *matrix) |
uint8_t |
143 |
|
set_inter_matrix(uint8_t * matrix) |
144 |
{ |
{ |
145 |
int i; |
int i, change = 0; |
146 |
|
|
147 |
inter_matrix_changed = 0; |
custom_inter_matrix = 0; |
148 |
|
|
149 |
for(i = 0; i < 64; i++) { |
for(i = 0; i < 64; i++) { |
150 |
|
if ((int16_t) default_inter_matrix[i] != matrix[i]) |
151 |
|
custom_inter_matrix = 1; |
152 |
if(inter_matrix[i] != matrix[i]) |
if(inter_matrix[i] != matrix[i]) |
153 |
inter_matrix_changed = 1; |
change = 1; |
154 |
|
|
155 |
inter_matrix[i] = (int16_t) matrix[i]; |
inter_matrix[i] = (int16_t) matrix[i]; |
156 |
inter_matrix_fix[i] = FIX(inter_matrix[i]); |
inter_matrix_fix[i] = FIX(inter_matrix[i]); |
157 |
} |
} |
158 |
return inter_matrix_changed; |
return custom_inter_matrix | change; |
159 |
} |
} |