99 */
1010
1111#include "processor.h"
12- #include <stdio.h>
1312
1413#include "mathex.h"
1514
@@ -21,7 +20,7 @@ void aptXHD_invert_quantization(int32_t a, int32_t dither, aptXHD_inverter_100 *
2120 int64_t tmp = (int64_t )dither * i -> subband_param_dith16_sf1 [i_ ];
2221 tmp = rshift32 (((int64_t )sl1 << 31 ) + tmp );
2322 clamp_int24_t (tmp );
24- i -> unk11 = (i -> unk9 * tmp ) >> 19 ;
23+ i -> unk11 = (tmp * i -> unk9 ) >> 19 ;
2524 clamp_int24_t (i -> unk11 );
2625
2726 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 *
3332
3433void aptXHD_prediction_filtering (int32_t a , aptXHD_prediction_filter_100 * f ) {
3534
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 ) ;
3837
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 );
4142
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 ;
5045 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 ;
5348 }
5449
50+ size_t q = f -> i + f -> width ;
5551 int64_t sum = 0 ;
5652 int64_t c = a ;
5753
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 -- ) {
5955
6056 int32_t tmp ;
61- if (f -> arr2 [f -> i + f -> width - i ] >= 0 )
57+ if (f -> arr2 [q ] >= 0 )
6258 tmp = v2 - f -> arr1 [i ];
6359 else
6460 tmp = v1 - f -> arr1 [i ];
6561
6662 f -> arr1 [i ] += (tmp >> 8 ) - (((uint32_t )tmp ) << 23 == 0x80000000 );
67-
6863 sum += c * f -> arr1 [i ];
69- c = f -> arr2 [f -> i + f -> width - i ];
64+ c = f -> arr2 [q ];
7065 }
7166
67+ f -> unk6 = tmp1 ;
7268 f -> unk7 = sum >> 22 ;
7369 clamp_int24_t (f -> unk7 );
74- f -> unk8 = f -> unk7 + f -> unk8 ;
70+ f -> unk8 = f -> unk7 + tmp2 ;
7571 clamp_int24_t (f -> unk8 );
7672
7773 f -> i = (f -> i + 1 ) % f -> width ;
74+
7875 f -> arr2 [f -> i ] = a ;
7976 f -> arr2 [f -> i + f -> width ] = a ;
80- f -> subband_param_unk3_3 = a ;
8177}
8278
8379void aptXHD_process_subband (int32_t a , int32_t dither , aptXHD_prediction_filter_100 * f , aptXHD_inverter_100 * i ) {
8480
8581 aptXHD_invert_quantization (a , dither , i );
8682
83+ int32_t sign1 = f -> sign1 ;
84+ int32_t sign2 = f -> sign2 ;
85+
8786 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 ) {
9688 sign1 *= -1 ;
9789 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 ;
99103 f -> sign1 = 1 ;
100- f -> sign2 = sign1 ;
101- sign1 = 0 ;
102- sign2 = 0 ;
103104 }
104105
105106 tmp = -1 * f -> unk2 * sign1 ;
106107 tmp = ((tmp + 1 ) >> 1 ) - ((tmp & 3 ) == 1 );
107-
108- tmp = tmp + 0x80000 * sign2 ;
109108 clip_range (tmp , -0x100000 , 0x100000 );
110109
111- f -> unk3 = 254 * f -> unk3 + (tmp >> 4 << 8 );
110+ f -> unk3 = 254 * f -> unk3 + 0x800000 * sign2 + (tmp >> 4 << 8 );
112111 f -> unk3 = rshift8 (f -> unk3 );
113112 clip_range (f -> unk3 , -0x300000 , 0x300000 );
114113
0 commit comments