9
9
*/
10
10
11
11
#include "processor.h"
12
- #include <stdio.h>
13
12
14
13
#include "mathex.h"
15
14
@@ -21,7 +20,7 @@ void aptXHD_invert_quantization(int32_t a, int32_t dither, aptXHD_inverter_100 *
21
20
int64_t tmp = (int64_t )dither * i -> subband_param_dith16_sf1 [i_ ];
22
21
tmp = rshift32 (((int64_t )sl1 << 31 ) + tmp );
23
22
clamp_int24_t (tmp );
24
- i -> unk11 = (i -> unk9 * tmp ) >> 19 ;
23
+ i -> unk11 = (tmp * i -> unk9 ) >> 19 ;
25
24
clamp_int24_t (i -> unk11 );
26
25
27
26
i -> unk10 = rshift15 (32620 * i -> unk10 + (i -> subband_param_incr16 [i_ ] << 15 ));
@@ -33,82 +32,82 @@ void aptXHD_invert_quantization(int32_t a, int32_t dither, aptXHD_inverter_100 *
33
32
34
33
void aptXHD_prediction_filtering (int32_t a , aptXHD_prediction_filter_100 * f ) {
35
34
36
- uint64_t x1 = ( unsigned ) f -> unk6 * ( uint64_t )( unsigned ) f -> unk3 ;
37
- x1 += ( uint64_t )( f -> unk6 * ( f -> unk3 >> 31 ) + f -> unk3 * ( f -> unk6 >> 31 )) << 32 ;
35
+ int32_t tmp1 = a + f -> unk8 ;
36
+ clamp_int24_t ( tmp1 ) ;
38
37
39
- f -> unk6 = a + f -> unk8 ;
40
- clamp_int24_t (f -> unk6 );
38
+ int64_t x1 = (int64_t )f -> unk3 * f -> unk6 ;
39
+ int64_t x2 = (int64_t )tmp1 * f -> unk2 ;
40
+ int32_t tmp2 = (x1 + x2 ) >> 22 ;
41
+ clamp_int24_t (tmp2 );
41
42
42
- uint64_t x2 = (unsigned )f -> unk2 * (uint64_t )(unsigned )f -> unk6 ;
43
- x2 += (uint64_t )(f -> unk6 * (f -> unk2 >> 31 ) + f -> unk2 * (f -> unk6 >> 31 )) << 32 ;
44
-
45
- f -> unk8 = (x1 + x2 ) >> 22 ;
46
- clamp_int24_t (f -> unk8 );
47
-
48
- int32_t v1 = 0x80 ;
49
- int32_t v2 = 0x80 ;
43
+ int32_t v1 = 128 ;
44
+ int32_t v2 = 128 ;
50
45
if (a ) {
51
- v1 = ((a >> 31 ) & 0x01000000 ) - 0x7FFF80 ;
52
- v2 = ((a >> 31 ) & 0xFF000000 ) + 0x800080 ;
46
+ v1 = ((a >> 31 ) & 0x01000000 ) - 8388480 ;
47
+ v2 = ((a >> 31 ) & 0xFF000000 ) + 8388736 ;
53
48
}
54
49
50
+ size_t q = f -> i + f -> width ;
55
51
int64_t sum = 0 ;
56
52
int64_t c = a ;
57
53
58
- for (size_t i = 0 ; i < (size_t )f -> width ; i ++ ) {
54
+ for (size_t i = 0 ; i < (size_t )f -> width ; i ++ , q -- ) {
59
55
60
56
int32_t tmp ;
61
- if (f -> arr2 [f -> i + f -> width - i ] >= 0 )
57
+ if (f -> arr2 [q ] >= 0 )
62
58
tmp = v2 - f -> arr1 [i ];
63
59
else
64
60
tmp = v1 - f -> arr1 [i ];
65
61
66
62
f -> arr1 [i ] += (tmp >> 8 ) - (((uint32_t )tmp ) << 23 == 0x80000000 );
67
-
68
63
sum += c * f -> arr1 [i ];
69
- c = f -> arr2 [f -> i + f -> width - i ];
64
+ c = f -> arr2 [q ];
70
65
}
71
66
67
+ f -> unk6 = tmp1 ;
72
68
f -> unk7 = sum >> 22 ;
73
69
clamp_int24_t (f -> unk7 );
74
- f -> unk8 = f -> unk7 + f -> unk8 ;
70
+ f -> unk8 = f -> unk7 + tmp2 ;
75
71
clamp_int24_t (f -> unk8 );
76
72
77
73
f -> i = (f -> i + 1 ) % f -> width ;
74
+
78
75
f -> arr2 [f -> i ] = a ;
79
76
f -> arr2 [f -> i + f -> width ] = a ;
80
- f -> subband_param_unk3_3 = a ;
81
77
}
82
78
83
79
void aptXHD_process_subband (int32_t a , int32_t dither , aptXHD_prediction_filter_100 * f , aptXHD_inverter_100 * i ) {
84
80
85
81
aptXHD_invert_quantization (a , dither , i );
86
82
83
+ int32_t sign1 = f -> sign1 ;
84
+ int32_t sign2 = f -> sign2 ;
85
+
87
86
int32_t tmp = f -> unk7 + i -> unk11 ;
88
- int sign1 = f -> sign1 ;
89
- int sign2 = f -> sign2 ;
90
- if (tmp > 0 ) {
91
- f -> sign1 = 1 ;
92
- f -> sign2 = sign1 ;
93
- } else if (tmp < 0 ) {
94
- f -> sign1 = -1 ;
95
- f -> sign2 = sign1 ;
87
+ if (tmp < 0 ) {
96
88
sign1 *= -1 ;
97
89
sign2 *= -1 ;
98
- } else {
90
+ f -> sign2 = f -> sign1 ;
91
+ f -> sign1 = -1 ;
92
+ }
93
+ else if (tmp > 0 ) {
94
+ sign1 *= 1 ;
95
+ sign2 *= 1 ;
96
+ f -> sign2 = f -> sign1 ;
97
+ f -> sign1 = 1 ;
98
+ }
99
+ else {
100
+ sign1 *= 0 ;
101
+ sign2 *= 0 ;
102
+ f -> sign2 = f -> sign1 ;
99
103
f -> sign1 = 1 ;
100
- f -> sign2 = sign1 ;
101
- sign1 = 0 ;
102
- sign2 = 0 ;
103
104
}
104
105
105
106
tmp = -1 * f -> unk2 * sign1 ;
106
107
tmp = ((tmp + 1 ) >> 1 ) - ((tmp & 3 ) == 1 );
107
-
108
- tmp = tmp + 0x80000 * sign2 ;
109
108
clip_range (tmp , -0x100000 , 0x100000 );
110
109
111
- f -> unk3 = 254 * f -> unk3 + (tmp >> 4 << 8 );
110
+ f -> unk3 = 254 * f -> unk3 + 0x800000 * sign2 + (tmp >> 4 << 8 );
112
111
f -> unk3 = rshift8 (f -> unk3 );
113
112
clip_range (f -> unk3 , -0x300000 , 0x300000 );
114
113
0 commit comments