Created
June 20, 2016 18:16
-
-
Save invisiblek/8679c16113acc22d1fe607637f997815 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* This file has been generated by the Hex-Rays decompiler. | |
Copyright (c) 2007-2014 Hex-Rays <[email protected]> | |
Detected compiler: GNU C++ | |
*/ | |
#include <defs.h> | |
//------------------------------------------------------------------------- | |
// Function declarations | |
// int __fastcall _cxa_finalize(_DWORD); weak | |
// void *malloc(size_t); | |
// void *memset(void *, int, size_t); | |
// void *memcpy(void *, const void *, size_t); | |
// void free(void *); | |
// int _android_log_print(_DWORD, _DWORD, const char *, ...); weak | |
// double log10(double); | |
// double pow(double, double); | |
// int __fastcall property_get(_DWORD, _DWORD, _DWORD); weak | |
// int atoi(const char *); | |
// int __fastcall _stack_chk_fail(_DWORD); weak | |
// char *strcpy(char *, const char *); | |
// FILE *fopen(const char *, const char *); | |
// size_t fread(void *, size_t, size_t, FILE *); | |
// int fclose(FILE *); | |
// double atan2(double, double); | |
// double sqrt(double); | |
// int _sprintf_chk(_DWORD, _DWORD, _DWORD, const char *, ...); weak | |
// int fprintf(FILE *, const char *, ...); | |
int sub_1BC8(); | |
int __fastcall sub_1C24(int a1); | |
int stats_proc_interface_create(); | |
signed int __fastcall stats_proc_init(int a1, const void *a2); | |
int __fastcall stats_proc_interface_destroy(int a1); | |
signed int __fastcall stats_proc_get_params(int a1, int a2); | |
signed int __fastcall stats_proc_set_params(int a1, int a2, int a3); | |
signed int __fastcall stats_proc_process(int a1, int a2); | |
signed int __fastcall aec_init(int a1); | |
signed int __fastcall aec_get_params(int a1, unsigned int *a2); | |
signed int __fastcall aec_set_params(int a1, unsigned int *a2); | |
signed int __fastcall aec_process(signed int a1); | |
void __fastcall aec_deinit(unsigned int *a1); | |
int __fastcall aec_chromatix_reload(int a1); | |
int __fastcall aec_process_preview_and_video(int a1, int a2); | |
int __fastcall aec_process_snapshot(signed int a1, int a2); | |
int __fastcall sub_42F8(int result, int a2, int _R2); | |
int __fastcall aec_est_strobe_flash_for_snapshot(int a1, int a2); | |
int __fastcall aec_strobe_flash_store_est(int result, int a2, int a3); | |
int __fastcall aec_set_full_frame_exp(int result, int a2); | |
int __fastcall aec_load_chromatix(int a1, int a2); | |
int __fastcall aec_fast_conv_config(int a1, int a2); | |
signed int __fastcall aec_adjust_exp_settings_for_led(signed int result, int a2); | |
int __fastcall aec_preview_antibanding(int result, int a2); | |
signed int __fastcall aec_use_strobe(int _R0, int a2); | |
signed int __fastcall aec_set_exp_metering_mode(int a1, int a2); | |
int __fastcall aec_init_data(int a1, int a2); | |
signed int __fastcall aec_set_iso_mode(int a1, int a2, signed int a3); | |
signed int __fastcall aec_set_antibanding(int a1, int a2, unsigned int a3); | |
int __fastcall aec_set_brightness_level(int a1, int a2, int a3); | |
signed int __fastcall aec_set_exposure_compensation(int a1, int a2, signed int a3); | |
int __fastcall aec_set_fps_mode(int a1, int a2, int a3); | |
int __fastcall aec_set_parm_fps(int a1, int a2, unsigned int a3); | |
int __fastcall aec_set_hjr(int _R0, int a2); | |
int __fastcall aec_set_for_hjr_af(int _R0, int _R1, int a3); | |
int __fastcall aec_set_ROI(int a1, int a2, int a3, unsigned int a4); | |
int __fastcall aec_reset_LED(int a1, int a2); | |
int __fastcall aec_store_LED_est_stats(signed int _R0, int a2, int a3); | |
signed int __fastcall aec_set_strobe_mode(int a1, int a2, signed int a3); | |
bool __fastcall aec_get_LED_over_exp_check(int a1, int a2); | |
signed int __fastcall aec_get_settled_cnt(int a1, int a2); | |
bool __fastcall aec_get_strobe(int a1); | |
signed int __fastcall aec_get_flash_for_snapshot(int a1, int a2); | |
int __fastcall aec_get_preview_fps(int _R0); | |
int __fastcall aec_get_preview_exp_time(int _R0); | |
signed int __fastcall aec_prepare_snapshot(int a1, int a2); | |
signed int __fastcall aec_set_bestshot_mode(int a1, int a2, unsigned int a3); | |
int __fastcall aec_slow_convergence(int _R0, int a2, unsigned int a3); | |
signed int __fastcall awb_init(int a1); | |
signed int __fastcall awb_set_params(int a1, unsigned int *a2); | |
signed int awb_get_params(); | |
signed int __fastcall awb_process(int a1); | |
void __fastcall awb_deinit(int a1); | |
int __fastcall awb_chromatix_reload(int a1); | |
int __fastcall sub_5D10(int result, int a2); | |
char *__fastcall sub_5ED4(int a1, int a2, int a3); | |
int __fastcall sub_5F40(int a1, unsigned int a2, int a3, int a4); | |
int __fastcall sub_6018(int result, int _R1, int _R2); | |
int __fastcall sub_6088(int a1); | |
int __fastcall sub_6318(int result, int _R1); | |
signed int __fastcall awb_set_current_wb(int a1, int _R1, int a3); | |
signed int __fastcall awb_advanced_grey_world_algo_execute(int a1, int a2); | |
int __fastcall awb_algo_snapshot(int a1, int a2); | |
int __fastcall awb_restore_pre_led_settings(int a1, int a2); | |
int __fastcall awb_load_chromatix(int a1, int a2); | |
signed int __fastcall awb_settings_init(int a1, int a2); | |
int __fastcall awb_util_history_find_last_pos(int a1); | |
unsigned int __fastcall awb_util_aec_history_update(int a1, int a2); | |
int __fastcall awb_util_convert_to_grid(int a1, int a2, int a3, int a4, int a5); | |
signed int __fastcall awb_set_bestshot_mode(int a1, int a2, unsigned int a3); | |
int __fastcall awb_self_cal_data_init(int result, int a2); | |
FILE *__fastcall awb_self_cal_init(int a1, int a2); | |
int __fastcall awb_self_cal_update(int a1, int a2, int _R2, int _R3); | |
signed int __fastcall sub_8412(int a1); | |
unsigned int __fastcall sub_8428(int a1, int a2); | |
int __fastcall sub_84A8(int a1, int a2, int a3, int a4); | |
int __fastcall sub_876E(int result); | |
signed int __fastcall sub_878A(int a1); | |
int __fastcall sub_87CC(int a1); | |
int __fastcall sub_8804(int result); | |
signed int __fastcall sub_8838(int _R0); | |
signed int __fastcall sub_885C(signed int result); | |
signed int __fastcall sub_887A(int a1); | |
signed int __fastcall sub_88A0(int a1); | |
int __fastcall sub_8908(int a1, int a2); | |
signed int __fastcall sub_9210(int a1, int a2); | |
int __fastcall awb_agw_algo(int a1, int a2, int a3); | |
signed int __fastcall asd_init(int a1); | |
signed int asd_get_params(); | |
signed int __fastcall asd_set_params(int a1, int a2); | |
int __fastcall asd_process(int a1); | |
void __fastcall asd_deinit(unsigned int *a1); | |
unsigned int __fastcall sub_BF00(unsigned int result, int a2, int a3, int a4); | |
signed int __fastcall asd_init_data(int a1, void *a2); | |
int __fastcall asd_histogram_backlight_detect(int result, int _R1); | |
void *__fastcall asd_backlight_and_snowscene_detect(int a1, int a2); | |
int __fastcall asd_landscape_detect(int result, int a2); | |
signed int __fastcall asd_portrait_detect(int a1, int a2); | |
signed int __fastcall af_init(int a1); | |
signed int __fastcall af_get_params(int a1, int a2); | |
signed int __fastcall af_set_params(int a1, unsigned int *a2); | |
int __fastcall af_process(int a1); | |
void __fastcall af_deinit(unsigned int *a1); | |
int __fastcall af_chromatix_reload(int a1); | |
int __fastcall af_cont_gyro_monitor_mode_camera(int a1, int _R1); | |
signed int __fastcall af_cont_gyro_monitor_mode_video(int _R0, int _R1); | |
void __fastcall af_safe_move_lens(int a1, int a2, int a3, int a4); | |
signed int __fastcall af_move_lens(int a1, int a2, int a3, int a4); | |
signed int __fastcall af_stop_focus(int a1, int a2); | |
int __fastcall af_load_chromatix(int a1, int a2); | |
int __fastcall af_init_data(int a1, int a2); | |
int __fastcall af_reset_lens(int a1, int a2); | |
signed int __fastcall af_set_start_parameters(int a1, int a2); | |
int __fastcall af_move_lens_to(int a1, int a2, int a3); | |
int __fastcall af_done(int a1, int a2, int a3); | |
int __fastcall af_lens_move_done(int a1, int a2, int a3); | |
void __fastcall af_get_focus_distance(int a1, int _R1, int a3); | |
signed int __fastcall af_panning_stable_check(int a1, int a2); | |
void __fastcall af_slow_move_lens(int a1, int a2, int a3, int a4); | |
signed int __fastcall af_set_bestshot_mode(int a1, int _R1, unsigned int a3); | |
int __fastcall af_run_algorithm(int a1, int a2); | |
signed int __fastcall sub_D534(int a1, int a2); | |
void *__fastcall sub_D564(int a1, int a2); | |
int __fastcall af_CAF_monitor(int a1, int a2); | |
int __fastcall af_CAF_make_decision(int a1, int _R1); | |
int __fastcall af_CAF_gather_stats(int a1, int _R1); | |
int __fastcall af_continuous_search(int a1, int a2); | |
int __fastcall af_exhaustive_search(int a1, int a2); | |
int __fastcall sub_E790(int result); | |
int __fastcall sub_E80E(int result); | |
int __fastcall sub_E844(int result); | |
signed int __fastcall sub_E88A(int a1); | |
signed int __fastcall af_slope_predictive_srch(signed int result, int a2); | |
void __fastcall dis_deinit(unsigned int *a1); | |
signed int __fastcall dis_init(unsigned int *a1); | |
int dis_set_params(); | |
int __fastcall sub_F3C4(int a1, int a2, int a3, int a4); | |
int __fastcall dis_offset_calc(int a1, int a2, int a3, int a4, int a5, int a6); | |
_UNKNOWN *__fastcall gmv_coherence_test(int a1, int a2); | |
signed int __fastcall dis_execute(int a1, int a2); | |
signed int __fastcall afd_init(unsigned int *a1); | |
signed int afd_get_params(); | |
signed int __fastcall afd_set_params(int a1, int a2); | |
signed int __fastcall afd_process(int a1); | |
void __fastcall afd_deinit(unsigned int *a1); | |
bool __fastcall sub_FA14(int a1, int a2); | |
signed int __fastcall sub_FA5C(int a1, int a2); | |
int __fastcall afd_reset(int result, int a2); | |
signed int __fastcall afd_algo_run(int a1, int a2); | |
void j_j_free(void *); | |
void j_free(void *); | |
void *j_j_memset(void *, int, size_t); | |
void *j_memset(void *, int, size_t); | |
int __fastcall sub_10370(_DWORD, _DWORD, _DWORD); // weak | |
//------------------------------------------------------------------------- | |
// Data declarations | |
_UNKNOWN loc_4058; // weak | |
int dword_49F0[2] = { 1202590843, 1072724705 }; // weak | |
void *off_12000 = &off_12000; // weak | |
_UNKNOWN unk_12004; // weak | |
_UNKNOWN aec_ev_comp_one_over_six_tbl; // weak | |
_UNKNOWN unk_12168; // weak | |
_DWORD exposure_step_size_lut[48] = | |
{ | |
4294967288, | |
4294967290, | |
4294967292, | |
4294967294, | |
4294967295, | |
0, | |
1, | |
1, | |
2, | |
2, | |
2, | |
0, | |
4294967286, | |
4294967287, | |
4294967289, | |
4294967291, | |
4294967294, | |
4294967295, | |
0, | |
1, | |
1, | |
2, | |
4, | |
8, | |
4294967286, | |
4294967287, | |
4294967288, | |
4294967290, | |
4294967293, | |
4294967295, | |
0, | |
1, | |
2, | |
4, | |
8, | |
8, | |
4294967284, | |
4294967286, | |
4294967288, | |
4294967290, | |
4294967293, | |
4294967295, | |
0, | |
1, | |
2, | |
4, | |
8, | |
10 | |
}; // idb | |
int dword_12268; // weak | |
_DWORD dword_1226C[8]; // idb | |
_DWORD dword_1228C[8]; // idb | |
_DWORD dword_122AC[8]; // idb | |
_DWORD dword_122CC[8]; // idb | |
_DWORD dword_122EC[8]; // idb | |
_DWORD dword_1230C[8]; // idb | |
_UNKNOWN unk_1232C; // weak | |
int dword_12338; // weak | |
_UNKNOWN unk_1233C; // weak | |
int dword_12348; // weak | |
_UNKNOWN unk_1234C; // weak | |
int dword_12358; // weak | |
_DWORD dword_1235C[8]; // idb | |
int dword_1237C; // weak | |
// extern _UNKNOWN _stack_chk_guard; weak | |
//----- (00001BC8) -------------------------------------------------------- | |
int sub_1BC8() | |
{ | |
return _cxa_finalize(&off_12000); | |
} | |
// 1AA4: using guessed type int __fastcall _cxa_finalize(_DWORD); | |
// 12000: using guessed type void *off_12000; | |
//----- (00001C24) -------------------------------------------------------- | |
int __fastcall sub_1C24(int a1) | |
{ | |
int v1; // r1@2 | |
if ( (signed int)(unsigned __int8)a1 > 6 || (v1 = dword_1226C[(unsigned __int8)a1]) == 0 || *(_DWORD *)v1 != a1 ) | |
v1 = 0; | |
return v1; | |
} | |
//----- (00001C48) -------------------------------------------------------- | |
int stats_proc_interface_create() | |
{ | |
int v0; // r4@1 | |
int result; // r0@4 | |
void *v2; // r0@6 | |
void *v3; // r5@6 | |
v0 = 0; | |
while ( dword_1226C[v0] ) | |
{ | |
++v0; | |
if ( v0 == 8 ) | |
return -1; | |
} | |
if ( v0 == 7 ) | |
return -1; | |
v2 = malloc(0x698u); | |
v3 = v2; | |
dword_1226C[v0] = v2; | |
if ( !v2 ) | |
return -1; | |
memset(v2, 0, 0x698u); | |
++dword_12268; | |
result = v0 + (dword_12268 << 8); | |
*(_DWORD *)v3 = result; | |
return result; | |
} | |
// 12268: using guessed type int dword_12268; | |
//----- (00001C9C) -------------------------------------------------------- | |
signed int __fastcall stats_proc_init(int a1, const void *a2) | |
{ | |
const void *v2; // r5@1 | |
int v3; // r0@1 | |
int v4; // r4@1 | |
v2 = a2; | |
v3 = sub_1C24(a1); | |
v4 = v3; | |
if ( !v3 ) | |
return -1; | |
memcpy((void *)(v3 + 4), v2, 0xB4u); | |
if ( aec_init(v4) < 0 ) | |
{ | |
LABEL_13: | |
free((void *)v4); | |
return -1; | |
} | |
if ( awb_init(v4) < 0 ) | |
{ | |
LABEL_12: | |
aec_deinit((unsigned int *)v4); | |
goto LABEL_13; | |
} | |
if ( af_init(v4) < 0 ) | |
{ | |
LABEL_11: | |
awb_deinit(v4); | |
goto LABEL_12; | |
} | |
if ( asd_init(v4) < 0 ) | |
{ | |
LABEL_10: | |
af_deinit((unsigned int *)v4); | |
goto LABEL_11; | |
} | |
if ( dis_init((unsigned int *)v4) < 0 ) | |
{ | |
LABEL_9: | |
asd_deinit((unsigned int *)v4); | |
goto LABEL_10; | |
} | |
if ( afd_init((unsigned int *)v4) < 0 ) | |
{ | |
dis_deinit((unsigned int *)v4); | |
goto LABEL_9; | |
} | |
return 0; | |
} | |
//----- (00001D20) -------------------------------------------------------- | |
int __fastcall stats_proc_interface_destroy(int a1) | |
{ | |
unsigned __int8 v1; // r5@1 | |
int result; // r0@1 | |
int v3; // r4@1 | |
v1 = a1; | |
result = sub_1C24(a1); | |
v3 = result; | |
if ( result ) | |
{ | |
asd_deinit((unsigned int *)result); | |
af_deinit((unsigned int *)v3); | |
awb_deinit(v3); | |
aec_deinit((unsigned int *)v3); | |
dis_deinit((unsigned int *)v3); | |
afd_deinit((unsigned int *)v3); | |
free((void *)v3); | |
result = v1; | |
if ( (signed int)v1 <= 7 ) | |
dword_1226C[v1] = 0; | |
} | |
return result; | |
} | |
//----- (00001D6C) -------------------------------------------------------- | |
signed int __fastcall stats_proc_get_params(int a1, int a2) | |
{ | |
int v2; // r4@1 | |
int v3; // r0@1 | |
signed int result; // r0@4 | |
v2 = a2; | |
v3 = sub_1C24(a1); | |
if ( !v3 ) | |
return -1; | |
if ( *(_DWORD *)v2 > 5u ) | |
{ | |
def_1D7E: | |
_android_log_print(6, 0, "Invalid STATS_PROC Get Param Type"); | |
return -1; | |
} | |
switch ( *(_DWORD *)v2 ) | |
{ | |
case 0: | |
result = aec_get_params(v3, (unsigned int *)(v2 + 4)); | |
break; | |
case 1: | |
result = awb_get_params(); | |
break; | |
case 2: | |
result = af_get_params(v3, v2 + 4); | |
break; | |
case 3: | |
result = asd_get_params(); | |
break; | |
case 5: | |
result = dis_set_params(); | |
break; | |
case 4: | |
result = afd_get_params(); | |
break; | |
default: | |
goto def_1D7E; | |
} | |
return result; | |
} | |
// 1AEC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...); | |
//----- (00001DDC) -------------------------------------------------------- | |
signed int __fastcall stats_proc_set_params(int a1, int a2, int a3) | |
{ | |
int v3; // r6@1 | |
int v4; // r5@1 | |
int v5; // r0@1 | |
int v6; // r4@1 | |
signed int v7; // r0@4 | |
int v8; // r1@4 | |
size_t v9; // r2@4 | |
signed int v10; // r6@4 | |
int v11; // r0@4 | |
signed int v12; // r0@5 | |
signed int v13; // r0@6 | |
signed int v14; // r0@8 | |
int v15; // r5@8 | |
int v16; // r3@8 | |
int v17; // r4@8 | |
int v18; // t1@9 | |
int v19; // r0@11 | |
int v20; // r5@11 | |
int v21; // r3@11 | |
int v22; // r4@11 | |
int v23; // t1@12 | |
int v24; // r5@14 | |
int v25; // r0@14 | |
int v26; // r4@14 | |
int v27; // t1@15 | |
v3 = a2; | |
v4 = a3; | |
v5 = sub_1C24(a1); | |
v6 = v5; | |
if ( v5 ) | |
{ | |
memcpy((void *)(v5 + 4), (const void *)(v4 + 892), 0xB4u); | |
if ( *(_DWORD *)v3 <= 7u ) | |
{ | |
switch ( *(_DWORD *)v3 ) | |
{ | |
case 0: | |
v7 = aec_set_params(v6, (unsigned int *)(v3 + 4)); | |
v8 = v6 + 796; | |
v9 = 176; | |
v10 = v7; | |
v11 = v4; | |
goto LABEL_7; | |
case 1: | |
v12 = awb_set_params(v6, (unsigned int *)(v3 + 4)); | |
v8 = v6 + 972; | |
v9 = 132; | |
v10 = v12; | |
v11 = v4 + 176; | |
goto LABEL_7; | |
case 2: | |
v13 = af_set_params(v6, (unsigned int *)(v3 + 4)); | |
v8 = v6 + 1104; | |
v9 = 512; | |
v10 = v13; | |
v11 = v4 + 308; | |
LABEL_7: | |
memcpy((void *)v11, (const void *)v8, v9); | |
return v10; | |
case 3: | |
v14 = asd_set_params(v6, v3 + 4); | |
v15 = v4 + 820; | |
v16 = v6 + 1616; | |
v17 = v6 + 1648; | |
v10 = v14; | |
do | |
{ | |
v18 = *(_DWORD *)v16; | |
v16 += 4; | |
*(_DWORD *)v15 = v18; | |
v15 += 4; | |
} | |
while ( v16 != v17 ); | |
return v10; | |
case 5: | |
v19 = dis_set_params(); | |
v20 = v4 + 852; | |
v21 = v6 + 1648; | |
v22 = v6 + 1664; | |
v10 = v19; | |
do | |
{ | |
v23 = *(_DWORD *)v21; | |
v21 += 4; | |
*(_DWORD *)v20 = v23; | |
v20 += 4; | |
} | |
while ( v21 != v22 ); | |
return v10; | |
case 4: | |
v24 = v4 + 868; | |
v10 = afd_set_params(v6, v3 + 4); | |
v25 = v6 + 1664; | |
v26 = v6 + 1688; | |
do | |
{ | |
v27 = *(_DWORD *)v25; | |
v25 += 4; | |
*(_DWORD *)v24 = v27; | |
v24 += 4; | |
} | |
while ( v25 != v26 ); | |
return v10; | |
case 6: | |
if ( !*(_DWORD *)(v3 + 4) ) | |
*(_DWORD *)(v6 + 792) = *(_DWORD *)(v3 + 8); | |
return -1; | |
case 7: | |
aec_chromatix_reload(v6); | |
memcpy((void *)v4, (const void *)(v6 + 796), 0xB0u); | |
awb_chromatix_reload(v6); | |
memcpy((void *)(v4 + 176), (const void *)(v6 + 972), 0x84u); | |
af_chromatix_reload(v6); | |
memcpy((void *)(v4 + 308), (const void *)(v6 + 1104), 0x200u); | |
return -1; | |
default: | |
break; | |
} | |
} | |
_android_log_print(6, 0, "Invalid STATS_PROC Set Param Type"); | |
} | |
return -1; | |
} | |
// 1AEC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...); | |
//----- (00001F20) -------------------------------------------------------- | |
signed int __fastcall stats_proc_process(int a1, int a2) | |
{ | |
int v2; // r5@1 | |
int v3; // r0@1 | |
signed int v4; // r4@1 | |
unsigned int v5; // r3@2 | |
signed int v6; // r0@4 | |
int v7; // r1@4 | |
size_t v8; // r2@4 | |
int v9; // r6@4 | |
int v10; // r0@4 | |
signed int v11; // r0@5 | |
int v12; // r0@7 | |
int v13; // r5@8 | |
int v14; // r0@8 | |
int v15; // r4@8 | |
int v16; // t1@9 | |
int v17; // r5@11 | |
int v18; // r0@11 | |
int v19; // r4@11 | |
int v20; // t1@12 | |
int v21; // r5@14 | |
signed int v22; // r0@14 | |
int v23; // r1@14 | |
int v24; // r4@14 | |
int v25; // t1@15 | |
v2 = a2; | |
v3 = sub_1C24(a1); | |
v4 = v3; | |
if ( !v3 ) | |
return -1; | |
memcpy((void *)(v3 + 4), (const void *)(v2 + 892), 0xB4u); | |
v5 = *(_DWORD *)(v2 + 952); | |
if ( v5 > 5 ) | |
{ | |
def_1F42: | |
_android_log_print(6, 0, "Invalid STATS_PROC Process Type"); | |
return -1; | |
} | |
switch ( v5 ) | |
{ | |
case 0u: | |
v6 = aec_process(v4); | |
v7 = v4 + 796; | |
v8 = 176; | |
v9 = v6; | |
v10 = v2; | |
goto LABEL_6; | |
case 1u: | |
v11 = awb_process(v4); | |
v7 = v4 + 972; | |
v8 = 132; | |
v9 = v11; | |
v10 = v2 + 176; | |
goto LABEL_6; | |
case 2u: | |
v12 = af_process(v4); | |
v7 = v4 + 1104; | |
v8 = 512; | |
v9 = v12; | |
v10 = v2 + 308; | |
LABEL_6: | |
memcpy((void *)v10, (const void *)v7, v8); | |
break; | |
case 3u: | |
v13 = v2 + 820; | |
v9 = asd_process(v4); | |
v14 = v4 + 1616; | |
v15 = v4 + 1648; | |
do | |
{ | |
v16 = *(_DWORD *)v14; | |
v14 += 4; | |
*(_DWORD *)v13 = v16; | |
v13 += 4; | |
} | |
while ( v14 != v15 ); | |
break; | |
case 5u: | |
v17 = v2 + 852; | |
v9 = dis_set_params(); | |
v18 = v4 + 1648; | |
v19 = v4 + 1664; | |
do | |
{ | |
v20 = *(_DWORD *)v18; | |
v18 += 4; | |
*(_DWORD *)v17 = v20; | |
v17 += 4; | |
} | |
while ( v18 != v19 ); | |
break; | |
case 4u: | |
v21 = v2 + 868; | |
v22 = afd_process(v4); | |
v23 = v4 + 1664; | |
v24 = v4 + 1688; | |
v9 = v22; | |
do | |
{ | |
v25 = *(_DWORD *)v23; | |
v23 += 4; | |
*(_DWORD *)v21 = v25; | |
v21 += 4; | |
} | |
while ( v23 != v24 ); | |
break; | |
default: | |
goto def_1F42; | |
} | |
return v9; | |
} | |
// 1AEC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...); | |
//----- (0000200C) -------------------------------------------------------- | |
signed int __fastcall aec_init(int a1) | |
{ | |
int v1; // r4@1 | |
unsigned int v2; // r5@1 | |
signed int result; // r0@2 | |
void *v4; // r0@3 | |
int v5; // r6@3 | |
v1 = a1; | |
v2 = *(_BYTE *)a1; | |
if ( v2 <= 7 && (v4 = malloc(0x698u), v5 = (int)v4, (dword_1228C[v2] = v4) != 0) ) | |
{ | |
memset(v4, 0, 0x698u); | |
aec_load_chromatix(v1, v5); | |
aec_init_data(v1, dword_1228C[v2]); | |
result = 0; | |
} | |
else | |
{ | |
result = -1; | |
} | |
return result; | |
} | |
//----- (00002058) -------------------------------------------------------- | |
signed int __fastcall aec_get_params(int a1, unsigned int *a2) | |
{ | |
unsigned int *v2; // r4@1 | |
unsigned int v3; // r5@1 | |
int v4; // r1@1 | |
int v5; // r0@3 | |
signed int result; // r0@6 | |
int v7; // r1@7 | |
int v8; // r0@9 | |
unsigned int v9; // r0@12 | |
v2 = a2; | |
v3 = *a2; | |
v4 = dword_1228C[*(_BYTE *)a1]; | |
if ( v3 > 6 ) | |
{ | |
def_206C: | |
_android_log_print(6, 0, "Invalid AEC Get Params Type"); | |
result = -1; | |
} | |
else | |
{ | |
switch ( v3 ) | |
{ | |
case 1u: | |
v5 = aec_get_LED_over_exp_check(a1, v4); | |
goto LABEL_5; | |
case 0u: | |
v5 = aec_get_settled_cnt(a1, v4); | |
goto LABEL_5; | |
case 2u: | |
v7 = *(_DWORD *)(a1 + 912); | |
goto LABEL_14; | |
case 3u: | |
v5 = aec_get_flash_for_snapshot(a1, v4); | |
LABEL_5: | |
v2[1] = v5; | |
break; | |
case 5u: | |
v8 = aec_get_preview_fps(a1); | |
goto LABEL_11; | |
case 6u: | |
v8 = aec_get_preview_exp_time(a1); | |
LABEL_11: | |
v2[1] = v8; | |
break; | |
case 4u: | |
v9 = *(_DWORD *)(a1 + 800); | |
v7 = 1 - v9; | |
if ( v9 > 1 ) | |
v7 = 0; | |
LABEL_14: | |
v2[1] = v7; | |
break; | |
default: | |
goto def_206C; | |
} | |
result = 0; | |
} | |
return result; | |
} | |
// 1AEC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...); | |
//----- (000020CC) -------------------------------------------------------- | |
signed int __fastcall aec_set_params(int a1, unsigned int *a2) | |
{ | |
unsigned int v3; // r5@1 | |
int v4; // r1@1 | |
unsigned int v5; // r2@3 | |
signed int result; // r0@3 | |
int v7; // r1@13 | |
int v8; // r4@13 | |
int v9; // r2@15 | |
int v10; // r3@15 | |
int v11; // t1@16 | |
int v12; // r5@18 | |
int v13; // r4@18 | |
int v14; // r3@18 | |
int v15; // t1@19 | |
_R3 = a2; | |
v3 = *a2; | |
v4 = dword_1228C[*(_BYTE *)a1]; | |
if ( v3 > 0x21 ) | |
{ | |
def_20E2: | |
_android_log_print(6, 0, "Invalid AEC Set Params Type"); | |
result = -1; | |
} | |
else | |
{ | |
switch ( v3 ) | |
{ | |
case 5u: | |
v5 = _R3[1]; | |
return aec_set_exp_metering_mode(a1, v4); | |
case 6u: | |
return aec_set_iso_mode(a1, v4, _R3[1]); | |
case 8u: | |
return aec_set_antibanding(a1, v4, _R3[1]); | |
case 1u: | |
return aec_set_brightness_level(a1, v4, _R3[1]); | |
case 0u: | |
return aec_set_exposure_compensation(a1, v4, _R3[1]); | |
case 9u: | |
return aec_set_fps_mode(a1, v4, _R3[1]); | |
case 0xFu: | |
return aec_set_parm_fps(a1, v4, _R3[1]); | |
case 0xBu: | |
return aec_set_hjr(a1, v4); | |
case 3u: | |
return aec_set_for_hjr_af(a1, v4, _R3[1]); | |
case 0x10u: | |
return aec_set_ROI(a1, v4, _R3[1], _R3[2]); | |
case 0x14u: | |
v7 = a1 + 184; | |
v8 = *(_DWORD *)(a1 + 220) - _R3[10]; | |
if ( *(_DWORD *)(a1 + 220) != _R3[10] ) | |
v8 = 1; | |
v9 = (int)(_R3 + 1); | |
v10 = (int)(_R3 + 15); | |
do | |
{ | |
v11 = *(_DWORD *)v9; | |
v9 += 4; | |
*(_DWORD *)v7 = v11; | |
v7 += 4; | |
} | |
while ( v9 != v10 ); | |
*(_DWORD *)(a1 + 236) = v8; | |
break; | |
case 0x11u: | |
v12 = (int)(_R3 + 1); | |
v13 = v4 + 1656; | |
v14 = (int)(_R3 + 8); | |
do | |
{ | |
v15 = *(_DWORD *)v12; | |
v12 += 4; | |
*(_DWORD *)v13 = v15; | |
v13 += 4; | |
} | |
while ( v12 != v14 ); | |
break; | |
case 0xAu: | |
return aec_reset_LED(a1, v4); | |
case 2u: | |
return aec_store_LED_est_stats(a1, v4, _R3[1]); | |
case 0xEu: | |
return aec_set_strobe_mode(a1, v4, _R3[1]); | |
case 0xCu: | |
return aec_prepare_snapshot(a1, v4); | |
case 4u: | |
*(_DWORD *)(v4 + 32) = _R3[1]; | |
break; | |
case 0x12u: | |
*(_DWORD *)(v4 + 28) = _R3[1]; | |
break; | |
case 0x13u: | |
return aec_set_bestshot_mode(a1, v4, _R3[1]); | |
case 0x15u: | |
*(_DWORD *)(a1 + 896) = _R3[1]; | |
break; | |
case 0x17u: | |
*(_DWORD *)(v4 + 1620) = _R3[1]; | |
break; | |
case 0x18u: | |
*(_DWORD *)(v4 + 1624) = _R3[1]; | |
break; | |
case 0x19u: | |
*(_DWORD *)(v4 + 1628) = _R3[1]; | |
break; | |
case 0x1Au: | |
__asm { VLDR S15, [R3,#4]; jumptable 000020E2 case 26 } | |
goto LABEL_40; | |
case 0x1Bu: | |
*(_DWORD *)(v4 + 1604) = _R3[1]; | |
break; | |
case 0x1Cu: | |
*(_DWORD *)(v4 + 1608) = _R3[1]; | |
break; | |
case 0x1Du: | |
*(_DWORD *)(v4 + 1612) = _R3[1]; | |
break; | |
case 0x1Eu: | |
*(_DWORD *)(v4 + 1636) = _R3[1]; | |
break; | |
case 0x1Fu: | |
*(_DWORD *)(v4 + 1640) = _R3[1]; | |
break; | |
case 0x20u: | |
__asm { VLDR S15, [R3,#4] } | |
LABEL_40: | |
__asm { VSTR S15, [R0] } | |
break; | |
case 0x16u: | |
case 0x21u: | |
*(_DWORD *)(v4 + 1684) = _R3[1]; | |
break; | |
default: | |
goto def_20E2; | |
} | |
result = 0; | |
} | |
return result; | |
} | |
// 1AEC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...); | |
//----- (00002288) -------------------------------------------------------- | |
signed int __fastcall aec_process(signed int a1) | |
{ | |
int v2; // r1@1 | |
int v3; // r2@1 | |
int v4; // r5@1 | |
int v5; // r0@4 | |
signed int v6; // r6@8 | |
int v14; // r3@19 | |
unsigned int v15; // r3@23 | |
int v16; // r1@23 | |
int v17; // r2@23 | |
bool v18; // r3@25 | |
_R4 = a1; | |
v2 = *(_DWORD *)(a1 + 72); | |
v3 = *(_BYTE *)a1; | |
v4 = dword_1228C[v3]; | |
if ( v2 == 3 ) | |
{ | |
if ( *(_DWORD *)(v4 + 1636) && *(_DWORD *)(a1 + 792) ) | |
{ | |
v6 = 0; | |
goto LABEL_11; | |
} | |
v5 = aec_process_snapshot(a1, dword_1228C[v3]); | |
} | |
else | |
{ | |
if ( v2 != 4 && v2 != 2 ) | |
{ | |
v6 = -1; | |
_android_log_print(6, 0, "Invalid AEC Process Type"); | |
return v6; | |
} | |
v5 = aec_process_preview_and_video(a1, dword_1228C[v3]); | |
} | |
v6 = v5; | |
LABEL_11: | |
if ( *(_DWORD *)(_R4 + 792) ) | |
{ | |
_R3 = v4 + 1648; | |
if ( *(_DWORD *)(v4 + 1620) ) | |
{ | |
*(_DWORD *)(_R4 + 848) = *(_DWORD *)(v4 + 1652); | |
__asm | |
{ | |
VLDR S15, [R3] | |
VSTR S15, [R4,#0x354] | |
} | |
if ( *(_DWORD *)(v4 + 1624) ) | |
{ | |
_R3 = v4 + 1632; | |
*(_DWORD *)(_R4 + 848) = *(_DWORD *)(v4 + 1628); | |
__asm | |
{ | |
VLDR S0, [R3] | |
VSTR S0, [R4,#0x354] | |
} | |
} | |
if ( *(_DWORD *)(v4 + 1636) ) | |
{ | |
_R1 = v4 + 1644; | |
*(_DWORD *)(_R4 + 932) = *(_DWORD *)(v4 + 1640); | |
__asm | |
{ | |
VLDR S1, [R1] | |
VSTR S1, [R4,#0x3BC] | |
} | |
} | |
} | |
else | |
{ | |
*(_DWORD *)(v4 + 1652) = *(_DWORD *)(_R4 + 848); | |
__asm | |
{ | |
VLDR S2, [R4,#0x354] | |
VSTR S2, [R3] | |
} | |
} | |
} | |
if ( !v6 ) | |
{ | |
v14 = *(_DWORD *)(_R4 + 72); | |
if ( v14 == 2 || v14 == 4 || *(_DWORD *)(_R4 + 68) == 1 ) | |
aec_get_settled_cnt(_R4, v4); | |
v15 = *(_DWORD *)(_R4 + 840); | |
*(_DWORD *)(_R4 + 836) = *(_DWORD *)(v4 + 268); | |
v16 = *(_DWORD *)(v4 + 268); | |
v17 = 2 * *(_DWORD *)(v4 + 272); | |
v18 = v15 < v17 + v16 && v15 > v16 - v17; | |
*(_DWORD *)(_R4 + 828) = v18; | |
} | |
return v6; | |
} | |
// 1AEC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...); | |
//----- (00002394) -------------------------------------------------------- | |
void __fastcall aec_deinit(unsigned int *a1) | |
{ | |
unsigned int v1; // r3@1 | |
void *v2; // r0@2 | |
v1 = *(_BYTE *)a1; | |
if ( v1 <= 7 ) | |
{ | |
v2 = (void *)dword_1228C[v1]; | |
if ( v2 ) | |
j_j_free(v2); | |
} | |
} | |
//----- (000023B0) -------------------------------------------------------- | |
int __fastcall aec_chromatix_reload(int a1) | |
{ | |
return aec_load_chromatix(a1, dword_1228C[*(_BYTE *)a1]); | |
} | |
//----- (000023C8) -------------------------------------------------------- | |
int __fastcall aec_process_preview_and_video(int a1, int a2) | |
{ | |
int v5; // r3@1 | |
int v6; // r3@2 | |
signed int v7; // r2@6 | |
int v8; // r6@12 | |
int v9; // r0@13 | |
int v11; // r2@17 | |
size_t v14; // r2@19 | |
int v15; // r6@20 | |
unsigned int v17; // r3@27 | |
int v18; // r12@27 | |
unsigned int v20; // r0@29 | |
unsigned int v21; // lr@29 | |
int v22; // r8@30 | |
int v29; // r6@42 | |
signed int v30; // r3@42 | |
char v31; // r2@42 | |
signed int v32; // r1@43 | |
int v35; // r2@45 | |
int v36; // r0@50 | |
int v41; // r1@59 | |
int v47; // r3@65 | |
int v54; // r3@80 | |
int v67; // r6@84 | |
char v68; // r10@86 | |
int v69; // r6@86 | |
int v71; // r1@90 | |
int v74; // r2@93 | |
int v77; // r3@93 | |
int v78; // r6@95 | |
int v79; // r12@96 | |
signed int v80; // r0@96 | |
signed int v90; // r8@122 | |
int v92; // r12@125 | |
int v93; // r2@125 | |
int v94; // lr@126 | |
signed int v104; // r1@153 | |
unsigned int v105; // r0@155 | |
signed int v106; // r6@158 | |
int v107; // r2@162 | |
unsigned int v109; // r1@163 | |
int v110; // r3@163 | |
unsigned int v111; // r0@163 | |
int v112; // r6@164 | |
int v114; // r8@168 | |
int v115; // r6@168 | |
int v116; // r0@169 | |
signed int v117; // r2@169 | |
signed int v118; // r6@171 | |
int v121; // r6@176 | |
int v122; // r9@176 | |
unsigned int v127; // r0@177 | |
unsigned int v129; // r1@177 | |
int v133; // r2@178 | |
unsigned int v134; // r1@184 | |
unsigned int v135; // r0@184 | |
int v136; // r2@184 | |
int v137; // r6@185 | |
int v138; // r3@185 | |
unsigned int v140; // r6@190 | |
int v141; // r2@193 | |
unsigned int v142; // r3@193 | |
unsigned int v143; // r0@195 | |
unsigned int v146; // r8@200 | |
int v147; // r9@200 | |
int v148; // r10@200 | |
unsigned int v153; // r0@201 | |
unsigned int v154; // r1@201 | |
int v159; // r12@202 | |
unsigned int v160; // r0@207 | |
int v161; // r11@209 | |
int v162; // r9@209 | |
int v163; // r2@210 | |
int v164; // r8@210 | |
unsigned int v165; // r3@210 | |
unsigned int v167; // r0@210 | |
unsigned int v168; // r1@210 | |
unsigned int v169; // r12@210 | |
int v170; // r2@211 | |
unsigned int v173; // r0@215 | |
unsigned int v174; // r1@215 | |
int v175; // r2@216 | |
int v177; // r0@221 | |
int v180; // r2@223 | |
int v183; // r6@233 | |
signed int v184; // r3@234 | |
signed int v185; // r0@234 | |
int v186; // lr@235 | |
int v187; // r3@235 | |
signed int v188; // r2@236 | |
int v189; // lr@240 | |
int v190; // r1@240 | |
signed int v191; // r6@237 | |
int v192; // r0@246 | |
int v193; // r1@247 | |
int v195; // r1@250 | |
int v196; // r2@256 | |
int v197; // r1@258 | |
int v198; // r6@258 | |
int v199; // r0@258 | |
int v203; // r12@261 | |
int v204; // r8@262 | |
int v208; // r2@265 | |
unsigned int v209; // r1@269 | |
int v217; // r0@298 | |
int v218; // r2@300 | |
int v219; // lr@300 | |
int v220; // r2@302 | |
int v225; // r0@315 | |
int v226; // r0@318 | |
int v227; // r2@321 | |
int v228; // r3@322 | |
int v229; // r3@331 | |
signed int v234; // r1@340 | |
int v236; // r0@342 | |
int v243; // r2@365 | |
signed int v244; // r0@367 | |
unsigned int v250; // r3@386 | |
unsigned int v251; // r2@386 | |
int v253; // [sp+0h] [bp+0h]@1 | |
int v254; // [sp+4h] [bp+4h]@101 | |
unsigned int v255; // [sp+8h] [bp+8h]@215 | |
int v256; // [sp+10h] [bp+10h]@105 | |
int v257; // [sp+14h] [bp+14h]@120 | |
int v258; // [sp+18h] [bp+18h]@95 | |
unsigned int v259; // [sp+1Ch] [bp+1Ch]@93 | |
int v260; // [sp+20h] [bp+20h]@95 | |
int v261; // [sp+24h] [bp+24h]@93 | |
unsigned int v262; // [sp+28h] [bp+28h]@50 | |
int v263; // [sp+2Ch] [bp+2Ch]@95 | |
unsigned int v264; // [sp+30h] [bp+30h]@86 | |
int v265; // [sp+34h] [bp+34h]@50 | |
int v266; // [sp+3Ch] [bp+3Ch]@207 | |
int v267; // [sp+40h] [bp+40h]@209 | |
int v268; // [sp+44h] [bp+44h]@42 | |
char v269; // [sp+48h] [bp+48h]@42 | |
_R4 = a1; | |
_R7 = &v253; | |
_R5 = a2; | |
v5 = *(_DWORD *)(a2 + 4); | |
if ( v5 ) | |
{ | |
v6 = v5 - 1; | |
*(_DWORD *)(a2 + 4) = v6; | |
if ( v6 < 0 ) | |
*(_DWORD *)(a2 + 4) = 0; | |
return 0; | |
} | |
if ( *(_DWORD *)(a1 + 152) && *(_DWORD *)(a1 + 156) != 3 ) | |
{ | |
v7 = *(_DWORD *)(a1 + 904); | |
*(_DWORD *)(a1 + 904) = v7 + 1; | |
if ( v7 <= 2 ) | |
{ | |
*(_DWORD *)(a2 + 12) = 0; | |
return 0; | |
} | |
} | |
else | |
{ | |
*(_DWORD *)(a1 + 904) = 0; | |
} | |
if ( *(_DWORD *)(a1 + 780) ) | |
*(_DWORD *)(a2 + 1348) = *(_DWORD *)(a1 + 784); | |
if ( *(_DWORD *)(a2 + 1608) ) | |
{ | |
v8 = *(_DWORD *)(a2 + 1588); | |
if ( !((v8 + 140) % 150) ) | |
{ | |
v9 = *(_DWORD *)(a2 + 1584) + 1; | |
if ( v9 > 255 ) | |
v9 = 0; | |
*(_DWORD *)(a2 + 1584) = v9; | |
} | |
*(_DWORD *)(a2 + 1588) = v8 + 1; | |
} | |
*(_DWORD *)(a2 + 12) = 1; | |
__asm | |
{ | |
VLDR S5, [R4,#0x60] | |
VCVT.F32.U32 S14, S5 | |
VLDR S8, [R4,#0x350] | |
} | |
v11 = *(_DWORD *)(_R4 + 76); | |
_R6 = *(_DWORD *)(_R4 + 80) >> 8; | |
__asm { VMOV S15, R6 } | |
_R0 = v11 + 7104; | |
__asm | |
{ | |
VCVT.F32.S32 S0, S15 | |
VMUL.F32 S1, S0, S14 | |
VCVT.F32.U32 S2, S8 | |
VDIV.F32 S3, S2, S1 | |
VSTR S3, [R4,#0x3C8] | |
} | |
if ( *(_DWORD *)(v11 + 7112) && !*(_BYTE *)(a2 + 160) ) | |
{ | |
v14 = *(_DWORD *)(a2 + 1612); | |
if ( v14 ) | |
{ | |
v15 = *(_DWORD *)(a2 + 1580); | |
if ( !(*(_DWORD *)(a2 + 1580) % 30) ) | |
{ | |
_R3 = a2 + 1572; | |
__asm | |
{ | |
VLDR D16, =1.2 | |
VLDR S15, [R3] | |
VCVT.F64.F32 D17, S15 | |
} | |
if ( *(_DWORD *)(a2 + 1576) ) | |
{ | |
__asm | |
{ | |
VMUL.F64 D21, D17, D16 | |
VMOV.F32 S1, #16.0 | |
VCVT.F32.F64 S14, D21 | |
VCMPE.F32 S14, S1 | |
VSTR S14, [R3] | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !(_NF ^ _VF) ) | |
{ | |
__asm { VSTR S1, [R3] } | |
*(_DWORD *)(a2 + 1576) = 0; | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VDIV.F64 D18, D17, D16 | |
VLDR D20, =0.7 | |
VCVT.F32.F64 S0, D18 | |
VCVT.F64.F32 D19, S0 | |
VSTR S0, [R3] | |
VCMPE.F64 D19, D20 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !(!_ZF & _CF) ) | |
{ | |
__asm | |
{ | |
VLDR S5, =0.7 | |
VSTR S5, [R3] | |
} | |
*(_DWORD *)(a2 + 1576) = 1; | |
} | |
} | |
} | |
*(_DWORD *)(a2 + 1580) = v15 + 1; | |
} | |
else | |
{ | |
v17 = *(_DWORD *)(_R4 + 44); | |
__asm { VLDR S16, [R0,#0x10] } | |
v18 = *(_DWORD *)(_R4 + 60); | |
if ( v17 <= 0xF ) | |
{ | |
_R0 = a2 + 1328; | |
__asm { VLDR S6, =100.0 } | |
++*(_DWORD *)(a2 + 1324); | |
__asm | |
{ | |
VLDR S4, [R0] | |
VDIV.F32 S7, S4, S6 | |
} | |
} | |
else | |
{ | |
_R8 = *(_DWORD *)(a2 + 1612); | |
do | |
{ | |
v20 = *(_DWORD *)(v18 + v14 + 1024); | |
v21 = *(_DWORD *)(a2 + v14 + 276); | |
if ( v20 <= v21 ) | |
v22 = _R8 + v21; | |
else | |
v22 = _R8 + v20; | |
if ( v20 <= v21 ) | |
_R8 = v22 - v20; | |
else | |
_R8 = v22 - v21; | |
v14 += 4; | |
} | |
while ( v14 != 4 * v17 ); | |
if ( v17 <= 0x100 ) | |
memcpy((void *)(a2 + 276), (const void *)(v18 + 1024), v14); | |
__asm | |
{ | |
VLDR S10, [R4,#0x2C] | |
VMOV S9, R8 | |
VCVT.F32.U32 S12, S10 | |
VLDR S18, [R4,#4] | |
} | |
_R1 = *(_DWORD *)(_R5 + 1324); | |
__asm { VMOV S5, R1 } | |
*(_DWORD *)(_R5 + 1324) = 1; | |
__asm | |
{ | |
VCVT.F32.U32 S11, S9 | |
VDIV.F32 S13, S11, S12 | |
VCVT.F32.S32 S15, S18 | |
VDIV.F32 S0, S13, S15 | |
VCVT.F32.S32 S14, S5 | |
VDIV.F32 S7, S0, S14 | |
} | |
} | |
__asm | |
{ | |
VLDR S4, =100.0 | |
VMUL.F32 S6, S7, S4 | |
} | |
_R3 = _R5 + 1328; | |
_R2 = _R5 + 1340; | |
__asm { VLDR S1, [R2] } | |
_R0 = _R5 + 1336; | |
__asm { VSTR S1, [R6] } | |
_R1 = _R5 + 1332; | |
__asm | |
{ | |
VLDR S8, [R0] | |
VSTR S8, [R2] | |
VLDR S2, [R1] | |
VSTR S2, [R0] | |
VLDR S3, [R3] | |
VSTR S3, [R1] | |
VMOV.F32 S7, #16.0 | |
VSTR S6, [R3] | |
VMUL.F32 S9, S16, S7 | |
VCMPE.F32 S6, S9 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
__asm { VSTRGT S9, [R3] } | |
v29 = *(_DWORD *)_R3; | |
v30 = 1; | |
v31 = *(_BYTE *)(_R5 + 1332); | |
v268 = v29; | |
v269 = v31; | |
do | |
{ | |
v32 = v30; | |
_R0 = &v268 + v30; | |
__asm | |
{ | |
VLDR S11, [R0] | |
VCVTR.S32.F32 S10, S11 | |
} | |
++v30; | |
_R6 = &v268 + v30; | |
__asm { VCVT.F32.S32 S13, S10 } | |
do | |
{ | |
__asm | |
{ | |
VLDR S12, [R6,#-8] | |
VCMPE.F32 S12, S13 | |
} | |
v35 = v32 - 1; | |
__asm { VMRS APSR_nzcv, FPSCR } | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
break; | |
__asm { VSTMDB R6!, {S12} } | |
--v32; | |
} | |
while ( v35 ); | |
__asm { VSTR S13, [R0,#-0x14] } | |
} | |
while ( !_ZF ); | |
__asm | |
{ | |
VLDR S18, [R7,#0x74+var_28] | |
VSTR S18, [R5,#0xC0] | |
} | |
} | |
} | |
__asm { VLDR S18, [R4,#0x348] } | |
v36 = *(_DWORD *)(_R4 + 4); | |
_R6 = *(_DWORD *)(_R4 + 44); | |
v262 = *(_DWORD *)(_R4 + 60); | |
v265 = v36; | |
if ( v262 == -1024 || v265 <= 0 ) | |
{ | |
LABEL_51: | |
_R8 = 0; | |
goto LABEL_161; | |
} | |
HIDWORD(_R0) = *(_DWORD *)(_R4 + 76); | |
__asm | |
{ | |
VLDR S8, [R5,#0xCC] | |
VMOV.F32 S16, #1.0 | |
} | |
LODWORD(_R0) = HIDWORD(_R0) + 7264; | |
__asm { VLDR S2, [R0,#0x10] } | |
if ( *(_DWORD *)(HIDWORD(_R0) + 7024) ) | |
goto LABEL_397; | |
__asm | |
{ | |
VCMP.F32 S2, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _ZF ) | |
{ | |
LABEL_397: | |
__asm { VMOV.F32 S3, S16 } | |
} | |
else | |
{ | |
__asm | |
{ | |
VCVT.F32.S32 S8, S8, #8 | |
VDIV.F32 S3, S2, S8 | |
} | |
} | |
__asm | |
{ | |
VLDR S4, [R5,#0xD8] | |
VCVT.F32.S32 S6, S4 | |
VLDR S7, [R4,#0x90] | |
VLDR S11, =0.0625 | |
VLDR S13, [R5,#0x10C] | |
VSUB.F32 S9, S6, S7 | |
VMUL.F32 S10, S9, S11 | |
VMOV.F32 S12, #1.0 | |
VCMP.F32 S10, S16 | |
VCVT.F32.U32 S15, S13 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !(!_ZF & _CF) ) | |
__asm { VMOVLS.F32 S10, S12 } | |
__asm | |
{ | |
VDIV.F32 S0, S15, S10 | |
VMUL.F32 S5, S0, S3 | |
VCVT.F64.F32 D22, S5 | |
VMOV R0, R1, D22 | |
} | |
_R0 = COERCE_UNSIGNED_INT64(log10(_R0)); | |
__asm | |
{ | |
VLDR D23, =0.0128372246 | |
VLDR S14, [R4,#0x32C] | |
VCVT.F32.S32 S1, S14 | |
VMOV D24, R0, R1 | |
VDIV.F64 D25, D24, D23 | |
} | |
v41 = *(_DWORD *)(_R4 + 76); | |
_R3 = v41 + 7040; | |
__asm | |
{ | |
VCVT.F32.F64 S8, D25 | |
VADD.F32 S2, S1, S8 | |
VSTR S2, [R4,#0x338] | |
} | |
_R0 = *(_DWORD *)(v41 + 7052); | |
__asm | |
{ | |
VMOV S4, R0 | |
VCVT.F32.U32 S6, S4 | |
VLDR S3, [R3] | |
VCMPE.F32 S2, S6 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF ) | |
{ | |
_R2 = *(_DWORD *)(v41 + 7044); | |
__asm | |
{ | |
VMOV S7, R2 | |
VCVT.F32.U32 S9, S7 | |
VCMPE.F32 S2, S9 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
__asm { VSUB.F32 S2, S9, S2 } | |
_LR = _R2 - _R0; | |
__asm | |
{ | |
VMOV S4, LR | |
VLDR S11, [R3,#8] | |
VCVT.F32.U32 S6, S4 | |
VDIV.F32 S7, S2, S6 | |
VCVT.F32.U32 S10, S11 | |
VMUL.F32 S1, S10, S7 | |
VSUB.F32 S9, S16, S7 | |
VCVT.F32.U32 S3, S3 | |
VMLA.F32 S1, S3, S9 | |
} | |
} | |
else | |
{ | |
v47 = *(_DWORD *)(v41 + 7008); | |
_R9 = 2 * v47 - _R2; | |
__asm | |
{ | |
VMOV S11, R9 | |
VCVT.F32.U32 S10, S11 | |
VCMPE.F32 S2, S10 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF ) | |
{ | |
_R2 = 256; | |
goto LABEL_69; | |
} | |
__asm | |
{ | |
VSUB.F32 S13, S10, S2 | |
VLDR S8, =256.0 | |
} | |
_R0 = 2 * (v47 - _R2); | |
__asm | |
{ | |
VMOV S12, R0 | |
VCVT.F32.U32 S15, S12 | |
VDIV.F32 S0, S13, S15 | |
VCVT.F32.U32 S14, S3 | |
VMUL.F32 S1, S14, S0 | |
VSUB.F32 S5, S16, S0 | |
VMLA.F32 S1, S5, S8 | |
} | |
} | |
__asm | |
{ | |
VCVTR.U32.F32 S13, S1 | |
VMOV R2, S13 | |
} | |
goto LABEL_69; | |
} | |
_R2 = *(_DWORD *)(v41 + 7048); | |
LABEL_69: | |
if ( *(_DWORD *)(v41 + 7032) != 1 || *(_BYTE *)(_R5 + 160) ) | |
*(_DWORD *)(_R5 + 36) = 256; | |
else | |
*(_DWORD *)(_R5 + 36) = _R2; | |
if ( !*(_DWORD *)(*(_DWORD *)(_R4 + 76) + 7060) || *(_BYTE *)(_R5 + 160) ) | |
{ | |
__asm | |
{ | |
VLDR S12, =0.0 | |
VMOV.F32 S13, S12 | |
VSTR S12, [R5,#0x38] | |
VMOV.F32 S14, S12 | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VMOV.F32 S12, #0.5 | |
VSTR S12, [R5,#0x3C] | |
VSTR S12, [R5,#0x40] | |
} | |
_R1 = *(_DWORD *)(_R4 + 812); | |
_R3 = *(_DWORD *)(_R4 + 820); | |
if ( _R1 >= _R3 ) | |
{ | |
_R1 = *(_DWORD *)(_R4 + 76) + 7040; | |
__asm { VLDR S15, [R1,#0x1C] } | |
} | |
else | |
{ | |
__asm | |
{ | |
VMOV S14, R3 | |
VMOV S0, R1 | |
VCVT.F32.S32 S1, S14 | |
} | |
_R2 = *(_DWORD *)(_R4 + 76) + 7040; | |
__asm | |
{ | |
VLDR S2, [R2,#0x1C] | |
VCVT.F32.S32 S5, S0 | |
VDIV.F32 S8, S5, S1 | |
VCMPE.F32 S8, S12 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF ) | |
{ | |
__asm | |
{ | |
VSUBPL.F32 S8, S8, S12 | |
VADDPL.F32 S12, S8, S12 | |
} | |
} | |
__asm { VMUL.F32 S15, S12, S2 } | |
} | |
__asm { VSTR S15, [R5,#0x38] } | |
v54 = *(_DWORD *)(_R4 + 76); | |
__asm { VLDR S3, [R5,#0x38] } | |
_R1 = *(_DWORD *)(_R4 + 840) * *(_DWORD *)(_R4 + 4); | |
__asm { VMOV S4, R1 } | |
_R1 = v54 + 7040; | |
__asm | |
{ | |
VLDR S6, [R1,#0x18] | |
VSUB.F32 S9, S3, S6 | |
VLDR D29, =0.333333333 | |
VLDR D17, =0.666666667 | |
} | |
_R12 = *(_BYTE *)(v54 + 12739); | |
_R0 = *(_BYTE *)(v54 + 6988); | |
__asm | |
{ | |
VMOV S0, R0 | |
VCVT.F64.F32 D28, S6 | |
VCVT.F64.F32 D27, S9 | |
VMOV.F64 D30, D28 | |
VMLA.F64 D30, D27, D29 | |
VCVT.F32.S32 S1, S0 | |
VMOV.F64 D20, #0.5 | |
VMUL.F32 S11, S1, S6 | |
VCVT.F64.S32 D21, S0 | |
VMOV.F64 D4, D20 | |
VMLA.F64 D4, D21, D30 | |
VCVT.F64.F32 D19, S11 | |
VMLA.F64 D28, D27, D17 | |
VADD.F64 D5, D19, D20 | |
VCVTR.U32.F64 S15, D5 | |
VCVTR.U32.F64 S5, D4 | |
VMOV R10, S15 | |
VLDR S9, [R1,#0x1C] | |
VCVT.F32.U32 S7, S4 | |
} | |
_R8 = *(_BYTE *)(v54 + 4 * _R10 + 12735) - *(_BYTE *)(v54 + 4 * _R10 + 12731); | |
__asm | |
{ | |
VMOV R9, S5 | |
VMOV S2, R8 | |
VCVT.F64.U32 D26, S4 | |
} | |
_R8 = *(_BYTE *)(v54 + 4 * _R9 + 12735) - *(_BYTE *)(v54 + 4 * _R9 + 12731); | |
__asm | |
{ | |
VMOV.F64 D2, D20 | |
VMLA.F64 D2, D21, D28 | |
VMUL.F32 S0, S1, S9 | |
VCVT.F64.F32 D22, S0 | |
VADD.F64 D5, D22, D20 | |
VMUL.F32 S14, S7, S6 | |
VMOV S6, R8 | |
VCVTR.U32.F64 S7, D2 | |
VMUL.F64 D16, D26, D30 | |
VMOV R9, S7 | |
} | |
_R8 = *(_BYTE *)(v54 + 4 * _R9 + 12735) - *(_BYTE *)(v54 + 4 * _R9 + 12731); | |
__asm | |
{ | |
VMOV S3, R8 | |
VMUL.F64 D18, D26, D28 | |
VCVTR.U32.F64 S1, D5 | |
VMOV R1, S1 | |
VCVT.F32.F64 S13, D16 | |
} | |
_R0 = *(_BYTE *)(v54 + 4 * _R1 + 12735) - *(_BYTE *)(v54 + 4 * _R1 + 12731); | |
__asm { VCVT.F32.F64 S12, D18 } | |
if ( _CF ) | |
{ | |
__asm | |
{ | |
VSTR S16, [R5,#0x28] | |
VSTR S16, [R5,#0x2C] | |
VSTR S16, [R5,#0x30] | |
VSTR S16, [R5,#0x34] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VMOV S11, R12 | |
VMOV S5, R0 | |
VCVT.F32.U32 S15, S11 | |
VLDR S10, =0.0 | |
VSTR S10, [R5,#0x28] | |
VCVT.F32.S32 S4, S5 | |
VDIV.F32 S8, S16, S15 | |
VDIV.F32 S7, S16, S4 | |
VSUB.F32 S9, S7, S8 | |
VCVT.F32.U32 S2, S2 | |
VCVT.F32.U32 S6, S6 | |
VCVT.F32.U32 S3, S3 | |
VDIV.F32 S0, S16, S9 | |
VDIV.F32 S1, S16, S2 | |
VDIV.F32 S5, S16, S6 | |
VDIV.F32 S9, S16, S3 | |
VSUB.F32 S11, S1, S8 | |
VSUB.F32 S4, S5, S8 | |
VSUB.F32 S8, S9, S8 | |
VMUL.F32 S15, S0, S11 | |
VMUL.F32 S7, S0, S4 | |
VSTR S15, [R5,#0x2C] | |
VMUL.F32 S0, S0, S8 | |
VSTR S7, [R5,#0x30] | |
VSTR S0, [R5,#0x34] | |
} | |
} | |
} | |
__asm { VMOV S11, R6 } | |
v67 = *(_DWORD *)(_R4 + 8); | |
if ( _ZF ) | |
{ | |
v68 = 3; | |
v69 = 2 * (4 - v67); | |
v264 = 2 * (4 - *(_DWORD *)(_R4 + 12)); | |
} | |
else | |
{ | |
__asm { VMOV R3, S11 } | |
if ( _R3 == 256 ) | |
{ | |
v68 = 4; | |
v69 = 2 * (8 - v67); | |
v264 = 2 * (8 - *(_DWORD *)(_R4 + 12)); | |
} | |
else | |
{ | |
v68 = 0; | |
v264 = 0; | |
v69 = 0; | |
} | |
} | |
v71 = *(_DWORD *)(_R4 + 8); | |
if ( v71 || *(_DWORD *)(_R4 + 12) ) | |
{ | |
_R2 = v264 * v69; | |
__asm { VMOV S11, R2 } | |
} | |
_R0 = v265; | |
__asm | |
{ | |
VMOV S10, R0 | |
VCVT.F32.S32 S2, S10 | |
} | |
v74 = *(_DWORD *)(_R4 + 76); | |
__asm { VLDR S6, [R4,#0x348] } | |
_LR = v74 + 7008; | |
_R9 = *(_DWORD *)(_R4 + 804); | |
v77 = *(_DWORD *)(v74 + 7028) * v265; | |
*(_DWORD *)(_R4 + 844) = 0; | |
__asm { VLDR S1, [R5,#0x38] } | |
v261 = v77; | |
__asm { VMUL.F32 S15, S2, S1 } | |
v259 = *(_DWORD *)(_R5 + 36) * _R0; | |
__asm | |
{ | |
VCVT.F32.U32 S5, S6 | |
VMUL.F32 S4, S15, S5 | |
VCVTR.U32.F32 S0, S4 | |
} | |
if ( _R9 ) | |
{ | |
if ( *(_DWORD *)(_R5 + 20) ) | |
{ | |
_R3 = 0; | |
v254 = 0; | |
v90 = 0; | |
v80 = 0; | |
v263 = v71 + v69; | |
__asm | |
{ | |
VLDR D23, =0.9 | |
VLDR S3, =256.0 | |
} | |
v258 = v74 + 7072; | |
v257 = v74 + 7008; | |
while ( 1 ) | |
{ | |
if ( v71 >= v263 ) | |
goto LABEL_153; | |
v92 = *(_DWORD *)(_R4 + 12); | |
v93 = 4 * ((v71 << v68) + *(_DWORD *)(_R4 + 12)); | |
v260 = v264 + v92; | |
while ( v92 < v260 ) | |
{ | |
v94 = v262 + v93; | |
if ( *(_DWORD *)(v262 + v93 + 1024) > (unsigned int)v261 ) | |
++*(_DWORD *)(_R4 + 844); | |
__asm { VCVT.F64.S32 D25, S11 } | |
_R11 = v254 + _R3; | |
__asm | |
{ | |
VMOV S7, R11 | |
VMUL.F64 D26, D25, D23 | |
VCVT.F64.S32 D24, S7 | |
VCMPE.F64 D24, D26 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF && _R9 != 2 ) | |
{ | |
v256 = *(_DWORD *)(v94 + 1024); | |
if ( v256 > v259 ) | |
{ | |
__asm { VCVT.F32.S32 S10, S11 } | |
_R6 = v257; | |
__asm | |
{ | |
VLDR S15, [R6,#0x1C] | |
VLDR S9, [R7,#0x74+var_70] | |
VMUL.F32 S1, S10, S15 | |
VCVT.F32.S32 S2, S9 | |
VCMPE.F32 S2, S1 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
__asm { VMOV R6, S9 } | |
v254 = _R6 + 1; | |
LABEL_147: | |
_R6 = *(_DWORD *)(_R5 + 20) + v93; | |
__asm | |
{ | |
VLDR S1, [R6] | |
VMUL.F32 S8, S1, S3 | |
VMUL.F32 S9, S8, S15 | |
} | |
goto LABEL_149; | |
} | |
} | |
__asm { VMOV R11, S0 } | |
if ( v256 < _R11 ) | |
{ | |
__asm { VCVT.F32.S32 S6, S11 } | |
_R6 = v258; | |
__asm | |
{ | |
VLDR S5, [R6] | |
VMOV S8, R3 | |
VMUL.F32 S4, S6, S5 | |
VCVT.F32.S32 S15, S8 | |
VCMPE.F32 S15, S4 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
__asm | |
{ | |
VLDR S2, [R7,#0x74+var_64] | |
VCVT.F32.U32 S10, S2 | |
} | |
++_R3; | |
__asm | |
{ | |
VCMPE.F32 S10, S14 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
__asm { VLDR S15, [R5,#0x28] } | |
} | |
else | |
{ | |
__asm | |
{ | |
VCMPE.F32 S10, S13 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
__asm { VLDR S15, [R5,#0x2C] } | |
} | |
else | |
{ | |
__asm | |
{ | |
VCMPE.F32 S10, S12 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
__asm { VLDRMI S15, [R5,#0x30] } | |
else | |
__asm { VLDRPL S15, [R5,#0x34] } | |
} | |
} | |
goto LABEL_147; | |
} | |
} | |
} | |
_R6 = *(_DWORD *)(_R5 + 20) + v93; | |
__asm | |
{ | |
VLDR S7, [R6] | |
VMUL.F32 S9, S7, S3 | |
} | |
LABEL_149: | |
__asm { VCVTR.S32.F32 S15, S9 } | |
++v92; | |
v93 += 4; | |
__asm { VMOV R11, S15 } | |
v90 += _R11; | |
__asm { VMOV R11, S15 } | |
v80 += (*(_DWORD *)(v94 + 1024) >> 2) * _R11 >> 6; | |
} | |
++v71; | |
} | |
} | |
goto LABEL_51; | |
} | |
_R8 = 0; | |
v80 = 0; | |
__asm { VLDR D27, =0.9 } | |
v257 = v71 + v69; | |
v256 = v74 + 7072; | |
v254 = v74 + 7040; | |
LABEL_121: | |
if ( v71 < v257 ) | |
{ | |
v263 = v262 + 4 * v71; | |
v78 = *(_DWORD *)(_R4 + 12); | |
v260 = v262 + 4 * (v71 << v68); | |
v258 = v78 + v264; | |
while ( 1 ) | |
{ | |
if ( v78 >= v258 ) | |
{ | |
++v71; | |
goto LABEL_121; | |
} | |
v79 = v260 + 4 * v78; | |
v80 += *(_DWORD *)(v79 + 1024); | |
if ( *(_DWORD *)(v263 + 1024) > (unsigned int)v261 ) | |
++*(_DWORD *)(_R4 + 844); | |
__asm { VCVT.F64.S32 D29, S11 } | |
_R3 = _R8 + _R9; | |
__asm | |
{ | |
VMOV S6, R3 | |
VMUL.F64 D30, D29, D27 | |
VCVT.F64.S32 D28, S6 | |
VCMPE.F64 D28, D30 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
_R12 = *(_DWORD *)(v79 + 1024); | |
if ( _R12 > v259 ) | |
{ | |
__asm { VCVT.F32.S32 S7, S11 } | |
_R3 = v254; | |
__asm | |
{ | |
VLDR S9, [R3,#0x10] | |
VMOV S5, R8 | |
VMUL.F32 S2, S7, S9 | |
VCVT.F32.S32 S4, S5 | |
VCMPE.F32 S4, S2 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
__asm { VMOV S4, R12 } | |
++_R8; | |
__asm | |
{ | |
VCVT.F32.U32 S5, S4 | |
VLDR S3, [LR,#0x1C] | |
} | |
LABEL_116: | |
__asm | |
{ | |
VSUB.F32 S7, S16, S3 | |
VMUL.F32 S9, S5, S7 | |
VCVTR.U32.F32 S2, S9 | |
VMOV R11, S2 | |
} | |
v80 -= _R11; | |
goto LABEL_117; | |
} | |
} | |
__asm { VMOV R3, S0 } | |
if ( _R12 < _R3 ) | |
{ | |
__asm { VCVT.F32.S32 S15, S11 } | |
_R3 = v256; | |
__asm | |
{ | |
VLDR S8, [R3] | |
VMOV S10, R9 | |
VMUL.F32 S3, S15, S8 | |
VCVT.F32.S32 S1, S10 | |
VCMPE.F32 S1, S3 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
__asm | |
{ | |
VMOV S6, R12 | |
VCVT.F32.U32 S5, S6 | |
} | |
++_R9; | |
__asm | |
{ | |
VCMPE.F32 S5, S14 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
__asm { VLDR S3, [R5,#0x28] } | |
} | |
else | |
{ | |
__asm | |
{ | |
VCMPE.F32 S5, S13 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
__asm { VLDR S3, [R5,#0x2C] } | |
} | |
else | |
{ | |
__asm | |
{ | |
VCMPE.F32 S5, S12 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
__asm { VLDRMI S3, [R5,#0x30] } | |
else | |
__asm { VLDRPL S3, [R5,#0x34] } | |
} | |
} | |
goto LABEL_116; | |
} | |
} | |
} | |
LABEL_117: | |
++v78; | |
} | |
} | |
_R1 = v74 + 7008; | |
__asm | |
{ | |
VLDR S13, [R1,#0x1C] | |
VSUB.F32 S16, S16, S13 | |
VCVT.F32.S32 S3, S11 | |
VMOV S11, R8 | |
VCVT.F32.S32 S12, S11 | |
VMLS.F32 S3, S12, S16 | |
VCVTR.U32.F32 S14, S3 | |
VMOV R2, S14 | |
} | |
v90 = _R2 << 8; | |
LABEL_153: | |
v104 = v90 >> 8; | |
if ( !(v90 >> 8) ) | |
v104 = 1; | |
v105 = 16 * (v80 / v104) / (unsigned int)v265; | |
if ( (signed int)v105 > 4080 ) | |
*(_DWORD *)(_R5 + 216) = 4080; | |
else | |
*(_DWORD *)(_R5 + 216) = v105; | |
v106 = *(_DWORD *)(_R5 + 216); | |
if ( v106 >> 4 >= 255 ) | |
_R8 = 255; | |
else | |
_R8 = v106 >> 4; | |
LABEL_161: | |
if ( *(_BYTE *)(_R5 + 160) ) | |
{ | |
v107 = *(_DWORD *)(_R4 + 60); | |
_R0 = v107 + 1024; | |
if ( v107 != -1024 ) | |
{ | |
v109 = *(_DWORD *)(_R5 + 120); | |
v110 = _R5; | |
v111 = 0; | |
while ( v110 != _R5 + 4 * v109 ) | |
{ | |
v112 = *(_DWORD *)(v110 + 124); | |
v110 += 4; | |
v111 += *(_DWORD *)(v107 + 4 * (v112 + 256)); | |
} | |
_R0 = (signed int)(v111 / v109) / *(_DWORD *)(_R4 + 4); | |
} | |
__asm | |
{ | |
VMOV S11, R0 | |
VCVT.F32.S32 S12, S11 | |
VMOV S14, R8 | |
} | |
_R2 = *(_DWORD *)(_R4 + 76) + 9344; | |
__asm | |
{ | |
VLDR S0, [R2,#0x14] | |
VMOV.F64 D18, #1.0 | |
VMUL.F32 S13, S12, S0 | |
VCVT.F64.F32 D17, S0 | |
VCVT.F32.S32 S10, S14 | |
VSUB.F64 D19, D18, D17 | |
VCVT.F64.F32 D31, S13 | |
VCVT.F64.F32 D16, S10 | |
VMLA.F64 D31, D16, D19 | |
VCVTR.S32.F64 S1, D31 | |
VMOV R8, S1 | |
} | |
} | |
*(_DWORD *)(_R4 + 840) = _R8; | |
v114 = *(_DWORD *)(_R5 + 1656); | |
v115 = *(_DWORD *)(_R4 + 60); | |
v265 = (int)&v253; | |
v264 = v115; | |
if ( v114 <= 0 ) | |
{ | |
_R0 = 0; | |
} | |
else | |
{ | |
v116 = *(_DWORD *)(_R4 + 44); | |
v117 = *(_DWORD *)(_R4 + 36); | |
if ( v116 == 16 ) | |
{ | |
_R1 = v117 >> 2; | |
_R3 = *(_DWORD *)(_R4 + 40) >> 2; | |
} | |
else if ( v116 == 64 ) | |
{ | |
_R1 = v117 >> 3; | |
_R3 = *(_DWORD *)(_R4 + 40) >> 3; | |
} | |
else | |
{ | |
v118 = *(_DWORD *)(_R4 + 40); | |
if ( v116 == 4 ) | |
{ | |
_R1 = v117 >> 1; | |
_R3 = v118 >> 1; | |
} | |
else | |
{ | |
_R1 = v117 >> 4; | |
_R3 = v118 >> 4; | |
} | |
} | |
__asm | |
{ | |
VMOV S16, R3 | |
VCVT.F32.S32 S19, S16 | |
VMOV S20, R1 | |
} | |
v121 = _R5 + 1662; | |
v122 = 0; | |
__asm | |
{ | |
VMOV.F64 D8, #0.5 | |
VCVT.F32.S32 S20, S20 | |
} | |
do | |
{ | |
_R1 = *(_WORD *)v121; | |
__asm { VMOV S15, R1 } | |
_R0 = *(_WORD *)(v121 - 2); | |
__asm | |
{ | |
VCVT.F32.U32 S8, S15 | |
VMOV S11, R0 | |
} | |
_R12 = *(_WORD *)(v121 + 4); | |
_R2 = *(_WORD *)(v121 + 2); | |
__asm | |
{ | |
VMOV S4, R12 | |
VMOV S1, R2 | |
} | |
v127 = 0; | |
__asm | |
{ | |
VCVT.F32.U32 S12, S11 | |
VDIV.F32 S3, S8, S19 | |
VDIV.F32 S13, S12, S20 | |
VCVT.F64.F32 D20, S3 | |
VCVT.F64.F32 D22, S13 | |
VADD.F64 D3, D20, D8 | |
VADD.F64 D7, D22, D8 | |
VCVTR.U32.F64 S5, D3 | |
VCVTR.U32.F64 S10, D7 | |
VMOV R3, S5 | |
} | |
v263 = 16 * _R3; | |
v129 = 0; | |
__asm | |
{ | |
VCVT.F32.U32 S15, S1 | |
VMOV LR, S10 | |
VCVT.F32.U32 S7, S4 | |
VDIV.F32 S8, S15, S20 | |
VDIV.F32 S9, S7, S19 | |
VCVT.F64.F32 D23, S8 | |
VCVT.F64.F32 D21, S9 | |
VADD.F64 D7, D23, D8 | |
VADD.F64 D1, D21, D8 | |
VCVTR.U32.F64 S0, D1 | |
VCVTR.U32.F64 S3, D7 | |
VMOV R11, S0 | |
} | |
v261 = _R11 + _R3; | |
__asm { VMOV R12, S3 } | |
v259 = _R12 + _LR; | |
while ( _R3 < v261 ) | |
{ | |
v260 = v264 + 4 * (v263 - v129 + _LR); | |
v262 = _LR - v129; | |
while ( v262 + v129 < v259 ) | |
{ | |
v133 = v260 + 4 * v129++; | |
v127 += *(_DWORD *)(v133 + 1024); | |
} | |
++_R3; | |
v263 += 16; | |
} | |
v121 += 8; | |
*(&v253 + v122++) = v127 / v129 / *(_DWORD *)(_R4 + 4); | |
} | |
while ( v122 != v114 ); | |
v134 = 0; | |
v135 = 0; | |
v136 = 0; | |
do | |
{ | |
v137 = *(_DWORD *)(_R5 + 1656 + 4 * v136 + 20); | |
v138 = *(&v253 + v136++); | |
v134 += v137; | |
v135 += v138 * v137; | |
} | |
while ( v136 != v114 ); | |
_R0 = v135 / v134; | |
} | |
__asm | |
{ | |
VMOV S6, R0 | |
VCVT.F32.S32 S5, S6 | |
VCMPE.F32 S5, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
__asm | |
{ | |
VCVT.F64.F32 D25, S5 | |
VLDR D26, =0.7 | |
VLDR D27, =0.3 | |
VMUL.F64 D7, D25, D26 | |
VCVT.F64.S32 D24, S18 | |
VMLA.F64 D7, D24, D27 | |
VCVTR.U32.F64 S4, D7 | |
VSTR S4, [R4,#0x348] | |
} | |
} | |
v140 = *(_DWORD *)(_R4 + 224); | |
v265 = *(_DWORD *)(_R4 + 60); | |
if ( v140 ) | |
{ | |
if ( *(_DWORD *)(_R4 + 236) ) | |
{ | |
v141 = *(_DWORD *)(_R4 + 44); | |
v142 = *(_DWORD *)(_R4 + 228); | |
if ( v141 == 16 ) | |
{ | |
_R1 = v142 >> 2; | |
_R2 = *(_DWORD *)(_R4 + 232) >> 2; | |
} | |
else if ( v141 == 64 ) | |
{ | |
_R1 = v142 >> 3; | |
_R2 = *(_DWORD *)(_R4 + 232) >> 3; | |
} | |
else | |
{ | |
v143 = *(_DWORD *)(_R4 + 232); | |
if ( v141 == 4 ) | |
{ | |
_R1 = v142 >> 1; | |
_R2 = v143 >> 1; | |
} | |
else | |
{ | |
_R1 = v142 >> 4; | |
_R2 = v143 >> 4; | |
} | |
} | |
__asm | |
{ | |
VMOV S17, R2 | |
VCVT.F32.S32 S19, S17 | |
VMOV S20, R1 | |
} | |
v146 = 0; | |
v147 = _R4 + 186; | |
v148 = 0; | |
__asm | |
{ | |
VMOV.F64 D8, #0.5 | |
VCVT.F32.S32 S20, S20 | |
} | |
do | |
{ | |
_R0 = *(_WORD *)(v147 - 2); | |
__asm | |
{ | |
VMOV S15, R0 | |
VCVT.F32.U32 S8, S15 | |
} | |
_R1 = *(_WORD *)v147; | |
__asm { VMOV S7, R1 } | |
_R2 = *(_WORD *)(v147 + 4); | |
_R1 = *(_WORD *)(v147 + 2); | |
__asm | |
{ | |
VMOV S12, R2 | |
VMOV S4, R1 | |
} | |
v153 = 0; | |
v154 = 0; | |
__asm | |
{ | |
VDIV.F32 S3, S8, S20 | |
VCVT.F32.U32 S9, S7 | |
VCVT.F64.F32 D30, S3 | |
VDIV.F32 S2, S9, S19 | |
VADD.F64 D3, D30, D8 | |
VCVT.F32.U32 S13, S12 | |
VCVTR.U32.F64 S5, D3 | |
VCVT.F32.U32 S7, S4 | |
VMOV LR, S5 | |
VDIV.F32 S14, S13, S19 | |
VDIV.F32 S9, S7, S20 | |
VCVT.F64.F32 D28, S2 | |
VADD.F64 D0, D28, D8 | |
VCVT.F64.F32 D29, S14 | |
VCVTR.U32.F64 S11, D0 | |
VCVT.F64.F32 D31, S9 | |
VMOV R3, S11 | |
} | |
v263 = 16 * _R3; | |
__asm | |
{ | |
VADD.F64 D5, D29, D8 | |
VADD.F64 D7, D31, D8 | |
VCVTR.U32.F64 S1, D5 | |
VCVTR.U32.F64 S2, D7 | |
VMOV R11, S1 | |
} | |
v262 = _R11 + _R3; | |
__asm { VMOV R12, S2 } | |
v261 = _R12 + _LR; | |
while ( _R3 < v262 ) | |
{ | |
v260 = v265 + 4 * (v263 - v154 + _LR); | |
v264 = _LR - v154; | |
while ( v264 + v154 < v261 ) | |
{ | |
v159 = v260 + 4 * v154++; | |
v153 += *(_DWORD *)(v159 + 1024); | |
} | |
++_R3; | |
v263 += 16; | |
} | |
v160 = v153 / v154 / *(_DWORD *)(_R4 + 4); | |
v147 += 8; | |
*(&v266 + v148++) = v160; | |
v146 += v160; | |
} | |
while ( v148 != v140 ); | |
if ( *(_DWORD *)(_R4 + 216) ) | |
{ | |
v161 = 0; | |
__asm { VLDR D8, =0.94 } | |
v162 = _R4 + 184; | |
v265 = (int)&v267; | |
do | |
{ | |
v163 = v162 - _R4 + _R4 + 184; | |
v164 = *(_DWORD *)(v163 - 164); | |
v165 = 0; | |
_R2 = *(_DWORD *)(v163 - 168) - *(_DWORD *)(v164 + 1020) - *(_DWORD *)(v164 + 1016); | |
__asm | |
{ | |
VMOV S19, R2 | |
VCVT.F64.U32 D16, S19 | |
} | |
v167 = 0; | |
v168 = 0; | |
v169 = 0; | |
__asm | |
{ | |
VMUL.F64 D7, D16, D8 | |
VCVTR.U32.F64 S0, D7 | |
} | |
do | |
{ | |
v170 = *(_DWORD *)(v164 + 4 * v169); | |
v168 += v170; | |
v167 += v169 * v170; | |
__asm { VMOV R2, S0 } | |
if ( v168 >= _R2 && !v165 ) | |
v165 = v169; | |
++v169; | |
} | |
while ( v169 != 256 ); | |
v255 = v165; | |
_R0 = v167 / v168; | |
__asm { VMOV S19, R0 } | |
v173 = 0; | |
v174 = 0; | |
while ( v165 <= 0xFD ) | |
{ | |
v175 = *(_DWORD *)(v164 + 4 * v165); | |
v174 += v175; | |
v173 += v165++ * v175; | |
} | |
if ( v174 <= 1 ) | |
__asm { VMOV R0, S19 } | |
else | |
_R0 = v173 / v174; | |
__asm | |
{ | |
VMOV S12, R0 | |
VCVT.F32.U32 S11, S19 | |
} | |
v177 = v265; | |
++v161; | |
v162 += 8; | |
__asm | |
{ | |
VCVT.F32.U32 S13, S12 | |
VDIV.F32 S14, S11, S13 | |
VMOV R1, S14 | |
} | |
*(_DWORD *)(v265 + 4) = _R1; | |
v265 = v177 + 4; | |
} | |
while ( !_ZF ); | |
__asm | |
{ | |
VMOV.F32 S4, #4.0 | |
VLDR S1, =0.45 | |
} | |
v146 = 0; | |
_R3 = &v268; | |
v180 = 0; | |
__asm | |
{ | |
VLDR S6, =0.7 | |
VLDR S10, =36.0 | |
VLDR S7, =80.0 | |
VMOV.F32 S8, #1.0 | |
VMOV.F32 S3, S1 | |
} | |
do | |
{ | |
__asm | |
{ | |
VLDMIA R3!, {S15} | |
VCMPE.F32 S15, S1 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
__asm { VSTR S1, [R3,#-4] } | |
} | |
else | |
{ | |
__asm | |
{ | |
VCMPE.F32 S15, S6 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
__asm { VSTRGT S6, [R3,#-4] } | |
} | |
__asm | |
{ | |
VLDR S5, [R3,#-4] | |
VSUB.F32 S9, S5, S3 | |
VLDR S13, [R5,#0x108] | |
} | |
_R1 = *(&v266 + v180); | |
__asm { VMOV S11, R1 } | |
++v180; | |
__asm | |
{ | |
VMUL.F32 S2, S9, S4 | |
VMUL.F32 S0, S2, S7 | |
VSUB.F32 S19, S8, S2 | |
VMLA.F32 S0, S19, S10 | |
VCVT.F32.U32 S14, S13 | |
VDIV.F32 S15, S14, S0 | |
VCVT.F32.U32 S12, S11 | |
VMUL.F32 S5, S12, S15 | |
VCVTR.U32.F32 S9, S5 | |
VMOV LR, S9 | |
} | |
v146 += _LR; | |
} | |
while ( !_ZF ); | |
} | |
*(_DWORD *)(_R5 + 168) = v146 / v140; | |
} | |
__asm | |
{ | |
VLDR S3, [R4,#0x348] | |
VCVT.F64.U32 D20, S3 | |
VLDR D18, =0.3 | |
VLDR S1, [R5,#0xA8] | |
VLDR D19, =0.7 | |
VLDR D22, =0.3 | |
VMUL.F64 D21, D20, D18 | |
VCVT.F64.U32 D17, S1 | |
VMLA.F64 D21, D17, D19 | |
VMUL.F64 D7, D21, D22 | |
VCVT.F64.S32 D9, S18 | |
VMLA.F64 D7, D9, D19 | |
VCVTR.U32.F64 S6, D7 | |
VSTR S6, [R4,#0x348] | |
} | |
} | |
else | |
{ | |
*(_DWORD *)(_R5 + 168) = 0; | |
} | |
v183 = *(_DWORD *)(_R4 + 60); | |
if ( *(_DWORD *)(_R4 + 44) == 256 ) | |
{ | |
v188 = 4; | |
v185 = 0; | |
do | |
{ | |
v187 = 0; | |
do | |
{ | |
v186 = v183 + (v188 << 6) + v187; | |
v187 += 4; | |
v185 += *(_DWORD *)(v186 + 1040); | |
} | |
while ( v187 != 32 ); | |
++v188; | |
} | |
while ( v188 != 12 ); | |
v191 = 64; | |
} | |
else | |
{ | |
v184 = 2; | |
v185 = 0; | |
do | |
{ | |
v190 = 0; | |
do | |
{ | |
v189 = v183 + 32 * v184 + v190; | |
v190 += 4; | |
v185 += *(_DWORD *)(v189 + 1032); | |
} | |
while ( v190 != 16 ); | |
++v184; | |
} | |
while ( v184 != 6 ); | |
v191 = 16; | |
} | |
*(_DWORD *)(_R4 + 248) = v185 / *(_DWORD *)(_R4 + 4) / v191; | |
++*(_DWORD *)(_R5 + 180); | |
if ( *(_DWORD *)(_R5 + 1684) ) | |
return 0; | |
if ( !*(_DWORD *)(_R5 + 8) ) | |
{ | |
v196 = *(_DWORD *)(_R5 + 172); | |
if ( v196 > 0 ) | |
{ | |
*(_DWORD *)(_R5 + 172) = v196 - 1; | |
return 0; | |
} | |
__asm | |
{ | |
VLDR S16, [R4,#0x348] | |
VCVT.F32.U32 S7, S16 | |
VLDR S4, [R4,#0x8C] | |
} | |
v197 = *(_DWORD *)(_R4 + 812); | |
v198 = *(_DWORD *)(_R4 + 820); | |
v199 = *(_DWORD *)(_R4 + 76); | |
*(_DWORD *)(_R4 + 240) = v197; | |
__asm | |
{ | |
VMUL.F32 S8, S7, S4 | |
VCVTR.U32.F32 S10, S8 | |
VMOV R3, S10 | |
} | |
if ( (unsigned int)_R3 >= 0xFF ) | |
_R3 = 255; | |
*(_DWORD *)(_R4 + 840) = _R3; | |
_R2 = *(_DWORD *)(_R5 + 108); | |
_R9 = *(_DWORD *)(_R5 + 112); | |
if ( v197 >= v198 ) | |
{ | |
v204 = *(_DWORD *)(_R4 + 816); | |
if ( v197 >= v204 ) | |
{ | |
v203 = 0; | |
} | |
else | |
{ | |
_LR = v197 - v198; | |
_R8 = v204 - v198; | |
__asm | |
{ | |
VMOV S7, LR | |
VMOV S0, R8 | |
VCVT.F32.S32 S2, S7 | |
VMOV S15, R2 | |
VMOV S13, R9 | |
VCVT.F32.S32 S11, S0 | |
VDIV.F32 S12, S2, S11 | |
VCVT.F32.S32 S7, S15 | |
VMOV.F64 D24, #1.0 | |
VMUL.F32 S5, S12, S7 | |
VCVT.F64.F32 D23, S12 | |
VCVT.F32.S32 S14, S13 | |
VSUB.F64 D25, D24, D23 | |
VCVT.F64.F32 D26, S14 | |
VCVT.F64.F32 D27, S5 | |
VMLA.F64 D27, D25, D26 | |
VCVTR.S32.F64 S9, D27 | |
VMOV R6, S9 | |
} | |
v203 = _R6 - _R2; | |
} | |
} | |
else | |
{ | |
v203 = _R9 - _R2; | |
} | |
v208 = _R2 + v203; | |
*(_DWORD *)(_R5 + 200) = 0; | |
*(_DWORD *)(_R5 + 264) = v208; | |
if ( *(_DWORD *)(_R4 + 1616) ) | |
*(_DWORD *)(_R5 + 200) = *(_DWORD *)(_R4 + 772); | |
if ( *(_DWORD *)(_R4 + 1624) ) | |
*(_DWORD *)(_R5 + 200) += *(_DWORD *)(_R4 + 776); | |
v209 = *(_DWORD *)(_R4 + 1632); | |
if ( v209 > 0x13 ) | |
{ | |
if ( v209 > 0x54 ) | |
{ | |
__asm { VLDR S10, =0.0 } | |
} | |
else | |
{ | |
_R6 = *(_DWORD *)(_R5 + 200) * (84 - v209) >> 6; | |
__asm { VMOV S10, R6 } | |
} | |
} | |
else | |
{ | |
__asm { VLDR S10, [R5,#0xC8] } | |
} | |
if ( !*(_DWORD *)(_R4 + 1616) ) | |
goto LABEL_398; | |
if ( *(_DWORD *)(_R4 + 1624) ) | |
{ | |
__asm | |
{ | |
VLDR S3, [R5,#0x10C] | |
VCVT.F32.U32 S7, S3 | |
} | |
_R1 = v199 + 54016; | |
__asm | |
{ | |
VLDR S6, [R1,#0x44] | |
VLDR S8, [R1,#8] | |
VNMLS.F32 S7, S7, S6 | |
VCMPE.F32 S8, S7 | |
VCVT.F32.U32 S1, S10 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
__asm | |
{ | |
VCMPE.F32 S1, S7 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
__asm | |
{ | |
VCMPE.F32 S8, S7 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
LABEL_280: | |
__asm { VCVTR.U32.F32 S10, S8 } | |
goto LABEL_286; | |
} | |
goto LABEL_285; | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VCMPE.F32 S1, S8 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
goto LABEL_280; | |
} | |
} | |
__asm | |
{ | |
VLDR S16, [R5,#0x10C] | |
VCVT.F32.U32 S7, S16 | |
} | |
_R1 = v199 + 54016; | |
__asm | |
{ | |
VLDR S4, [R1,#0x44] | |
VNMLS.F32 S7, S7, S4 | |
VCVT.F32.U32 S8, S10 | |
VCMPE.F32 S8, S7 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
LABEL_398: | |
if ( !*(_DWORD *)(_R4 + 1624) ) | |
goto LABEL_286; | |
__asm { VCVT.F32.U32 S8, S10 } | |
_R0 = v199 + 54016; | |
__asm | |
{ | |
VLDR S7, [R0,#8] | |
VCMPE.F32 S8, S7 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
LABEL_286: | |
__asm { VMOV R12, S10 } | |
*(_DWORD *)(_R5 + 268) = _R12 + v208; | |
if ( _R12 + v208 < (unsigned int)v208 ) | |
*(_DWORD *)(_R5 + 268) = 255; | |
*(_DWORD *)(_R4 + 872) = _R3; | |
__asm { VLDR S16, =0.0039062 } | |
if ( *(_DWORD *)(_R5 + 1604) ) | |
{ | |
if ( *(_DWORD *)(_R5 + 180) % 3 ) | |
{ | |
v227 = *(_DWORD *)(_R4 + 240); | |
} | |
else | |
{ | |
v228 = *(_DWORD *)(_R4 + 812); | |
if ( *(_DWORD *)_R5 ) | |
v227 = v228 + 2; | |
else | |
v227 = v228 - 2; | |
} | |
*(_DWORD *)(_R4 + 812) = v227; | |
if ( *(_DWORD *)(_R4 + 812) <= 1 ) | |
{ | |
*(_DWORD *)_R5 = 1; | |
*(_DWORD *)(_R4 + 812) = 1; | |
} | |
if ( *(_DWORD *)(_R4 + 812) > *(_DWORD *)(_R4 + 860) - 1 ) | |
{ | |
*(_DWORD *)_R5 = 0; | |
v226 = *(_DWORD *)(_R4 + 860) - 1; | |
LABEL_329: | |
*(_DWORD *)(_R4 + 812) = v226; | |
goto LABEL_330; | |
} | |
} | |
else | |
{ | |
if ( *(_DWORD *)(_R5 + 176) ) | |
{ | |
__asm { VLDR S2, =256.0 } | |
_R2 = *(_DWORD *)(_R4 + 76) + 7008; | |
if ( *(_DWORD *)(_R4 + 72) == 4 ) | |
{ | |
__asm | |
{ | |
VLDREQ S8, [R2,#8] | |
VMOVEQ.F32 S7, #0.5 | |
} | |
} | |
else | |
{ | |
__asm { VLDRNE S7, [R2,#8] } | |
} | |
if ( _ZF ) | |
__asm { VMULEQ.F32 S7, S8, S7 } | |
__asm | |
{ | |
VMUL.F32 S0, S7, S2 | |
VCVTR.S32.F32 S11, S0 | |
VSTR S11, [R5,#0xD0] | |
} | |
} | |
if ( !*(_DWORD *)(_R5 + 28) ) | |
++*(_DWORD *)(_R5 + 16); | |
v217 = *(_DWORD *)(_R5 + 180); | |
if ( v217 < *(_DWORD *)(_R5 + 16) ) | |
{ | |
*(_DWORD *)(_R5 + 12) = 0; | |
goto LABEL_330; | |
} | |
v218 = *(_DWORD *)(_R5 + 268); | |
*(_DWORD *)(_R5 + 16) = v217 + *(_DWORD *)(_R5 + 184) + 1; | |
v219 = _R3 - v218; | |
if ( *(_DWORD *)(_R4 + 152) && *(_DWORD *)(_R4 + 156) != 3 ) | |
{ | |
*(_DWORD *)(_R4 + 244) = 2; | |
v220 = *(_DWORD *)(_R5 + 268); | |
} | |
else | |
{ | |
v220 = *(_DWORD *)(_R5 + 272); | |
} | |
HIDWORD(_R0) = -v220; | |
if ( v219 <= v220 && v219 >= SHIDWORD(_R0) ) | |
{ | |
++*(_DWORD *)(_R4 + 244); | |
} | |
else | |
{ | |
*(_DWORD *)(_R4 + 244) = 0; | |
if ( !_R3 ) | |
_R3 = 1; | |
__asm | |
{ | |
VLDR S12, [R5,#0x10C] | |
VMOV S13, R3 | |
VCVT.F64.U32 D28, S12 | |
VCVT.F64.S32 D29, S13 | |
VDIV.F64 D30, D28, D29 | |
VMOV R0, R1, D30 | |
} | |
_R0 = COERCE_UNSIGNED_INT64(log10(_R0)); | |
__asm | |
{ | |
VLDR S5, [R5,#0xD0] | |
VCVT.F32.S32 S9, S5 | |
} | |
_R2 = *(_DWORD *)(_R4 + 76) + 6976; | |
__asm | |
{ | |
VLDR S14, [R2,#0x14] | |
VCVT.F64.F32 D31, S14 | |
VMOV D16, R0, R1 | |
VMUL.F64 D19, D16, D31 | |
VCVT.F32.F64 S15, D19 | |
VMUL.F32 S1, S9, S15 | |
VMUL.F32 S3, S1, S16 | |
VCVTR.S32.F32 S6, S3 | |
VCMPE.F32 S15, #0.0 | |
VMOV R12, S6 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
if ( !_R12 ) | |
_R12 = -1; | |
} | |
else if ( !_R12 ) | |
{ | |
_R12 = 1; | |
} | |
v225 = _R12 + *(_DWORD *)(_R4 + 812); | |
*(_DWORD *)(_R4 + 812) = v225; | |
if ( v225 < 0 ) | |
*(_DWORD *)(_R4 + 812) = 0; | |
} | |
v226 = *(_DWORD *)(_R4 + 860) - 1; | |
if ( *(_DWORD *)(_R4 + 812) > v226 ) | |
goto LABEL_329; | |
} | |
LABEL_330: | |
if ( !*(_DWORD *)(_R5 + 12) ) | |
goto LABEL_385; | |
v229 = *(_DWORD *)(_R4 + 812); | |
_R1 = *(_WORD *)(*(_DWORD *)(_R5 + 212) + 8 * v229); | |
__asm | |
{ | |
VMOV S4, R1 | |
VCVT.F32.U32 S7, S4 | |
VMUL.F32 S8, S7, S16 | |
VSTR S8, [R4,#0x354] | |
} | |
_R1 = *(_DWORD *)(*(_DWORD *)(_R5 + 212) + 8 * v229 + 4); | |
*(_DWORD *)(_R4 + 848) = _R1; | |
if ( *(_DWORD *)(_R5 + 1300) != 1 | |
|| (_R2 = *(_DWORD *)(_R4 + 76) + 7104, !*(_DWORD *)(*(_DWORD *)(_R4 + 76) + 7112)) | |
|| *(_BYTE *)(_R5 + 160) ) | |
{ | |
if ( *(_DWORD *)(_R4 + 72) != 4 ) | |
{ | |
v243 = *(_DWORD *)(_R4 + 68); | |
if ( v243 == 1 || v243 == 3 ) | |
{ | |
v244 = *(_DWORD *)(_R4 + 808); | |
if ( v244 > 1 && v244 <= 6 ) | |
{ | |
_R2 = *(_DWORD *)(_R4 + 76) + 6976; | |
__asm | |
{ | |
VLDR S10, [R2,#0x18] | |
VMUL.F32 S2, S10, S16 | |
VCMP.F32 S2, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_ZF ) | |
{ | |
__asm | |
{ | |
VMOV S13, R1 | |
VCVT.F32.U32 S14, S13 | |
} | |
_LR = 1 << (v244 - 2); | |
__asm | |
{ | |
VMOV S0, LR | |
VCVT.F32.U32 S11, S0 | |
VMUL.F32 S15, S14, S8 | |
VMUL.F32 S12, S2, S11 | |
VDIV.F32 S5, S15, S12 | |
VSTR S12, [R4,#0x354] | |
VCVTR.U32.F32 S9, S5 | |
VSTR S9, [R4,#0x350] | |
} | |
} | |
} | |
} | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VLDR S1, [R2,#0x10] | |
VLDR S3, [R2] | |
} | |
if ( *(_DWORD *)(_R5 + 1320) ) | |
{ | |
__asm | |
{ | |
VMOV.F32 S7, S3 | |
VMOV.F32 S4, S1 | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VCVT.F64.F32 D17, S1 | |
VLDR D20, =1.2 | |
VCVT.F64.F32 D21, S3 | |
VMUL.F64 D18, D17, D20 | |
VMUL.F64 D22, D21, D20 | |
VCVT.F32.F64 S4, D18 | |
VCVT.F32.F64 S7, D22 | |
} | |
} | |
if ( v229 == *(_DWORD *)(_R4 + 860) - 1 ) | |
{ | |
__asm | |
{ | |
VMOV.F32 S6, #1.5 | |
VMUL.F32 S4, S1, S6 | |
VMUL.F32 S7, S3, S6 | |
} | |
} | |
__asm | |
{ | |
VLDR S10, [R5,#0xC0] | |
VLDR S2, =0.1 | |
VMUL.F32 S0, S10, S2 | |
} | |
_R3 = _R5 + 1308; | |
__asm | |
{ | |
VLDR S11, =0.9 | |
VLDR S8, [R3] | |
VMLA.F32 S0, S8, S11 | |
VCMPE.F32 S0, S7 | |
VSTR S0, [R3] | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
v234 = 0; | |
else | |
v234 = 1; | |
*(_DWORD *)(_R5 + 1320) = v234; | |
__asm | |
{ | |
VLDR S15, [R4,#0x354] | |
VMOV.F32 S6, #4.0 | |
} | |
_R1 = *(_WORD *)(*(_DWORD *)(_R5 + 212) + 8 * (*(_DWORD *)(_R4 + 860) - 1)); | |
__asm { VMOV S12, R1 } | |
v236 = *(_DWORD *)(_R4 + 76); | |
_R2 = v236 + 7104; | |
__asm { VLDR S9, [R2,#0xC] } | |
_R3 = v236 + 7072; | |
__asm | |
{ | |
VLDR S3, [R3,#0x1C] | |
VCVT.F32.U32 S13, S12 | |
VMUL.F32 S14, S13, S16 | |
VCMP.F32 S15, S14 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _ZF ) | |
__asm { VADDEQ.F32 S4, S4, S4 } | |
__asm { VDIV.F32 S5, S0, S4 } | |
if ( _ZF ) | |
__asm { VADDEQ.F32 S7, S7, S7 } | |
__asm | |
{ | |
VDIV.F32 S1, S0, S7 | |
VMUL.F32 S8, S5, S9 | |
VCMPE.F32 S8, S6 | |
VMUL.F32 S10, S1, S3 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
__asm | |
{ | |
VMOV.F32 S4, #1.0 | |
VCMP.F32 S8, S4 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F32 S8, S4 } | |
} | |
else | |
{ | |
__asm { VMOV.F32 S8, S6 } | |
} | |
__asm | |
{ | |
VCMPE.F32 S10, S6 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
__asm | |
{ | |
VMOV.F32 S7, #1.0 | |
VCMP.F32 S10, S7 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F32 S10, S7 } | |
} | |
else | |
{ | |
__asm { VMOV.F32 S10, #4.0 } | |
} | |
__asm | |
{ | |
VCVT.F64.F32 D24, S8 | |
VLDR D25, =0.2 | |
} | |
_R1 = _R5 + 1312; | |
__asm | |
{ | |
VLDR S2, [R1] | |
VLDR D27, =0.8 | |
VLDR D30, =0.9 | |
} | |
_R0 = _R5 + 1316; | |
__asm | |
{ | |
VLDR D16, =0.1 | |
VMUL.F64 D26, D24, D25 | |
VCVT.F64.F32 D23, S2 | |
VMLA.F64 D26, D23, D27 | |
VCVT.F64.F32 D29, S10 | |
VMUL.F64 D31, D29, D30 | |
VCVT.F32.F64 S0, D26 | |
VSTR S0, [R1] | |
VLDR S11, [R0] | |
VCVT.F64.F32 D28, S11 | |
VMLA.F64 D31, D28, D16 | |
VCVT.F32.F64 S12, D31 | |
VSTR S12, [R0] | |
VLDR S13, [R4,#0x354] | |
VMUL.F32 S15, S13, S0 | |
} | |
_R1 = *(_DWORD *)(_R4 + 848); | |
_R3 = *(_DWORD *)(_R4 + 76) + 7104; | |
__asm | |
{ | |
VLDR S14, [R3,#0x14] | |
VMUL.F32 S5, S13, S12 | |
VCMPE.F32 S15, S14 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
__asm { VMOVLE.F32 S14, S15 } | |
__asm | |
{ | |
VLDR S15, [R3,#4] | |
VCMPE.F32 S5, S15 | |
VMRS APSR_nzcv, FPSCR | |
VCMPE.F32 S14, #0.0 | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
__asm { VMOVLE.F32 S15, S5 } | |
__asm { VMRS APSR_nzcv, FPSCR } | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
__asm { VMOV S9, R1 } | |
} | |
else | |
{ | |
__asm | |
{ | |
VDIV.F32 S6, S13, S14 | |
VMOV S1, R1 | |
VCVT.F32.U32 S3, S1 | |
VMUL.F32 S4, S3, S6 | |
VCVTR.U32.F32 S9, S4 | |
VMUL.F32 S8, S14, S4 | |
VCVT.F32.U32 S7, S9 | |
VDIV.F32 S14, S8, S7 | |
} | |
} | |
__asm | |
{ | |
VCMPE.F32 S15, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
__asm | |
{ | |
VDIV.F32 S0, S13, S15 | |
VLDR S10, [R4,#0x350] | |
VCVT.F32.U32 S2, S10 | |
VMUL.F32 S12, S2, S0 | |
VCVTR.U32.F32 S11, S12 | |
VMUL.F32 S13, S15, S12 | |
VSTR S11, [R4,#0x3A4] | |
VCVT.F32.U32 S15, S11 | |
VDIV.F32 S15, S13, S15 | |
} | |
} | |
__asm | |
{ | |
VSTR S9, [R4,#0x350] | |
VSTR S14, [R4,#0x354] | |
VSTR S15, [R0] | |
} | |
} | |
if ( !*(_DWORD *)(_R4 + 788) ) | |
{ | |
aec_preview_antibanding(_R4, _R5); | |
goto LABEL_385; | |
} | |
__asm | |
{ | |
VLDR S3, [R4,#0x50] | |
VLDR S6, [R4,#0x60] | |
VLDR S9, =0.0039062 | |
VCVT.F32.U32 S4, S3 | |
} | |
_R1 = **(_WORD **)(_R5 + 212); | |
__asm | |
{ | |
VMOV S5, R1 | |
VCVT.F32.U32 S14, S5 | |
VCVT.F32.U32 S8, S6 | |
VMUL.F32 S1, S14, S16 | |
} | |
if ( _ZF ) | |
{ | |
__asm | |
{ | |
VMUL.F32 S14, S4, S9 | |
VLDR S15, [R4,#0x350] | |
VLDR D22, =0.00833333333 | |
VMUL.F32 S9, S14, S8 | |
VCVT.F32.U32 S5, S15 | |
VDIV.F32 S12, S5, S9 | |
VCVT.F64.F32 D21, S12 | |
VCMPE.F64 D21, D22 | |
VMOV.F64 D20, D22 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
goto LABEL_385; | |
__asm | |
{ | |
VADD.F32 S15, S1, S1 | |
VLDR S11, [R4,#0x354] | |
VLDR S13, =120.0 | |
VCMPE.F32 S11, S15 | |
VMOV.F64 D18, #0.5 | |
VMRS APSR_nzcv, FPSCR | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VMUL.F32 S10, S4, S9 | |
VLDR S7, [R4,#0x350] | |
VLDR D17, =0.01 | |
VMUL.F32 S0, S10, S8 | |
VCVT.F32.U32 S2, S7 | |
VDIV.F32 S12, S2, S0 | |
VCVT.F64.F32 D19, S12 | |
VCMPE.F64 D19, D17 | |
VMOV.F64 D20, D17 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
goto LABEL_385; | |
__asm | |
{ | |
VADD.F32 S15, S1, S1 | |
VLDR S11, [R4,#0x354] | |
VLDR S13, =100.0 | |
VMOV.F64 D18, #0.5 | |
VCMPE.F32 S11, S15 | |
VMRS APSR_nzcv, FPSCR | |
} | |
} | |
__asm { VMUL.F32 S14, S12, S13 } | |
if ( _NF ^ _VF ) | |
{ | |
__asm { VCVTRLT.U32.F32 S14, S14 } | |
} | |
else | |
{ | |
__asm | |
{ | |
VCVTGE.F64.F32 D7, S14 | |
VADDGE.F64 D7, D7, D18 | |
} | |
} | |
if ( !(_NF ^ _VF) ) | |
__asm { VCVTRGE.U32.F64 S14, D7 } | |
__asm | |
{ | |
VCVT.F32.U32 S1, S14 | |
VCVT.F64.F32 D23, S1 | |
VMUL.F64 D7, D23, D20 | |
VCVT.F32.F64 S3, D7 | |
VMUL.F32 S8, S3, S8 | |
VMUL.F32 S6, S11, S12 | |
VMUL.F32 S4, S8, S4 | |
VDIV.F32 S7, S6, S3 | |
VMUL.F32 S2, S4, S16 | |
VSTR S7, [R4,#0x354] | |
VCVT.F64.F32 D24, S2 | |
VADD.F64 D7, D24, D18 | |
VCVTR.U32.F64 S10, D7 | |
VSTR S10, [R4,#0x350] | |
} | |
LABEL_385: | |
__asm | |
{ | |
VLDR S0, [R4,#0x50] | |
VCVT.F32.U32 S12, S0 | |
VLDR S11, [R4,#0x60] | |
VLDR S15, [R4,#0x350] | |
VMUL.F32 S16, S12, S16 | |
VCVT.F32.U32 S13, S11 | |
VMUL.F32 S5, S16, S13 | |
VCVT.F32.U32 S14, S15 | |
VDIV.F32 S16, S14, S5 | |
VSTR S16, [R4,#0x358] | |
} | |
if ( *(_DWORD *)(_R5 + 176) ) | |
return 0; | |
v250 = *(_DWORD *)(_R4 + 840); | |
v251 = *(_DWORD *)(_R5 + 268); | |
if ( v250 >= v251 ) | |
{ | |
if ( v250 - v251 <= *(_DWORD *)(_R5 + 272) ) | |
goto LABEL_390; | |
if ( v250 > v251 ) | |
return 0; | |
} | |
if ( v251 - v250 > *(_DWORD *)(_R5 + 272) ) | |
return 0; | |
LABEL_390: | |
*(_DWORD *)(_R5 + 176) = 1; | |
aec_fast_conv_config(_R4, _R5); | |
return 0; | |
} | |
} | |
LABEL_285: | |
__asm { VCVTR.U32.F32 S10, S7 } | |
goto LABEL_286; | |
} | |
v192 = *(_DWORD *)(_R4 + 896); | |
if ( v192 == 3 ) | |
{ | |
aec_strobe_flash_store_est(_R4, _R5, 1); | |
*(_DWORD *)(_R5 + 8) = 0; | |
v193 = *(_DWORD *)(_R5 + 1532); | |
if ( *(_DWORD *)(_R4 + 848) != v193 ) | |
{ | |
*(_DWORD *)(_R4 + 848) = v193; | |
_R5 = _R5 + 1536; | |
__asm | |
{ | |
VLDR S9, [R5] | |
VSTR S9, [R4,#0x354] | |
} | |
} | |
goto LABEL_255; | |
} | |
if ( *(_DWORD *)(_R5 + 1568) != 2 ) | |
{ | |
if ( v192 ) | |
return 0; | |
*(_DWORD *)(_R5 + 8) = 0; | |
LABEL_255: | |
*(_DWORD *)(_R4 + 908) = 1; | |
return 0; | |
} | |
v195 = *(_DWORD *)(_R5 + 1504) + 1; | |
*(_DWORD *)(_R5 + 1504) = v195; | |
if ( *(_DWORD *)(_R4 + 160) || v195 > 30 ) | |
{ | |
*(_DWORD *)(_R5 + 1568) = 3; | |
aec_set_full_frame_exp(_R4, _R5); | |
} | |
return 0; | |
} | |
//----- (00003CD8) -------------------------------------------------------- | |
int __fastcall aec_process_snapshot(signed int a1, int a2) | |
{ | |
int v3; // r5@1 | |
int v4; // r6@1 | |
int v5; // r3@1 | |
signed int v6; // r2@1 | |
int v10; // r3@1 | |
int v11; // r1@9 | |
int v12; // r3@10 | |
unsigned int v22; // r3@31 | |
int v24; // r2@38 | |
int v27; // r1@42 | |
int v31; // r0@52 | |
signed int i; // r2@57 | |
int v42; // r6@74 | |
int v45; // r2@87 | |
int v46; // r1@90 | |
unsigned int v50; // r6@96 | |
signed int v52; // r3@98 | |
unsigned int v55; // r1@102 | |
unsigned int v56; // r1@105 | |
unsigned int v57; // r0@109 | |
int v58; // r1@112 | |
int v60; // r2@112 | |
_R4 = a1; | |
v3 = a2; | |
v4 = *(_DWORD *)(a1 + 76); | |
memset((void *)(a1 + 928), 0, 0x24u); | |
v5 = *(_DWORD *)(v3 + 212); | |
v6 = *(_DWORD *)(_R4 + 844); | |
_R1 = *(_WORD *)(v5 + 8 * (*(_DWORD *)(_R4 + 860) - 1)); | |
_R7 = *(_WORD *)v5; | |
__asm | |
{ | |
VMOV S18, R1 | |
VMOV S19, R7 | |
} | |
v10 = *(_DWORD *)(v3 + 268); | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
if ( v6 <= 7 ) | |
{ | |
if ( v6 <= 3 ) | |
v10 -= 3; | |
else | |
v10 -= 5; | |
} | |
else | |
{ | |
v10 -= 8; | |
} | |
} | |
*(_DWORD *)(_R4 + 928) = v10; | |
__asm { VLDR S16, =0.0039062 } | |
v11 = *(_DWORD *)(_R4 + 912); | |
*(_DWORD *)(_R4 + 928) = *(_DWORD *)(v3 + 268); | |
if ( v11 ) | |
{ | |
v12 = *(_DWORD *)(_R4 + 76); | |
if ( !*(_DWORD *)(v12 + 9336) ) | |
{ | |
LABEL_28: | |
*(_DWORD *)(_R4 + 912) = 0; | |
goto LABEL_31; | |
} | |
_R1 = *(_DWORD *)(v12 + 9340); | |
__asm | |
{ | |
VMOV S8, R1 | |
VCVT.F32.S32 S12, S8 | |
} | |
_R7 = v12 + 9344; | |
__asm | |
{ | |
VLDR S15, [R7] | |
VLDR S10, [R7,#8] | |
VLDR S11, [R7,#4] | |
} | |
*(_DWORD *)(_R4 + 900) = _R1; | |
HIDWORD(_R2) = *(_DWORD *)(v3 + 1528); | |
__asm | |
{ | |
VMUL.F32 S14, S12, S15 | |
VMOV.F32 S17, #1.0 | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
__asm | |
{ | |
VMOV S0, R3 | |
VCVT.F64.S32 D1, S0 | |
VMOV R2, R3, D1 | |
} | |
_R0 = COERCE_UNSIGNED_INT64(pow(loc_4058, _R2)); | |
__asm | |
{ | |
VMOV D2, R0, R1 | |
VCVT.F32.F64 S8, D2 | |
} | |
LABEL_21: | |
__asm | |
{ | |
VLDR S10, [R4,#0x50] | |
VCVT.F32.U32 S11, S10 | |
VLDR S13, [R4,#0x60] | |
VLDR S4, [R4,#0x350] | |
VLDR S6, [R4,#0x54] | |
VLDR S12, [R4,#0x354] | |
VLDR S9, =256.0 | |
VMUL.F32 S2, S11, S16 | |
VCVT.F32.U32 S3, S13 | |
VMUL.F32 S5, S2, S3 | |
VCVT.F32.U32 S1, S4 | |
VCVT.F32.U32 S7, S6 | |
VMUL.F32 S0, S8, S12 | |
VDIV.F32 S15, S9, S7 | |
VDIV.F32 S8, S1, S5 | |
VMOV.F32 S14, #1.0 | |
VCMPE.F32 S0, S17 | |
VMRS APSR_nzcv, FPSCR | |
VCMPE.F32 S8, S15 | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F32 S0, S14 } | |
__asm | |
{ | |
VMRS APSR_nzcv, FPSCR | |
VSTR S0, [R4,#0x354] | |
} | |
if ( _NF ) | |
{ | |
__asm | |
{ | |
VMUL.F32 S11, S15, S2 | |
VLDR S10, =0.0039062 | |
} | |
_R1 = **(_WORD **)(v3 + 212); | |
__asm | |
{ | |
VMOV S12, R1 | |
VMUL.F32 S2, S11, S3 | |
VCVTR.U32.F32 S13, S2 | |
VMUL.F32 S0, S1, S0 | |
VSTR S13, [R4,#0x350] | |
VCVT.F32.S32 S1, S13 | |
VDIV.F32 S3, S0, S1 | |
VCVT.F32.U32 S14, S12 | |
VMUL.F32 S4, S14, S10 | |
VCMPE.F32 S3, S4 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF ) | |
__asm { VMOVPL.F32 S4, S3 } | |
__asm { VSTR S4, [R4,#0x354] } | |
} | |
goto LABEL_28; | |
} | |
_R2 = v3 + 1540; | |
__asm | |
{ | |
VLDR S13, [R2] | |
VCMPE.F32 S13, S15 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_ZF & _CF ) | |
{ | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
__asm | |
{ | |
VSUB.F32 S1, S13, S15 | |
VLDR S3, [R7,#4] | |
VMLA.F32 S14, S1, S3 | |
VCVTR.U32.F32 S5, S14 | |
} | |
LABEL_18: | |
__asm { VSTR S5, [R4,#0x384] } | |
goto LABEL_20; | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VSUB.F32 S6, S10, S15 | |
VMLA.F32 S14, S6, S11 | |
VCVTR.S32.F32 S5, S14 | |
VMUL.F32 S7, S12, S13 | |
VCVT.F32.S32 S9, S5 | |
VCMPE.F32 S7, S9 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
goto LABEL_18; | |
__asm | |
{ | |
VCVTR.U32.F32 S15, S7 | |
VSTR S15, [R4,#0x384] | |
} | |
} | |
LABEL_20: | |
__asm { VMOV.F32 S8, S17 } | |
goto LABEL_21; | |
} | |
if ( *(_DWORD *)(_R4 + 892) ) | |
aec_adjust_exp_settings_for_led(_R4, v3); | |
LABEL_31: | |
v22 = *(_DWORD *)(_R4 + 808); | |
if ( v22 ) | |
{ | |
if ( v22 == 1 ) | |
{ | |
v24 = *(_DWORD *)(_R4 + 148); | |
*(_DWORD *)(_R4 + 944) = 0; | |
if ( v24 ) | |
{ | |
_R0 = v3 + 1496; | |
__asm { VLDR S15, [R0] } | |
} | |
else | |
{ | |
__asm { VLDR S15, [R4,#0x354] } | |
} | |
} | |
else | |
{ | |
_R0 = *(_DWORD *)(_R4 + 76) + 6976; | |
__asm { VLDR S5, [R0,#0x18] } | |
if ( !_ZF & _CF ) | |
{ | |
if ( v22 >= 6 ) | |
LOBYTE(v27) = 6; | |
else | |
v27 = *(_DWORD *)(_R4 + 808); | |
} | |
else | |
{ | |
LOBYTE(v27) = 2; | |
} | |
*(_DWORD *)(_R4 + 944) = 0; | |
_R0 = 1 << (v27 - 2); | |
__asm | |
{ | |
VMOV S6, R0 | |
VCVT.F32.U32 S7, S6 | |
VMUL.F32 S15, S5, S7 | |
VSTR S15, [R4,#0x3BC] | |
} | |
} | |
} | |
else | |
{ | |
*(_DWORD *)(_R4 + 944) = 1; | |
__asm { VLDR S15, [R4,#0x354] } | |
if ( *(_DWORD *)(v3 + 1320) | |
&& *(_DWORD *)(*(_DWORD *)(_R4 + 76) + 7096) | |
&& (!*(_DWORD *)(_R4 + 152) || *(_DWORD *)(_R4 + 156) == 3) ) | |
{ | |
_R0 = v3 + 1304; | |
__asm { VLDR S15, [R0] } | |
*(_DWORD *)(_R4 + 944) = 0; | |
} | |
} | |
__asm | |
{ | |
VLDR S9, [R4,#0x50] | |
VCVT.F32.U32 S8, S9 | |
VLDR S12, [R4,#0x60] | |
VLDR S2, [R4,#0x350] | |
VLDR S1, [R4,#0x354] | |
VLDR S10, =0.0039062 | |
VMUL.F32 S4, S8, S16 | |
VCVT.F32.U32 S14, S12 | |
VMUL.F32 S11, S4, S14 | |
VCVT.F32.U32 S13, S2 | |
VDIV.F32 S0, S13, S11 | |
VMUL.F32 S3, S0, S1 | |
VDIV.F32 S13, S3, S15 | |
} | |
if ( v22 || *(_DWORD *)(v3 + 1320) ) | |
goto LABEL_87; | |
__asm { VCVT.F32.U32 S5, S19 } | |
_R3 = v4 + 7144; | |
__asm { VMUL.F32 S14, S5, S10 } | |
if ( !*(_DWORD *)(v4 + 7144) ) | |
{ | |
__asm { VCVT.F32.U32 S6, S18 } | |
v42 = *(_DWORD *)(_R4 + 76); | |
__asm | |
{ | |
VMUL.F32 S7, S6, S10 | |
VCMPE.F32 S15, S7 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
__asm { VMUL.F32 S10, S13, S15 } | |
_R1 = v42 + 7008; | |
__asm | |
{ | |
VLDR S13, [R1,#4] | |
VDIV.F32 S4, S10, S7 | |
VCMPE.F32 S4, S13 | |
VMOV.F32 S15, S7 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ^ _VF ) | |
__asm { VMOV.F32 S13, S4 } | |
goto LABEL_87; | |
} | |
_R0 = v42 + 7008; | |
__asm | |
{ | |
VLDR S9, [R0,#4] | |
VCMPE.F32 S13, S9 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !(_NF ^ _VF) ) | |
{ | |
__asm | |
{ | |
VMUL.F32 S8, S15, S13 | |
VDIV.F32 S15, S8, S9 | |
VCMPE.F32 S15, S7 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
__asm { VMOV.F32 S15, S7 } | |
__asm { VMOV.F32 S13, S9 } | |
goto LABEL_87; | |
} | |
__asm | |
{ | |
VCMPE.F32 S15, S14 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF ) | |
goto LABEL_87; | |
__asm | |
{ | |
VMUL.F32 S15, S13, S15 | |
VDIV.F32 S13, S15, S14 | |
} | |
LABEL_85: | |
__asm { VMOV.F32 S15, S14 } | |
goto LABEL_87; | |
} | |
_R2 = *(_WORD *)(v4 + 7156); | |
__asm | |
{ | |
VMOV S12, R2 | |
VCVT.F32.S32 S2, S12 | |
VLDR S11, [R4,#0x338] | |
VCMPE.F32 S11, S2 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_ZF & _CF ) | |
{ | |
v31 = *(_BYTE *)(v4 + 7152) - 1; | |
if ( !*(_BYTE *)(v4 + 7152) ) | |
goto LABEL_116; | |
_R7 = _R3 + 12 * v31; | |
_R2 = *(_WORD *)(_R7 + 12); | |
__asm | |
{ | |
VMOV S0, R2 | |
VCVT.F32.S32 S1, S0 | |
VCMPE.F32 S11, S1 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
LABEL_116: | |
for ( i = 1; i <= v31; ++i ) | |
{ | |
_R1 = _R3 + 12 * i; | |
_R12 = *(_WORD *)(_R1 + 12); | |
__asm | |
{ | |
VMOV S6, R12 | |
VCVT.F32.S32 S7, S6 | |
VCMPE.F32 S11, S7 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !(!_ZF & _CF) ) | |
{ | |
__asm { VLDR S1, [R1,#0x14] } | |
_R3 = _R3 + 12 * (i - 1); | |
__asm | |
{ | |
VLDR S5, [R3,#0x10] | |
VLDR S3, [R3,#0x14] | |
VSUB.F32 S6, S1, S3 | |
} | |
_R7 = *(_WORD *)(_R3 + 12); | |
__asm { VMOV S8, R7 } | |
_R2 = _R12 - _R7; | |
__asm | |
{ | |
VMOV S9, R2 | |
VCVT.F32.S32 S10, S8 | |
VSUB.F32 S12, S11, S10 | |
VLDR S11, [R1,#0x10] | |
VSUB.F32 S2, S11, S5 | |
VCVT.F32.S32 S4, S9 | |
VDIV.F32 S0, S2, S4 | |
VDIV.F32 S7, S6, S4 | |
VMLA.F32 S5, S0, S12 | |
VMLA.F32 S3, S7, S12 | |
} | |
goto LABEL_61; | |
} | |
} | |
__asm | |
{ | |
VMOV.F32 S3, S13 | |
VLDR S5, =0.0 | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VLDR S5, [R7,#0x10] | |
VLDR S3, [R7,#0x14] | |
} | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VLDR S5, [R3,#0x10] | |
VLDR S3, [R3,#0x14] | |
} | |
} | |
LABEL_61: | |
__asm | |
{ | |
VCMP.F32 S13, S3 | |
VMRS APSR_nzcv, FPSCR | |
VCMP.F32 S5, #0.0 | |
} | |
if ( !(_NF ^ _VF) ) | |
__asm { VMOVGE.F32 S13, S3 } | |
__asm { VMRS APSR_nzcv, FPSCR } | |
if ( !_ZF ) | |
{ | |
if ( *(_DWORD *)(v4 + 7148) ) | |
{ | |
_R3 = *(_DWORD *)(_R4 + 928); | |
_R0 = *(_DWORD *)(_R4 + 840); | |
if ( _R0 < _R3 - 4 ) | |
{ | |
__asm | |
{ | |
VMOV S3, R3 | |
VCVT.F32.U32 S9, S3 | |
VMOV S4, R0 | |
VMUL.F32 S13, S13, S9 | |
VCVT.F32.U32 S8, S4 | |
VDIV.F32 S13, S13, S8 | |
} | |
} | |
} | |
__asm | |
{ | |
VADD.F32 S10, S14, S14 | |
VCMPE.F32 S15, S10 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
__asm { VMULGT.F32 S15, S15, S5 } | |
__asm { VCMPE.F32 S15, S14 } | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
__asm { VDIVGT.F32 S13, S13, S5 } | |
__asm { VMRS APSR_nzcv, FPSCR } | |
if ( _NF ) | |
{ | |
__asm | |
{ | |
VDIV.F32 S15, S14, S15 | |
VMUL.F32 S13, S13, S15 | |
} | |
goto LABEL_85; | |
} | |
} | |
LABEL_87: | |
v45 = *(_DWORD *)(_R4 + 152); | |
if ( v45 && v45 != 3 ) | |
*(_DWORD *)(_R4 + 944) = 0; | |
v46 = *(_DWORD *)(v3 + 1348); | |
if ( (unsigned int)(v46 - 1) <= 1 ) | |
{ | |
__asm { VMOV.F64 D17, #1.0 } | |
_LR = v46 == 2 ? 120 : 100; | |
__asm | |
{ | |
VMOV S5, LR | |
VCVT.F64.S32 D16, S5 | |
VDIV.F64 D18, D17, D16 | |
VCVT.F64.F32 D19, S13 | |
VCMPE.F64 D19, D18 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
__asm | |
{ | |
VCVT.F32.S32 S14, S5 | |
VMUL.F32 S12, S13, S14 | |
VCVTR.U32.F32 S11, S12 | |
VCVT.F32.U32 S2, S11 | |
VCVT.F64.F32 D20, S2 | |
VMUL.F64 D21, D20, D18 | |
VMUL.F32 S1, S15, S13 | |
VCVT.F32.F64 S0, D21 | |
VDIV.F32 S15, S1, S0 | |
VMOV.F32 S13, S0 | |
} | |
} | |
} | |
_R2 = *(_DWORD *)(_R4 + 100); | |
__asm | |
{ | |
VMOV S6, R2 | |
VCVT.F32.U32 S7, S6 | |
} | |
_R0 = *(_DWORD *)(_R4 + 84); | |
__asm | |
{ | |
VMOV S9, R0 | |
VSTR S15, [R4,#0x3BC] | |
} | |
v50 = *(_DWORD *)(_R4 + 104); | |
__asm | |
{ | |
VMUL.F32 S3, S13, S7 | |
VCVT.F32.U32 S4, S9 | |
VMUL.F32 S2, S3, S4 | |
VMUL.F32 S8, S2, S16 | |
VMOV.F64 D23, #0.5 | |
VCVT.F64.F32 D22, S8 | |
VADD.F64 D5, D22, D23 | |
VCVTR.U32.F64 S5, D5 | |
VMOV R3, S5 | |
} | |
if ( !_R3 ) | |
_R3 = 1; | |
*(_DWORD *)(_R4 + 932) = _R3; | |
v52 = 1; | |
while ( 1 ) | |
{ | |
v55 = *(_DWORD *)(_R4 + 932); | |
if ( v55 <= v50 ) | |
break; | |
v52 *= 2; | |
_R1 = v52 << 8; | |
__asm | |
{ | |
VMOV S11, R1 | |
VCVT.F32.S32 S0, S11 | |
VDIV.F32 S1, S2, S0 | |
VCVT.F64.F32 D24, S1 | |
VADD.F64 D3, D24, D23 | |
VCVTR.U32.F64 S15, D3 | |
VMOV R1, S15 | |
} | |
if ( !_R1 ) | |
_R1 = 1; | |
*(_DWORD *)(_R4 + 932) = _R1; | |
} | |
__asm { VSTR S13, [R4,#0x3C0] } | |
if ( !v55 ) | |
*(_DWORD *)(_R4 + 932) = 1; | |
v56 = *(_DWORD *)(_R4 + 932); | |
if ( v56 >= _R2 ) | |
_R0 = _R0 * _R2 / v56; | |
if ( *(_DWORD *)(v3 + 32) && *(_DWORD *)(_R4 + 892) ) | |
{ | |
v57 = (200 * _R0 + 255000) / 0x3E800; | |
*(_DWORD *)(_R4 + 936) = v57; | |
*(_DWORD *)(_R4 + 940) = v57; | |
} | |
else | |
{ | |
*(_DWORD *)(_R4 + 936) = 0; | |
*(_DWORD *)(_R4 + 940) = 0; | |
} | |
if ( *(_DWORD *)(_R4 + 892) ) | |
{ | |
v58 = *(_DWORD *)(v3 + 1556); | |
*(_DWORD *)(_R4 + 812) = v58; | |
_R3 = *(_WORD *)(*(_DWORD *)(v3 + 212) + 8 * v58); | |
__asm | |
{ | |
VMOV S13, R3 | |
VCVT.F32.U32 S14, S13 | |
VMUL.F32 S16, S14, S16 | |
VSTR S16, [R4,#0x354] | |
} | |
*(_DWORD *)(_R4 + 848) = *(_DWORD *)(*(_DWORD *)(v3 + 212) + 8 * v58 + 4); | |
*(_DWORD *)(_R4 + 840) = *(_DWORD *)(v3 + 1552); | |
v60 = *(_DWORD *)(v3 + 1556); | |
_R5 = v3 + 1560; | |
*(_DWORD *)(_R4 + 240) = v60; | |
__asm | |
{ | |
VLDR S12, [R5] | |
VSTR S12, [R4,#0x338] | |
} | |
} | |
return 0; | |
} | |
//----- (000042F8) -------------------------------------------------------- | |
int __fastcall sub_42F8(int result, int a2, int _R2) | |
{ | |
int v3; // r5@1 | |
int v8; // r6@1 | |
signed int v9; // r4@2 | |
int v12; // r1@7 | |
int v18; // r4@7 | |
int v21; // r3@15 | |
v3 = a2; | |
__asm { VMOV S14, R2 } | |
v8 = result; | |
if ( *(_DWORD *)(result + 72) != 1 ) | |
{ | |
__asm { VCVT.F32.S32 S0, S14 } | |
LODWORD(_R2) = *(_DWORD *)(result + 76); | |
v9 = *(_DWORD *)(a2 + 272); | |
HIDWORD(_R2) = LODWORD(_R2) + 2200; | |
__asm | |
{ | |
VLDR S15, [R3] | |
VDIV.F32 S1, S0, S15 | |
VMOV.F64 D16, #0.5 | |
VCVT.F64.F32 D1, S1 | |
VADD.F64 D7, D1, D16 | |
VCVTR.U32.F64 S3, D7 | |
VMOV R0, S3 | |
} | |
if ( (unsigned int)_R0 >= 0x70 ) | |
_R0 = 112; | |
__asm { VMOV.F64 D8, D16 } | |
if ( !_ZF ) | |
{ | |
if ( _R0 >= (unsigned int)v9 ) | |
v9 = _R0; | |
*(_DWORD *)(a2 + 108) = v9; | |
v12 = *(_DWORD *)(v8 + 76); | |
result = v12 + 6976; | |
_R2 = v12 + 2200; | |
__asm { VLDR S4, [R2] } | |
_R12 = *(_BYTE *)(v12 + 6988); | |
__asm | |
{ | |
VMOV S5, R12 | |
VCVT.F32.U32 S6, S5 | |
} | |
_R1 = *(_BYTE *)(v12 + 6989); | |
__asm | |
{ | |
VMOV S10, R1 | |
VCVT.F32.U32 S9, S10 | |
VDIV.F32 S7, S6, S4 | |
VDIV.F32 S11, S9, S4 | |
VCVT.F64.F32 D20, S7 | |
VCVT.F64.F32 D22, S11 | |
VADD.F64 D21, D20, D16 | |
VADD.F64 D23, D22, D16 | |
VCVTR.S32.F64 S8, D21 | |
VCVTR.S32.F64 S12, D23 | |
VMOV R3, S8 | |
VMOV R2, S12 | |
} | |
v18 = v9 - _R3 + _R2; | |
goto LABEL_16; | |
} | |
_R4 = 8 * v9; | |
if ( (unsigned int)(_R0 + _R4) <= 0xFF ) | |
{ | |
if ( _R0 >= (unsigned int)_R4 ) | |
{ | |
_R4 = _R0; | |
LABEL_15: | |
__asm { VMOV.F32 S18, #1.0 } | |
LODWORD(_R2) += 6976; | |
__asm | |
{ | |
VLDR S4, [R2,#0x14] | |
VDIV.F32 S5, S18, S4 | |
VCVT.F64.F32 D3, S5 | |
VMOV R2, R3, D3 | |
} | |
_R0 = COERCE_UNSIGNED_INT64(pow(10.0, _R2)); | |
__asm | |
{ | |
VMOV S7, R4 | |
VCVT.F32.S32 S8, S7 | |
} | |
*(_DWORD *)(v3 + 108) = _R4; | |
__asm | |
{ | |
VMOV D5, R0, R1 | |
VCVT.F32.F64 S9, D5 | |
VSUB.F32 S11, S9, S18 | |
VMLA.F32 S18, S8, S11 | |
VCVTR.U32.F32 S18, S18 | |
VSTR S18, [R5,#0x110] | |
} | |
v21 = *(_DWORD *)(v8 + 76); | |
_R0 = v21 + 2200; | |
__asm { VLDR S12, [R0] } | |
_R12 = *(_BYTE *)(v21 + 6988); | |
__asm | |
{ | |
VMOV S13, R12 | |
VCVT.F32.U32 S14, S13 | |
} | |
_R3 = *(_BYTE *)(v21 + 6989); | |
__asm | |
{ | |
VMOV S1, R3 | |
VCVT.F32.U32 S2, S1 | |
VDIV.F32 S0, S14, S12 | |
VDIV.F32 S3, S2, S12 | |
VCVT.F64.F32 D17, S0 | |
VCVT.F64.F32 D19, S3 | |
VADD.F64 D18, D17, D8 | |
VADD.F64 D8, D19, D8 | |
VCVTR.S32.F64 S15, D18 | |
VCVTR.S32.F64 S16, D8 | |
VMOV R2, S15 | |
VMOV R0, S16 | |
} | |
v18 = _R4 - _R2 + result; | |
LABEL_16: | |
*(_DWORD *)(v3 + 112) = v18; | |
return result; | |
} | |
} | |
else | |
{ | |
_R4 = 255 - _R4; | |
} | |
if ( (unsigned int)_R4 >= 0x70 ) | |
_R4 = 112; | |
goto LABEL_15; | |
} | |
return result; | |
} | |
//----- (0000445C) -------------------------------------------------------- | |
int __fastcall aec_est_strobe_flash_for_snapshot(int a1, int a2) | |
{ | |
int v2; // r5@1 | |
signed int v3; // r3@1 | |
signed int v5; // r1@5 | |
int v15; // r2@14 | |
int result; // r0@14 | |
v2 = a1; | |
v3 = *(_DWORD *)(a2 + 1512); | |
_R4 = a2; | |
if ( !v3 ) | |
goto LABEL_25; | |
if ( *(_DWORD *)(a2 + 1516) ) | |
goto LABEL_7; | |
if ( v3 <= 254 ) | |
LABEL_25: | |
*(_DWORD *)(a2 + 1512) = v3 + 1; | |
v5 = *(_DWORD *)(a2 + 1516); | |
if ( v5 <= 254 ) | |
*(_DWORD *)(_R4 + 1516) = v5 + 1; | |
LABEL_7: | |
__asm | |
{ | |
VLDR S2, [R4,#0x10C] | |
VCVT.F32.U32 S19, S2 | |
} | |
_R3 = *(_DWORD *)(_R4 + 1516); | |
__asm { VMOV S13, R3 } | |
HIDWORD(_R0) = *(_DWORD *)(_R4 + 212) + 8 * *(_DWORD *)(_R4 + 1520); | |
__asm { VLDR S15, [R1,#4] } | |
_R12 = *HIDWORD(_R0); | |
__asm { VMOV S16, R12 } | |
_R2 = *(_DWORD *)(_R4 + 1512); | |
__asm | |
{ | |
VMOV S1, R2 | |
VCVT.F32.S32 S14, S13 | |
VCVT.F32.S32 S17, S1 | |
VDIV.F32 S20, S14, S17 | |
VCVT.F32.U32 S16, S16, #8 | |
VCVT.F32.U32 S0, S15 | |
VMUL.F32 S16, S16, S0 | |
VMUL.F32 S20, S20, S16 | |
} | |
if ( !*(_DWORD *)(_R4 + 1516) ) | |
goto LABEL_26; | |
__asm | |
{ | |
VSUB.F32 S3, S17, S14 | |
VCMPE.F32 S3, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_ZF & _CF ) | |
{ | |
__asm | |
{ | |
VMUL.F32 S4, S16, S14 | |
VADD.F32 S5, S14, S3 | |
VDIV.F32 S6, S4, S5 | |
} | |
} | |
else | |
{ | |
LABEL_26: | |
__asm { VMOV.F32 S6, S16 } | |
} | |
__asm | |
{ | |
VDIV.F32 S7, S19, S14 | |
VMUL.F32 S8, S6, S7 | |
VDIV.F32 S9, S8, S16 | |
VMOV.F32 S18, #1.0 | |
VCVT.F64.F32 D5, S9 | |
VCMP.F32 S17, #0.0 | |
VMOV R0, R1, D5 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _ZF ) | |
__asm { VMOVEQ.F32 S17, S18 } | |
_R0 = COERCE_UNSIGNED_INT64(log10(_R0)); | |
v15 = *(_DWORD *)(v2 + 76); | |
_R3 = v15 + 6976; | |
__asm | |
{ | |
VLDR S11, [R3,#0x14] | |
VCVT.F64.F32 D16, S11 | |
} | |
_R3 = *(_DWORD *)(_R4 + 1516); | |
__asm | |
{ | |
VMOV D17, R0, R1 | |
VMUL.F64 D6, D17, D16 | |
VCVTR.S32.F64 S15, D6 | |
VMOV R0, S15 | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
_R1 = v15 + 9344; | |
__asm { VLDR S0, [R1,#8] } | |
} | |
else if ( result <= 0 ) | |
{ | |
__asm { VMOV.F32 S0, S18 } | |
} | |
else | |
{ | |
__asm | |
{ | |
VMOV S13, R3 | |
VCVT.F32.S32 S14, S13 | |
} | |
_LR = *(_DWORD *)(_R4 + 1512) - _R3; | |
__asm { VMOV S1, LR } | |
_R2 = v15 + 9344; | |
__asm | |
{ | |
VLDR S0, [R2,#8] | |
VSUB.F32 S19, S19, S14 | |
VCVT.F32.S32 S2, S1 | |
VDIV.F32 S19, S19, S2 | |
VCMPE.F32 S19, S0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
__asm { VMOVLE.F32 S0, S19 } | |
} | |
__asm | |
{ | |
VMOV S3, R3 | |
VCVT.F32.S32 S4, S3 | |
VSTR S0, [R2] | |
} | |
*(_DWORD *)(_R4 + 1528) = result; | |
__asm | |
{ | |
VSUB.F32 S17, S17, S4 | |
VCVTR.S32.F32 S5, S16 | |
VMUL.F32 S16, S16, S4 | |
VSTR S5, [R5,#0x36C] | |
VMLA.F32 S4, S0, S17 | |
VDIV.F32 S6, S16, S4 | |
VCVTR.S32.F32 S20, S20 | |
VCVTR.S32.F32 S7, S6 | |
VSTR S20, [R5,#0x370] | |
VSTR S7, [R5,#0x374] | |
} | |
return result; | |
} | |
//----- (000045D8) -------------------------------------------------------- | |
int __fastcall aec_strobe_flash_store_est(int result, int a2, int a3) | |
{ | |
_R3 = result; | |
if ( a3 ) | |
{ | |
if ( a3 == 1 ) | |
{ | |
*(_DWORD *)(a2 + 1512) = *(_DWORD *)(result + 840); | |
*(_DWORD *)(result + 912) = 1; | |
return aec_est_strobe_flash_for_snapshot(result, a2); | |
} | |
a3 = 0; | |
} | |
else | |
{ | |
*(_DWORD *)(a2 + 1516) = *(_DWORD *)(result + 840); | |
*(_DWORD *)(a2 + 1520) = *(_DWORD *)(result + 812); | |
__asm | |
{ | |
VLDR S15, [R3,#0x338] | |
VSTR S15, [R1] | |
} | |
result = *(_DWORD *)(result + 848); | |
*(_DWORD *)(a2 + 1532) = result; | |
__asm | |
{ | |
VLDR S0, [R3,#0x354] | |
VSTR S0, [R4] | |
} | |
} | |
*(_DWORD *)(_R3 + 912) = a3; | |
return result; | |
} | |
//----- (00004632) -------------------------------------------------------- | |
int __fastcall aec_set_full_frame_exp(int result, int a2) | |
{ | |
_R3 = *(_DWORD *)(*(_DWORD *)(a2 + 212) + 8 * *(_WORD *)(*(_DWORD *)(result + 76) + 7020) + 4); | |
if ( *(_DWORD *)(result + 848) < _R3 ) | |
{ | |
*(_DWORD *)(result + 848) = _R3; | |
__asm { VLDR S14, [R0,#0x354] } | |
_R1 = *(_DWORD *)(a2 + 1532); | |
__asm | |
{ | |
VMOV S15, R1 | |
VCVT.F32.U32 S0, S15 | |
VMOV S13, R3 | |
VMUL.F32 S1, S0, S14 | |
VCVT.F32.U32 S2, S13 | |
VDIV.F32 S3, S1, S2 | |
VSTR S3, [R0,#0x354] | |
} | |
} | |
*(_DWORD *)(result + 896) = 1; | |
return result; | |
} | |
//----- (0000467E) -------------------------------------------------------- | |
int __fastcall aec_load_chromatix(int a1, int a2) | |
{ | |
int v2; // r5@1 | |
int v3; // r3@1 | |
int v4; // r4@1 | |
int v5; // r0@1 | |
int v6; // r2@1 | |
int v12; // r2@5 | |
int v13; // r0@5 | |
int v14; // r1@5 | |
int v15; // r0@7 | |
int v16; // r2@8 | |
int v17; // r1@9 | |
int v18; // r1@12 | |
int v19; // r2@12 | |
int result; // r0@12 | |
v2 = a2; | |
v3 = *(_DWORD *)(a1 + 76); | |
v4 = a1; | |
*(_DWORD *)(a1 + 840) = *(_BYTE *)(v3 + 6988); | |
v5 = *(_DWORD *)(v3 + 7004); | |
v6 = v3 + 7008; | |
_R3 = v3 + 7072; | |
*(_DWORD *)(v4 + 816) = v5; | |
*(_DWORD *)(v4 + 820) = *(_DWORD *)v6; | |
__asm | |
{ | |
VLDR S15, [R3,#8] | |
VCMP.F32 S15, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _ZF ) | |
goto LABEL_15; | |
__asm | |
{ | |
VLDR S0, [R3,#0xC] | |
VCMP.F32 S0, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _ZF ) | |
{ | |
LABEL_15: | |
*(_DWORD *)(a2 + 1508) = 1; | |
} | |
else | |
{ | |
*(_DWORD *)(a2 + 1508) = 0; | |
memset((void *)(v4 + 876), 1, 0xCu); | |
} | |
*(_DWORD *)(v2 + 188) = *(_WORD *)(*(_DWORD *)(v4 + 76) + 2986); | |
v12 = *(_BYTE *)(*(_DWORD *)(v4 + 76) + 6988); | |
*(_DWORD *)(v2 + 264) = v12; | |
*(_DWORD *)(v2 + 268) = v12; | |
*(_DWORD *)(v2 + 272) = *(_DWORD *)(*(_DWORD *)(v4 + 76) + 6992); | |
*(_DWORD *)(v2 + 212) = *(_DWORD *)(v4 + 76) + 2988; | |
sub_42F8(v4, v2, v12); | |
v13 = *(_DWORD *)(v4 + 76); | |
*(_DWORD *)(v4 + 800) = 1; | |
v14 = *(_WORD *)(v13 + 2986); | |
*(_DWORD *)(v4 + 860) = v14; | |
*(_DWORD *)(v2 + 188) = v14; | |
*(_DWORD *)(v2 + 196) = 0; | |
if ( *(_DWORD *)(*(_DWORD *)(v4 + 76) + 9336) == 1 ) | |
*(_DWORD *)(v2 + 1564) = 0; | |
*(_DWORD *)(v2 + 204) = *(_DWORD *)(v4 + 80); | |
v15 = *(_DWORD *)(v4 + 76); | |
if ( !*(_DWORD *)(v4 + 240) ) | |
{ | |
v16 = *(_DWORD *)(v15 + 9584); | |
LABEL_11: | |
*(_DWORD *)(v4 + 812) = v16; | |
goto LABEL_12; | |
} | |
v17 = *(_WORD *)(v15 + 2986); | |
if ( v17 <= *(_DWORD *)(v4 + 812) ) | |
{ | |
v16 = v17 - 1; | |
goto LABEL_11; | |
} | |
LABEL_12: | |
v18 = *(_DWORD *)(v4 + 812); | |
*(_DWORD *)(v4 + 240) = v18; | |
v19 = *(_DWORD *)(v4 + 76); | |
*(_DWORD *)(v4 + 848) = *(_DWORD *)(*(_DWORD *)(v2 + 212) + 8 * v18 + 4); | |
_R1 = *(_WORD *)(*(_DWORD *)(v2 + 212) + 8 * v18); | |
__asm | |
{ | |
VMOV S1, R1 | |
VCVT.F32.U32 S1, S1, #8 | |
VSTR S1, [R4,#0x354] | |
} | |
result = 0; | |
*(_DWORD *)(v2 + 264) = *(_BYTE *)(v19 + 6988); | |
return result; | |
} | |
//----- (000047A0) -------------------------------------------------------- | |
int __fastcall aec_fast_conv_config(int a1, int a2) | |
{ | |
int result; // r0@4 | |
if ( *(_DWORD *)(a2 + 176) ) | |
{ | |
__asm { VLDR S15, =256.0 } | |
_R3 = *(_DWORD *)(a1 + 76) + 7008; | |
__asm | |
{ | |
VLDR S14, [R3,#8] | |
VMUL.F32 S0, S14, S15 | |
VCVTR.S32.F32 S1, S0 | |
VSTR S1, [R1,#0xD0] | |
} | |
} | |
else | |
{ | |
*(_DWORD *)(a2 + 208) = 153; | |
} | |
result = *(_DWORD *)(a1 + 76); | |
*(_DWORD *)(a2 + 184) = *(_DWORD *)(result + 9408); | |
return result; | |
} | |
//----- (000047E0) -------------------------------------------------------- | |
signed int __fastcall aec_adjust_exp_settings_for_led(signed int result, int a2) | |
{ | |
signed int v2; // r5@1 | |
signed int v3; // r6@1 | |
signed int v5; // r0@3 | |
signed int v6; // r2@6 | |
int v11; // r1@8 | |
int v13; // r3@8 | |
int v15; // r2@8 | |
v2 = result; | |
v3 = *(_DWORD *)(a2 + 1508); | |
_R4 = a2; | |
if ( !v3 ) | |
{ | |
if ( !*(_DWORD *)(a2 + 1552) ) | |
{ | |
v5 = *(_DWORD *)(a2 + 1544); | |
v3 = 1; | |
*(_DWORD *)(a2 + 1552) = 1; | |
if ( v5 <= 254 ) | |
*(_DWORD *)(a2 + 1544) = v5 + 1; | |
} | |
if ( !*(_DWORD *)(a2 + 1544) ) | |
{ | |
v6 = *(_DWORD *)(a2 + 1552); | |
v3 = 1; | |
*(_DWORD *)(a2 + 1544) = 1; | |
if ( v6 <= 254 ) | |
*(_DWORD *)(a2 + 1552) = v6 + 1; | |
} | |
__asm { VLDR S22, =0.0039062 } | |
v11 = *(_DWORD *)(a2 + 1556); | |
_R3 = *(_DWORD *)(v2 + 76) + 7072; | |
__asm | |
{ | |
VLDR S24, [R3,#0xC] | |
VLDR S23, [R3,#8] | |
} | |
v13 = *(_DWORD *)(_R4 + 212); | |
_R2 = *(_DWORD *)(_R4 + 1552); | |
__asm { VMOV S21, R2 } | |
v15 = *(_DWORD *)(_R4 + 1548); | |
_R7 = v13 + 8 * v11; | |
_R0 = *(_WORD *)(v13 + 8 * v11); | |
__asm | |
{ | |
VMOV S16, R0 | |
VCVT.F32.U32 S0, S16 | |
} | |
_R0 = *(_DWORD *)(_R4 + 1544); | |
_R12 = *(_WORD *)(v13 + 8 * v15); | |
__asm { VMOV S18, R0 } | |
_R0 = v13 + 8 * v15; | |
HIDWORD(_R2) = v11 - v15; | |
__asm | |
{ | |
VMOV S3, R3 | |
VLDR S15, [R7,#4] | |
VLDR S19, [R0,#4] | |
VMOV S20, R12 | |
VMUL.F32 S1, S0, S22 | |
VCVT.F64.S32 D16, S3 | |
VCVT.F32.U32 S2, S15 | |
VMOV R2, R3, D16 | |
VMUL.F32 S16, S1, S2 | |
} | |
LODWORD(_R0) = COERCE_UNSIGNED_INT64(pow(*(double *)dword_49F0, _R2)); | |
__asm { VMOV D2, R0, R1 } | |
HIDWORD(_R0) = *(_DWORD *)(_R4 + 1552); | |
__asm { VMOV S6, R1 } | |
if ( !HIDWORD(_R0) ) | |
goto LABEL_22; | |
__asm | |
{ | |
VCVT.F64.S32 D17, S18 | |
VMUL.F64 D4, D17, D2 | |
VCVTR.S32.F64 S14, D4 | |
VCVT.F32.S32 S17, S6 | |
VCVT.F32.S32 S5, S14 | |
VSUB.F32 S7, S5, S17 | |
VCMPE.F32 S7, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_ZF & _CF ) | |
{ | |
__asm | |
{ | |
VDIV.F32 S23, S24, S23 | |
VMUL.F32 S13, S16, S17 | |
VMLA.F32 S17, S23, S7 | |
VDIV.F32 S17, S13, S17 | |
} | |
} | |
else | |
{ | |
LABEL_22: | |
__asm { VMOV.F32 S17, S16 } | |
} | |
__asm | |
{ | |
VCVT.F64.S32 D6, S6 | |
VLDR S9, [R4,#0x10C] | |
VCVT.F64.U32 D18, S9 | |
VDIV.F64 D19, D18, D6 | |
VCVT.F64.F32 D5, S17 | |
VMUL.F64 D20, D5, D19 | |
VCVT.F32.F64 S11, D20 | |
VDIV.F32 S0, S11, S16 | |
VCVT.F64.F32 D21, S0 | |
VMOV R0, R1, D21 | |
} | |
_R0 = COERCE_UNSIGNED_INT64(log10(_R0)); | |
_R3 = *(_DWORD *)(v2 + 76) + 6976; | |
__asm | |
{ | |
VLDR S1, [R3,#0x14] | |
VCVT.F64.F32 D22, S1 | |
} | |
_R3 = *(_DWORD *)(v2 + 860) - 1; | |
__asm | |
{ | |
VMOV S4, R3 | |
VCVT.F32.U32 S6, S4 | |
VMOV D23, R0, R1 | |
VMUL.F64 D24, D23, D22 | |
VCVTR.S32.F64 S15, D24 | |
VMOV R12, S15 | |
} | |
_R1 = _R12 + *(_DWORD *)(_R4 + 1556); | |
__asm | |
{ | |
VMOV S2, R1 | |
VCVT.F32.S32 S3, S2 | |
VCMPE.F32 S3, S6 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF && !*(_DWORD *)(_R4 + 1508) ) | |
__asm { VMOVEQ.F32 S6, S3 } | |
__asm | |
{ | |
VCVTR.S32.F32 S8, S6 | |
VSTR S8, [R5,#0x32C] | |
VMOV R1, S8 | |
} | |
_R3 = *(_WORD *)(*(_DWORD *)(_R4 + 212) + 8 * _R1); | |
__asm | |
{ | |
VMOV S14, R3 | |
VCVT.F32.U32 S5, S14 | |
VMUL.F32 S22, S5, S22 | |
VSTR S22, [R5,#0x354] | |
} | |
result = *(_DWORD *)(_R4 + 212); | |
*(_DWORD *)(v2 + 848) = *(_DWORD *)(result + 8 * _R1 + 4); | |
if ( v3 ) | |
{ | |
result = 100; | |
*(_DWORD *)(v2 + 876) = 1000; | |
*(_DWORD *)(v2 + 880) = 100; | |
*(_DWORD *)(v2 + 884) = 1; | |
} | |
else | |
{ | |
__asm | |
{ | |
VCVT.F32.S32 S21, S21 | |
VLDR S13, =0.0039062 | |
VCVT.F32.S32 S18, S18 | |
VDIV.F32 S18, S21, S18 | |
VCVT.F32.U32 S20, S20 | |
VMUL.F32 S7, S18, S20 | |
VMUL.F32 S20, S7, S13 | |
VCVT.F32.U32 S19, S19 | |
VMUL.F32 S10, S20, S19 | |
VCVTR.S32.F32 S16, S16 | |
VCVTR.S32.F32 S19, S10 | |
VSTR S16, [R5,#0x36C] | |
VCVTR.S32.F32 S17, S17 | |
VSTR S19, [R5,#0x370] | |
VSTR S17, [R5,#0x374] | |
} | |
} | |
} | |
return result; | |
} | |
// 49F0: using guessed type int dword_49F0[2]; | |
//----- (00004A00) -------------------------------------------------------- | |
int __fastcall aec_preview_antibanding(int result, int a2) | |
{ | |
int v2; // r3@1 | |
int v5; // r1@1 | |
v2 = *(_DWORD *)(a2 + 212); | |
__asm { VLDR S13, =0.0039062 } | |
v5 = *(_DWORD *)(a2 + 1348); | |
_R2 = *(_WORD *)v2; | |
__asm | |
{ | |
VMOV S15, R2 | |
VCVT.F32.U32 S0, S15 | |
VMUL.F32 S1, S0, S13 | |
} | |
if ( _ZF ) | |
{ | |
__asm | |
{ | |
VLDR S8, [R0,#0x50] | |
VCVT.F32.U32 S11, S8 | |
VLDR S15, [R0,#0x60] | |
VLDR S0, [R0,#0x350] | |
VLDR D21, =0.00833333333 | |
VMUL.F32 S12, S11, S13 | |
VCVT.F32.U32 S10, S15 | |
VMUL.F32 S2, S12, S10 | |
VCVT.F32.U32 S14, S0 | |
VDIV.F32 S6, S14, S2 | |
VCVT.F64.F32 D20, S6 | |
VCMPE.F64 D20, D21 | |
VMOV.F64 D18, D21 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
return result; | |
__asm | |
{ | |
VADD.F32 S15, S1, S1 | |
VLDR S9, [R0,#0x354] | |
VLDR S7, =120.0 | |
VCMPE.F32 S9, S15 | |
VMOV.F64 D19, #0.5 | |
VMRS APSR_nzcv, FPSCR | |
} | |
} | |
else | |
{ | |
if ( v5 != 1 ) | |
return result; | |
__asm | |
{ | |
VLDR S14, [R0,#0x50] | |
VCVT.F32.U32 S11, S14 | |
VLDR S12, [R0,#0x60] | |
VLDR S2, [R0,#0x350] | |
VLDR D16, =0.01 | |
VMUL.F32 S4, S11, S13 | |
VCVT.F32.U32 S10, S12 | |
VMUL.F32 S5, S4, S10 | |
VCVT.F32.U32 S3, S2 | |
VDIV.F32 S6, S3, S5 | |
VCVT.F64.F32 D17, S6 | |
VCMPE.F64 D17, D16 | |
VMOV.F64 D18, D16 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
return result; | |
__asm | |
{ | |
VADD.F32 S15, S1, S1 | |
VLDR S9, [R0,#0x354] | |
VLDR S7, =100.0 | |
VMOV.F64 D19, #0.5 | |
VCMPE.F32 S9, S15 | |
VMRS APSR_nzcv, FPSCR | |
} | |
} | |
__asm { VMUL.F32 S14, S6, S7 } | |
if ( _NF ^ _VF ) | |
{ | |
__asm { VCVTRLT.U32.F32 S14, S14 } | |
} | |
else | |
{ | |
__asm | |
{ | |
VCVTGE.F64.F32 D7, S14 | |
VADDGE.F64 D7, D7, D19 | |
} | |
} | |
if ( !(_NF ^ _VF) ) | |
__asm { VCVTRGE.U32.F64 S14, D7 } | |
__asm | |
{ | |
VCVT.F32.U32 S1, S14 | |
VCVT.F64.F32 D22, S1 | |
VMUL.F64 D7, D22, D18 | |
VCVT.F32.F64 S3, D7 | |
VMUL.F32 S10, S3, S10 | |
VMUL.F32 S4, S9, S6 | |
VMUL.F32 S11, S10, S11 | |
VDIV.F32 S5, S4, S3 | |
VMUL.F32 S13, S11, S13 | |
VSTR S5, [R0,#0x354] | |
VCVT.F64.F32 D23, S13 | |
VADD.F64 D7, D23, D19 | |
VCVTR.U32.F64 S6, D7 | |
VSTR S6, [R0,#0x350] | |
} | |
return result; | |
} | |
//----- (00004B38) -------------------------------------------------------- | |
signed int __fastcall aec_use_strobe(int _R0, int a2) | |
{ | |
signed int result; // r0@2 | |
__asm | |
{ | |
VLDR S13, [R0,#0x54] | |
VCVT.F32.U32 S5, S13 | |
VLDR S6, =256.0 | |
VLDR S3, [R0,#0x354] | |
} | |
_R2 = *(_DWORD *)(_R0 + 848) << 8; | |
__asm { VMOV S14, R2 } | |
_R2 = *(_DWORD *)(_R0 + 80) * *(_DWORD *)(_R0 + 96); | |
__asm | |
{ | |
VMOV S15, R2 | |
VCVT.F32.U32 S0, S14 | |
} | |
_R1 = **(_WORD **)(a2 + 212); | |
__asm | |
{ | |
VMOV S8, R1 | |
VCVT.F32.U32 S1, S15 | |
VDIV.F32 S7, S6, S5 | |
VDIV.F32 S2, S0, S1 | |
VCVT.F32.U32 S8, S8, #8 | |
VMUL.F32 S4, S2, S3 | |
VMUL.F32 S9, S7, S8 | |
VCMPE.F32 S4, S9 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ^ _VF ) | |
result = 0; | |
else | |
result = 1; | |
return result; | |
} | |
//----- (00004B98) -------------------------------------------------------- | |
signed int __fastcall aec_set_exp_metering_mode(int a1, int a2) | |
{ | |
int v2; // r2@1 | |
signed int result; // r0@3 | |
int v4; // r2@5 | |
v2 = *(_DWORD *)(a1 + 44); | |
*(_DWORD *)(a1 + 804) = 1; | |
if ( v2 == 64 ) | |
{ | |
v4 = (int)&unk_12004; | |
goto LABEL_7; | |
} | |
if ( v2 == 256 ) | |
{ | |
v4 = *(_DWORD *)(a1 + 76) + 7288; | |
LABEL_7: | |
*(_DWORD *)(a2 + 20) = v4; | |
return 0; | |
} | |
result = 0; | |
if ( v2 == 16 ) | |
{ | |
*(_DWORD *)(a2 + 20) = &unk_12168; | |
} | |
else | |
{ | |
*(_DWORD *)(a2 + 20) = 0; | |
result = -1; | |
} | |
return result; | |
} | |
//----- (00004BE0) -------------------------------------------------------- | |
int __fastcall aec_init_data(int a1, int a2) | |
{ | |
int v6; // r4@1 | |
int v7; // r6@1 | |
int result; // r0@1 | |
__asm { VMOV.F32 S16, #1.0 } | |
v6 = a2; | |
v7 = a1; | |
memset((void *)(a2 + 1352), 0, 0x88u); | |
memset((void *)(v6 + 276), 0, 0x400u); | |
*(_BYTE *)(v6 + 160) = 0; | |
*(_DWORD *)v6 = 1; | |
*(_DWORD *)(v6 + 216) = 50; | |
*(_DWORD *)(v6 + 28) = 1; | |
*(_DWORD *)(v6 + 1684) = 0; | |
__asm { VSTR S16, [R6,#0x354] } | |
*(_DWORD *)(v7 + 800) = 1; | |
*(_DWORD *)(v7 + 948) = 0; | |
*(_DWORD *)(v7 + 952) = 0; | |
aec_fast_conv_config(v7, v6); | |
__asm | |
{ | |
VLDR S15, =0.0 | |
VSTR S15, [R4,#0xC0] | |
VSTR S15, [R0] | |
VSTR S16, [R1] | |
VSTR S16, [R2] | |
} | |
*(_DWORD *)(v6 + 1324) = 1; | |
*(_DWORD *)(v6 + 1320) = 0; | |
*(_DWORD *)(v6 + 28) = 1; | |
*(_DWORD *)(v6 + 1656) = 0; | |
__asm | |
{ | |
VSTR S15, [R3] | |
VSTR S15, [R0] | |
VSTR S15, [R1] | |
VSTR S15, [R2] | |
VSTR S15, [R3] | |
} | |
*(_DWORD *)(v6 + 1300) = 0; | |
*(_DWORD *)(v7 + 908) = 1; | |
aec_set_exp_metering_mode(v7, v6); | |
__asm { VSTR S16, [R6,#0x340] } | |
*(_DWORD *)(v6 + 1568) = 0; | |
*(_DWORD *)(v7 + 896) = 0; | |
*(_DWORD *)(v7 + 828) = 0; | |
__asm { VSTR S16, [R0] } | |
*(_DWORD *)(v6 + 1576) = 1; | |
result = 0; | |
*(_DWORD *)(v6 + 1580) = 0; | |
*(_DWORD *)(v6 + 1584) = 0; | |
*(_DWORD *)(v6 + 1588) = 0; | |
*(_DWORD *)(v7 + 808) = 0; | |
return result; | |
} | |
//----- (00004CD8) -------------------------------------------------------- | |
signed int __fastcall aec_set_iso_mode(int a1, int a2, signed int a3) | |
{ | |
signed int result; // r0@2 | |
if ( a3 > 6 ) | |
{ | |
result = -1; | |
} | |
else | |
{ | |
*(_DWORD *)(a1 + 808) = a3; | |
result = 0; | |
} | |
return result; | |
} | |
//----- (00004CEA) -------------------------------------------------------- | |
signed int __fastcall aec_set_antibanding(int a1, int a2, unsigned int a3) | |
{ | |
signed int result; // r0@2 | |
if ( a3 > 3 ) | |
{ | |
result = -1; | |
} | |
else | |
{ | |
result = *(_DWORD *)(a1 + 780); | |
if ( result ) | |
result = 0; | |
else | |
*(_DWORD *)(a2 + 1348) = a3; | |
} | |
return result; | |
} | |
//----- (00004D04) -------------------------------------------------------- | |
int __fastcall aec_set_brightness_level(int a1, int a2, int a3) | |
{ | |
signed int v3; // r12@1 | |
v3 = *(_BYTE *)(*(_DWORD *)(a1 + 76) + 6988) + 2 * *(_DWORD *)(a2 + 272) * (a3 - 3); | |
if ( v3 >= 255 ) | |
v3 = 255; | |
sub_42F8(a1, a2, v3 & ~(v3 >> 31)); | |
return 0; | |
} | |
//----- (00004D30) -------------------------------------------------------- | |
signed int __fastcall aec_set_exposure_compensation(int a1, int a2, signed int a3) | |
{ | |
int v3; // r4@1 | |
int v4; // r5@1 | |
int v5; // r0@1 | |
signed int result; // r0@3 | |
v3 = a1; | |
v4 = a2; | |
v5 = 6 * (a3 >> 16) / (unsigned __int16)a3; | |
_R1 = *(_BYTE *)(*(_DWORD *)(v3 + 76) + 6988); | |
__asm { VMOV S15, R1 } | |
if ( v5 > 12 || (v5 + 12 < 0) ^ __OFADD__(v5, 12) ) | |
{ | |
result = -1; | |
} | |
else | |
{ | |
__asm { VCVT.F32.S32 S0, S15 } | |
_R0 = (char *)&aec_ev_comp_one_over_six_tbl + 4 * v5; | |
__asm | |
{ | |
VLDR S14, [R0,#0x30] | |
VMUL.F32 S1, S0, S14 | |
VMOV.F64 D16, #0.5 | |
VCVT.F64.F32 D17, S1 | |
VADD.F64 D1, D17, D16 | |
VCVTR.S32.F64 S3, D1 | |
VMOV R2, S3 | |
} | |
sub_42F8(v3, v4, _R2); | |
result = 0; | |
} | |
return result; | |
} | |
//----- (00004D9C) -------------------------------------------------------- | |
int __fastcall aec_set_fps_mode(int a1, int a2, int a3) | |
{ | |
int v3; // r3@1 | |
int v4; // r2@2 | |
int result; // r0@4 | |
v3 = *(_DWORD *)(a1 + 76); | |
if ( a3 ) | |
{ | |
*(_DWORD *)(a1 + 800) = 0; | |
v4 = *(_WORD *)(v3 + 7020); | |
} | |
else | |
{ | |
*(_DWORD *)(a1 + 800) = 1; | |
v4 = *(_WORD *)(v3 + 2986); | |
} | |
*(_DWORD *)(a1 + 860) = v4; | |
*(_DWORD *)(a2 + 188) = *(_DWORD *)(a1 + 860); | |
result = 0; | |
*(_DWORD *)(a2 + 196) = 0; | |
return result; | |
} | |
//----- (00004DCC) -------------------------------------------------------- | |
int __fastcall aec_set_parm_fps(int a1, int a2, unsigned int a3) | |
{ | |
int v3; // r4@1 | |
unsigned int v4; // r2@1 | |
unsigned int v5; // r4@1 | |
unsigned int v6; // r2@3 | |
int v7; // r5@3 | |
int v8; // r7@5 | |
unsigned int v9; // r5@5 | |
int v10; // r3@5 | |
int v11; // r6@5 | |
int v12; // r6@7 | |
int v13; // r12@7 | |
int v14; // r6@7 | |
int v15; // r8@7 | |
int v16; // r12@7 | |
int v17; // r8@7 | |
int v18; // r4@7 | |
int v19; // r7@8 | |
int v20; // r3@13 | |
v3 = (unsigned __int16)a3; | |
v4 = a3 >> 16; | |
v5 = v3 << 8; | |
if ( v5 >= *(_DWORD *)(a1 + 92) ) | |
v5 = *(_DWORD *)(a1 + 92); | |
*(_DWORD *)(a1 + 796) = v5; | |
*(_DWORD *)(a2 + 204) = v5; | |
v6 = v4 << 8; | |
v7 = *(_DWORD *)(a1 + 76); | |
if ( v6 > v5 ) | |
v6 = 0; | |
v8 = *(_WORD *)(v7 + 2986); | |
v9 = *(_WORD *)(v7 + 7020); | |
v10 = v8 - 1; | |
v11 = *(_DWORD *)(a1 + 800); | |
if ( !v6 ) | |
{ | |
if ( v11 ) | |
goto LABEL_13; | |
LABEL_12: | |
v10 = v9; | |
goto LABEL_13; | |
} | |
if ( !v11 ) | |
goto LABEL_12; | |
v12 = *(_DWORD *)(a2 + 212); | |
v13 = v12 + 8 * v9; | |
v14 = v12 + 8 * v8; | |
v15 = *(_DWORD *)(v13 + 4); | |
v16 = v8 - 1; | |
v17 = v15 * v5; | |
v18 = 0; | |
do | |
{ | |
v10 = v16 + v18; | |
if ( v16 + v18 <= v9 ) | |
break; | |
v19 = v14 + 8 * v18--; | |
} | |
while ( v17 < *(_DWORD *)(v19 - 4) * v6 ); | |
LABEL_13: | |
v20 = v10 + 1; | |
*(_DWORD *)(a2 + 196) = v6; | |
*(_DWORD *)(a2 + 188) = v20; | |
*(_DWORD *)(a1 + 860) = v20; | |
return 0; | |
} | |
//----- (00004E50) -------------------------------------------------------- | |
int __fastcall aec_set_hjr(int _R0, int a2) | |
{ | |
int v7; // r2@1 | |
int v8; // r5@1 | |
signed int v9; // r6@1 | |
int v10; // r2@6 | |
int v11; // r3@6 | |
unsigned int v13; // r0@7 | |
unsigned int v14; // r1@8 | |
unsigned int v15; // r2@8 | |
unsigned int v16; // r1@10 | |
_R4 = _R0; | |
__asm { VLDR S17, [R0,#0x354] } | |
v7 = *(_DWORD *)(_R0 + 76); | |
v8 = a2; | |
v9 = *(_BYTE *)(v7 + 47212); | |
if ( (unsigned int)v9 > 2 ) | |
{ | |
v9 = 2; | |
} | |
else if ( !*(_BYTE *)(v7 + 47212) ) | |
{ | |
v9 = 1; | |
} | |
v10 = v7 + 7008; | |
v11 = *(_DWORD *)(a2 + 212); | |
_R12 = *(_WORD *)(v11 + 8 * (*(_DWORD *)(_R0 + 860) - 1)); | |
__asm { VMOV S16, R12 } | |
if ( *(_DWORD *)(v10 + 16) ) | |
{ | |
v14 = *(_DWORD *)(_R0 + 848); | |
v13 = *(_DWORD *)(_R0 + 92); | |
v15 = *(_DWORD *)(v11 + 8 * *(_WORD *)(v10 + 12) - 4); | |
if ( v14 >= v15 ) | |
v13 = v13 * v15 / v14; | |
} | |
else | |
{ | |
v13 = *(_DWORD *)(a2 + 204); | |
} | |
*(_DWORD *)(v8 + 1488) = *(_DWORD *)(_R4 + 848); | |
__asm { VSTR S17, [R3] } | |
v16 = *(_DWORD *)(_R4 + 848); | |
*(_DWORD *)(_R4 + 920) = 1; | |
if ( v16 > 0x13 ) | |
{ | |
if ( v13 <= *(_DWORD *)(_R4 + 92) >> 1 && v9 == 2 ) | |
*(_DWORD *)(_R4 + 920) = 2; | |
__asm { VMOV.F32 S15, S16 } | |
*(_DWORD *)(v8 + 1488) = v16 >> 1; | |
__asm | |
{ | |
VLDR S14, [R4,#0x354] | |
VADD.F32 S0, S14, S14 | |
VCVT.F32.U32 S15, S15, #8 | |
VCMP.F32 S0, S15 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F32 S15, S0 } | |
__asm | |
{ | |
VSTR S15, [R2] | |
VLDR S1, [R4,#0x354] | |
VADD.F32 S2, S1, S1 | |
VCMPE.F32 S15, S2 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
__asm | |
{ | |
VDIV.F32 S8, S2, S15 | |
VMOV.F32 S7, #2.0 | |
VMOV.F32 S13, #0.5 | |
} | |
while ( 1 ) | |
{ | |
__asm | |
{ | |
VCMPE.F32 S8, S7 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
break; | |
__asm { VMUL.F32 S8, S8, S13 } | |
*(_DWORD *)(v8 + 1488) *= 2; | |
} | |
__asm | |
{ | |
VLDR S3, =128.0 | |
VMUL.F32 S4, S8, S3 | |
VMOV.F64 D16, #0.5 | |
VMOV.F64 D18, #-0.5 | |
VCMPE.F32 S8, #0.0 | |
VCVT.F64.F32 D17, S4 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F64 D16, D18 } | |
__asm | |
{ | |
VADD.F64 D3, D17, D16 | |
VCVTR.S32.F64 S5, D3 | |
VSTR S5, [R4,#0x39C] | |
} | |
} | |
} | |
return 0; | |
} | |
//----- (00004F80) -------------------------------------------------------- | |
int __fastcall aec_set_for_hjr_af(int _R0, int _R1, int a3) | |
{ | |
_R4 = *(_WORD *)(*(_DWORD *)(_R1 + 212) + 8 * (*(_DWORD *)(_R0 + 860) - 1)); | |
_R3 = _R1 + 1500; | |
if ( a3 ) | |
{ | |
*(_DWORD *)(_R1 + 4) = 3; | |
*(_DWORD *)(_R1 + 1492) = *(_DWORD *)(_R0 + 848); | |
__asm | |
{ | |
VLDR S0, [R0,#0x354] | |
VSTR S0, [R3] | |
VLDR S12, [R0,#0x348] | |
VLDR S13, [R1,#0x10C] | |
VCVT.F32.U32 S14, S12 | |
VCVT.F32.U32 S1, S13 | |
VDIV.F32 S2, S14, S1 | |
VCMPE.F32 S2, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) | |
&& *(_DWORD *)(*(_DWORD *)(_R0 + 76) + 7024) | |
&& *(_DWORD *)(_R0 + 812) > *(_DWORD *)(_R0 + 820) ) | |
{ | |
__asm | |
{ | |
VMOV D16, R4, R4 | |
VCVT.F64.S32 D16, D16, #8 | |
VLDR S4, [R0,#0x354] | |
VCVT.F32.F64 S3, D16 | |
VADD.F32 S5, S4, S4 | |
VCVT.F64.F32 D3, S3 | |
VADD.F64 D4, D3, D3 | |
VLDR S7, [R0,#0x350] | |
VCVT.F64.F32 D17, S5 | |
VCMPE.F64 D17, D4 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
__asm { VADDGT.F32 S5, S3, S3 } | |
__asm | |
{ | |
VDIV.F32 S10, S5, S4 | |
VSTR S5, [R0,#0x354] | |
VCVT.F32.U32 S9, S7 | |
VDIV.F32 S11, S9, S10 | |
VCVTR.U32.F32 S15, S11 | |
VSTR S15, [R0,#0x350] | |
} | |
aec_preview_antibanding(_R0, _R1); | |
} | |
} | |
else | |
{ | |
*(_DWORD *)(_R0 + 848) = *(_DWORD *)(_R1 + 1492); | |
__asm | |
{ | |
VLDR S15, [R3] | |
VSTR S15, [R0,#0x354] | |
} | |
*(_DWORD *)(_R1 + 172) = 5; | |
} | |
return 0; | |
} | |
//----- (0000504A) -------------------------------------------------------- | |
int __fastcall aec_set_ROI(int a1, int a2, int a3, unsigned int a4) | |
{ | |
signed int v4; // r4@2 | |
int v5; // r5@3 | |
signed int v6; // r3@6 | |
int v7; // r2@11 | |
int v8; // r0@12 | |
int v9; // r4@12 | |
int v10; // r3@13 | |
signed int v11; // r2@15 | |
int v12; // r2@20 | |
int v13; // r0@21 | |
int v14; // r2@22 | |
int v15; // r0@25 | |
unsigned int v17; // [sp+4h] [bp-14h]@1 | |
v17 = a4; | |
if ( !(_BYTE)a3 ) | |
{ | |
*(_BYTE *)(a2 + 160) = 0; | |
return 0; | |
} | |
v4 = a4; | |
if ( a4 > *(_DWORD *)(a1 + 44) ) | |
return 0; | |
v5 = a2 + 160; | |
*(_DWORD *)v5 = a3; | |
*(_DWORD *)(v5 + 4) = a4; | |
if ( *(_DWORD *)(a1 + 44) != 256 ) | |
{ | |
*(_DWORD *)(a2 + 124) = a4; | |
*(_DWORD *)(a2 + 120) = 1; | |
return 0; | |
} | |
if ( a4 > 0xF ) | |
{ | |
v10 = a4 - 16; | |
if ( v17 <= 0xEF ) | |
{ | |
v14 = v17 + 1; | |
if ( !(v17 & 0xF) ) | |
{ | |
*(_DWORD *)(a2 + 124) = v17; | |
*(_DWORD *)(a2 + 120) = 6; | |
*(_DWORD *)(a2 + 128) = v14; | |
v9 = v17 - 15; | |
*(_DWORD *)(a2 + 132) = v17 + 16; | |
*(_DWORD *)(a2 + 136) = v17 + 17; | |
*(_DWORD *)(a2 + 140) = v10; | |
goto LABEL_24; | |
} | |
v15 = v17 - 17; | |
if ( v14 & 0xF ) | |
{ | |
*(_DWORD *)(a2 + 124) = v17; | |
*(_DWORD *)(a2 + 128) = v14; | |
*(_DWORD *)(a2 + 140) = v10; | |
*(_DWORD *)(a2 + 132) = v17 + 16; | |
*(_DWORD *)(a2 + 120) = 9; | |
*(_DWORD *)(a2 + 136) = v17 + 17; | |
*(_DWORD *)(a2 + 144) = v17 - 15; | |
*(_DWORD *)(a2 + 148) = v17 - 1; | |
*(_DWORD *)(a2 + 152) = v15; | |
*(_DWORD *)(a2 + 156) = v17 + 15; | |
return 0; | |
} | |
*(_DWORD *)(a2 + 124) = v17 - 1; | |
*(_DWORD *)(a2 + 128) = v17; | |
*(_DWORD *)(a2 + 120) = 6; | |
*(_DWORD *)(a2 + 132) = v17 + 15; | |
*(_DWORD *)(a2 + 136) = v17 + 16; | |
*(_DWORD *)(a2 + 140) = v15; | |
goto LABEL_27; | |
} | |
if ( v10 << 28 ) | |
{ | |
if ( !((v17 - 15) << 28) ) | |
{ | |
*(_DWORD *)(a2 + 120) = 4; | |
v10 = v17 - 17; | |
LABEL_20: | |
*(_DWORD *)(a2 + 132) = v10 + 16; | |
v12 = *(_DWORD *)(a2 + 120); | |
*(_DWORD *)(a2 + 124) = v10; | |
*(_DWORD *)(a2 + 128) = v10 + 1; | |
*(_DWORD *)(a2 + 136) = v10 + 17; | |
if ( v12 != 6 ) | |
return 0; | |
v13 = v10 - 1; | |
v10 += 15; | |
*(_DWORD *)(a2 + 140) = v13; | |
LABEL_27: | |
*(_DWORD *)(a2 + 144) = v10; | |
return 0; | |
} | |
v11 = 6; | |
} | |
else | |
{ | |
v11 = 4; | |
} | |
*(_DWORD *)(a2 + 120) = v11; | |
goto LABEL_20; | |
} | |
if ( a4 ) | |
{ | |
if ( a4 == 15 ) | |
{ | |
*(_DWORD *)(a2 + 120) = 4; | |
v4 = 14; | |
goto LABEL_11; | |
} | |
v6 = 6; | |
} | |
else | |
{ | |
v6 = 4; | |
} | |
*(_DWORD *)(a2 + 120) = v6; | |
LABEL_11: | |
*(_DWORD *)(a2 + 128) = v4 + 1; | |
v7 = *(_DWORD *)(a2 + 120); | |
*(_DWORD *)(a2 + 124) = v4; | |
*(_DWORD *)(a2 + 132) = v4 + 16; | |
*(_DWORD *)(a2 + 136) = v4 + 17; | |
if ( v7 == 6 ) | |
{ | |
v8 = v4 - 1; | |
v9 = v4 + 15; | |
*(_DWORD *)(a2 + 140) = v8; | |
LABEL_24: | |
*(_DWORD *)(a2 + 144) = v9; | |
} | |
return 0; | |
} | |
//----- (000051B0) -------------------------------------------------------- | |
int __fastcall aec_reset_LED(int a1, int a2) | |
{ | |
int v2; // r3@1 | |
int result; // r0@3 | |
v2 = a1; | |
if ( *(_DWORD *)(a1 + 904) > 0 ) | |
{ | |
*(_DWORD *)(a1 + 812) = *(_DWORD *)(a2 + 1520); | |
*(_DWORD *)(a1 + 240) = *(_DWORD *)(a2 + 1520); | |
} | |
result = 0; | |
*(_DWORD *)(v2 + 904) = 0; | |
*(_DWORD *)(v2 + 888) = 0; | |
*(_DWORD *)(v2 + 892) = 0; | |
return result; | |
} | |
//----- (000051DA) -------------------------------------------------------- | |
int __fastcall aec_store_LED_est_stats(signed int _R0, int a2, int a3) | |
{ | |
int v3; // r6@1 | |
int v4; // r5@1 | |
v3 = *(_DWORD *)(_R0 + 840); | |
v4 = *(_DWORD *)(_R0 + 812); | |
if ( !a3 ) | |
{ | |
*(_DWORD *)(a2 + 1552) = v3; | |
*(_DWORD *)(a2 + 1556) = v4; | |
__asm | |
{ | |
VLDR S15, [R0,#0x338] | |
VSTR S15, [R4] | |
} | |
LABEL_6: | |
*(_DWORD *)(_R0 + 892) = a3; | |
return 0; | |
} | |
if ( a3 != 1 ) | |
{ | |
a3 = 0; | |
goto LABEL_6; | |
} | |
*(_DWORD *)(a2 + 1544) = v3; | |
*(_DWORD *)(a2 + 1548) = v4; | |
*(_DWORD *)(_R0 + 892) = 1; | |
aec_adjust_exp_settings_for_led(_R0, a2); | |
return 0; | |
} | |
//----- (00005220) -------------------------------------------------------- | |
signed int __fastcall aec_set_strobe_mode(int a1, int a2, signed int a3) | |
{ | |
signed int result; // r0@3 | |
if ( *(_DWORD *)(*(_DWORD *)(a1 + 76) + 9336) != 1 || a3 > 2 ) | |
{ | |
result = -1; | |
} | |
else | |
{ | |
*(_DWORD *)(a2 + 1564) = a3; | |
result = 0; | |
} | |
return result; | |
} | |
//----- (0000523E) -------------------------------------------------------- | |
bool __fastcall aec_get_LED_over_exp_check(int a1, int a2) | |
{ | |
bool result; // r0@2 | |
if ( *(_DWORD *)(a2 + 1508) ) | |
result = 0; | |
else | |
result = *(_DWORD *)(a1 + 840) > (unsigned int)(2 * *(_DWORD *)(a2 + 268)); | |
return result; | |
} | |
//----- (0000525C) -------------------------------------------------------- | |
signed int __fastcall aec_get_settled_cnt(int a1, int a2) | |
{ | |
signed int v2; // r4@1 | |
int v3; // r3@1 | |
int v4; // r5@1 | |
unsigned int v5; // r0@5 | |
signed int result; // r0@11 | |
v2 = a1; | |
v3 = *(_DWORD *)(a1 + 908); | |
v4 = a2; | |
if ( v3 != 2 && *(_DWORD *)(a1 + 156) != 3 ) | |
{ | |
if ( v3 != 3 || *(_DWORD *)(a1 + 904) <= 3 || aec_get_LED_over_exp_check(a1, a2) ) | |
return -1; | |
aec_store_LED_est_stats(v2, v4, 1); | |
} | |
else if ( *(_DWORD *)(a1 + 244) <= 1u && *(_DWORD *)(a1 + 812) != *(_DWORD *)(a1 + 860) - 1 ) | |
{ | |
v5 = *(_DWORD *)(a2 + 24); | |
*(_DWORD *)(a2 + 24) = v5 + 1; | |
if ( v5 <= 0xE ) | |
return -1; | |
} | |
result = 0; | |
*(_DWORD *)(v2 + 908) = 1; | |
return result; | |
} | |
//----- (000052C2) -------------------------------------------------------- | |
bool __fastcall aec_get_strobe(int a1) | |
{ | |
int v1; // r3@1 | |
bool result; // r0@2 | |
v1 = *(_DWORD *)(a1 + 812); | |
if ( v1 >= *(_DWORD *)(a1 + 860) - 1 ) | |
result = 1; | |
else | |
result = v1 >= *(_WORD *)(*(_DWORD *)(a1 + 76) + 7076) | |
- (*(_DWORD *)(*(_DWORD *)(a1 + 76) + 7004) | |
- *(_DWORD *)(a1 + 816)); | |
return result; | |
} | |
//----- (000052FC) -------------------------------------------------------- | |
signed int __fastcall aec_get_flash_for_snapshot(int a1, int a2) | |
{ | |
int v2; // r5@1 | |
int v3; // r4@1 | |
int v4; // r6@2 | |
int v5; // r6@5 | |
signed int result; // r0@7 | |
int v7; // [sp+0h] [bp-78h]@1 | |
int v8; // [sp+5Ch] [bp-1Ch]@1 | |
v2 = a1; | |
v3 = a2; | |
v8 = _stack_chk_guard; | |
property_get("persist.camera.strobe", &v7, "0"); | |
if ( atoi((const char *)&v7) && ((v4 = *(_DWORD *)(v3 + 1564), v4 == 2) || v4 == 1 && aec_use_strobe(v2, v3)) ) | |
{ | |
result = 1; | |
} | |
else | |
{ | |
v5 = *(_DWORD *)(v2 + 156); | |
if ( v5 == 1 || v5 == 2 && aec_get_strobe(v2) ) | |
result = 2; | |
else | |
result = 0; | |
} | |
if ( v8 != _stack_chk_guard ) | |
_stack_chk_fail(result); | |
return result; | |
} | |
// 1B34: using guessed type int __fastcall property_get(_DWORD, _DWORD, _DWORD); | |
// 1B4C: using guessed type int __fastcall _stack_chk_fail(_DWORD); | |
//----- (00005384) -------------------------------------------------------- | |
int __fastcall aec_get_preview_fps(int _R0) | |
{ | |
int result; // r0@4 | |
_R3 = *(_DWORD *)(_R0 + 848); | |
__asm { VLDR S13, [R0,#0x50] } | |
_R2 = *(_DWORD *)(_R0 + 96); | |
__asm { VLDR S14, =0.0039062 } | |
if ( _R3 <= _R2 ) | |
{ | |
__asm { VCVT.F32.U32 S15, S13 } | |
} | |
else | |
{ | |
__asm | |
{ | |
VMOV S11, R2 | |
VMOV S1, R3 | |
VCVT.F32.U32 S0, S11 | |
VCVT.F32.U32 S12, S1 | |
VCVT.F32.U32 S2, S13 | |
VDIV.F32 S15, S0, S12 | |
VMUL.F32 S14, S2, S14 | |
} | |
} | |
__asm | |
{ | |
VMUL.F32 S3, S15, S14 | |
VMOV R0, S3 | |
} | |
return result; | |
} | |
//----- (000053C8) -------------------------------------------------------- | |
int __fastcall aec_get_preview_exp_time(int _R0) | |
{ | |
int result; // r0@1 | |
__asm | |
{ | |
VLDR S14, [R0,#0x50] | |
VLDR S13, [R0,#0x60] | |
VCVT.F32.U32 S14, S14, #8 | |
VLDR S1, [R0,#0x350] | |
VCVT.F32.U32 S15, S13 | |
VMUL.F32 S0, S14, S15 | |
VCVT.F32.U32 S2, S1 | |
VDIV.F32 S3, S2, S0 | |
VMOV R0, S3 | |
} | |
return result; | |
} | |
//----- (000053F0) -------------------------------------------------------- | |
signed int __fastcall aec_prepare_snapshot(int a1, int a2) | |
{ | |
int v3; // r5@1 | |
int v4; // r0@2 | |
int v5; // r1@9 | |
int v6; // r3@12 | |
signed int v11; // r0@13 | |
signed int result; // r0@19 | |
int v13; // [sp+0h] [bp-70h]@1 | |
int v14; // [sp+5Ch] [bp-14h]@1 | |
_R4 = a1; | |
v3 = a2; | |
v14 = _stack_chk_guard; | |
property_get("persist.camera.strobe", &v13, "0"); | |
if ( atoi((const char *)&v13) && ((v4 = *(_DWORD *)(v3 + 1564), v4 == 2) || v4 == 1 && aec_use_strobe(_R4, v3)) ) | |
{ | |
if ( *(_DWORD *)(_R4 + 896) != 3 ) | |
{ | |
aec_strobe_flash_store_est(_R4, v3, 0); | |
*(_DWORD *)(v3 + 8) = 1; | |
if ( *(_DWORD *)(_R4 + 160) ) | |
{ | |
*(_DWORD *)(v3 + 1568) = 3; | |
aec_set_full_frame_exp(_R4, v3); | |
} | |
else | |
{ | |
*(_DWORD *)(v3 + 1504) = 0; | |
*(_DWORD *)(v3 + 1568) = 2; | |
} | |
goto LABEL_13; | |
} | |
} | |
else | |
{ | |
v5 = *(_DWORD *)(_R4 + 156); | |
if ( v5 == 1 || v5 == 2 && aec_get_strobe(_R4) ) | |
{ | |
v6 = *(_DWORD *)(_R4 + 840); | |
*(_DWORD *)(v3 + 1556) = *(_DWORD *)(_R4 + 812); | |
*(_DWORD *)(v3 + 1552) = v6; | |
__asm | |
{ | |
VLDR S15, [R4,#0x338] | |
VSTR S15, [R0] | |
} | |
*(_DWORD *)(_R4 + 892) = 0; | |
*(_DWORD *)(_R4 + 888) = 1; | |
*(_DWORD *)(v3 + 16) = 0; | |
*(_DWORD *)(v3 + 180) = 0; | |
*(_DWORD *)(_R4 + 904) = 0; | |
LABEL_13: | |
v11 = 3; | |
goto LABEL_18; | |
} | |
if ( *(_DWORD *)(_R4 + 244) <= 1u && *(_DWORD *)(_R4 + 812) < *(_DWORD *)(_R4 + 860) - 1 ) | |
{ | |
v11 = 2; | |
goto LABEL_18; | |
} | |
} | |
v11 = 1; | |
LABEL_18: | |
*(_DWORD *)(_R4 + 908) = v11; | |
if ( *(_DWORD *)(_R4 + 908) == 1 ) | |
result = 0; | |
else | |
result = -1; | |
if ( v14 != _stack_chk_guard ) | |
_stack_chk_fail(result); | |
return result; | |
} | |
// 1B34: using guessed type int __fastcall property_get(_DWORD, _DWORD, _DWORD); | |
// 1B4C: using guessed type int __fastcall _stack_chk_fail(_DWORD); | |
//----- (00005504) -------------------------------------------------------- | |
signed int __fastcall aec_set_bestshot_mode(int a1, int a2, unsigned int a3) | |
{ | |
int v3; // r4@1 | |
unsigned int v4; // r5@1 | |
int v5; // r3@2 | |
signed int v6; // r1@8 | |
signed int v7; // r3@11 | |
int v8; // r2@13 | |
signed int result; // r0@14 | |
v3 = a2; | |
v4 = a3; | |
if ( a3 > 0x15 ) | |
{ | |
result = -1; | |
} | |
else | |
{ | |
v5 = *(_DWORD *)(a2 + 1600); | |
if ( v5 == a3 ) | |
{ | |
result = 0; | |
} | |
else | |
{ | |
if ( !v5 ) | |
{ | |
*(_DWORD *)(a2 + 1592) = *(_DWORD *)(a1 + 808); | |
*(_DWORD *)(a2 + 1596) = *(_DWORD *)(a1 + 804); | |
} | |
if ( a3 ) | |
{ | |
if ( a3 <= 0x11 && (1 << a3) & 0x20600 ) | |
v6 = 4; | |
else | |
v6 = 0; | |
*(_DWORD *)(a1 + 808) = v6; | |
a2 = v3; | |
} | |
else | |
{ | |
v7 = *(_DWORD *)(a2 + 1592); | |
if ( v7 <= 6 ) | |
*(_DWORD *)(a1 + 808) = v7; | |
v8 = *(_DWORD *)(a2 + 1596); | |
} | |
result = aec_set_exp_metering_mode(a1, a2); | |
*(_DWORD *)(v3 + 1600) = v4; | |
} | |
} | |
return result; | |
} | |
//----- (00005580) -------------------------------------------------------- | |
int __fastcall aec_slow_convergence(int _R0, int a2, unsigned int a3) | |
{ | |
int v3; // r5@1 | |
int v4; // r4@1 | |
unsigned int v5; // r6@1 | |
signed int v6; // r0@2 | |
int v8; // r3@3 | |
signed int v11; // r3@15 | |
int v13; // r1@19 | |
signed int v14; // r1@20 | |
int v15; // r2@25 | |
int v18; // r2@45 | |
int result; // r0@52 | |
unsigned int v24; // r2@64 | |
int v25; // r2@66 | |
int v26; // r3@66 | |
int v27; // r2@69 | |
unsigned int v28; // r0@69 | |
unsigned int v31; // r3@72 | |
int v32; // r2@77 | |
int v36; // r2@79 | |
int v37; // r2@83 | |
unsigned int v38; // r3@83 | |
int v41; // r6@90 | |
unsigned int v42; // r3@93 | |
int v43; // r6@94 | |
int v44; // r3@94 | |
int v45; // r2@99 | |
int v46; // r1@100 | |
int v47; // r2@105 | |
int v48; // r12@105 | |
int v49; // r12@119 | |
unsigned int v50; // r2@121 | |
signed int v51; // r3@125 | |
signed int v52; // r2@139 | |
int v53; // r1@140 | |
int v54; // r3@159 | |
int v55; // r2@163 | |
v3 = _R0; | |
v4 = a2; | |
v5 = a3; | |
if ( !*(_DWORD *)(_R0 + 168) ) | |
goto LABEL_169; | |
__asm | |
{ | |
VLDR S15, [R0,#0xB0] | |
VMUL.F32 S0, S15, S15 | |
VLDR S13, [R0,#0xAC] | |
VLDR S14, [R0,#0xB4] | |
VMLA.F32 S0, S13, S13 | |
VMLA.F32 S0, S14, S14 | |
VSTR S0, [R1] | |
} | |
v8 = 0; | |
__asm { VLDR S1, =0.0 } | |
*(_DWORD *)(a2 + 1472) = (*(_DWORD *)(a2 + 1472) + 1) % 0xAu; | |
do | |
{ | |
_R2 = a2 + 1432 + v8; | |
__asm | |
{ | |
VLDR S2, [R2] | |
VCMP.F32 S2, S1 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
__asm { VMOVGT.F32 S1, S2 } | |
v8 += 4; | |
} | |
while ( v8 != 40 ); | |
__asm | |
{ | |
VCVT.F64.F32 D16, S1 | |
VLDR D17, =0.02 | |
VCMPE.F64 D16, D17 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
LABEL_169: | |
v6 = 0; | |
} | |
else | |
{ | |
__asm | |
{ | |
VLDR D2, =0.1 | |
VCMPE.F64 D16, D2 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
v6 = 1; | |
} | |
else | |
{ | |
__asm | |
{ | |
VMOV.F32 S3, #2.0 | |
VCMPE.F32 S1, S3 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
v6 = 2; | |
else | |
v6 = 3; | |
} | |
} | |
*(_DWORD *)(a2 + 1428) = v6; | |
__asm { VMOV.F32 S6, #20.0 } | |
_R2 = *(_DWORD *)(v3 + 80) >> 8; | |
__asm | |
{ | |
VMOV S5, R2 | |
VCVT.F32.U32 S9, S5 | |
VCMPE.F32 S9, S6 | |
VSTR S9, [R3] | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_ZF & _CF ) | |
{ | |
if ( *(_DWORD *)(v3 + 80) == *(_DWORD *)(v3 + 92) ) | |
v11 = 2; | |
else | |
v11 = 1; | |
} | |
else | |
{ | |
v11 = 0; | |
} | |
*(_DWORD *)(a2 + 1388) = v11; | |
_R3 = *(_DWORD *)(a2 + 268); | |
v13 = *(_DWORD *)(a2 + 1484); | |
*(_DWORD *)(v4 + 1360) = v5; | |
*(_DWORD *)(v4 + 1356) = _R3; | |
if ( !v13 ) | |
{ | |
*(_DWORD *)(v4 + 1476) = v5; | |
v14 = 1; | |
LABEL_23: | |
*(_DWORD *)(v4 + 1484) = v14; | |
goto LABEL_26; | |
} | |
if ( v13 == 1 ) | |
{ | |
v14 = 2; | |
*(_DWORD *)(v4 + 1480) = v5; | |
goto LABEL_23; | |
} | |
if ( v13 == 2 ) | |
{ | |
v15 = *(_DWORD *)(v4 + 1480); | |
*(_DWORD *)(v4 + 1480) = v5; | |
*(_DWORD *)(v4 + 1476) = v15; | |
} | |
LABEL_26: | |
_R2 = v4 + 1364; | |
if ( v6 == 2 ) | |
{ | |
__asm { VADD.F32 S9, S9, S9 } | |
} | |
else if ( v6 != 3 ) | |
{ | |
if ( v6 != 1 ) | |
goto LABEL_32; | |
__asm | |
{ | |
VMOV.F32 S7, #3.0 | |
VMUL.F32 S9, S9, S7 | |
} | |
} | |
__asm | |
{ | |
VMOV.F32 S8, #5.0 | |
VDIV.F32 S9, S9, S8 | |
} | |
LABEL_32: | |
__asm | |
{ | |
VSTR S9, [R2] | |
VLDR S10, [R2] | |
VCVTR.S32.F32 S11, S10 | |
} | |
if ( _CF ) | |
{ | |
_R12 = v5 - _R3; | |
__asm | |
{ | |
VMOV S15, R12 | |
VCVT.F32.U32 S13, S15 | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VMOV S12, R3 | |
VCVT.F32.U32 S13, S12 | |
} | |
} | |
__asm | |
{ | |
VMOV.F64 D19, #4.0 | |
VMOV D21, R3, R3 | |
VCVT.F64.U32 D21, D21, #1 | |
VMUL.F64 D22, D21, D19 | |
VMOV.F64 D18, #0.25 | |
VMUL.F64 D23, D22, D18 | |
VCVT.F64.F32 D20, S13 | |
VCMPE.F64 D20, D23 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
__asm { VLDR S14, =0.0 } | |
goto LABEL_45; | |
} | |
__asm | |
{ | |
VMOV.F64 D24, #3.0 | |
VMUL.F64 D25, D21, D24 | |
VMUL.F64 D26, D25, D18 | |
VCMPE.F64 D20, D26 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !(_NF ^ _VF) ) | |
{ | |
__asm | |
{ | |
VCVT.F64.S32 D30, S11 | |
VLDR D31, =0.2 | |
} | |
LABEL_43: | |
__asm | |
{ | |
VMUL.F64 D0, D30, D31 | |
VCVT.F32.F64 S14, D0 | |
} | |
goto LABEL_45; | |
} | |
__asm | |
{ | |
VADD.F64 D27, D21, D21 | |
VMUL.F64 D28, D27, D18 | |
VCMPE.F64 D20, D28 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !(_NF ^ _VF) ) | |
{ | |
__asm | |
{ | |
VCVT.F64.S32 D30, S11 | |
VLDR D31, =0.4 | |
} | |
goto LABEL_43; | |
} | |
__asm | |
{ | |
VMUL.F64 D29, D21, D18 | |
VCMPE.F64 D20, D29 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !(_NF ^ _VF) ) | |
{ | |
__asm | |
{ | |
VCVT.F64.S32 D30, S11 | |
VLDR D31, =0.8 | |
} | |
goto LABEL_43; | |
} | |
__asm { VCVT.F32.S32 S14, S11 } | |
LABEL_45: | |
v18 = _R3 - 4; | |
__asm { VSTR S14, [R0] } | |
if ( v5 < _R3 - 4 || v5 > _R3 + 4 ) | |
{ | |
if ( *(_DWORD *)(v4 + 1368) && *(_DWORD *)(v4 + 1392) > *(_DWORD *)(v4 + 1396) ) | |
{ | |
*(_DWORD *)(v4 + 1380) = _R3 + 4; | |
*(_DWORD *)(v4 + 1376) = v18; | |
*(_DWORD *)(v4 + 1368) = 0; | |
*(_DWORD *)(v4 + 1392) = 0; | |
*(_DWORD *)(v4 + 1372) = 1; | |
} | |
} | |
else | |
{ | |
*(_DWORD *)(v4 + 1380) = _R3 + 4; | |
*(_DWORD *)(v4 + 1376) = v18; | |
*(_DWORD *)(v4 + 1372) = 0; | |
*(_DWORD *)(v4 + 1368) = 1; | |
*(_DWORD *)(v4 + 1400) = 0; | |
*(_DWORD *)(v4 + 1392) = 0; | |
*(_DWORD *)(v4 + 1396) = 0; | |
} | |
if ( !*(_DWORD *)(v4 + 1372) ) | |
{ | |
result = *(_DWORD *)(v4 + 1368); | |
if ( result ) | |
{ | |
if ( v5 >= *(_DWORD *)(v4 + 1376) ) | |
{ | |
result = *(_DWORD *)(v4 + 1380); | |
if ( v5 > result ) | |
*(_DWORD *)(v4 + 1380) = v5; | |
} | |
else | |
{ | |
*(_DWORD *)(v4 + 1376) = v5; | |
} | |
_R1 = v4 + 1352; | |
__asm | |
{ | |
VLDR S1, [R1] | |
VCMP.F32 S1, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_ZF ) | |
{ | |
_R1 = *(_DWORD *)(v4 + 1400); | |
__asm { VMOV R12, S11 } | |
if ( _R1 <= _R12 ) | |
{ | |
__asm | |
{ | |
VMOV S2, R1 | |
VCVT.F32.S32 S4, S2 | |
VSUB.F32 S3, S1, S4 | |
VCMPE.F32 S3, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_ZF & _CF ) | |
{ | |
__asm { VCVTR.S32.F32 S5, S3 } | |
*(_DWORD *)(v4 + 1400) = _R1 + 1; | |
__asm { VMOV R3, S5 } | |
*(_DWORD *)(v4 + 1396) = _R3; | |
return result; | |
} | |
} | |
} | |
*(_DWORD *)(v4 + 1396) = 0; | |
*(_DWORD *)(v4 + 1372) = 1; | |
if ( (result = *(_DWORD *)(v4 + 1376), (unsigned int)result > 5) && result < (unsigned int)v18 | |
|| (v24 = *(_DWORD *)(v4 + 1380), v24 > _R3 + 4) && v24 <= 0xD7 ) | |
{ | |
v25 = *(_DWORD *)(v4 + 1396); | |
v26 = *(_DWORD *)(v4 + 1392) + 1; | |
*(_DWORD *)(v4 + 1392) = v26; | |
if ( v26 > v25 ) | |
{ | |
result = 1; | |
*(_DWORD *)(v4 + 1372) = 1; | |
} | |
++*(_DWORD *)(v4 + 1404); | |
return result; | |
} | |
} | |
} | |
if ( !*(_DWORD *)(v4 + 1388) ) | |
{ | |
v27 = *(_DWORD *)(v4 + 1404); | |
*(_DWORD *)(v4 + 1408) = 1; | |
v28 = v27 & 0x80000001; | |
if ( (v27 & 0x80000001 & 0x80000000) != 0 ) | |
{ | |
_R3 = v28 - 1; | |
__asm { ORN.W R1, R3, #1 } | |
v28 = _R1 + 1; | |
} | |
if ( v28 ) | |
{ | |
v31 = *(_DWORD *)(v4 + 1360); | |
if ( v31 ) | |
{ | |
if ( v31 <= 0xEB ) | |
{ | |
result = v27 + 1; | |
*(_DWORD *)(v4 + 1404) = v27 + 1; | |
return result; | |
} | |
} | |
} | |
*(_DWORD *)(v4 + 1404) = v27 + 1; | |
goto LABEL_163; | |
} | |
result = *(_DWORD *)(v4 + 1360); | |
if ( (unsigned int)result > 0xEF ) | |
{ | |
v32 = *(_DWORD *)(v4 + 1416); | |
*(_DWORD *)(v4 + 1408) = 1; | |
*(_DWORD *)(v4 + 1416) = v32 + 1; | |
_VF = __OFSUB__(v32 + 1, 1); | |
_ZF = v32 == 0; | |
_NF = v32 < 0; | |
goto LABEL_80; | |
} | |
if ( result ) | |
{ | |
v36 = *(_DWORD *)(v4 + 1420); | |
*(_DWORD *)(v4 + 1408) = 1; | |
*(_DWORD *)(v4 + 1420) = v36 + 1; | |
_VF = __OFSUB__(v36 + 1, 4); | |
_ZF = v36 == 3; | |
_NF = v36 - 3 < 0; | |
LABEL_80: | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
*(_DWORD *)(v4 + 1412) = 1; | |
} | |
if ( *(_DWORD *)(v4 + 1412) ) | |
{ | |
v37 = *(_DWORD *)(v4 + 1404); | |
v38 = v37 & 0x80000001; | |
if ( (v37 & 0x80000001 & 0x80000000) != 0 ) | |
{ | |
_R3 = v38 - 1; | |
__asm { ORN.W R1, R3, #1 } | |
v38 = _R1 + 1; | |
} | |
if ( v38 && result && (unsigned int)result <= 0xEB ) | |
{ | |
*(_DWORD *)(v4 + 1404) = v37 + 1; | |
return result; | |
} | |
} | |
else if ( !*(_DWORD *)(v4 + 1408) ) | |
{ | |
goto LABEL_163; | |
} | |
v41 = *(_DWORD *)(v4 + 1356); | |
if ( result >= (unsigned int)(v41 - 4) && result <= (unsigned int)(v41 + 4) ) | |
{ | |
*(_DWORD *)(v4 + 1412) = 0; | |
*(_DWORD *)(v4 + 1408) = 0; | |
*(_DWORD *)(v4 + 1416) = 0; | |
*(_DWORD *)(v4 + 1420) = 0; | |
} | |
LABEL_163: | |
v55 = *(_DWORD *)(v4 + 1484); | |
if ( v55 ) | |
{ | |
v42 = *(_DWORD *)(v4 + 1476); | |
if ( v55 != 1 ) | |
{ | |
v43 = *(_DWORD *)(v4 + 1480); | |
v44 = 80 * v42; | |
if ( (v44 + 20 * v43) / 0x64u >= 0xFF ) | |
v42 = 255; | |
else | |
v42 = (v44 + 20 * v43) / 0x64u; | |
} | |
} | |
else | |
{ | |
v42 = 128; | |
} | |
v45 = *(_DWORD *)(v4 + 1428); | |
*(_DWORD *)(v4 + 1424) = v42; | |
if ( v45 && (v45 == 1 || v45 == 2 || v45 == 3) ) | |
v46 = v45; | |
else | |
v46 = 0; | |
v47 = *(_DWORD *)(v4 + 1356); | |
v48 = v47 + 128; | |
if ( v42 <= v47 + 128 + ((unsigned int)(127 - v47) >> 1) ) | |
{ | |
if ( v42 <= v48 ) | |
goto LABEL_107; | |
v51 = 1; | |
} | |
else | |
{ | |
if ( v42 > 0xFF ) | |
{ | |
LABEL_107: | |
if ( v42 > v47 + 64 && v42 <= v48 ) | |
{ | |
v51 = 2; | |
} | |
else if ( v42 > v47 + 32 && v42 <= v47 + 64 ) | |
{ | |
v51 = 3; | |
} | |
else if ( v42 > v47 + 8 && v42 <= v47 + 32 ) | |
{ | |
v51 = 4; | |
} | |
else if ( v42 > v47 + 4 && v42 <= v47 + 8 ) | |
{ | |
v51 = 5; | |
} | |
else if ( v42 >= v47 - 4 && v42 <= v47 + 4 ) | |
{ | |
v51 = 6; | |
} | |
else if ( v42 >= v47 - 8 && v42 < v47 - 4 ) | |
{ | |
v51 = 7; | |
} | |
else | |
{ | |
v49 = v47 - 16; | |
if ( v42 >= v47 - 16 && v42 < v47 - 8 ) | |
{ | |
v51 = 8; | |
} | |
else | |
{ | |
v50 = v47 - 32; | |
if ( v42 >= v50 && v42 < v49 ) | |
{ | |
v51 = 9; | |
} | |
else if ( v42 < v50 - (v50 >> 1) ) | |
{ | |
v51 = 11; | |
} | |
else if ( v42 >= v50 ) | |
{ | |
v51 = 0; | |
} | |
else | |
{ | |
v51 = 10; | |
} | |
} | |
} | |
goto LABEL_139; | |
} | |
v51 = 0; | |
} | |
LABEL_139: | |
v52 = exposure_step_size_lut[v51 + 12 * v46]; | |
if ( v46 ) | |
goto LABEL_156; | |
v53 = *(_DWORD *)(v4 + 1388); | |
if ( v53 == 2 ) | |
{ | |
if ( v51 == 4 ) | |
{ | |
v52 = -2; | |
} | |
else if ( v51 == 8 ) | |
{ | |
v52 = 2; | |
} | |
} | |
else if ( !v53 ) | |
{ | |
goto LABEL_148; | |
} | |
if ( !*(_DWORD *)(v4 + 1408) ) | |
{ | |
LABEL_156: | |
if ( !v52 ) | |
++*(_DWORD *)(v3 + 244); | |
goto LABEL_159; | |
} | |
LABEL_148: | |
switch ( v51 ) | |
{ | |
case 1: | |
v52 = -7; | |
break; | |
case 2: | |
v52 = -6; | |
break; | |
case 3: | |
v52 = -4; | |
break; | |
} | |
if ( (unsigned int)(v51 - 9) > 2 ) | |
goto LABEL_156; | |
v52 = 4; | |
LABEL_159: | |
result = *(_DWORD *)(v3 + 812); | |
v54 = *(_DWORD *)(v3 + 860); | |
*(_DWORD *)(v3 + 812) = v52 + result; | |
if ( v52 + result > v54 - 1 ) | |
*(_DWORD *)(v3 + 812) = v54 - 1; | |
return result; | |
} | |
//----- (00005B38) -------------------------------------------------------- | |
signed int __fastcall awb_init(int a1) | |
{ | |
int v1; // r5@1 | |
unsigned int v2; // r6@1 | |
signed int result; // r0@2 | |
void *v4; // r0@3 | |
int v5; // r4@3 | |
v1 = a1; | |
v2 = *(_BYTE *)a1; | |
if ( v2 <= 7 && (v4 = malloc(0x508Cu), v5 = (int)v4, (dword_122AC[v2] = v4) != 0) ) | |
{ | |
memset(v4, 0, 0x508Cu); | |
awb_settings_init(v1, v5); | |
awb_self_cal_init(v1, v5); | |
result = 0; | |
} | |
else | |
{ | |
result = -1; | |
} | |
return result; | |
} | |
//----- (00005B80) -------------------------------------------------------- | |
signed int __fastcall awb_set_params(int a1, unsigned int *a2) | |
{ | |
unsigned int *v2; // r3@1 | |
unsigned int v3; // r5@1 | |
int v4; // r1@1 | |
signed int result; // r0@3 | |
v2 = a2; | |
v3 = *a2; | |
v4 = dword_122AC[*(_BYTE *)a1]; | |
if ( v3 > 6 ) | |
{ | |
def_5B94: | |
result = -1; | |
} | |
else | |
{ | |
switch ( v3 ) | |
{ | |
case 0u: | |
return awb_set_current_wb(a1, v4, v2[1]); | |
case 1u: | |
awb_restore_pre_led_settings(a1, v4); | |
break; | |
case 3u: | |
return awb_set_bestshot_mode(a1, v4, v2[1]); | |
case 4u: | |
*(_DWORD *)(v4 + 20588) = v2[1]; | |
break; | |
case 5u: | |
*(_DWORD *)(v4 + 20592) = v2[1]; | |
break; | |
case 6u: | |
*(_DWORD *)(v4 + 20608) = v2[1]; | |
break; | |
default: | |
goto def_5B94; | |
} | |
result = 0; | |
} | |
return result; | |
} | |
//----- (00005BE4) -------------------------------------------------------- | |
signed int awb_get_params() | |
{ | |
return -1; | |
} | |
//----- (00005BEC) -------------------------------------------------------- | |
signed int __fastcall awb_process(int a1) | |
{ | |
int v1; // r4@1 | |
int v3; // r3@3 | |
signed int result; // r0@6 | |
int v11; // r3@10 | |
int v12; // r5@10 | |
v1 = a1; | |
_R5 = dword_122AC[*(_BYTE *)a1]; | |
if ( *(_DWORD *)(_R5 + 20588) && *(_DWORD *)(a1 + 792) ) | |
{ | |
result = 0; | |
} | |
else | |
{ | |
v3 = *(_DWORD *)(a1 + 72); | |
if ( v3 == 3 ) | |
{ | |
awb_algo_snapshot(a1, _R5); | |
result = 0; | |
} | |
else if ( v3 != 4 && v3 != 2 ) | |
{ | |
result = -1; | |
} | |
else | |
{ | |
result = awb_advanced_grey_world_algo_execute(a1, _R5); | |
} | |
if ( *(_DWORD *)(v1 + 792) ) | |
{ | |
_R2 = _R5 + 17024; | |
_R1 = _R5 + 17152; | |
__asm | |
{ | |
VLDR S15, [R2,#0x7C] | |
VSTR S15, [R3] | |
VLDR S0, [R1] | |
VSTR S0, [R2] | |
} | |
*(_DWORD *)(v1 + 1072) = *(_DWORD *)(_R5 + 24); | |
__asm | |
{ | |
VLDR S1, [R5,#0x40] | |
VSTR S1, [R2] | |
VLDR S2, [R5,#0x44] | |
VSTR S2, [R3] | |
VLDR S3, [R5,#0x48] | |
VSTR S3, [R2] | |
VLDR S4, [R5,#0x4C] | |
VSTR S4, [R3] | |
} | |
*(_DWORD *)(v1 + 1068) = *(_DWORD *)(_R5 + 17264); | |
*(_DWORD *)(v1 + 1060) = *(_DWORD *)(_R5 + 17352); | |
*(_DWORD *)(v1 + 1064) = *(_DWORD *)(_R5 + 17356); | |
v11 = *(_DWORD *)(_R5 + 84); | |
v12 = _R5 + 20480; | |
*(_DWORD *)(v1 + 1076) = v11; | |
if ( *(_DWORD *)(v12 + 112) ) | |
{ | |
*(_DWORD *)(v1 + 988) = *(_DWORD *)(v12 + 116); | |
*(_DWORD *)(v1 + 992) = *(_DWORD *)(v12 + 120); | |
*(_DWORD *)(v1 + 996) = *(_DWORD *)(v12 + 124); | |
} | |
else | |
{ | |
*(_DWORD *)(v12 + 116) = *(_DWORD *)(v1 + 988); | |
*(_DWORD *)(v12 + 120) = *(_DWORD *)(v1 + 992); | |
*(_DWORD *)(v12 + 124) = *(_DWORD *)(v1 + 996); | |
} | |
} | |
} | |
return result; | |
} | |
//----- (00005CE4) -------------------------------------------------------- | |
void __fastcall awb_deinit(int a1) | |
{ | |
void *v1; // r0@1 | |
v1 = (void *)dword_122AC[*(_BYTE *)a1]; | |
if ( v1 ) | |
j_j_free(v1); | |
} | |
//----- (00005CFC) -------------------------------------------------------- | |
int __fastcall awb_chromatix_reload(int a1) | |
{ | |
return awb_load_chromatix(a1, dword_122AC[*(_BYTE *)a1]); | |
} | |
//----- (00005D10) -------------------------------------------------------- | |
int __fastcall sub_5D10(int result, int a2) | |
{ | |
int v10; // r3@11 | |
int v11; // r12@12 | |
int v17; // r3@24 | |
int v19; // r12@25 | |
__asm | |
{ | |
VSUB.F32 S14, S0, S1 | |
VSUB.F32 S8, S2, S3 | |
VABS.F32 S12, S14 | |
VABS.F32 S13, S8 | |
VCMPE.F32 S12, S13 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ^ _VF ) | |
{ | |
__asm | |
{ | |
VCMP.F32 S8, #0.0 | |
VCVTR.S32.F32 S4, S2 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _ZF ) | |
__asm { VLDREQ S14, =0.0 } | |
__asm | |
{ | |
VCVTR.S32.F32 S5, S3 | |
VMOV R4, S4 | |
VCMPE.F32 S3, S2 | |
VMOV R5, S5 | |
} | |
if ( !_ZF ) | |
__asm { VDIVNE.F32 S14, S14, S8 } | |
__asm { VMRS APSR_nzcv, FPSCR } | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
__asm | |
{ | |
VCVTR.S32.F32 S15, S8 | |
VMOV.F64 D16, #0.5 | |
VMOV R2, S15 | |
} | |
*(_DWORD *)result = _R2 + 1; | |
v17 = 0; | |
while ( 1 ) | |
{ | |
_R2 = _R5 - v17; | |
if ( _R5 - v17 > _R4 ) | |
break; | |
__asm | |
{ | |
VMOV S0, R2 | |
VCVT.F32.S32 S2, S0 | |
VSUB.F32 S6, S2, S3 | |
VMOV.F32 S7, S1 | |
VMLA.F32 S7, S14, S6 | |
VCVT.F64.F32 D17, S7 | |
VADD.F64 D5, D17, D16 | |
VCVTR.S32.F64 S9, D5 | |
VMOV R7, S9 | |
} | |
*(_DWORD *)(a2 + 8 * (v17 + *(_DWORD *)result - 1)) = _R7; | |
v19 = v17-- + *(_DWORD *)result; | |
*(_DWORD *)(a2 + 8 * v19 - 4) = _R2; | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VSUB.F32 S3, S3, S2 | |
VCVTR.S32.F32 S1, S3 | |
VMOV.F64 D18, #0.5 | |
VMOV R2, S1 | |
} | |
*(_DWORD *)result = _R2 + 1; | |
__asm { VMOV R0, S4 } | |
while ( 1 ) | |
{ | |
a2 += 8; | |
if ( result > _R5 ) | |
break; | |
__asm | |
{ | |
VMOV S11, R0 | |
VCVT.F32.S32 S12, S11 | |
} | |
*(_DWORD *)(a2 - 4) = result++; | |
__asm | |
{ | |
VSUB.F32 S4, S12, S2 | |
VMOV.F32 S13, S0 | |
VMLA.F32 S13, S14, S4 | |
VCVT.F64.F32 D19, S13 | |
VADD.F64 D20, D19, D18 | |
VCVTR.S32.F64 S15, D20 | |
VSTR S15, [R1,#-8] | |
} | |
} | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VCMP.F32 S14, #0.0 | |
VCVTR.S32.F32 S6, S0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _ZF ) | |
__asm { VLDREQ S8, =0.0 } | |
__asm | |
{ | |
VCVTR.S32.F32 S7, S1 | |
VMOV R4, S6 | |
VCMPE.F32 S1, S0 | |
VMOV R5, S7 | |
} | |
if ( !_ZF ) | |
__asm { VDIVNE.F32 S8, S8, S14 } | |
__asm { VMRS APSR_nzcv, FPSCR } | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
__asm | |
{ | |
VCVTR.S32.F32 S14, S14 | |
VMOV.F64 D21, #0.5 | |
VMOV R2, S14 | |
} | |
*(_DWORD *)result = _R2 + 1; | |
v10 = 0; | |
while ( 1 ) | |
{ | |
_R2 = _R5 - v10; | |
if ( _R5 - v10 > _R4 ) | |
break; | |
__asm | |
{ | |
VMOV S0, R2 | |
VCVT.F32.S32 S2, S0 | |
} | |
*(_DWORD *)(a2 + 8 * (v10 + *(_DWORD *)result - 1)) = _R2; | |
__asm { VSUB.F32 S10, S2, S1 } | |
v11 = v10-- + *(_DWORD *)result; | |
__asm | |
{ | |
VMOV.F32 S9, S3 | |
VMLA.F32 S9, S8, S10 | |
VCVT.F64.F32 D22, S9 | |
VADD.F64 D23, D22, D21 | |
VCVTR.S32.F64 S12, D23 | |
VSTR S12, [R6,#-4] | |
} | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VSUB.F32 S3, S1, S0 | |
VCVTR.S32.F32 S1, S3 | |
VMOV.F64 D24, #0.5 | |
VMOV R2, S1 | |
} | |
*(_DWORD *)result = _R2 + 1; | |
__asm { VMOV R0, S6 } | |
while ( 1 ) | |
{ | |
a2 += 8; | |
if ( result > _R5 ) | |
break; | |
__asm | |
{ | |
VMOV S4, R0 | |
VCVT.F32.S32 S13, S4 | |
} | |
*(_DWORD *)(a2 - 8) = result++; | |
__asm | |
{ | |
VSUB.F32 S5, S13, S0 | |
VMOV.F32 S15, S2 | |
VMLA.F32 S15, S8, S5 | |
VCVT.F64.F32 D25, S15 | |
VADD.F64 D26, D25, D24 | |
VCVTR.S32.F64 S7, D26 | |
VSTR S7, [R1,#-4] | |
} | |
} | |
} | |
} | |
return result; | |
} | |
//----- (00005ED4) -------------------------------------------------------- | |
char *__fastcall sub_5ED4(int a1, int a2, int a3) | |
{ | |
int v3; // r1@1 | |
int v4; // r2@1 | |
char *result; // r0@1 | |
char v14; // [sp+20h] [bp-18h]@1 | |
v3 = 4 * a2; | |
v4 = 4 * a3; | |
_R3 = a1 + v3; | |
_R6 = a1 + v4; | |
__asm | |
{ | |
VLDR S14, [R3] | |
VLDR S15, [R6] | |
VSUB.F32 S1, S0, S14 | |
} | |
result = &v14; | |
_R1 = &v14 + v3; | |
__asm { VLDR S5, [R1,#-0x1C] } | |
_R3 = &v14 + v4; | |
__asm | |
{ | |
VLDR S13, [R3,#-0x1C] | |
VSUB.F32 S0, S15, S0 | |
VCVT.F32.S32 S6, S5 | |
VABS.F32 S3, S0 | |
VMUL.F32 S7, S3, S6 | |
VCVT.F32.S32 S4, S13 | |
VABS.F32 S2, S1 | |
VMLA.F32 S7, S2, S4 | |
VADD.F32 S8, S2, S3 | |
VDIV.F32 S0, S7, S8 | |
} | |
return result; | |
} | |
//----- (00005F40) -------------------------------------------------------- | |
int __fastcall sub_5F40(int a1, unsigned int a2, int a3, int a4) | |
{ | |
int v4; // r6@1 | |
int v5; // r7@1 | |
int result; // r0@1 | |
int v18; // [sp+4h] [bp-3Ch]@1 | |
signed int v19; // [sp+8h] [bp-38h]@1 | |
signed int v20; // [sp+Ch] [bp-34h]@1 | |
signed int v21; // [sp+10h] [bp-30h]@1 | |
signed int v22; // [sp+14h] [bp-2Ch]@1 | |
signed int v23; // [sp+18h] [bp-28h]@1 | |
signed int v24; // [sp+1Ch] [bp-24h]@1 | |
char v25; // [sp+20h] [bp-20h]@1 | |
v4 = a1; | |
v5 = a3; | |
v18 = 6500; | |
v19 = 7500; | |
v20 = 2850; | |
v21 = 4180; | |
v22 = 4100; | |
v23 = 2300; | |
v24 = 5000; | |
_R0 = 0xF4240 / a2; | |
__asm | |
{ | |
VMOV S15, R0 | |
VCVT.F32.S32 S17, S15 | |
} | |
_R0 = 0xF4240u / *((_DWORD *)&v25 + a3 - 7); | |
__asm | |
{ | |
VMOV S0, R0 | |
VCVT.F32.S32 S16, S0 | |
} | |
_R0 = 0xF4240u / *((_DWORD *)&v25 + a4 - 7); | |
_R2 = v4 + 4 * (a4 + 3980); | |
__asm { VLDR S3, [R2,#0xAC] } | |
_R2 = v4 + 4 * (a4 + 3990); | |
__asm | |
{ | |
VSUB.F32 S16, S16, S17 | |
VMOV S1, R0 | |
VCVT.F32.S32 S14, S1 | |
} | |
result = v5 + 3980; | |
_R1 = v4 + 4 * (v5 + 3980); | |
__asm { VLDR S13, [R1,#0xAC] } | |
_R6 = v4 + 4 * (v5 + 3990); | |
__asm | |
{ | |
VSUB.F32 S2, S17, S14 | |
VMUL.F32 S4, S2, S13 | |
VMLA.F32 S4, S16, S3 | |
VADD.F32 S12, S16, S2 | |
VDIV.F32 S5, S4, S12 | |
VSTR S5, [R3,#4] | |
VLDR S7, [R6,#0xA8] | |
VMUL.F32 S8, S2, S7 | |
VLDR S6, [R2,#0xA8] | |
VMLA.F32 S8, S16, S6 | |
VDIV.F32 S9, S8, S12 | |
VSTR S9, [R3,#8] | |
} | |
return result; | |
} | |
//----- (00006018) -------------------------------------------------------- | |
int __fastcall sub_6018(int result, int _R1, int _R2) | |
{ | |
__asm | |
{ | |
VLDR S13, [R0] | |
VLDR S15, [R1] | |
VCMP.F32 S13, S15 | |
VLDR S14, [R2] | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !(!_ZF & _CF) ) | |
__asm { VMOVLS.F32 S15, S13 } | |
__asm | |
{ | |
VCMPE.F32 S14, S15 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_ZF & _CF ) | |
__asm { VMOVHI.F32 S14, S15 } | |
__asm | |
{ | |
VMOV.F64 D17, #1.0 | |
VCVT.F64.F32 D16, S14 | |
VDIV.F64 D0, D17, D16 | |
VCVT.F64.F32 D1, S13 | |
VMUL.F64 D2, D1, D0 | |
VCVT.F32.F64 S3, D2 | |
VSTR S3, [R0] | |
VLDR S5, [R1] | |
VCVT.F64.F32 D3, S5 | |
VMUL.F64 D4, D3, D0 | |
VCVT.F32.F64 S7, D4 | |
VSTR S7, [R1] | |
VLDR S9, [R2] | |
VCVT.F64.F32 D5, S9 | |
VMUL.F64 D6, D5, D0 | |
VCVT.F32.F64 S1, D6 | |
VSTR S1, [R2] | |
} | |
return result; | |
} | |
//----- (00006088) -------------------------------------------------------- | |
int __fastcall sub_6088(int a1) | |
{ | |
int v6; // r4@1 | |
int v7; // r0@3 | |
int v8; // r1@4 | |
int v9; // r2@4 | |
int v11; // r1@18 | |
int v12; // r2@18 | |
int result; // r0@56 | |
__asm { VDIV.F32 S16, S1, S0 } | |
_R3 = a1 + 16000; | |
__asm { VLDR S15, [R3,#0x18] } | |
v6 = a1; | |
__asm | |
{ | |
VCMPE.F32 S16, S15 | |
VMOV.F32 S18, S1 | |
VMRS APSR_nzcv, FPSCR | |
VMOV.F32 S19, S2 | |
} | |
if ( !(!_ZF & _CF) ) | |
{ | |
__asm { VLDR S17, =7500.0 } | |
goto LABEL_15; | |
} | |
__asm | |
{ | |
VLDR S0, [R3,#0x14] | |
VCMPE.F32 S16, S0 | |
} | |
v7 = a1 + 16020; | |
__asm { VMRS APSR_nzcv, FPSCR } | |
if ( !(!_ZF & _CF) ) | |
{ | |
__asm { VMOV.F32 S0, S16 } | |
v8 = 1; | |
v9 = 0; | |
LABEL_13: | |
sub_5ED4(v7, v8, v9); | |
__asm { VMOV.F32 S17, S0 } | |
goto LABEL_15; | |
} | |
__asm | |
{ | |
VLDR S1, [R3,#0x2C] | |
VCMPE.F32 S16, S1 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !(!_ZF & _CF) ) | |
{ | |
__asm { VMOV.F32 S0, S16 } | |
v8 = 0; | |
v9 = 6; | |
goto LABEL_13; | |
} | |
__asm | |
{ | |
VLDR S2, [R3,#0x20] | |
VCMPE.F32 S16, S2 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !(!_ZF & _CF) ) | |
{ | |
__asm { VMOV.F32 S0, S16 } | |
v8 = 6; | |
v9 = 3; | |
goto LABEL_13; | |
} | |
__asm | |
{ | |
VLDR S3, [R3,#0x1C] | |
VCMPE.F32 S16, S3 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !(!_ZF & _CF) ) | |
{ | |
__asm { VMOV.F32 S0, S16 } | |
v8 = 3; | |
v9 = 2; | |
goto LABEL_13; | |
} | |
__asm | |
{ | |
VLDR S4, [R3,#0x28] | |
VCMPE.F32 S16, S4 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !(!_ZF & _CF) ) | |
{ | |
__asm { VMOV.F32 S0, S16 } | |
v8 = 2; | |
v9 = 5; | |
goto LABEL_13; | |
} | |
__asm { VLDR S17, =2300.0 } | |
LABEL_15: | |
__asm { VDIV.F32 S18, S18, S19 } | |
_R1 = v6 + 16000; | |
__asm | |
{ | |
VLDR S5, [R1,#0x3C] | |
VCMPE.F32 S18, S5 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ^ _VF ) | |
{ | |
__asm | |
{ | |
VLDR S6, [R1,#0x38] | |
VCMPE.F32 S18, S6 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ^ _VF ) | |
{ | |
_R2 = v6 + 16064; | |
__asm | |
{ | |
VLDR S7, [R2,#0x10] | |
VCMPE.F32 S18, S7 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ^ _VF ) | |
{ | |
__asm | |
{ | |
VLDR S8, [R2,#8] | |
VCMPE.F32 S18, S8 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ^ _VF ) | |
{ | |
__asm | |
{ | |
VLDR S9, [R2] | |
VCMPE.F32 S18, S9 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ^ _VF ) | |
{ | |
__asm | |
{ | |
VLDR S10, [R2,#0xC] | |
VCMPE.F32 S18, S10 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ^ _VF ) | |
{ | |
__asm { VLDR S0, =2300.0 } | |
goto LABEL_29; | |
} | |
__asm { VMOV.F32 S0, S18 } | |
v11 = 2; | |
v12 = 5; | |
} | |
else | |
{ | |
__asm { VMOV.F32 S0, S18 } | |
v11 = 4; | |
v12 = 2; | |
} | |
} | |
else | |
{ | |
__asm { VMOV.F32 S0, S18 } | |
v11 = 6; | |
v12 = 4; | |
} | |
} | |
else | |
{ | |
__asm { VMOV.F32 S0, S18 } | |
v11 = 0; | |
v12 = 6; | |
} | |
} | |
else | |
{ | |
__asm { VMOV.F32 S0, S18 } | |
v11 = 1; | |
v12 = 0; | |
} | |
sub_5ED4(v6 + 16056, v11, v12); | |
} | |
else | |
{ | |
__asm { VLDR S0, =7500.0 } | |
} | |
LABEL_29: | |
__asm { VADD.F32 S14, S17, S0 } | |
_R0 = v6 + 16000; | |
__asm | |
{ | |
VLDR S12, [R0,#0x20] | |
VMOV.F32 S13, #0.5 | |
VCMPE.F32 S16, S12 | |
VMUL.F32 S8, S14, S13 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF ) | |
goto LABEL_59; | |
_R3 = v6 + 16064; | |
__asm | |
{ | |
VLDR S11, [R3,#8] | |
VCMPE.F32 S18, S11 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_ZF & _CF ) | |
{ | |
LABEL_59: | |
_R1 = v6 + 16000; | |
__asm | |
{ | |
VLDR S15, [R1,#0x24] | |
VLDR S1, [R1,#0x2C] | |
VCMP.F32 S15, S1 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F32 S1, S15 } | |
__asm | |
{ | |
VCMPE.F32 S16, S1 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
__asm { VMOV.F32 S8, S0 } | |
goto LABEL_56; | |
} | |
__asm | |
{ | |
VCMPE.F32 S16, S12 | |
VCVT.F64.F32 D16, S16 | |
VMRS APSR_nzcv, FPSCR | |
VMOV.F64 D17, #0.5 | |
} | |
if ( !(_NF ^ _VF) ) | |
{ | |
__asm | |
{ | |
VLDR S2, [R1,#0x1C] | |
VADD.F32 S3, S12, S2 | |
VCVT.F64.F32 D18, S3 | |
VMUL.F64 D19, D18, D17 | |
VCMPE.F64 D16, D19 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
__asm | |
{ | |
VLDR S4, =3800.0 | |
VCMPE.F32 S0, S4 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
__asm { VADD.F32 S17, S17, S4 } | |
LABEL_54: | |
__asm { VMUL.F32 S8, S17, S13 } | |
goto LABEL_56; | |
} | |
} | |
} | |
_R4 = v6 + 16000; | |
__asm | |
{ | |
VLDR S5, [R4,#0x1C] | |
VADD.F32 S6, S5, S12 | |
VCVT.F64.F32 D20, S6 | |
VMUL.F64 D21, D20, D17 | |
VCMPE.F64 D16, D21 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ^ _VF ) | |
goto LABEL_60; | |
__asm | |
{ | |
VCMPE.F32 S16, S5 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
__asm | |
{ | |
VLDR S7, =2850.0 | |
VCMPE.F32 S0, S7 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
LABEL_53: | |
__asm { VADD.F32 S17, S17, S7 } | |
goto LABEL_54; | |
} | |
__asm { VLDR S7, =4000.0 } | |
} | |
else | |
{ | |
LABEL_60: | |
__asm | |
{ | |
VCMPE.F32 S16, S5 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ^ _VF ) | |
goto LABEL_56; | |
__asm | |
{ | |
VLDR S7, =2300.0 | |
VCMPE.F32 S0, S7 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
goto LABEL_53; | |
__asm { VLDR S7, =3200.0 } | |
} | |
__asm | |
{ | |
VCMPE.F32 S0, S7 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
goto LABEL_56; | |
goto LABEL_53; | |
} | |
__asm { VLDR S8, =4000.0 } | |
LABEL_56: | |
__asm | |
{ | |
VCVTR.U32.F32 S0, S8 | |
VMOV R0, S0 | |
} | |
return result; | |
} | |
//----- (00006318) -------------------------------------------------------- | |
int __fastcall sub_6318(int result, int _R1) | |
{ | |
int v6; // r5@1 | |
int v8; // r1@22 | |
__asm | |
{ | |
VLDR S16, [R1,#0x78] | |
VCMPE.F32 S0, S16 | |
} | |
v6 = result; | |
_R4 = _R1; | |
__asm | |
{ | |
VLDR S15, [R1,#0x6C] | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
__asm | |
{ | |
VCMPE.F32 S0, S15 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F32 S16, S15 } | |
else | |
__asm { VMOVPL.F32 S16, S0 } | |
} | |
__asm | |
{ | |
VLDR S18, [R4,#0x7C] | |
VCMPE.F32 S1, S18 | |
VLDR S0, [R4,#0x70] | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
__asm | |
{ | |
VCMPE.F32 S1, S0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F32 S18, S0 } | |
else | |
__asm { VMOVPL.F32 S18, S1 } | |
} | |
__asm | |
{ | |
VLDR S17, [R4,#0x80] | |
VCMPE.F32 S2, S17 | |
VLDR S1, [R4,#0x74] | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
__asm | |
{ | |
VCMPE.F32 S2, S1 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F32 S17, S1 } | |
else | |
__asm { VMOVPL.F32 S17, S2 } | |
} | |
__asm | |
{ | |
VLDR S14, [R4,#0x60] | |
VCMP.F32 S16, S14 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_ZF ) | |
goto LABEL_39; | |
__asm | |
{ | |
VLDR S2, [R4,#0x64] | |
VCMP.F32 S18, S2 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_ZF ) | |
goto LABEL_39; | |
__asm | |
{ | |
VLDR S3, [R4,#0x68] | |
VCMP.F32 S17, S3 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_ZF ) | |
{ | |
LABEL_39: | |
if ( *(_DWORD *)(result + 152) ) | |
goto LABEL_32; | |
v8 = *(_DWORD *)(result + 72); | |
if ( *(_BYTE *)(*(_DWORD *)(result + 76) + 2360) ) | |
{ | |
if ( v8 != 4 ) | |
{ | |
__asm | |
{ | |
VLDR S5, =0.1 | |
VLDR S4, =0.3 | |
} | |
if ( !_ZF ) | |
__asm { VMOVNE.F32 S5, S4 } | |
goto LABEL_31; | |
} | |
} | |
else if ( v8 != 4 ) | |
{ | |
__asm { VLDR S5, =0.05 } | |
LABEL_31: | |
__asm | |
{ | |
VMOV.F64 D17, #1.0 | |
VMUL.F32 S16, S16, S5 | |
VCVT.F64.F32 D16, S5 | |
VSUB.F64 D3, D17, D16 | |
VCVT.F64.F32 D4, S16 | |
VCVT.F64.F32 D5, S14 | |
VMLA.F64 D4, D3, D5 | |
VLDR S11, [R4,#0x68] | |
VMUL.F32 S18, S18, S5 | |
VMUL.F32 S17, S17, S5 | |
VCVT.F64.F32 D6, S18 | |
VCVT.F64.F32 D19, S17 | |
VCVT.F32.F64 S16, D4 | |
VLDR S9, [R4,#0x64] | |
VCVT.F64.F32 D20, S11 | |
VCVT.F64.F32 D18, S9 | |
VMLA.F64 D19, D3, D20 | |
VMLA.F64 D6, D3, D18 | |
VCVT.F32.F64 S17, D19 | |
VCVT.F32.F64 S18, D6 | |
} | |
LABEL_32: | |
__asm | |
{ | |
VCVT.F64.F32 D21, S16 | |
VLDR D22, =0.01 | |
VSTR S16, [R4,#0x60] | |
VSTR S18, [R4,#0x64] | |
VSTR S17, [R4,#0x68] | |
VCMPE.F64 D21, D22 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
goto LABEL_40; | |
__asm | |
{ | |
VCVT.F64.F32 D23, S17 | |
VCMPE.F64 D23, D22 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
LABEL_40: | |
result = 0; | |
} | |
else | |
{ | |
__asm | |
{ | |
VMOV.F32 S0, S16 | |
VMOV.F32 S1, S18 | |
VMOV.F32 S2, S17 | |
} | |
result = sub_6088(_R4); | |
} | |
*(_DWORD *)(v6 + 980) = result; | |
__asm | |
{ | |
VLDR S7, [R4,#0x30] | |
VMUL.F32 S17, S17, S7 | |
VSTR S16, [R5,#0x3DC] | |
VSTR S18, [R5,#0x3E0] | |
VSTR S17, [R5,#0x3E4] | |
} | |
return result; | |
} | |
__asm { VLDR S5, =0.025 } | |
goto LABEL_31; | |
} | |
return result; | |
} | |
//----- (000064B8) -------------------------------------------------------- | |
signed int __fastcall awb_set_current_wb(int a1, int _R1, int a3) | |
{ | |
signed int v3; // r4@1 | |
int v4; // r5@1 | |
int v5; // r3@1 | |
int v6; // r6@4 | |
signed int v7; // r7@6 | |
signed int v16; // r7@9 | |
v3 = 0; | |
v4 = *(_DWORD *)(a1 + 1056); | |
v5 = *(_DWORD *)(a1 + 76); | |
*(_DWORD *)(a1 + 984) = 0; | |
if ( v4 != a3 || a3 != 1 ) | |
{ | |
v3 = 1; | |
*(_DWORD *)(a1 + 1056) = a3; | |
} | |
v6 = *(_DWORD *)(a1 + 1056); | |
if ( (unsigned int)(v6 - 1) <= 8 ) | |
{ | |
switch ( v6 ) | |
{ | |
case 0: | |
v7 = 1; | |
goto LABEL_8; | |
case 8: | |
v7 = 0; | |
LABEL_8: | |
*(_DWORD *)(a1 + 972) = v7; | |
__asm | |
{ | |
VLDR S2, [R1,#0x60] | |
VLDR S3, [R1,#0x64] | |
VLDR S6, [R1,#0x68] | |
} | |
break; | |
case 5: | |
*(_DWORD *)(a1 + 972) = 0; | |
_R7 = v5 + 1960; | |
*(_DWORD *)(a1 + 984) = 2; | |
_R5 = v5 + 1904; | |
_R6 = v5 + 1900; | |
__asm | |
{ | |
VLDR S15, [R7] | |
VLDR S13, [R6] | |
VLDR S3, [R5] | |
VMUL.F32 S2, S13, S15 | |
} | |
_R5 = v5 + 1908; | |
v16 = 6; | |
_R3 = v5 + 1964; | |
__asm | |
{ | |
VLDR S12, [R5] | |
VLDR S14, [R3] | |
VMUL.F32 S6, S12, S14 | |
} | |
goto LABEL_12; | |
case 2: | |
*(_DWORD *)(a1 + 972) = 0; | |
_R7 = v5 + 1992; | |
*(_DWORD *)(a1 + 984) = 1; | |
_R6 = v5 + 1888; | |
_R5 = v5 + 1892; | |
__asm | |
{ | |
VLDR S13, [R7] | |
VLDR S11, [R6] | |
VLDR S3, [R5] | |
VMUL.F32 S2, S11, S13 | |
} | |
_R5 = v5 + 1896; | |
v16 = 2; | |
_R3 = v5 + 1996; | |
__asm | |
{ | |
VLDR S15, [R5] | |
VLDR S12, [R3] | |
VMUL.F32 S6, S15, S12 | |
} | |
goto LABEL_12; | |
case 3: | |
_R5 = v5 + 2008; | |
_R6 = v5 + 1864; | |
*(_DWORD *)(a1 + 972) = 0; | |
_R7 = v5 + 1868; | |
__asm | |
{ | |
VLDR S8, [R5] | |
VLDR S7, [R6] | |
} | |
_R5 = v5 + 1872; | |
__asm { VMUL.F32 S2, S7, S8 } | |
_R3 = v5 + 2012; | |
__asm | |
{ | |
VLDR S9, [R5] | |
VLDR S10, [R3] | |
VLDR S3, [R7] | |
} | |
v16 = 3; | |
__asm { VMUL.F32 S6, S9, S10 } | |
LABEL_12: | |
*(_DWORD *)(a1 + 976) = v16; | |
break; | |
case 4: | |
*(_DWORD *)(a1 + 972) = 0; | |
_R7 = v5 + 1876; | |
*(_DWORD *)(a1 + 984) = 2; | |
_R6 = v5 + 2056; | |
__asm | |
{ | |
VLDR S0, [R7] | |
VLDR S1, [R6] | |
} | |
_R6 = v5 + 1880; | |
__asm | |
{ | |
VMUL.F32 S2, S0, S1 | |
VLDR S3, [R6] | |
} | |
_R6 = v5 + 1884; | |
_R3 = v5 + 2060; | |
__asm | |
{ | |
VLDR S4, [R6] | |
VLDR S5, [R3] | |
} | |
*(_DWORD *)(a1 + 976) = 0; | |
__asm { VMUL.F32 S6, S4, S5 } | |
break; | |
default: | |
return -1; | |
} | |
if ( !v3 ) | |
return 0; | |
__asm | |
{ | |
VSTR S2, [R1,#0x60] | |
VSTR S3, [R1,#0x64] | |
VSTR S6, [R1,#0x68] | |
VSTR S2, [R0,#0x3DC] | |
VSTR S3, [R0,#0x3E0] | |
VLDR S14, [R1,#0x30] | |
VMUL.F32 S0, S6, S14 | |
VSTR S0, [R0,#0x3E4] | |
} | |
if ( !(!_ZF & _CF) ) | |
{ | |
*(_DWORD *)(a1 + 1056) = a3; | |
return 0; | |
} | |
} | |
return -1; | |
} | |
//----- (00006640) -------------------------------------------------------- | |
signed int __fastcall awb_advanced_grey_world_algo_execute(int a1, int a2) | |
{ | |
int v2; // r5@1 | |
signed int result; // r0@4 | |
int v9; // r7@5 | |
int v10; // r6@5 | |
int v11; // r1@5 | |
int v12; // r10@7 | |
int v13; // r11@7 | |
int v14; // r12@7 | |
int v15; // r9@7 | |
unsigned int v16; // r8@7 | |
unsigned int v17; // r10@12 | |
unsigned int v18; // r11@12 | |
unsigned int v19; // r8@12 | |
int v20; // r1@12 | |
int v21; // r0@14 | |
int v22; // r1@16 | |
signed int v23; // r3@20 | |
int v24; // r6@25 | |
int v25; // r7@27 | |
char v26; // r12@27 | |
int v27; // r1@28 | |
int v28; // r2@28 | |
int v29; // r3@28 | |
int v30; // r6@29 | |
int v31; // lr@29 | |
int v32; // r0@30 | |
int v33; // r1@30 | |
int v34; // r3@30 | |
int v35; // r12@33 | |
int v36; // r7@33 | |
int v37; // r1@34 | |
int v38; // r2@34 | |
int v39; // r3@34 | |
int v40; // r1@35 | |
int v41; // r2@35 | |
int v46; // r6@41 | |
int v47; // lr@41 | |
int v48; // r0@42 | |
int v49; // r1@42 | |
int v50; // r2@42 | |
int v51; // r1@45 | |
signed int v52; // r3@47 | |
int v54; // r1@54 | |
int v55; // r6@54 | |
unsigned int v56; // r1@72 | |
int v59; // r0@75 | |
int v60; // r2@75 | |
int v61; // r3@75 | |
int v75; // r1@110 | |
int v76; // r3@112 | |
signed int v77; // r1@117 | |
int v78; // [sp+Ch] [bp-74h]@5 | |
int v79; // [sp+10h] [bp-70h]@1 | |
float v80; // [sp+20h] [bp-60h]@51 | |
float v81; // [sp+24h] [bp-5Ch]@51 | |
float v82; // [sp+28h] [bp-58h]@51 | |
unsigned __int8 v83; // [sp+2Ch] [bp-54h]@54 | |
int v84; // [sp+30h] [bp-50h]@54 | |
v2 = a1; | |
_R4 = a2; | |
v79 = *(_DWORD *)(a1 + 76); | |
if ( *(_DWORD *)(a1 + 892) ) | |
*(_DWORD *)(a2 + 12928) = 1; | |
*(_DWORD *)(a2 + 80) = 2; | |
*(_DWORD *)(a2 + 36) = (*(_DWORD *)(a1 + 820) + 1) >> 1; | |
*(_DWORD *)(a2 + 32) = (*(_DWORD *)(a1 + 816) + *(_DWORD *)(a1 + 820) + 1) >> 1; | |
awb_util_aec_history_update(a1, a2); | |
if ( *(_DWORD *)(_R4 + 12) ) | |
{ | |
__asm | |
{ | |
VLDR S0, [R4,#0x34] | |
VLDR S1, [R4,#0x38] | |
VLDR S2, [R4,#0x3C] | |
} | |
sub_6318(v2, _R4); | |
result = 0; | |
*(_DWORD *)(_R4 + 12) = 0; | |
return result; | |
} | |
v9 = _R4 + 17448; | |
memset((void *)(_R4 + 17448), 0, 0xC08u); | |
v10 = *(_DWORD *)(v2 + 60); | |
memset((void *)(v2 + 516), -1, 0x80u); | |
v11 = 0; | |
v78 = v2; | |
while ( 1 ) | |
{ | |
v23 = *(_DWORD *)(v2 + 44); | |
if ( v11 >= v23 ) | |
break; | |
if ( v23 == 256 ) | |
{ | |
v12 = *(_DWORD *)(v10 + 4 * (v11 + 1)) | |
+ *(_DWORD *)(v10 + 4 * (v11 + 16)) | |
+ *(_DWORD *)(v10 + 4 * v11) | |
+ *(_DWORD *)(v10 + 4 * (v11 + 17)); | |
v13 = *(_DWORD *)(v10 + 4 * (v11 + 513)) | |
+ *(_DWORD *)(v10 + 4 * (v11 + 528)) | |
+ *(_DWORD *)(v10 + 4 * (v11 + 512)) | |
+ *(_DWORD *)(v10 + 4 * (v11 + 529)); | |
v14 = *(_DWORD *)(v10 + 4 * (v11 + 769)) | |
+ *(_DWORD *)(v10 + 4 * (v11 + 784)) | |
+ *(_DWORD *)(v10 + 4 * (v11 + 768)) | |
+ *(_DWORD *)(v10 + 4 * (v11 + 785)); | |
v15 = v11 + 2; | |
v16 = *(_DWORD *)(v10 + 4 * (v11 + 1025)) | |
+ *(_DWORD *)(v10 + 4 * (v11 + 1040)) | |
+ *(_DWORD *)(v10 + 4 * (v11 + 1024)) | |
+ *(_DWORD *)(v10 + 4 * (v11 + 1041)); | |
if ( !((v11 + 2) & 0xF) ) | |
v15 = v11 + 18; | |
} | |
else | |
{ | |
v12 = *(_DWORD *)(v10 + 4 * v11); | |
v13 = *(_DWORD *)(v10 + 4 * (v11 + 512)); | |
v16 = *(_DWORD *)(v10 + 4 * (v11 + 1024)); | |
v14 = *(_DWORD *)(v10 + 4 * (v11 + 768)); | |
v15 = v11 + 1; | |
} | |
if ( v16 && *(_DWORD *)v9 <= 255 ) | |
{ | |
v17 = ((v16 >> 1) + 32 * v12) / v16; | |
v18 = ((v16 >> 1) + 32 * v13) / v16 - 4096; | |
v19 = ((v16 >> 1) + 32 * v14) / v16 - 4096; | |
v20 = (signed int)(*(_DWORD *)(_R4 + 132) * v17 - *(_DWORD *)(_R4 + 136) * v18 + *(_DWORD *)(_R4 + 140) * v19 + 16) >> 5; | |
*(_DWORD *)(v9 + 4 * (*(_DWORD *)v9 + 2)) = v20; | |
if ( v20 < 0 ) | |
_android_log_print(6, 0, "ERROR!!! Invalid STATS RX\n"); | |
v21 = (signed int)(*(_DWORD *)(_R4 + 144) * v17 - *(_DWORD *)(_R4 + 148) * v18 - *(_DWORD *)(_R4 + 152) * v19 + 16) >> 5; | |
*(_DWORD *)(v9 + 4 * (*(_DWORD *)v9 + 258)) = v21; | |
if ( v21 < 0 ) | |
_android_log_print(6, 0, "ERROR!!! Invalid STATS GX\n"); | |
v22 = (signed int)(*(_DWORD *)(_R4 + 160) * v18 + *(_DWORD *)(_R4 + 156) * v17 - *(_DWORD *)(_R4 + 164) * v19 + 16) >> 5; | |
*(_DWORD *)(v9 + 4 * (*(_DWORD *)v9 + 514)) = v22; | |
if ( v22 < 0 ) | |
_android_log_print(6, 0, "ERROR!!! Invalid STATS BX\n"); | |
*(_DWORD *)(v78 + 516) = (*(_DWORD *)v9)++; | |
} | |
v78 += 4; | |
v11 = v15; | |
} | |
if ( v23 == 256 ) | |
v23 = 64; | |
*(_DWORD *)(_R4 + 17452) = v23; | |
*(_DWORD *)(_R4 + 80) = 2; | |
*(_DWORD *)(_R4 + 12) = 1; | |
if ( !*(_DWORD *)(v79 + 2388) ) | |
*(_DWORD *)(_R4 + 84) = 0; | |
v24 = *(_DWORD *)(v2 + 76); | |
if ( *(_DWORD *)(_R4 + 84) ) | |
{ | |
v35 = *(_DWORD *)(v2 + 240); | |
v36 = v2 + 1012; | |
if ( v35 == *(_DWORD *)(v2 + 860) - 1 ) | |
{ | |
v37 = *(_DWORD *)(v24 + 2100); | |
v38 = *(_DWORD *)(v24 + 2104); | |
v39 = *(_DWORD *)(v24 + 2108); | |
*(_DWORD *)v36 = *(_DWORD *)(v24 + 2096); | |
*(_DWORD *)(v2 + 1016) = v37; | |
*(_DWORD *)(v2 + 1020) = v38; | |
*(_WORD *)(v2 + 1024) = v39; | |
if ( *(_BYTE *)(v24 + 54264) ) | |
{ | |
v40 = *(_DWORD *)(v24 + 54332); | |
v41 = *(_DWORD *)(v24 + 54348); | |
if ( v40 < v41 ) | |
{ | |
if ( v35 > v41 ) | |
{ | |
__asm { VLDR S5, =0.0 } | |
} | |
else | |
{ | |
if ( v35 < v40 ) | |
goto LABEL_44; | |
_R0 = v41 - v35; | |
_R12 = v41 - v40; | |
__asm | |
{ | |
VMOV S14, R0 | |
VMOV S15, R12 | |
VCVT.F32.S32 S0, S14 | |
} | |
_R6 = *(_BYTE *)(v24 + 2096); | |
__asm | |
{ | |
VMOV S3, R6 | |
VCVT.F32.S32 S1, S15 | |
VDIV.F32 S2, S0, S1 | |
VCVT.F32.S32 S4, S3 | |
VMUL.F32 S5, S2, S4 | |
} | |
} | |
__asm | |
{ | |
VCVTR.U32.F32 S6, S5 | |
VMOV LR, S6 | |
} | |
*(_BYTE *)(v2 + 1012) = _LR; | |
} | |
} | |
} | |
else | |
{ | |
v46 = v24 + 2110; | |
v47 = v46 + 8; | |
do | |
{ | |
v48 = *(_DWORD *)v46; | |
v49 = *(_DWORD *)(v46 + 4); | |
v46 += 8; | |
*(_DWORD *)v36 = v48; | |
*(_DWORD *)(v36 + 4) = v49; | |
v50 = v36 + 8; | |
v36 += 8; | |
} | |
while ( v46 != v47 ); | |
*(_DWORD *)v50 = *(_DWORD *)v46; | |
*(_WORD *)(v50 + 4) = *(_WORD *)(v46 + 4); | |
} | |
} | |
else if ( !*(_DWORD *)(v2 + 152) ) | |
{ | |
v25 = v2 + 1012; | |
v26 = *(_BYTE *)(v24 + 2111) * *(_DWORD *)(_R4 + 24) / 100; | |
if ( *(_DWORD *)(v2 + 240) == *(_DWORD *)(v2 + 860) - 1 ) | |
{ | |
v27 = *(_DWORD *)(v24 + 2100); | |
v28 = *(_DWORD *)(v24 + 2104); | |
v29 = *(_DWORD *)(v24 + 2108); | |
*(_DWORD *)v25 = *(_DWORD *)(v24 + 2096); | |
*(_DWORD *)(v2 + 1016) = v27; | |
*(_DWORD *)(v2 + 1020) = v28; | |
*(_WORD *)(v2 + 1024) = v29; | |
} | |
else | |
{ | |
v30 = v24 + 2110; | |
v31 = v30 + 8; | |
do | |
{ | |
v32 = *(_DWORD *)v30; | |
v33 = *(_DWORD *)(v30 + 4); | |
v30 += 8; | |
*(_DWORD *)v25 = v32; | |
*(_DWORD *)(v25 + 4) = v33; | |
v34 = v25 + 8; | |
v25 += 8; | |
} | |
while ( v30 != v31 ); | |
*(_DWORD *)v34 = *(_DWORD *)v30; | |
*(_WORD *)(v34 + 4) = *(_WORD *)(v30 + 4); | |
} | |
*(_BYTE *)(v2 + 1012) = v26; | |
} | |
LABEL_44: | |
if ( !*(_DWORD *)(_R4 + 17448) ) | |
{ | |
v51 = *(_DWORD *)(_R4 + 84); | |
if ( *(_DWORD *)(v2 + 152) ) | |
{ | |
if ( v51 == 1 ) | |
return -1; | |
__asm { VMOV.F32 S7, #1.0 } | |
_R2 = _R4 + 17152; | |
__asm | |
{ | |
VLDR S13, [R2,#4] | |
VLDR S9, [R2,#8] | |
VSTR S13, [R2,#0x14] | |
VSTR S9, [R2,#0x18] | |
VDIV.F32 S8, S7, S13 | |
VSTR S7, [SP,#0x80+var_5C] | |
VDIV.F32 S12, S7, S9 | |
VSTR S8, [SP,#0x80+var_60] | |
VSTR S12, [SP,#0x80+var_58] | |
} | |
sub_6018((int)&v80, (int)&v81, (int)&v82); | |
__asm | |
{ | |
VLDR S0, [SP,#0x80+var_60] | |
VLDR S1, [SP,#0x80+var_5C] | |
VLDR S2, [SP,#0x80+var_58] | |
} | |
sub_6318(v2, _R4); | |
*(_DWORD *)(v2 + 976) = 0; | |
__asm | |
{ | |
VLDR S10, [SP,#0x80+var_60] | |
VLDR S11, [SP,#0x80+var_5C] | |
VLDR S14, [SP,#0x80+var_58] | |
VSTR S10, [R4,#0x34] | |
VSTR S11, [R4,#0x38] | |
VSTR S14, [R4,#0x3C] | |
} | |
} | |
else if ( v51 == 1 ) | |
{ | |
v52 = *(_DWORD *)(_R4 + 24); | |
if ( v52 > 9 ) | |
*(_DWORD *)(_R4 + 24) = v52 - 1; | |
*(_DWORD *)(_R4 + 88) = 10; | |
*(_DWORD *)(_R4 + 28) = 0; | |
} | |
__asm | |
{ | |
VLDR S0, [R4,#0x34] | |
VLDR S1, [R4,#0x38] | |
VLDR S2, [R4,#0x3C] | |
} | |
sub_6318(v2, _R4); | |
*(_DWORD *)(_R4 + 84) = *(_DWORD *)(_R4 + 84) == 0; | |
goto LABEL_110; | |
} | |
awb_agw_algo((int)&v83, v2, _R4); | |
v54 = v83; | |
__asm { VLDR S17, [SP,#0x80+var_4C] } | |
v55 = v84; | |
__asm | |
{ | |
VLDR S18, [SP,#0x80+var_48] | |
VLDR S16, [SP,#0x80+var_44] | |
VLDR S13, [SP,#0x80+var_40] | |
VLDR S7, [SP,#0x80+var_3C] | |
} | |
*(_DWORD *)(_R4 + 84) = *(_DWORD *)(_R4 + 84) == 0; | |
if ( !v54 ) | |
{ | |
__asm | |
{ | |
VLDR S2, [R4,#0x3C] | |
VLDR S0, [R4,#0x34] | |
VLDR S1, [R4,#0x38] | |
} | |
sub_6318(v2, _R4); | |
__asm | |
{ | |
VLDR S3, [R4,#0x38] | |
VLDR S2, [R4,#0x34] | |
VLDR S4, [R4,#0x3C] | |
VDIV.F32 S5, S3, S2 | |
VDIV.F32 S6, S3, S4 | |
} | |
if ( *(_DWORD *)(v2 + 152) ) | |
{ | |
__asm | |
{ | |
VSTR S5, [R3,#0x14] | |
VSTR S6, [R3,#0x18] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VSTR S5, [R3,#0xC] | |
VSTR S6, [R3,#0x10] | |
} | |
} | |
goto LABEL_110; | |
} | |
__asm | |
{ | |
VLDR S8, =0.9 | |
VCMPE.F32 S17, S8 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF ) | |
{ | |
__asm | |
{ | |
VMOV.F32 S12, #3.0 | |
VCMPE.F32 S17, S12 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
__asm | |
{ | |
VCMPE.F32 S16, S8 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF ) | |
{ | |
__asm | |
{ | |
VLDR S9, =3.7 | |
VCMPE.F32 S16, S9 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
if ( v55 != 10 ) | |
{ | |
__asm | |
{ | |
VLDR S10, =128.0 | |
VMUL.F32 S11, S13, S10 | |
VMUL.F32 S0, S7, S10 | |
VMOV.F64 D17, #-0.5 | |
VMOV.F64 D16, #0.5 | |
VCMPE.F32 S13, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
VCMPE.F32 S7, #0.0 | |
VCVT.F64.F32 D19, S11 | |
VCVT.F64.F32 D21, S0 | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F64 D18, D17 } | |
else | |
__asm { VMOVPL.F64 D18, D16 } | |
__asm { VMRS APSR_nzcv, FPSCR } | |
if ( _NF ) | |
__asm { VMOVMI.F64 D16, D17 } | |
__asm | |
{ | |
VADD.F64 D20, D19, D18 | |
VADD.F64 D22, D21, D16 | |
VCVTR.S32.F64 S14, D20 | |
VCVTR.S32.F64 S15, D22 | |
VSTR S14, [R4,#0x28] | |
VSTR S15, [R4,#0x2C] | |
} | |
} | |
__asm | |
{ | |
VMOV.F32 S0, S17 | |
VMOV.F32 S1, S18 | |
VMOV.F32 S2, S16 | |
} | |
sub_6318(v2, _R4); | |
if ( !*(_DWORD *)(_R4 + 20608) ) | |
goto LABEL_106; | |
v56 = *(_DWORD *)(v2 + 980); | |
if ( v56 > 0x1D4B ) | |
{ | |
_R1 = _R4 + 16064; | |
_R2 = _R4 + 16128; | |
__asm | |
{ | |
VLDR S7, [R1,#0x20] | |
VSTR S7, [R3,#4] | |
VLDR S2, [R2,#4] | |
} | |
LABEL_99: | |
__asm { VSTR S2, [R3,#8] } | |
goto LABEL_100; | |
} | |
if ( v56 <= 0x1964 ) | |
{ | |
if ( v56 == 6500 ) | |
{ | |
_R2 = _R4 + 16064; | |
_R0 = _R4 + 16128; | |
__asm | |
{ | |
VLDR S13, [R2,#0x1C] | |
VSTR S13, [R3,#4] | |
VLDR S2, [R0] | |
} | |
goto LABEL_99; | |
} | |
if ( v56 <= 0x1388 ) | |
{ | |
if ( v56 == 5000 ) | |
{ | |
_R0 = _R4 + 16064; | |
_R1 = _R4 + 16128; | |
__asm | |
{ | |
VLDR S6, [R0,#0x34] | |
VSTR S6, [R3,#4] | |
VLDR S2, [R1,#0x18] | |
} | |
goto LABEL_99; | |
} | |
if ( v56 <= 0x10CB ) | |
{ | |
if ( v56 > 0x1053 ) | |
{ | |
_R1 = _R4 + 16064; | |
_R2 = _R4 + 16128; | |
__asm | |
{ | |
VLDR S5, [R1,#0x2C] | |
VSTR S5, [R3,#4] | |
VLDR S2, [R2,#0x10] | |
} | |
goto LABEL_99; | |
} | |
if ( v56 <= 0x1003 ) | |
{ | |
if ( v56 > 0xED7 ) | |
{ | |
_R2 = _R4 + 16064; | |
_R0 = _R4 + 16128; | |
__asm | |
{ | |
VLDR S4, [R2,#0x28] | |
VSTR S4, [R3,#4] | |
VLDR S2, [R0,#0xC] | |
} | |
goto LABEL_99; | |
} | |
if ( v56 <= 0xB22 ) | |
{ | |
if ( v56 == 2850 ) | |
{ | |
_R0 = _R4 + 16064; | |
_R1 = _R4 + 16128; | |
__asm | |
{ | |
VLDR S3, [R0,#0x24] | |
VSTR S3, [R3,#4] | |
VLDR S2, [R1,#8] | |
} | |
goto LABEL_99; | |
} | |
if ( v56 <= 0x8FC ) | |
{ | |
_R1 = _R4 + 16064; | |
_R2 = _R4 + 16128; | |
__asm | |
{ | |
VLDR S1, [R1,#0x30] | |
VSTR S1, [R3,#4] | |
VLDR S2, [R2,#0x14] | |
} | |
goto LABEL_99; | |
} | |
v60 = 5; | |
v59 = _R4; | |
} | |
else | |
{ | |
v59 = _R4; | |
v60 = 2; | |
} | |
v61 = 3; | |
} | |
else | |
{ | |
v59 = _R4; | |
v60 = 3; | |
v61 = 4; | |
} | |
} | |
else | |
{ | |
v59 = _R4; | |
v60 = 4; | |
v61 = 6; | |
} | |
} | |
else | |
{ | |
v59 = _R4; | |
v60 = 6; | |
v61 = 0; | |
} | |
} | |
else | |
{ | |
v59 = _R4; | |
v60 = 0; | |
v61 = 1; | |
} | |
sub_5F40(v59, v56, v60, v61); | |
LABEL_100: | |
_R3 = _R4 + 20608; | |
__asm | |
{ | |
VLDR S12, =128.0 | |
VLDR S8, [R3,#4] | |
VMUL.F32 S9, S8, S12 | |
VMOV.F64 D24, #-0.5 | |
VMOV.F64 D25, #0.5 | |
VCMPE.F32 S8, #0.0 | |
VCVT.F64.F32 D23, S9 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F64 D26, D24 } | |
else | |
__asm { VMOVPL.F64 D26, D25 } | |
__asm | |
{ | |
VADD.F64 D27, D23, D26 | |
VCVTR.S32.F64 S10, D27 | |
VSTR S10, [R4,#0x28] | |
VLDR S11, [R3,#8] | |
VMUL.F32 S14, S11, S12 | |
VCMPE.F32 S11, #0.0 | |
VCVT.F64.F32 D28, S14 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F64 D25, D24 } | |
__asm | |
{ | |
VADD.F64 D29, D28, D25 | |
VCVTR.S32.F64 S0, D29 | |
VSTR S0, [R4,#0x2C] | |
} | |
LABEL_106: | |
__asm | |
{ | |
VDIV.F32 S1, S18, S17 | |
VDIV.F32 S15, S18, S16 | |
} | |
if ( *(_DWORD *)(v2 + 152) ) | |
{ | |
__asm | |
{ | |
VSTR S1, [R1,#0x14] | |
VSTR S15, [R1,#0x18] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VSTR S1, [R1,#0xC] | |
VSTR S15, [R1,#0x10] | |
} | |
} | |
*(_DWORD *)(v2 + 976) = v55; | |
__asm | |
{ | |
VSTR S17, [R4,#0x34] | |
VSTR S18, [R4,#0x38] | |
VSTR S16, [R4,#0x3C] | |
} | |
goto LABEL_110; | |
} | |
} | |
} | |
} | |
LABEL_110: | |
v75 = *(_DWORD *)(v2 + 976); | |
if ( v75 != *(_DWORD *)(_R4 + 4) ) | |
{ | |
*(_DWORD *)(_R4 + 4) = v75; | |
*(_DWORD *)(_R4 + 8) = 1; | |
return 0; | |
} | |
v76 = *(_DWORD *)(_R4 + 8); | |
*(_DWORD *)(_R4 + 8) = v76 + 1; | |
if ( v76 != 5 ) | |
return 0; | |
if ( !v75 || v75 == 9 || v75 == 6 || v75 == 1 ) | |
{ | |
v77 = 2; | |
LABEL_125: | |
*(_DWORD *)(v2 + 984) = v77; | |
return 0; | |
} | |
if ( v75 == 3 || v75 == 7 || v75 == 4 ) | |
{ | |
result = 0; | |
*(_DWORD *)(v2 + 984) = 0; | |
return result; | |
} | |
if ( v75 == 2 || v75 == 5 ) | |
{ | |
v77 = 1; | |
goto LABEL_125; | |
} | |
return 0; | |
} | |
// 1AEC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...); | |
//----- (00006DF8) -------------------------------------------------------- | |
int __fastcall awb_algo_snapshot(int a1, int a2) | |
{ | |
int v3; // r2@1 | |
int v4; // r4@1 | |
int v5; // r3@1 | |
int v27; // r3@8 | |
signed int v28; // r0@11 | |
signed int v29; // r1@13 | |
unsigned int v34; // r3@27 | |
int result; // r0@32 | |
int v36; // r2@34 | |
int v37; // r12@34 | |
int v38; // r3@34 | |
float v39; // [sp+4h] [bp-2Ch]@21 | |
float v40; // [sp+8h] [bp-28h]@21 | |
float v41; // [sp+Ch] [bp-24h]@21 | |
_R5 = a2; | |
v3 = *(_DWORD *)(a1 + 1056); | |
v4 = a1; | |
v5 = *(_DWORD *)(a1 + 76); | |
if ( (unsigned int)(v3 - 3) <= 3 ) | |
{ | |
switch ( v3 ) | |
{ | |
case 3: | |
_R0 = v5 + 1900; | |
_R2 = v5 + 1960; | |
__asm { VLDR S14, [R0] } | |
_R1 = v5 + 1908; | |
_R0 = v5 + 1964; | |
__asm | |
{ | |
VLDR S15, [R2] | |
VLDR S1, [R1] | |
VMUL.F32 S0, S14, S15 | |
VLDR S2, [R0] | |
} | |
_R3 = v5 + 1904; | |
__asm | |
{ | |
VMUL.F32 S3, S1, S2 | |
VSTR S0, [SP,#0x30+var_2C] | |
VSTR S3, [SP,#0x30+var_24] | |
} | |
break; | |
case 0: | |
_R1 = v5 + 1888; | |
_R2 = v5 + 1992; | |
__asm { VLDR S18, [R1] } | |
_R0 = v5 + 1896; | |
_R1 = v5 + 1996; | |
__asm | |
{ | |
VLDR S14, [R2] | |
VLDR S0, [R0] | |
VMUL.F32 S15, S18, S14 | |
VLDR S1, [R1] | |
} | |
_R3 = v5 + 1892; | |
__asm | |
{ | |
VMUL.F32 S2, S0, S1 | |
VSTR S15, [SP,#0x30+var_2C] | |
VSTR S2, [SP,#0x30+var_24] | |
} | |
break; | |
case 1: | |
_R0 = v5 + 1864; | |
_R2 = v5 + 2008; | |
__asm { VLDR S10, [R0] } | |
_R1 = v5 + 1872; | |
_R0 = v5 + 2012; | |
__asm | |
{ | |
VLDR S11, [R2] | |
VLDR S13, [R1] | |
VMUL.F32 S12, S10, S11 | |
VLDR S16, [R0] | |
} | |
_R3 = v5 + 1868; | |
__asm | |
{ | |
VMUL.F32 S17, S13, S16 | |
VSTR S12, [SP,#0x30+var_2C] | |
VSTR S17, [SP,#0x30+var_24] | |
} | |
break; | |
case 2: | |
_R1 = v5 + 1876; | |
_R2 = v5 + 2056; | |
__asm { VLDR S4, [R1] } | |
_R0 = v5 + 1884; | |
_R1 = v5 + 2060; | |
__asm | |
{ | |
VLDR S5, [R2] | |
VLDR S7, [R0] | |
VMUL.F32 S6, S4, S5 | |
VLDR S8, [R1] | |
} | |
_R3 = v5 + 1880; | |
__asm | |
{ | |
VMUL.F32 S9, S7, S8 | |
VSTR S6, [SP,#0x30+var_2C] | |
VSTR S9, [SP,#0x30+var_24] | |
} | |
break; | |
default: | |
goto def_6E10; | |
} | |
__asm { VLDR S17, [R3] } | |
goto LABEL_26; | |
} | |
def_6E10: | |
*(_DWORD *)(a2 + 36) = (*(_DWORD *)(a1 + 820) + 1) >> 1; | |
v27 = a2 + 12928; | |
*(_DWORD *)(a2 + 32) = (*(_DWORD *)(a1 + 816) + *(_DWORD *)(a1 + 820) + 1) >> 1; | |
if ( *(_DWORD *)(a1 + 892) ) | |
*(_DWORD *)v27 = 1; | |
if ( !*(_DWORD *)v27 ) | |
{ | |
__asm { VLDR S3, [R5,#0x60] } | |
if ( *(_DWORD *)(a1 + 984) ) | |
{ | |
__asm | |
{ | |
VLDR S5, [R5,#0x28] | |
VLDR S10, [R5,#0x2C] | |
VCVT.F32.U32 S6, S5 | |
VLDR S12, [R5,#0x68] | |
VLDR S8, =0.0078125 | |
VCVT.F32.U32 S11, S10 | |
VMUL.F32 S7, S6, S3 | |
VMUL.F32 S13, S11, S12 | |
VMUL.F32 S9, S7, S8 | |
VMUL.F32 S16, S13, S8 | |
VSTR S9, [SP,#0x30+var_2C] | |
VSTR S16, [SP,#0x30+var_24] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VLDR S4, [R5,#0x68] | |
VSTR S3, [SP,#0x30+var_2C] | |
VSTR S4, [SP,#0x30+var_24] | |
} | |
} | |
__asm { VLDR S17, [R5,#0x64] } | |
LABEL_26: | |
__asm { VSTR S17, [SP,#0x30+var_28] } | |
goto LABEL_27; | |
} | |
v28 = *(_DWORD *)(a1 + 876); | |
__asm { VMOV.F32 S18, #1.0 } | |
if ( v28 ) | |
{ | |
if ( *(_DWORD *)(v4 + 880) ) | |
{ | |
v29 = *(_DWORD *)(v4 + 884); | |
if ( v29 ) | |
{ | |
_R0 = v28 / v29; | |
__asm | |
{ | |
VMOV S14, R0 | |
VCVT.F32.S32 S3, S14 | |
VCMPE.F32 S3, S18 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
__asm { VMOV.F32 S3, S18 } | |
} | |
else | |
{ | |
__asm | |
{ | |
VMOV.F32 S0, #7.5 | |
VCMPE.F32 S3, S0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !(_NF ^ _VF) ) | |
{ | |
_R0 = _R5 + 17152; | |
__asm | |
{ | |
VLDR S15, [R0,#4] | |
VDIV.F32 S1, S18, S15 | |
VLDR S2, [R0,#8] | |
VSTR S1, [SP,#0x30+var_2C] | |
} | |
goto LABEL_18; | |
} | |
} | |
__asm { VMOV.F64 D17, #1.0 } | |
_R1 = _R5 + 17152; | |
__asm | |
{ | |
VLDR S5, [R1,#8] | |
VLDR S8, [R1,#4] | |
VLDR S4, [R1,#0x10] | |
VLDR S7, [R1,#0xC] | |
VCVT.F64.F32 D16, S3 | |
VSUB.F64 D21, D16, D17 | |
VCVT.F64.F32 D22, S5 | |
VCVT.F64.F32 D25, S8 | |
VMOV.F64 D18, #7.5 | |
VMUL.F64 D23, D21, D22 | |
VMUL.F64 D26, D21, D25 | |
VSUB.F64 D20, D18, D16 | |
VCVT.F64.F32 D19, S4 | |
VCVT.F64.F32 D24, S7 | |
VMLA.F64 D23, D20, D19 | |
VMLA.F64 D26, D20, D24 | |
VMOV.F32 S10, #6.5 | |
VCVT.F32.F64 S6, D23 | |
VCVT.F32.F64 S9, D26 | |
VDIV.F32 S12, S10, S6 | |
VDIV.F32 S11, S10, S9 | |
VSTR S11, [SP,#0x30+var_2C] | |
} | |
goto LABEL_21; | |
} | |
} | |
} | |
_R2 = _R5 + 17152; | |
__asm | |
{ | |
VLDR S13, [R2,#0xC] | |
VDIV.F32 S16, S18, S13 | |
VLDR S2, [R2,#0x10] | |
VSTR S16, [SP,#0x30+var_2C] | |
} | |
LABEL_18: | |
__asm { VDIV.F32 S12, S18, S2 } | |
LABEL_21: | |
__asm | |
{ | |
VSTR S12, [SP,#0x30+var_24] | |
VSTR S18, [SP,#0x30+var_28] | |
} | |
sub_10370(&v39, &v40, &v41); | |
LABEL_27: | |
v34 = *(_DWORD *)(v4 + 1056); | |
if ( v34 <= 8 && (1 << v34) & 0x186 ) | |
{ | |
__asm | |
{ | |
VLDR S18, [SP,#0x30+var_24] | |
VLDR S17, [R5,#0x30] | |
VMUL.F32 S14, S18, S17 | |
VSTR S14, [SP,#0x30+var_24] | |
} | |
} | |
__asm | |
{ | |
VLDR S17, [SP,#0x30+var_2C] | |
VCVT.F64.F32 D27, S17 | |
VLDR D28, =0.01 | |
VLDR S18, [SP,#0x30+var_28] | |
VLDR S16, [SP,#0x30+var_24] | |
VCMPE.F64 D27, D28 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
goto LABEL_37; | |
__asm | |
{ | |
VCVT.F64.F32 D29, S16 | |
VCMPE.F64 D29, D28 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
LABEL_37: | |
result = 0; | |
} | |
else | |
{ | |
__asm | |
{ | |
VMOV.F32 S0, S17 | |
VMOV.F32 S1, S18 | |
VMOV.F32 S2, S16 | |
} | |
result = sub_6088(_R5); | |
} | |
__asm | |
{ | |
VSTR S17, [R4,#0x3E8] | |
VSTR S18, [R4,#0x3EC] | |
VSTR S16, [R4,#0x3F0] | |
} | |
v36 = *(_DWORD *)(v4 + 1000); | |
v37 = *(_DWORD *)(v4 + 1004); | |
v38 = *(_DWORD *)(v4 + 1008); | |
*(_DWORD *)(v4 + 980) = result; | |
*(_DWORD *)(v4 + 988) = v36; | |
*(_DWORD *)(v4 + 992) = v37; | |
*(_DWORD *)(v4 + 996) = v38; | |
return result; | |
} | |
// 10370: using guessed type int __fastcall sub_10370(_DWORD, _DWORD, _DWORD); | |
//----- (00007100) -------------------------------------------------------- | |
int __fastcall awb_restore_pre_led_settings(int a1, int a2) | |
{ | |
int result; // r0@1 | |
int v4; // r0@4 | |
float v10; // [sp+4h] [bp-1Ch]@4 | |
float v11; // [sp+8h] [bp-18h]@4 | |
float v12; // [sp+Ch] [bp-14h]@4 | |
*(_DWORD *)(a2 + 12928) = 0; | |
result = *(_DWORD *)(a1 + 156); | |
_R4 = a2; | |
if ( result && result != 3 && *(_DWORD *)(a2 + 10764) > 0 ) | |
{ | |
v4 = awb_util_history_find_last_pos(a2); | |
__asm { VLDR D16, =0.001 } | |
_R0 = _R4 + 24 * v4 + 10368; | |
__asm | |
{ | |
VLDR S14, [R0,#0x20] | |
VCVT.F32.S32 S15, S14 | |
VCVT.F64.F32 D17, S15 | |
VMUL.F64 D0, D17, D16 | |
VCVT.F32.F64 S13, D0 | |
VLDR S1, [R0,#0x24] | |
VCVT.F32.S32 S2, S1 | |
VCVT.F64.F32 D2, S2 | |
VMUL.F64 D3, D2, D16 | |
VMOV.F32 S5, #1.0 | |
VCVT.F32.F64 S3, D3 | |
VSTR S5, [SP,#0x20+var_18] | |
VDIV.F32 S7, S5, S13 | |
VDIV.F32 S8, S5, S3 | |
VSTR S7, [SP,#0x20+var_1C] | |
VSTR S8, [SP,#0x20+var_14] | |
} | |
result = sub_6018((int)&v10, (int)&v11, (int)&v12); | |
__asm | |
{ | |
VLDR S9, [SP,#0x20+var_1C] | |
VLDR S10, [SP,#0x20+var_18] | |
VSTR S9, [R4,#0x60] | |
VSTR S10, [R4,#0x64] | |
VLDR S11, [SP,#0x20+var_14] | |
VSTR S11, [R4,#0x68] | |
VSTR S9, [R5,#0x3DC] | |
VSTR S10, [R5,#0x3E0] | |
VLDR S12, [R4,#0x30] | |
VMUL.F32 S14, S11, S12 | |
VSTR S14, [R5,#0x3E4] | |
} | |
} | |
return result; | |
} | |
//----- (000071C0) -------------------------------------------------------- | |
int __fastcall awb_load_chromatix(int a1, int a2) | |
{ | |
int v3; // r3@1 | |
int v4; // r6@1 | |
int v12; // r2@1 | |
int v13; // r1@1 | |
int v14; // r0@1 | |
int v19; // r2@4 | |
int v20; // r2@4 | |
int v21; // r12@5 | |
int v22; // r0@5 | |
int v23; // r1@8 | |
int v24; // r2@8 | |
int v25; // r6@8 | |
int v27; // r1@9 | |
int v28; // r5@9 | |
int v29; // r3@9 | |
int v30; // r4@9 | |
int v31; // r0@9 | |
int v32; // t0@9 | |
int v33; // r1@9 | |
int v34; // r2@9 | |
int result; // r0@9 | |
int v36; // r1@9 | |
int v37; // r2@9 | |
_R4 = a2; | |
v3 = *(_DWORD *)(a1 + 76); | |
v4 = a2 + 168; | |
_R5 = v3 + 1924; | |
_R7 = v3 + 1932; | |
*(_DWORD *)(a2 + 24) = *(_DWORD *)(v3 + 2356); | |
_R1 = v3 + 1928; | |
__asm | |
{ | |
VLDR S15, [R5] | |
VLDR S14, [R1] | |
VDIV.F32 S0, S14, S15 | |
} | |
v12 = v3; | |
__asm | |
{ | |
VSTR S0, [R0,#4] | |
VLDR S1, [R1] | |
VLDR S2, [R7] | |
VDIV.F32 S3, S1, S2 | |
} | |
v13 = v3; | |
__asm { VSTR S3, [R0,#8] } | |
v14 = 0; | |
do | |
{ | |
_R12 = v12 + 1952; | |
__asm { VLDR S4, [R12] } | |
v14 += 4; | |
_R9 = v12 + 1960; | |
__asm { VSTR S4, [R8,#0x2C] } | |
_R8 = v12 + 1956; | |
__asm | |
{ | |
VLDR S5, [R8] | |
VSTR S5, [R8,#0x10] | |
VLDR S6, [R9] | |
VSTR S6, [R8,#0x34] | |
} | |
_R8 = v12 + 1964; | |
v12 += 16; | |
__asm | |
{ | |
VLDR S7, [R8] | |
VSTR S7, [R12,#0x18] | |
} | |
} | |
while ( !_ZF ); | |
v19 = _R4 + 10368; | |
*(_DWORD *)(v19 + 16) = 2 * *(_DWORD *)(v3 + 2160); | |
*(_DWORD *)(v19 + 20) = 2 * *(_DWORD *)(v3 + 2164); | |
*(_DWORD *)(_R4 + 17180) = 2 * *(_DWORD *)(v3 + 2156); | |
v20 = 0; | |
do | |
{ | |
v21 = v4 + v20; | |
*(_DWORD *)(v4 + v20) = *(_DWORD *)(v13 + 2236); | |
v20 += 12; | |
*(_DWORD *)(v21 + 4) = *(_DWORD *)(v13 + 2240); | |
v22 = *(_DWORD *)(v13 + 2244); | |
v13 += 12; | |
*(_DWORD *)(v21 + 8) = v22; | |
} | |
while ( v20 != 120 ); | |
__asm | |
{ | |
VLDR S8, [R4,#0x34] | |
VCMP.F32 S8, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _ZF ) | |
{ | |
v23 = *(_DWORD *)(v3 + 1928); | |
v24 = *(_DWORD *)(v3 + 1932); | |
v25 = _R4 + 96; | |
*(_DWORD *)v25 = *(_DWORD *)_R5; | |
*(_DWORD *)(v25 + 4) = v23; | |
*(_DWORD *)(v25 + 8) = v24; | |
__asm { VLDR S9, [R5] } | |
_R5 = v3 + 1928; | |
__asm | |
{ | |
VSTR S9, [R4,#0x34] | |
VLDR S10, [R5] | |
VSTR S10, [R4,#0x38] | |
VLDR S11, [R7] | |
VSTR S11, [R4,#0x3C] | |
} | |
} | |
v27 = v3 + 2204; | |
v28 = _R4 + 108; | |
v29 = v3 + 2216; | |
v30 = _R4 + 120; | |
v31 = *(_DWORD *)v27; | |
v32 = v27 + 4; | |
v33 = *(_DWORD *)(v27 + 4); | |
v34 = *(_DWORD *)(v32 + 4); | |
*(_DWORD *)v28 = v31; | |
*(_DWORD *)(v28 + 4) = v33; | |
*(_DWORD *)(v28 + 8) = v34; | |
result = *(_DWORD *)v29; | |
v36 = *(_DWORD *)(v29 + 4); | |
v37 = *(_DWORD *)(v29 + 8); | |
*(_DWORD *)v30 = *(_DWORD *)v29; | |
*(_DWORD *)(v30 + 4) = v36; | |
*(_DWORD *)(v30 + 8) = v37; | |
return result; | |
} | |
//----- (000072F0) -------------------------------------------------------- | |
signed int __fastcall awb_settings_init(int a1, int a2) | |
{ | |
int v6; // r4@1 | |
int v7; // r5@1 | |
int v8; // r6@1 | |
int v11; // r1@1 | |
int v15; // r3@1 | |
int v16; // r3@3 | |
int v17; // r0@3 | |
int v18; // r5@3 | |
int v19; // r3@3 | |
int v20; // r8@4 | |
int v21; // r2@4 | |
int v22; // r3@7 | |
int v31; // r3@36 | |
int v37; // r10@37 | |
int v39; // r6@39 | |
int v40; // r12@40 | |
int v42; // r2@42 | |
int v43; // r3@43 | |
int v44; // r6@43 | |
int v45; // r1@43 | |
int v46; // lr@47 | |
int v47; // r0@47 | |
int v48; // t1@48 | |
int v49; // r7@55 | |
int v50; // r6@55 | |
int v51; // t1@56 | |
int v52; // lr@56 | |
int v57; // r3@61 | |
int v60; // r2@63 | |
int v61; // r6@64 | |
int v70; // r9@66 | |
int v71; // r10@66 | |
int v72; // r8@66 | |
signed int v73; // r1@66 | |
int v74; // r0@68 | |
int v75; // r2@68 | |
int v76; // r1@68 | |
int v77; // r6@68 | |
int v78; // r7@68 | |
int v80; // r1@69 | |
signed int v81; // kr00_4@71 | |
int v82; // r1@71 | |
int v84; // r3@71 | |
int v85; // r2@71 | |
int v88; // t1@72 | |
int v89; // r6@72 | |
int v90; // r2@75 | |
int v91; // t1@76 | |
int v92; // r6@76 | |
int v93; // r0@79 | |
int v94; // r9@79 | |
int v95; // r3@79 | |
int v96; // r6@80 | |
int v97; // r7@80 | |
signed int result; // r0@83 | |
int v102; // [sp+8h] [bp-68h]@48 | |
int v103; // [sp+Ch] [bp-64h]@0 | |
__asm { VLDR S15, =0.0 } | |
v6 = a2; | |
v7 = 0; | |
*(_DWORD *)(a1 + 972) = 1; | |
*(_DWORD *)(a2 + 88) = 10; | |
*(_DWORD *)(a2 + 92) = 10; | |
__asm { VSTR S15, [R1,#0x40] } | |
*(_DWORD *)(a2 + 84) = 0; | |
__asm { VSTR S15, [R1,#0x44] } | |
*(_DWORD *)(a2 + 16) = 0; | |
__asm { VSTR S15, [R1,#0x48] } | |
*(_DWORD *)(a2 + 20) = 0; | |
__asm { VSTR S15, [R1,#0x4C] } | |
*(_DWORD *)(a2 + 28) = 0; | |
v8 = a1; | |
*(_DWORD *)(a1 + 1056) = 1; | |
awb_load_chromatix(a1, a2); | |
*(_DWORD *)(v6 + 132) = 1024; | |
*(_DWORD *)(v6 + 136) = 233; | |
*(_DWORD *)(v6 + 144) = 1024; | |
*(_DWORD *)(v6 + 148) = 233; | |
*(_DWORD *)(v6 + 156) = 1024; | |
_R0 = v6 + 10368; | |
*(_DWORD *)(v6 + 152) = 612; | |
*(_DWORD *)(v6 + 160) = 1815; | |
*(_DWORD *)(v6 + 164) = 612; | |
_R3 = v6 + 16064; | |
*(_DWORD *)(v6 + 140) = 1436; | |
__asm | |
{ | |
VLDR S14, [R0,#0x14] | |
VLDR S25, [R0,#0x10] | |
VCVT.F32.S32 S27, S14 | |
} | |
v11 = *(_DWORD *)(v8 + 76); | |
_R2 = v6 + 16000; | |
__asm | |
{ | |
VLDR S19, [R3,#0x10] | |
VLDR S20, [R2,#0x38] | |
VLDR S26, [R3,#0xC] | |
VLDR S18, [R2,#0x24] | |
VLDR S16, [R2,#0x2C] | |
VLDR S24, [R2,#0x14] | |
VLDR S23, [R3] | |
} | |
_R2 = v11 + 2176; | |
_R3 = v11 + 2172; | |
__asm | |
{ | |
VCVT.F32.S32 S25, S25 | |
VLDR S21, [R3] | |
VLDR S22, [R2] | |
} | |
v15 = v6 + 10400; | |
*(_DWORD *)(v6 + 12924) = 0; | |
do | |
{ | |
++v7; | |
*(_DWORD *)v15 = 0; | |
*(_DWORD *)(v15 + 4) = 0; | |
*(_DWORD *)(v15 + 20) = 10; | |
*(_DWORD *)(v15 + 8) = -1; | |
*(_DWORD *)(v15 + 16) = 0; | |
*(_DWORD *)(v15 + 12) = -1; | |
v15 += 24; | |
} | |
while ( v7 != 15 ); | |
v16 = v6 + 10752; | |
v17 = v6 + 10944; | |
v18 = v6 + 168; | |
*(_DWORD *)(v16 + 12) = 0; | |
*(_DWORD *)(v16 + 8) = 0; | |
v19 = 0; | |
*(_DWORD *)(v17 + 28) = 0; | |
*(_DWORD *)(v17 + 24) = 0; | |
do | |
{ | |
v20 = v18 + v19; | |
v19 += 8; | |
v21 = v20 + 10560; | |
*(_DWORD *)(v21 + 40) = -1; | |
*(_DWORD *)(v21 + 44) = 0; | |
} | |
while ( v19 != 200 ); | |
if ( *(_DWORD *)(v11 + 2364) ) | |
awb_self_cal_data_init(v8, v6); | |
__asm { VMOV.F32 S13, #1.0 } | |
v22 = 0; | |
__asm | |
{ | |
VLDR S10, =1024.0 | |
VMOV.F32 S11, S13 | |
VMOV.F32 S0, S13 | |
} | |
do | |
{ | |
__asm { VLDR S17, =1024.0 } | |
_R7 = v18 + v22 + 15808; | |
__asm | |
{ | |
VLDR S12, [R7,#0x2C] | |
VCMP.F32 S12, S11 | |
} | |
_R0 = v18 + v22 + 15872; | |
__asm | |
{ | |
VLDR S1, [R0,#0x10] | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
__asm { VMOVGT.F32 S11, S12 } | |
__asm | |
{ | |
VMUL.F32 S2, S12, S10 | |
VCMP.F32 S1, S11 | |
VMUL.F32 S4, S1, S10 | |
VMRS APSR_nzcv, FPSCR | |
VCMP.F32 S12, S13 | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
__asm { VMOVGT.F32 S11, S1 } | |
__asm { VMRS APSR_nzcv, FPSCR } | |
if ( _NF ) | |
__asm { VMOVMI.F32 S13, S12 } | |
__asm | |
{ | |
VCVTR.S32.F32 S3, S2 | |
VCMP.F32 S1, S13 | |
VSTR S3, [R2,#0x1C] | |
VCVTR.S32.F32 S5, S4 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F32 S13, S1 } | |
v22 += 4; | |
__asm { VSTR S5, [R1] } | |
} | |
while ( !_ZF ); | |
_R7 = v6 + 17152; | |
__asm | |
{ | |
VLDR S6, [R7,#4] | |
VCVTR.S32.F32 S7, S6 | |
VLDR D20, =0.8 | |
VLDR D16, =1.2 | |
VMOV R0, S7 | |
} | |
*(_DWORD *)(v6 + 12908) = _R0 << 10; | |
__asm | |
{ | |
VCMP.F32 S13, S6 | |
VLDR S8, [R7,#8] | |
VCVTR.S32.F32 S9, S8 | |
VMOV R1, S9 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
__asm { VMOVGT.F32 S13, S6 } | |
*(_DWORD *)(v6 + 12912) = _R1 << 10; | |
__asm | |
{ | |
VCMP.F32 S13, S8 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
__asm { VMOVGT.F32 S13, S8 } | |
__asm | |
{ | |
VCVT.F64.F32 D19, S13 | |
VMUL.F64 D21, D19, D20 | |
VCVT.F32.F64 S13, D21 | |
VMOV.F64 D24, #1.0 | |
VCVT.F64.F32 D23, S13 | |
VDIV.F64 D25, D24, D23 | |
VCMPE.F32 S11, S6 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF ) | |
__asm { VMOVPL.F32 S6, S11 } | |
__asm | |
{ | |
VCMPE.F32 S6, S8 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF ) | |
__asm { VMOVPL.F32 S8, S6 } | |
__asm | |
{ | |
VCVT.F64.F32 D17, S8 | |
VMUL.F64 D18, D17, D16 | |
VCVT.F32.F64 S15, D18 | |
VCVT.F64.F32 D22, S15 | |
VCMPE.F64 D22, D25 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
__asm { VDIV.F32 S15, S0, S13 } | |
} | |
else | |
{ | |
__asm | |
{ | |
VDIV.F64 D26, D24, D22 | |
VCMPE.F64 D23, D26 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
__asm { VDIVGT.F32 S13, S0, S15 } | |
} | |
__asm | |
{ | |
VCVT.F64.F32 D27, S13 | |
VLDR D29, =120.5 | |
VLDR D3, =64.0 | |
VSTR S13, [R3,#0x24] | |
VSUB.F64 D28, D24, D27 | |
VDIV.F64 D30, D28, D29 | |
VCVT.F32.F64 S1, D30 | |
VMUL.F32 S27, S27, S1 | |
VADD.F32 S12, S20, S19 | |
VMUL.F32 S0, S15, S17 | |
VMOV.F64 D2, #0.5 | |
VCVT.F64.F32 D31, S12 | |
VCVT.F64.F32 D1, S27 | |
VCVTR.S32.F32 S10, S0 | |
VSUB.F32 S24, S24, S16 | |
VSTR S10, [SP,#0x70+var_64] | |
VSUB.F32 S0, S20, S19 | |
VMLA.F64 D1, D31, D2 | |
VLDR S5, =64.0 | |
VDIV.F32 S10, S0, S24 | |
VMUL.F32 S14, S13, S17 | |
VMUL.F64 D6, D1, D3 | |
VCVTR.U32.F64 S3, D6 | |
VMUL.F32 S12, S10, S5 | |
VMOV R2, S3 | |
VCMPE.F32 S18, S16 | |
VMUL.F32 S25, S25, S1 | |
VMRS APSR_nzcv, FPSCR | |
VABS.F32 S2, S12 | |
VCMP.F32 S18, S16 | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F32 S9, S18 } | |
else | |
__asm { VMOVPL.F32 S9, S16 } | |
__asm | |
{ | |
VMRS APSR_nzcv, FPSCR | |
VCVTR.U32.F32 S4, S2 | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F32 S16, S18 } | |
__asm | |
{ | |
VMOV R3, S4 | |
VADD.F32 S13, S9, S25 | |
VADD.F32 S23, S23, S27 | |
VADD.F32 S25, S16, S25 | |
VCVT.F32.U32 S4, S4, #6 | |
VMLA.F32 S23, S4, S25 | |
VCVT.F64.F32 D17, S21 | |
VMUL.F32 S18, S23, S5 | |
VCVT.F64.F32 D11, S22 | |
VADD.F32 S26, S26, S27 | |
VCVTR.S32.F32 S11, S14 | |
VMUL.F64 D11, D11, D3 | |
VSTR S11, [R0,#0xC] | |
VMOV R11, S11 | |
} | |
*(_DWORD *)(v8 + 1052) = _R3; | |
v31 = 0; | |
*(_DWORD *)(v8 + 1028) = _R2; | |
__asm | |
{ | |
VMUL.F32 S14, S13, S5 | |
VMUL.F64 D6, D17, D3 | |
VMUL.F32 S8, S26, S5 | |
VCVTR.U32.F32 S11, S14 | |
VCVTR.U32.F32 S26, S8 | |
VMOV R7, S11 | |
} | |
*(_DWORD *)(v8 + 1036) = _R7; | |
__asm | |
{ | |
VCVTR.U32.F32 S16, S18 | |
VMOV R1, S26 | |
} | |
*(_DWORD *)(v8 + 1032) = _R1; | |
__asm | |
{ | |
VCVTR.U32.F64 S22, D11 | |
VMOV R0, S16 | |
} | |
*(_DWORD *)(v8 + 1040) = _R0; | |
__asm | |
{ | |
VCVTR.U32.F64 S7, D6 | |
VMOV R2, S22 | |
} | |
*(_DWORD *)(v8 + 1044) = _R2; | |
__asm { VMOV R1, S7 } | |
*(_DWORD *)(v8 + 1048) = _R1; | |
do | |
{ | |
v37 = v18 + v31; | |
v31 += 4; | |
_R6 = v37 + 15936; | |
__asm | |
{ | |
VLDR S6, [R6,#0x3C] | |
VADD.F32 S3, S1, S6 | |
VMUL.F32 S5, S3, S17 | |
VSTR S3, [R7] | |
VCVTR.S32.F32 S8, S5 | |
VSTR S8, [R0,#0x28] | |
} | |
} | |
while ( !_ZF ); | |
__asm { VCVT.F64.F32 D16, S15 } | |
v39 = 0; | |
__asm | |
{ | |
VSUB.F64 D18, D16, D24 | |
VDIV.F64 D19, D18, D29 | |
VCVT.F32.F64 S1, D19 | |
} | |
do | |
{ | |
v40 = v18 + v39; | |
v39 += 4; | |
_R2 = v40 + 0x4000; | |
__asm | |
{ | |
VLDR S9, [R2,#0x5C] | |
VADD.F32 S13, S1, S9 | |
VMUL.F32 S14, S13, S17 | |
VSTR S13, [R2,#0x60] | |
VCVTR.S32.F32 S11, S14 | |
VSTR S11, [R1,#8] | |
} | |
} | |
while ( !_ZF ); | |
v42 = v6 + 168; | |
__asm { VSTR S15, [R7,#0x68] } | |
*(_DWORD *)(v6 + 16016) = v103; | |
do | |
{ | |
v43 = v18 + v42 - v6; | |
v44 = *(_DWORD *)(v43 + 14644); | |
v45 = *(_DWORD *)(v43 + 14680); | |
if ( v44 >= _R11 ) | |
{ | |
if ( v44 < v103 ) | |
{ | |
v46 = v6 + 15048; | |
v47 = 0; | |
while ( 1 ) | |
{ | |
v102 = v47 + 1; | |
v48 = *(_DWORD *)(v46 + 4); | |
v46 += 4; | |
if ( (v44 - *(_DWORD *)(v46 + 4)) * (v44 - v48) <= 0 ) | |
break; | |
++v47; | |
if ( v102 == 240 ) | |
goto LABEL_51; | |
} | |
*(_DWORD *)(v43 + 3816) = v47; | |
} | |
else | |
{ | |
*(_DWORD *)(v43 + 3816) = 240; | |
} | |
} | |
else | |
{ | |
*(_DWORD *)(v43 + 3816) = 0; | |
} | |
LABEL_51: | |
if ( v45 >= _R11 ) | |
{ | |
if ( v45 < v103 ) | |
{ | |
v49 = v6 + 15048; | |
v50 = 0; | |
while ( 1 ) | |
{ | |
v51 = *(_DWORD *)(v49 + 4); | |
v49 += 4; | |
v52 = v50 + 1; | |
if ( (v45 - *(_DWORD *)(v49 + 4)) * (v45 - v51) <= 0 ) | |
break; | |
++v50; | |
if ( v52 == 240 ) | |
goto LABEL_59; | |
} | |
*(_DWORD *)(v43 + 3852) = v50; | |
} | |
else | |
{ | |
*(_DWORD *)(v43 + 3852) = 240; | |
} | |
} | |
else | |
{ | |
*(_DWORD *)(v43 + 3852) = 0; | |
} | |
LABEL_59: | |
v42 += 4; | |
} | |
while ( v42 != v6 + 204 ); | |
_R6 = v6 + 4128; | |
awb_util_convert_to_grid(v6, *(_DWORD *)(v6 + 12908), *(_DWORD *)(v6 + 12912), v6 + 12916, v6 + 12920); | |
_R7 = v6 + 4192; | |
__asm | |
{ | |
VLDR S15, [R6,#0x1C] | |
VLDR S10, [R6,#0x18] | |
VLDR S12, [R7] | |
} | |
_R8 = v6 + 4160; | |
__asm | |
{ | |
VCVT.F32.S32 S0, S15 | |
VLDR S4, [R8,#0x1C] | |
VCVT.F32.S32 S1, S10 | |
VCVT.F32.S32 S2, S12 | |
VCVT.F32.S32 S3, S4 | |
} | |
sub_5D10(v6 + 288, v6 + 296); | |
_R0 = *(_DWORD *)(v6 + 4152); | |
if ( _R0 == *(_DWORD *)(v6 + 4156) ) | |
{ | |
v57 = *(_DWORD *)(v6 + 4188); | |
if ( v57 == *(_DWORD *)_R7 ) | |
{ | |
*(_DWORD *)(v6 + 296) = _R0; | |
*(_DWORD *)(v6 + 288) = 1; | |
*(_DWORD *)(v6 + 300) = v57; | |
} | |
} | |
_R6 = v6 + 4160; | |
__asm | |
{ | |
VMOV S0, R0 | |
VLDR S2, [R6,#0x10] | |
VLDR S18, [R6,#0x1C] | |
VCVT.F32.S32 S1, S2 | |
} | |
_R7 = v6 + 4192; | |
__asm | |
{ | |
VLDR S16, [R7,#0x14] | |
VCVT.F32.S32 S0, S0 | |
VCVT.F32.S32 S2, S18 | |
VCVT.F32.S32 S3, S16 | |
} | |
sub_5D10(v6 + 292, v6 + 2224); | |
v60 = *(_DWORD *)(v6 + 4152); | |
if ( v60 == *(_DWORD *)(v6 + 4176) ) | |
{ | |
v61 = *(_DWORD *)(v6 + 4188); | |
if ( v61 == *(_DWORD *)(v6 + 4212) ) | |
{ | |
*(_DWORD *)(v6 + 2224) = v60; | |
*(_DWORD *)(v6 + 292) = 1; | |
*(_DWORD *)(v6 + 2228) = v61; | |
} | |
} | |
_R6 = v6 + 4160; | |
_R7 = v6 + 4192; | |
__asm | |
{ | |
VLDR S6, [R6,#4] | |
VLDR S5, [R7,#8] | |
VLDR S7, [R6,#8] | |
VCVT.F32.S32 S1, S6 | |
VLDR S3, [R7,#0xC] | |
VCVT.F32.S32 S0, S7 | |
VCVT.F32.S32 S2, S3 | |
VCVT.F32.S32 S3, S5 | |
} | |
sub_5D10(v6 + 6272, v6 + 6276); | |
__asm | |
{ | |
VLDR S14, [R6,#0x10] | |
VLDR S15, [R7,#0x14] | |
} | |
_R9 = *(_DWORD *)(v6 + 4164) + *(_DWORD *)(v6 + 4168); | |
__asm { VMOV S8, R9 } | |
_R0 = *(_DWORD *)(v6 + 4200) + *(_DWORD *)(v6 + 4204); | |
__asm | |
{ | |
VMOV S13, R0 | |
VMOV.F32 S9, #0.5 | |
VCVT.F32.S32 S11, S13 | |
VCVT.F32.S32 S1, S8 | |
VMUL.F32 S2, S11, S9 | |
VMUL.F32 S0, S1, S9 | |
VCVT.F32.S32 S3, S15 | |
VCVT.F32.S32 S1, S14 | |
} | |
sub_5D10(v6 + 9356, v6 + 9360); | |
_R10 = *(_DWORD *)(v6 + 4160); | |
_R9 = *(_DWORD *)(v6 + 4196); | |
_R0 = (*(_DWORD *)(v6 + 4164) + 2 * *(_DWORD *)(v6 + 4160)) / 3; | |
__asm | |
{ | |
VMOV S12, R10 | |
VCVT.F32.S32 S16, S12 | |
VMOV S10, R0 | |
VCVT.F32.S32 S18, S10 | |
} | |
_R0 = (*(_DWORD *)(v6 + 4200) + 2 * _R9) / 3; | |
__asm | |
{ | |
VMOV S7, R9 | |
VCVT.F32.S32 S3, S7 | |
VMOV.F32 S1, S16 | |
VMOV S4, R0 | |
VCVT.F32.S32 S0, S4 | |
VCVTR.S32.F32 S2, S0 | |
VMOV.F32 S0, S18 | |
VCVT.F32.S32 S2, S2 | |
} | |
sub_5D10(v6 + 7300, v6 + 7304); | |
__asm | |
{ | |
VLDR S6, [R6] | |
VLDR S5, [R7,#4] | |
VLDR S8, [R7,#0x10] | |
VLDR S3, [R6,#0xC] | |
VCVT.F32.S32 S0, S6 | |
VCVT.F32.S32 S1, S3 | |
VCVT.F32.S32 S2, S5 | |
VCVT.F32.S32 S3, S8 | |
} | |
sub_5D10(v6 + 8328, v6 + 8332); | |
v70 = *(_DWORD *)(v6 + 4188); | |
v71 = *(_DWORD *)(v6 + 4176); | |
v72 = *(_DWORD *)(v6 + 4152); | |
v73 = v72 - v71; | |
if ( v72 == v71 ) | |
v73 = 1; | |
v74 = ((v70 - *(_DWORD *)(v6 + 4212)) << 8) / v73; | |
__asm { VMOV.F32 S2, #-1.0 } | |
v75 = *(_DWORD *)(v6 + 10388); | |
v76 = *(_DWORD *)(v6 + 10384); | |
*(_DWORD *)(v6 + 10392) = v74; | |
v77 = *(_DWORD *)(v6 + 4168); | |
v78 = *(_DWORD *)(v6 + 4196) + v75; | |
_R2 = v6 + 16064; | |
if ( v71 > v77 ) | |
v80 = v76 + v77; | |
else | |
v80 = v76 + v71; | |
v81 = v74 * v80; | |
v82 = 0; | |
*(_DWORD *)(v6 + 10396) = v78 - v81 / 256; | |
_R3 = v6 + 16000; | |
__asm | |
{ | |
VLDR S14, [R2,#0x10] | |
VLDR S13, [R3,#0x2C] | |
VLDR S1, [R3,#0x14] | |
VLDR S10, [R3,#0x38] | |
VSUB.F32 S15, S13, S1 | |
VLDR S9, [R2,#0x18] | |
VLDR S11, [R3,#0x34] | |
} | |
v84 = v6 + 15048; | |
v85 = v6 + 15048; | |
__asm | |
{ | |
VSUB.F32 S12, S14, S10 | |
VDIV.F32 S4, S12, S15 | |
VDIV.F32 S6, S2, S4 | |
VMOV.F32 S0, S14 | |
VMOV.F32 S7, S9 | |
VMLS.F32 S0, S4, S13 | |
VMLS.F32 S7, S6, S11 | |
VSUB.F32 S5, S4, S6 | |
VSUB.F32 S3, S7, S0 | |
VDIV.F32 S8, S3, S5 | |
VMLA.F32 S0, S4, S8 | |
VSUB.F32 S11, S11, S8 | |
VSUB.F32 S9, S9, S0 | |
VADD.F32 S1, S1, S11 | |
VADD.F32 S10, S10, S9 | |
VMUL.F32 S12, S1, S17 | |
VMUL.F32 S17, S10, S17 | |
VADD.F32 S13, S13, S11 | |
VADD.F32 S14, S14, S9 | |
VSTR S13, [R7,#0x7C] | |
VCVTR.S32.F32 S15, S12 | |
VSTR S14, [R6] | |
VCVTR.S32.F32 S17, S17 | |
VMOV R10, S15 | |
VMOV R12, S17 | |
} | |
while ( 1 ) | |
{ | |
v88 = *(_DWORD *)(v85 + 4); | |
v85 += 4; | |
v89 = v82 + 1; | |
if ( (_R10 - *(_DWORD *)(v85 + 4)) * (_R10 - v88) <= 0 ) | |
break; | |
++v82; | |
if ( v89 == 241 ) | |
{ | |
v82 = 0; | |
break; | |
} | |
} | |
v90 = 0; | |
while ( 1 ) | |
{ | |
v91 = *(_DWORD *)(v84 + 4); | |
v84 += 4; | |
v92 = v90 + 1; | |
if ( (_R12 - *(_DWORD *)(v84 + 4)) * (_R12 - v91) <= 0 ) | |
break; | |
++v90; | |
if ( v92 == 241 ) | |
{ | |
v90 = 0; | |
break; | |
} | |
} | |
v93 = *(_DWORD *)(v6 + 292); | |
v94 = v90 - v70; | |
*(_DWORD *)(v6 + 10976) = v93; | |
v95 = 0; | |
while ( v95 < v93 && v95 != 241 ) | |
{ | |
v96 = v18 + 8 * v95; | |
v97 = v18 + 4 * v95++; | |
*(_DWORD *)(v97 + 10812) = v82 - v72 + *(_DWORD *)(v96 + 2056); | |
*(_DWORD *)(v97 + 11776) = v94 + *(_DWORD *)(v96 + 2060); | |
} | |
__asm { VMOV.F32 S7, #1.0 } | |
_R1 = v6 + 17152; | |
_R0 = v6 + 16000; | |
__asm | |
{ | |
VLDR S2, [R1,#4] | |
VLDR S4, [R0,#0x20] | |
VLDR S6, [R1,#8] | |
VSTR S4, [R1,#0xC] | |
} | |
_R2 = v6 + 16064; | |
__asm | |
{ | |
VLDR S0, [R2,#4] | |
VSTR S2, [R1,#0x14] | |
VSTR S0, [R1,#0x10] | |
VSTR S6, [R1,#0x18] | |
} | |
result = 128; | |
*(_DWORD *)(v6 + 12928) = 0; | |
*(_DWORD *)(v6 + 40) = 128; | |
*(_DWORD *)(v6 + 44) = 128; | |
*(_DWORD *)(v6 + 4) = 0; | |
*(_DWORD *)(v6 + 8) = 0; | |
*(_DWORD *)(v6 + 12) = 0; | |
*(_DWORD *)(v6 + 20584) = 0; | |
__asm { VSTR S7, [R4,#0x30] } | |
return result; | |
} | |
//----- (00007B78) -------------------------------------------------------- | |
int __fastcall awb_util_history_find_last_pos(int a1) | |
{ | |
int v1; // r3@1 | |
int result; // r0@1 | |
int v3; // r0@2 | |
v1 = a1 + 10752; | |
result = *(_DWORD *)(a1 + 10764); | |
if ( result ) | |
{ | |
v3 = *(_DWORD *)(v1 + 8); | |
if ( v3 ) | |
result = v3 - 1; | |
else | |
result = 14; | |
} | |
return result; | |
} | |
//----- (00007B8C) -------------------------------------------------------- | |
unsigned int __fastcall awb_util_aec_history_update(int a1, int a2) | |
{ | |
int v2; // r4@1 | |
int v3; // r3@1 | |
int v4; // r1@1 | |
signed int v5; // r2@1 | |
unsigned int result; // r0@3 | |
v2 = a2 + 10944; | |
v3 = *(_DWORD *)(a2 + 10968); | |
v4 = a2 + 8 * (v3 + 1325); | |
*(_DWORD *)(v4 + 168) = *(_DWORD *)(a1 + 240); | |
*(_DWORD *)(v4 + 172) = *(_DWORD *)(a1 + 840); | |
v5 = *(_DWORD *)(v2 + 28); | |
if ( v5 <= 24 ) | |
*(_DWORD *)(v2 + 28) = v5 + 1; | |
result = (v3 + 1) / 0x19u; | |
*(_DWORD *)(v2 + 24) = (v3 + 1) % 0x19u; | |
return result; | |
} | |
//----- (00007BC2) -------------------------------------------------------- | |
int __fastcall awb_util_convert_to_grid(int a1, int a2, int a3, int a4, int a5) | |
{ | |
int v5; // r4@1 | |
int v6; // r5@1 | |
unsigned __int8 v7; // nf@1 | |
unsigned __int8 v8; // vf@1 | |
int v9; // r5@1 | |
int v10; // r6@2 | |
int v11; // t1@4 | |
int result; // r0@8 | |
int v13; // r3@8 | |
int v14; // r3@8 | |
int v15; // t1@11 | |
v5 = a1 + 15048; | |
v6 = *(_DWORD *)(a1 + 15052); | |
v8 = __OFSUB__(a2, v6); | |
v7 = a2 - v6 < 0; | |
v9 = 0; | |
if ( !(v7 ^ v8) ) | |
{ | |
v10 = a1 + 15048; | |
while ( 1 ) | |
{ | |
v11 = *(_DWORD *)(v10 + 4); | |
v10 += 4; | |
if ( a2 >= v11 && a2 < *(_DWORD *)(v10 + 4) ) | |
break; | |
++v9; | |
if ( v9 == 240 ) | |
goto LABEL_8; | |
} | |
} | |
*(_DWORD *)a4 = v9; | |
LABEL_8: | |
result = a1 + 15040; | |
v13 = *(_DWORD *)(result + 12); | |
v8 = __OFSUB__(a3, v13); | |
v7 = a3 - v13 < 0; | |
v14 = 0; | |
if ( !(v7 ^ v8) ) | |
{ | |
while ( 1 ) | |
{ | |
v15 = *(_DWORD *)(v5 + 4); | |
v5 += 4; | |
if ( a3 >= v15 ) | |
{ | |
result = *(_DWORD *)(v5 + 4); | |
if ( a3 < result ) | |
break; | |
} | |
++v14; | |
if ( v14 == 240 ) | |
return result; | |
} | |
} | |
*(_DWORD *)a5 = v14; | |
return result; | |
} | |
//----- (00007C28) -------------------------------------------------------- | |
signed int __fastcall awb_set_bestshot_mode(int a1, int a2, unsigned int a3) | |
{ | |
unsigned int v3; // r5@1 | |
int v7; // r2@1 | |
int v8; // r3@2 | |
int v9; // r1@2 | |
int v13; // r1@14 | |
int v14; // r2@14 | |
signed int result; // r0@16 | |
v3 = a3; | |
_CF = a3 >= 0x15; | |
_ZF = a3 == 21; | |
_R4 = a2; | |
v7 = *(_DWORD *)(a1 + 76); | |
if ( !_ZF & _CF ) | |
{ | |
result = -1; | |
} | |
else | |
{ | |
v8 = a2 + 20480; | |
v9 = *(_DWORD *)(a2 + 20584); | |
if ( v9 != v3 ) | |
{ | |
if ( !v9 ) | |
{ | |
*(_DWORD *)(v8 + 100) = *(_DWORD *)(a1 + 1056); | |
__asm | |
{ | |
VLDR S15, [R4,#0x30] | |
VSTR S15, [R3,#0x60] | |
} | |
} | |
if ( !v3 ) | |
{ | |
_R6 = _R4 + 20480; | |
result = awb_set_current_wb(a1, _R4, *(_DWORD *)(_R4 + 20580)); | |
__asm | |
{ | |
VLDR S0, [R6,#0x60] | |
VSTR S0, [R4,#0x30] | |
} | |
goto LABEL_19; | |
} | |
if ( v3 == 3 ) | |
{ | |
_R2 = v7 + 2148; | |
} | |
else | |
{ | |
if ( v3 != 4 ) | |
{ | |
__asm | |
{ | |
VMOV.F32 S1, #1.0 | |
VSTR S1, [R4,#0x30] | |
} | |
if ( _ZF ) | |
{ | |
v14 = 4; | |
v13 = _R4; | |
} | |
else | |
{ | |
if ( v3 != 13 && v3 != 5 ) | |
goto LABEL_17; | |
v13 = _R4; | |
v14 = 6; | |
} | |
LABEL_16: | |
result = awb_set_current_wb(a1, v13, v14); | |
LABEL_19: | |
*(_DWORD *)(_R4 + 20584) = v3; | |
return result; | |
} | |
_R2 = v7 + 2152; | |
} | |
__asm | |
{ | |
VLDR S2, [R2] | |
VSTR S2, [R4,#0x30] | |
} | |
LABEL_17: | |
v13 = _R4; | |
v14 = 1; | |
goto LABEL_16; | |
} | |
result = 0; | |
} | |
return result; | |
} | |
//----- (00007CC0) -------------------------------------------------------- | |
int __fastcall awb_self_cal_data_init(int result, int a2) | |
{ | |
int v3; // r6@2 | |
signed int v11; // r5@8 | |
signed int v12; // r4@13 | |
signed int v13; // r7@50 | |
signed int v14; // r0@52 | |
int v15; // r2@65 | |
int v20; // r1@72 | |
int v21; // r1@77 | |
signed int v22; // r3@79 | |
int v23; // r1@79 | |
int v24; // r4@81 | |
if ( !*(_DWORD *)a2 ) | |
{ | |
v24 = a2 + 20528; | |
memset((void *)(a2 + 20528), 0, 0x30u); | |
__asm { VMOV.F32 S15, #1.0 } | |
result = 1; | |
*(_DWORD *)(v24 + 44) = 1; | |
__asm | |
{ | |
VSTR S15, [R4,#0x24] | |
VSTR S15, [R4,#0x28] | |
} | |
return result; | |
} | |
_R3 = a2 + 20528; | |
v3 = *(_DWORD *)(a2 + 20536); | |
if ( !v3 ) | |
{ | |
__asm | |
{ | |
VMOV.F32 S1, #1.0 | |
VLDR S0, =0.0 | |
VSTR S0, [R4,#0x30] | |
VSTR S0, [R3,#4] | |
VSTR S0, [R3,#0xC] | |
VSTR S0, [R3,#0x10] | |
} | |
*(_DWORD *)(a2 + 20548) = (unsigned __int8)v3; | |
__asm | |
{ | |
VSTR S0, [R3,#0x18] | |
VSTR S0, [R3,#0x1C] | |
} | |
*(_DWORD *)(a2 + 20560) = (unsigned __int8)v3; | |
__asm | |
{ | |
VSTR S1, [R3,#0x24] | |
VSTR S1, [R3,#0x28] | |
} | |
} | |
_R4 = a2 + 20480; | |
if ( *(_DWORD *)(a2 + 20572) ) | |
{ | |
_R2 = *(_DWORD *)(result + 76); | |
result = _R2 + 2368; | |
_R2 += 2372; | |
__asm | |
{ | |
VLDR S13, [R0] | |
VLDR S12, [R2] | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
_R2 = a2 + 16000; | |
__asm | |
{ | |
VLDR S10, [R3,#0x24] | |
VLDR S7, [R2,#0x2C] | |
VLDR S21, [R2,#0x14] | |
VMUL.F32 S22, S10, S7 | |
} | |
result = a2 + 16064; | |
__asm | |
{ | |
VLDR S9, [R3,#0x28] | |
VLDR S6, [R0,#0x10] | |
VLDR S2, [R2,#0x38] | |
VLDR S20, [R2,#0x34] | |
VLDR S1, [R0,#0x18] | |
VLDR S16, [R3,#0x10] | |
VLDR S3, [R3,#0x1C] | |
VMUL.F32 S21, S10, S21 | |
VCMP.F32 S21, S22 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_ZF ) | |
{ | |
__asm | |
{ | |
VMUL.F32 S0, S9, S2 | |
VLDR S14, [R3,#4] | |
VLDR S11, [R4,#0x30] | |
VLDR S23, [R3,#0x18] | |
VLDR D16, =0.0005 | |
VMUL.F32 S5, S9, S6 | |
VSUB.F32 S4, S21, S22 | |
VSUB.F32 S18, S0, S5 | |
VDIV.F32 S15, S18, S4 | |
VMOV.F32 S2, S14 | |
VMOV.F32 S8, S3 | |
VMLS.F32 S2, S15, S11 | |
VNMLS.F32 S8, S15, S23 | |
VADD.F32 S17, S8, S2 | |
VMOV.F32 S8, #1.0 | |
VMOV.F32 S4, S8 | |
VMLA.F32 S4, S15, S15 | |
VMUL.F32 S24, S17, S17 | |
VDIV.F32 S17, S24, S4 | |
VCVT.F64.F32 D17, S17 | |
VCMPE.F64 D17, D16 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
__asm | |
{ | |
VCMPE.F32 S23, S11 | |
VMRS APSR_nzcv, FPSCR | |
} | |
v11 = !_ZF & _CF ? 0 : 1; | |
} | |
else | |
{ | |
v11 = 1; | |
} | |
__asm | |
{ | |
VMOV.F32 S17, S16 | |
VLDR S24, [R3,#0xC] | |
VNMLS.F32 S17, S15, S24 | |
VADD.F32 S2, S17, S2 | |
VMUL.F32 S2, S2, S2 | |
VDIV.F32 S4, S2, S4 | |
VCVT.F64.F32 D18, S4 | |
VCMPE.F64 D18, D16 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
__asm | |
{ | |
VCMPE.F32 S24, S11 | |
VMRS APSR_nzcv, FPSCR | |
} | |
v12 = _NF ^ _VF ? 0 : 1; | |
} | |
else | |
{ | |
v12 = 1; | |
} | |
__asm | |
{ | |
VCMP.F32 S15, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_ZF ) | |
{ | |
__asm | |
{ | |
VMOV.F32 S19, #-1.0 | |
VDIV.F32 S19, S19, S15 | |
VSUB.F32 S25, S15, S19 | |
VCMP.F32 S25, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_ZF ) | |
{ | |
__asm | |
{ | |
VMOV.F32 S2, S1 | |
VLDR D21, =0.15 | |
VLDR D23, =0.85 | |
VLDR D26, =0.95 | |
VMOV.F32 S26, S14 | |
VMLS.F32 S2, S15, S20 | |
VMLS.F32 S26, S11, S19 | |
VSUB.F32 S4, S26, S2 | |
VDIV.F32 S26, S4, S25 | |
VCVT.F64.F32 D20, S5 | |
VMUL.F64 D22, D20, D21 | |
VCVT.F64.F32 D19, S0 | |
VCVT.F64.F32 D25, S18 | |
VMLA.F64 D22, D19, D23 | |
VMLA.F32 S2, S15, S26 | |
VSUB.F32 S4, S11, S26 | |
VMUL.F64 D27, D25, D26 | |
VSUB.F32 S26, S16, S3 | |
VCVT.F64.F32 D24, S26 | |
VCMPE.F64 D24, D27 | |
VCVT.F32.F64 S17, D22 | |
VMRS APSR_nzcv, FPSCR | |
VSUB.F32 S2, S14, S2 | |
} | |
if ( _NF ) | |
goto LABEL_90; | |
__asm | |
{ | |
VLDR D28, =1.05 | |
VMUL.F64 D29, D25, D28 | |
VCMPE.F64 D24, D29 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) | |
|| *(_DWORD *)(a2 + 20548) <= 14 | |
|| (result = *(_DWORD *)(a2 + 20560), result <= 14) | |
|| v12 | |
|| v11 ) | |
{ | |
LABEL_90: | |
__asm | |
{ | |
VCMPE.F32 S3, S5 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
__asm | |
{ | |
VCMPE.F32 S14, S17 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
__asm | |
{ | |
VSUB.F32 S3, S3, S5 | |
VADD.F32 S5, S3, S14 | |
VCVT.F64.F32 D18, S2 | |
VSUB.F32 S17, S5, S17 | |
VMOV.F32 S2, #0.5 | |
VMUL.F32 S17, S17, S2 | |
VMOV.F64 D26, #0.5 | |
VCVT.F64.F32 D27, S17 | |
VMUL.F64 D25, D27, D26 | |
} | |
goto LABEL_50; | |
} | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VCMP.F32 S15, S19 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _ZF ) | |
return result; | |
__asm | |
{ | |
VMOV.F32 S18, S5 | |
VMOV.F32 S26, S1 | |
VMLS.F32 S18, S15, S22 | |
VMLS.F32 S26, S20, S19 | |
VSUB.F32 S19, S26, S18 | |
VDIV.F32 S25, S19, S25 | |
VSUB.F32 S20, S20, S25 | |
VADD.F32 S22, S22, S20 | |
VADD.F32 S21, S21, S20 | |
VSUB.F32 S20, S23, S22 | |
VSUB.F32 S21, S24, S21 | |
VMLA.F32 S18, S15, S25 | |
VABS.F32 S22, S20 | |
VCVT.F64.F32 D30, S22 | |
VABS.F32 S22, S21 | |
VMOV.F64 D20, #2.5 | |
VCVT.F64.F32 D31, S22 | |
VMUL.F64 D17, D31, D20 | |
VSUB.F32 S18, S1, S18 | |
VADD.F32 S19, S0, S18 | |
VADD.F32 S18, S5, S18 | |
VCMPE.F64 D30, D17 | |
VSUB.F32 S19, S16, S19 | |
VMRS APSR_nzcv, FPSCR | |
VSUB.F32 S18, S3, S18 | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
__asm | |
{ | |
VSUB.F64 D16, D30, D31 | |
VLDR D19, =0.01 | |
VABS.F64 D18, D16 | |
VCMPE.F64 D18, D19 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
goto LABEL_91; | |
} | |
__asm | |
{ | |
VABS.F32 S22, S18 | |
VCVT.F64.F32 D23, S22 | |
VABS.F32 S22, S19 | |
VCVT.F64.F32 D24, S22 | |
VMUL.F64 D21, D24, D20 | |
VCMPE.F64 D23, D21 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
goto LABEL_92; | |
__asm | |
{ | |
VSUB.F64 D22, D23, D24 | |
VLDR D26, =0.01 | |
VABS.F64 D25, D22 | |
VCMPE.F64 D25, D26 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
LABEL_92: | |
__asm | |
{ | |
VMUL.F64 D27, D30, D20 | |
VCMPE.F64 D31, D27 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
goto LABEL_93; | |
__asm | |
{ | |
VSUB.F64 D28, D31, D30 | |
VLDR D30, =0.01 | |
VABS.F64 D29, D28 | |
VCMPE.F64 D29, D30 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
LABEL_93: | |
__asm | |
{ | |
VMUL.F64 D31, D23, D20 | |
VCMPE.F64 D24, D31 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
goto LABEL_94; | |
__asm | |
{ | |
VSUB.F64 D20, D24, D23 | |
VLDR D16, =0.01 | |
VABS.F64 D17, D20 | |
VCMPE.F64 D17, D16 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
LABEL_94: | |
__asm { VMOV.F32 S3, #0.25 } | |
v13 = 0; | |
v14 = 2; | |
v12 = 0; | |
v11 = 0; | |
__asm | |
{ | |
VADD.F32 S0, S21, S20 | |
VADD.F32 S18, S19, S18 | |
VMUL.F32 S20, S0, S3 | |
VMUL.F32 S1, S18, S3 | |
VMOV.F32 S5, #0.5 | |
VMLA.F32 S20, S4, S5 | |
VMLA.F32 S1, S2, S5 | |
VMOV.F32 S4, S20 | |
VMOV.F32 S2, S1 | |
} | |
LABEL_53: | |
__asm | |
{ | |
VDIV.F32 S4, S4, S7 | |
VDIV.F32 S6, S2, S6 | |
VADD.F32 S7, S4, S8 | |
VMUL.F32 S10, S7, S10 | |
VADD.F32 S0, S6, S8 | |
VCMPE.F32 S10, S13 | |
VMUL.F32 S9, S0, S9 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
__asm | |
{ | |
VCMP.F32 S10, S12 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F32 S10, S12 } | |
} | |
else | |
{ | |
__asm { VMOV.F32 S10, S13 } | |
} | |
if ( v14 == 1 && !v13 ) | |
{ | |
__asm | |
{ | |
VDIV.F32 S8, S8, S15 | |
VMOV.F64 D30, #1.0 | |
VCVT.F64.F32 D29, S13 | |
VCVT.F64.F32 D16, S12 | |
VABS.F32 S15, S8 | |
VSUB.F64 D31, D29, D30 | |
VSUB.F64 D19, D16, D30 | |
VCVT.F64.F32 D28, S15 | |
VMOV.F64 D20, D30 | |
VMLA.F64 D30, D19, D28 | |
VMLA.F64 D20, D31, D28 | |
VCVT.F32.F64 S12, D30 | |
VCVT.F32.F64 S13, D20 | |
} | |
} | |
__asm | |
{ | |
VCMPE.F32 S9, S13 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
__asm | |
{ | |
VCMPE.F32 S9, S12 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F32 S13, S12 } | |
else | |
__asm { VMOVPL.F32 S13, S9 } | |
} | |
v15 = 0; | |
do | |
{ | |
_R7 = a2 + 168 + v15; | |
v15 += 4; | |
_R12 = _R7 + 15808; | |
__asm | |
{ | |
VLDR S1, [R12,#0x2C] | |
VMUL.F32 S3, S1, S10 | |
} | |
_R7 += 15872; | |
__asm | |
{ | |
VSTR S3, [R12,#0x2C] | |
VLDR S5, [R7,#0x10] | |
VMUL.F32 S2, S5, S13 | |
VSTR S2, [R7,#0x10] | |
} | |
} | |
while ( !_ZF ); | |
_R2 = a2 + 16000; | |
__asm | |
{ | |
VLDR S6, [R2,#0x34] | |
VMUL.F32 S0, S6, S10 | |
VSTR S0, [R2,#0x34] | |
} | |
_R2 = a2 + 16064; | |
__asm | |
{ | |
VLDR S4, [R2,#0x18] | |
VMUL.F32 S7, S4, S13 | |
VSTR S7, [R2,#0x18] | |
VSTR S10, [R3,#0x24] | |
VSTR S13, [R3,#0x28] | |
} | |
if ( _ZF ) | |
{ | |
if ( v14 != 2 ) | |
goto LABEL_73; | |
} | |
else if ( v14 == 1 ) | |
{ | |
*(_DWORD *)(a2 + 20536) = 50; | |
LABEL_73: | |
if ( v11 ) | |
{ | |
__asm | |
{ | |
VSTR S11, [R3,#0x18] | |
VSTR S14, [R3,#0x1C] | |
} | |
*(_DWORD *)(a2 + 20560) = v11; | |
} | |
if ( v12 ) | |
{ | |
__asm | |
{ | |
VSTR S11, [R3,#0xC] | |
VSTR S14, [R3,#0x10] | |
} | |
*(_DWORD *)(a2 + 20548) = v12; | |
} | |
result = *(_DWORD *)(a2 + 20560); | |
v21 = a2 + 20480; | |
if ( result > 15 ) | |
*(_DWORD *)(_R3 + 32) = 15; | |
v22 = *(_DWORD *)(v21 + 68); | |
v23 = v21 + 48; | |
if ( v22 > 15 ) | |
{ | |
result = 15; | |
*(_DWORD *)(v23 + 20) = 15; | |
} | |
return result; | |
} | |
v20 = a2 + 20528; | |
result = 500; | |
*(_DWORD *)(v20 + 32) = 500; | |
*(_DWORD *)(v20 + 20) = 500; | |
*(_DWORD *)(v20 + 8) = 500; | |
return result; | |
} | |
} | |
v12 = 1; | |
v11 = 0; | |
} | |
else | |
{ | |
LABEL_91: | |
v12 = 0; | |
v11 = 1; | |
} | |
__asm | |
{ | |
VCMPE.F32 S3, S5 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
__asm | |
{ | |
VCMPE.F32 S14, S17 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
__asm | |
{ | |
VCVT.F64.F32 D26, S2 | |
VSUB.F32 S2, S3, S5 | |
VADD.F32 S0, S2, S14 | |
VMOV.F32 S1, #0.5 | |
VSUB.F32 S17, S0, S17 | |
VMUL.F32 S17, S17, S1 | |
VMOV.F64 D18, #0.5 | |
VCVT.F64.F32 D19, S17 | |
VMUL.F64 D25, D19, D18 | |
} | |
goto LABEL_50; | |
} | |
} | |
} | |
__asm | |
{ | |
VCMPE.F32 S14, S1 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF ) | |
goto LABEL_95; | |
__asm | |
{ | |
VCMPE.F32 S3, S5 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF ) | |
{ | |
LABEL_95: | |
v13 = 0; | |
goto LABEL_52; | |
} | |
__asm | |
{ | |
VSUB.F32 S3, S3, S5 | |
VLDR D24, =0.33 | |
VLDR D22, =0.6 | |
VLDR D26, =0.4 | |
VADD.F32 S5, S3, S14 | |
VCVT.F64.F32 D18, S2 | |
VSUB.F32 S2, S5, S1 | |
VADD.F32 S16, S2, S16 | |
VSUB.F32 S0, S16, S0 | |
VCVT.F64.F32 D23, S0 | |
VMUL.F64 D0, D23, D24 | |
VCVT.F32.F64 S1, D0 | |
VCVT.F64.F32 D21, S1 | |
VMUL.F64 D25, D21, D22 | |
} | |
LABEL_50: | |
__asm { VMLA.F64 D25, D18, D26 } | |
v13 = 1; | |
__asm { VCVT.F32.F64 S2, D25 } | |
LABEL_52: | |
v14 = 1; | |
goto LABEL_53; | |
} | |
} | |
} | |
} | |
} | |
return result; | |
} | |
//----- (00008290) -------------------------------------------------------- | |
FILE *__fastcall awb_self_cal_init(int a1, int a2) | |
{ | |
int v2; // r5@1 | |
FILE *result; // r0@1 | |
FILE *v4; // r4@1 | |
char v5; // [sp+4h] [bp-64h]@1 | |
int v6; // [sp+54h] [bp-14h]@1 | |
v2 = a2; | |
v6 = _stack_chk_guard; | |
memset(&v5, 0, 0x50u); | |
strcpy(&v5, "/data/awbautocal.bin"); | |
result = fopen(&v5, "rb"); | |
v4 = result; | |
if ( result ) | |
{ | |
_android_log_print(6, 0, "reading awb auto cal from efs\n"); | |
fread((void *)(v2 + 20528), 0x30u, 1u, v4); | |
fclose(v4); | |
result = (FILE *)1; | |
*(_DWORD *)v2 = 1; | |
} | |
else | |
{ | |
*(_DWORD *)v2 = 0; | |
} | |
if ( v6 != _stack_chk_guard ) | |
_stack_chk_fail(result); | |
return result; | |
} | |
// 1AEC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...); | |
// 1B4C: using guessed type int __fastcall _stack_chk_fail(_DWORD); | |
//----- (00008314) -------------------------------------------------------- | |
int __fastcall awb_self_cal_update(int a1, int a2, int _R2, int _R3) | |
{ | |
int result; // r0@1 | |
__asm { VMOV S14, R2 } | |
_R2 = a2 + 20480; | |
__asm { VMOV S15, R3 } | |
_R3 = _R2 + 48; | |
__asm | |
{ | |
VLDR S7, [R3,#8] | |
VCVT.F32.S32 S13, S7 | |
VLDR S12, [R2,#0x30] | |
VLDR S11, [R3,#4] | |
VMOV R4, S7 | |
} | |
result = _R4 + 1; | |
__asm { VMOV S2, R0 } | |
*(_DWORD *)(_R3 + 8) = _R4 + 1; | |
__asm | |
{ | |
VMOV.F32 S8, S14 | |
VMOV.F32 S10, S15 | |
VMLA.F32 S8, S13, S12 | |
VMLA.F32 S10, S13, S11 | |
VCVT.F32.S32 S3, S2 | |
VDIV.F32 S4, S8, S3 | |
VDIV.F32 S3, S10, S3 | |
VSTR S4, [R2,#0x30] | |
} | |
_R2 = *(_DWORD *)(a2 + 20548); | |
__asm { VSTR S3, [R3,#4] } | |
if ( _R2 ) | |
{ | |
__asm | |
{ | |
VLDR S9, [R3,#0x10] | |
VCMPE.F32 S15, S9 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !(_NF ^ _VF) ) | |
{ | |
__asm | |
{ | |
VMOV S5, R2 | |
VCVT.F32.S32 S6, S5 | |
VLDR S7, [R3,#0xC] | |
} | |
result = _R2 + 1; | |
__asm { VMOV S8, R0 } | |
*(_DWORD *)(_R3 + 20) = _R2 + 1; | |
__asm | |
{ | |
VMOV.F32 S12, S14 | |
VMOV.F32 S10, S15 | |
VMLA.F32 S12, S6, S7 | |
VMLA.F32 S10, S9, S6 | |
VCVT.F32.S32 S0, S8 | |
VDIV.F32 S11, S12, S0 | |
VDIV.F32 S2, S10, S0 | |
VSTR S11, [R3,#0xC] | |
VSTR S2, [R3,#0x10] | |
} | |
} | |
} | |
else | |
{ | |
__asm { VSTR S4, [R3,#0xC] } | |
*(_DWORD *)(_R3 + 20) = 1; | |
__asm { VSTR S3, [R3,#0x10] } | |
} | |
_R1 = a2 + 20528; | |
_R3 = *(_DWORD *)(_R1 + 32); | |
if ( _R3 ) | |
{ | |
__asm | |
{ | |
VLDR S3, [R1,#0x1C] | |
VCMPE.F32 S15, S3 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_ZF & _CF ) | |
return result; | |
__asm | |
{ | |
VMOV S13, R3 | |
VCVT.F32.S32 S4, S13 | |
VLDR S9, [R1,#0x18] | |
} | |
result = _R3 + 1; | |
__asm { VMOV S5, R0 } | |
*(_DWORD *)(_R1 + 32) = _R3 + 1; | |
__asm | |
{ | |
VMLA.F32 S14, S4, S9 | |
VMLA.F32 S15, S3, S4 | |
VCVT.F32.S32 S6, S5 | |
VDIV.F32 S14, S14, S6 | |
VDIV.F32 S3, S15, S6 | |
VSTR S14, [R1,#0x18] | |
} | |
} | |
else | |
{ | |
__asm { VSTR S4, [R1,#0x18] } | |
*(_DWORD *)(_R1 + 32) = 1; | |
} | |
__asm { VSTR S3, [R1,#0x1C] } | |
return result; | |
} | |
//----- (00008412) -------------------------------------------------------- | |
signed int __fastcall sub_8412(int a1) | |
{ | |
signed int result; // r0@2 | |
if ( (unsigned int)(a1 - 3) <= 1 || a1 == 7 ) | |
result = 0; | |
else | |
result = -1; | |
return result; | |
} | |
//----- (00008428) -------------------------------------------------------- | |
unsigned int __fastcall sub_8428(int a1, int a2) | |
{ | |
int v6; // r2@1 | |
int v7; // r3@1 | |
signed int v9; // r3@1 | |
unsigned int result; // r0@3 | |
__asm | |
{ | |
VLDR D17, =1000.0 | |
VMOV.F64 D16, #0.5 | |
} | |
v6 = *(_DWORD *)(a2 + 10760); | |
v7 = a2 + 24 * v6 + 10368; | |
_R5 = a2 + 17280; | |
__asm | |
{ | |
VLDR S15, [R5,#0x70] | |
VCVT.F64.F32 D18, S15 | |
VMOV.F64 D19, D16 | |
VMLA.F64 D19, D18, D17 | |
VCVTR.S32.F64 S1, D19 | |
VSTR S1, [R3,#0x20] | |
VLDR S2, [R5,#0x74] | |
VCVT.F64.F32 D2, S2 | |
VMLA.F64 D16, D2, D17 | |
VCVTR.S32.F64 S3, D16 | |
VSTR S3, [R3,#0x24] | |
} | |
*(_DWORD *)(v7 + 52) = *(_DWORD *)(a2 + 17416); | |
*(_DWORD *)(v7 + 40) = *(_DWORD *)(a1 + 240); | |
*(_DWORD *)(v7 + 48) = 0; | |
*(_DWORD *)(v7 + 44) = *(_DWORD *)(a2 + 84); | |
v9 = *(_DWORD *)(a2 + 10764); | |
if ( v9 <= 14 ) | |
*(_DWORD *)(a2 + 10764) = v9 + 1; | |
result = (v6 + 1) / 0xFu; | |
*(_DWORD *)(a2 + 10760) = (v6 + 1) % 0xFu; | |
return result; | |
} | |
//----- (000084A8) -------------------------------------------------------- | |
int __fastcall sub_84A8(int a1, int a2, int a3, int a4) | |
{ | |
int v4; // r9@1 | |
int v5; // r10@1 | |
int v6; // r11@1 | |
int v7; // r4@1 | |
int v8; // r6@1 | |
int v9; // r8@1 | |
int v10; // r7@1 | |
int v11; // r5@1 | |
int v12; // t1@2 | |
int v13; // r2@2 | |
int v14; // r2@11 | |
signed int i; // r3@13 | |
int v16; // r2@14 | |
signed int v17; // r3@19 | |
int v18; // r2@20 | |
int v19; // r2@25 | |
int j; // r3@25 | |
int v21; // t1@26 | |
int v22; // r1@26 | |
signed int v23; // r3@31 | |
int v24; // r2@31 | |
int v25; // r8@31 | |
int v26; // r0@32 | |
int v27; // r9@40 | |
signed int v28; // r3@40 | |
int v29; // r8@40 | |
int v30; // r0@41 | |
int v31; // r0@41 | |
int v32; // r3@48 | |
int v33; // r12@48 | |
int v34; // r0@48 | |
int v35; // r1@49 | |
int v36; // r2@49 | |
int v37; // r3@53 | |
int v38; // r12@53 | |
int v39; // r4@53 | |
int v40; // r0@53 | |
signed int v41; // r3@53 | |
int result; // r0@53 | |
int v43; // r2@54 | |
int v44; // r1@54 | |
int v45; // r2@54 | |
int v46; // [sp+4h] [bp-2Ch]@13 | |
int v47; // [sp+4h] [bp-2Ch]@19 | |
int v48; // [sp+4h] [bp-2Ch]@25 | |
v4 = a2 + 4148; | |
v5 = a2 + 17416; | |
v6 = a1; | |
v7 = a2; | |
v8 = a3; | |
v9 = 0; | |
v10 = a4; | |
*(_DWORD *)(a2 + 17196) = 0x3FFFFFFF; | |
v11 = a2 + 17196; | |
do | |
{ | |
v12 = *(_DWORD *)(v4 + 4); | |
v4 += 4; | |
v13 = (v10 - *(_DWORD *)(v4 + 36)) * (v10 - *(_DWORD *)(v4 + 36)) + (v8 - v12) * (v8 - v12); | |
if ( v13 >= *(_DWORD *)v11 ) | |
{ | |
if ( v13 == *(_DWORD *)v11 && !sub_8412(v9) && (*(_DWORD *)v5 == 2 || *(_DWORD *)v5 == 5) ) | |
*(_DWORD *)v5 = v9; | |
} | |
else | |
{ | |
*(_DWORD *)v5 = v9; | |
*(_DWORD *)v11 = v13; | |
} | |
++v9; | |
} | |
while ( v9 != 9 ); | |
if ( *(_DWORD *)(v6 + 152) ) | |
{ | |
v14 = (v10 - *(_DWORD *)(v7 + 12920)) * (v10 - *(_DWORD *)(v7 + 12920)) | |
+ (v8 - *(_DWORD *)(v7 + 12916)) * (v8 - *(_DWORD *)(v7 + 12916)); | |
if ( v14 < *(_DWORD *)(v7 + 17196) ) | |
{ | |
*(_DWORD *)(v7 + 17416) = 0; | |
*(_DWORD *)(v7 + 17196) = v14; | |
} | |
} | |
v46 = *(_DWORD *)(v7 + 288) - 1; | |
for ( i = 1; i < v46 && i != 241; ++i ) | |
{ | |
v16 = (v10 - *(_DWORD *)(v7 + 168 + 8 * i + 132)) * (v10 - *(_DWORD *)(v7 + 168 + 8 * i + 132)) | |
+ (v8 - *(_DWORD *)(v7 + 168 + 8 * i + 128)) * (v8 - *(_DWORD *)(v7 + 168 + 8 * i + 128)); | |
if ( v16 < *(_DWORD *)v11 ) | |
{ | |
*(_DWORD *)v11 = v16; | |
*(_DWORD *)(v7 + 17416) = 9; | |
*(_DWORD *)(v7 + 17320) = 1; | |
} | |
} | |
v17 = 1; | |
v47 = *(_DWORD *)(v7 + 292) - 1; | |
while ( v17 < v47 && v17 != 241 ) | |
{ | |
v18 = (v10 - *(_DWORD *)(v7 + 168 + 8 * v17 + 2060)) * (v10 - *(_DWORD *)(v7 + 168 + 8 * v17 + 2060)) | |
+ (v8 - *(_DWORD *)(v7 + 168 + 8 * v17 + 2056)) * (v8 - *(_DWORD *)(v7 + 168 + 8 * v17 + 2056)); | |
if ( v18 < *(_DWORD *)v11 ) | |
{ | |
*(_DWORD *)v11 = v18; | |
*(_DWORD *)(v7 + 17416) = 9; | |
*(_DWORD *)(v7 + 17320) = 2; | |
} | |
++v17; | |
} | |
v19 = v7 + 10976; | |
v48 = *(_DWORD *)(v7 + 10976); | |
for ( j = 0; j < v48 && j != 241; ++j ) | |
{ | |
v21 = *(_DWORD *)(v19 + 4); | |
v19 += 4; | |
v22 = (v10 - *(_DWORD *)(v19 + 964)) * (v10 - *(_DWORD *)(v19 + 964)) + (v8 - v21) * (v8 - v21); | |
if ( v22 < *(_DWORD *)v11 ) | |
{ | |
*(_DWORD *)v11 = v22; | |
*(_DWORD *)(v7 + 17416) = 9; | |
*(_DWORD *)(v7 + 17320) = 2; | |
} | |
} | |
v23 = 1; | |
v24 = v7 + 17416; | |
v25 = *(_DWORD *)(v7 + 6272) - 1; | |
while ( v23 < v25 ) | |
{ | |
v26 = (v10 - *(_DWORD *)(v7 + 168 + 8 * v23 + 6112)) * (v10 - *(_DWORD *)(v7 + 168 + 8 * v23 + 6112)) | |
+ (v8 - *(_DWORD *)(v7 + 168 + 8 * v23 + 6108)) * (v8 - *(_DWORD *)(v7 + 168 + 8 * v23 + 6108)); | |
if ( v26 < *(_DWORD *)v11 ) | |
{ | |
*(_DWORD *)v11 = v26; | |
LABEL_37: | |
*(_DWORD *)v24 = 3; | |
goto LABEL_38; | |
} | |
if ( v26 == *(_DWORD *)v11 && (*(_DWORD *)v24 == 2 || *(_DWORD *)v24 == 5) ) | |
goto LABEL_37; | |
LABEL_38: | |
++v23; | |
} | |
v27 = v7 + 168; | |
v28 = 1; | |
v29 = *(_DWORD *)(v7 + 9356) - 1; | |
while ( v28 < v29 ) | |
{ | |
v30 = v8 - *(_DWORD *)(v27 + 8 * v28 + 9192); | |
v31 = (v10 - *(_DWORD *)(v27 + 8 * v28 + 9196)) * (v10 - *(_DWORD *)(v27 + 8 * v28 + 9196)) + v30 * v30; | |
if ( v31 < *(_DWORD *)v11 ) | |
{ | |
*(_DWORD *)v11 = v31; | |
LABEL_45: | |
*(_DWORD *)(v7 + 17416) = 3; | |
goto LABEL_46; | |
} | |
if ( v31 == *(_DWORD *)v11 && *(_DWORD *)(v7 + 17416) == 6 ) | |
goto LABEL_45; | |
LABEL_46: | |
++v28; | |
} | |
v32 = 0; | |
v33 = v7 + 168; | |
v34 = *(_DWORD *)(v7 + 7300) - 1; | |
while ( v32 < v34 ) | |
{ | |
v35 = v10 - *(_DWORD *)(v33 + 8 * v32 + 7140); | |
v36 = v35 * v35 + (v8 - *(_DWORD *)(v33 + 8 * v32 + 7136)) * (v8 - *(_DWORD *)(v33 + 8 * v32 + 7136)); | |
if ( v36 < *(_DWORD *)v11 ) | |
{ | |
*(_DWORD *)v11 = v36; | |
*(_DWORD *)(v7 + 17416) = 2; | |
} | |
++v32; | |
} | |
v37 = v7 + 8320; | |
v38 = v7 + 168; | |
v39 = v7 + 17408; | |
v40 = *(_DWORD *)(v37 + 8); | |
v41 = 1; | |
result = v40 - 1; | |
while ( v41 < result ) | |
{ | |
v43 = v8 - *(_DWORD *)(v38 + 8 * v41 + 8164); | |
v44 = v10 - *(_DWORD *)(v38 + 8 * v41 + 8168); | |
v45 = v44 * v44 + v43 * v43; | |
if ( v45 < *(_DWORD *)v11 ) | |
{ | |
*(_DWORD *)v11 = v45; | |
*(_DWORD *)(v39 + 8) = 2; | |
} | |
++v41; | |
} | |
return result; | |
} | |
//----- (0000876E) -------------------------------------------------------- | |
int __fastcall sub_876E(int result) | |
{ | |
int v1; // r3@1 | |
v1 = *(_DWORD *)(result + 84); | |
if ( v1 == 1 ) | |
{ | |
*(_DWORD *)(result + 88) = *(_DWORD *)(result + 17416); | |
} | |
else if ( !v1 ) | |
{ | |
*(_DWORD *)(result + 92) = *(_DWORD *)(result + 17416); | |
} | |
return result; | |
} | |
//----- (0000878A) -------------------------------------------------------- | |
signed int __fastcall sub_878A(int a1) | |
{ | |
int v1; // r2@1 | |
int v2; // r3@1 | |
int v3; // r4@1 | |
int v4; // r0@2 | |
int v5; // r1@2 | |
signed int result; // r0@4 | |
v1 = a1 + 4192; | |
v2 = *(_DWORD *)(a1 + 4216); | |
v3 = *(_DWORD *)(a1 + 4212); | |
if ( v2 < v3 | |
&& (v4 = a1 + 4160, v5 = *(_DWORD *)(v4 + 20), v5 >= *(_DWORD *)(v4 + 8)) | |
&& ((v2 - v3) * (v2 - v3) + (v5 - *(_DWORD *)(v4 + 16)) * (v5 - *(_DWORD *)(v4 + 16)) > 10 | |
|| v2 <= *(_DWORD *)(v1 + 12) | |
|| v2 <= *(_DWORD *)(v1 + 8)) ) | |
result = -1; | |
else | |
result = 0; | |
return result; | |
} | |
//----- (000087CC) -------------------------------------------------------- | |
int __fastcall sub_87CC(int a1) | |
{ | |
int v1; // r4@1 | |
int v2; // r0@1 | |
int v3; // r3@1 | |
int result; // r0@1 | |
v1 = a1; | |
v2 = awb_util_history_find_last_pos(a1); | |
v3 = v1 + 24 * v2 + 10368; | |
*(_DWORD *)(v3 + 32) = 0; | |
*(_DWORD *)(v3 + 52) = 10; | |
*(_DWORD *)(v3 + 36) = 0; | |
*(_DWORD *)(v3 + 40) = -1; | |
*(_DWORD *)(v3 + 48) = 0; | |
*(_DWORD *)(v3 + 44) = -1; | |
*(_DWORD *)(v1 + 10760) = v2; | |
result = *(_DWORD *)(v1 + 10764); | |
if ( result > 0 ) | |
{ | |
--result; | |
*(_DWORD *)(v1 + 10764) = result; | |
} | |
return result; | |
} | |
//----- (00008804) -------------------------------------------------------- | |
int __fastcall sub_8804(int result) | |
{ | |
int v1; // r3@1 | |
v1 = *(_DWORD *)(result + 84); | |
if ( v1 ) | |
{ | |
if ( v1 == 1 ) | |
{ | |
_R1 = result + 17152; | |
__asm | |
{ | |
VLDR S15, [R1,#0xE8] | |
VSTR S15, [R0,#0x48] | |
VLDR S0, [R1,#0xEC] | |
VSTR S0, [R0,#0x4C] | |
} | |
} | |
} | |
else | |
{ | |
_R2 = result + 17152; | |
__asm | |
{ | |
VLDR S1, [R2,#0xE8] | |
VSTR S1, [R0,#0x40] | |
VLDR S2, [R2,#0xEC] | |
VSTR S2, [R0,#0x44] | |
} | |
} | |
return result; | |
} | |
//----- (00008838) -------------------------------------------------------- | |
signed int __fastcall sub_8838(int _R0) | |
{ | |
int v1; // r3@1 | |
int v6; // r2@1 | |
signed int result; // r0@1 | |
v1 = _R0 + 17152; | |
__asm | |
{ | |
VLDR S15, [R0,#0x48] | |
VSTR S15, [R3,#0xF0] | |
VLDR S0, [R0,#0x4C] | |
VSTR S0, [R3,#0xF4] | |
} | |
v6 = *(_DWORD *)(_R0 + 88); | |
*(_DWORD *)(v1 + 264) = v6; | |
*(_DWORD *)(_R0 + 92) = v6; | |
result = 1; | |
*(_DWORD *)(v1 + 192) = 1; | |
return result; | |
} | |
//----- (0000885C) -------------------------------------------------------- | |
signed int __fastcall sub_885C(signed int result) | |
{ | |
if ( result ) | |
{ | |
if ( result == 6 || result == 9 || result == 1 || result == 8 ) | |
result = 0; | |
else | |
result = -1; | |
} | |
return result; | |
} | |
//----- (0000887A) -------------------------------------------------------- | |
signed int __fastcall sub_887A(int a1) | |
{ | |
int v1; // r4@1 | |
int v2; // r5@1 | |
signed int result; // r0@2 | |
v1 = 0; | |
v2 = a1; | |
while ( 1 ) | |
{ | |
result = sub_885C(*(_DWORD *)(v2 + v1 + 10420)); | |
if ( !result ) | |
break; | |
v1 += 24; | |
if ( v1 == 360 ) | |
return -1; | |
} | |
return result; | |
} | |
//----- (000088A0) -------------------------------------------------------- | |
signed int __fastcall sub_88A0(int a1) | |
{ | |
int v1; // r4@1 | |
int v2; // r6@1 | |
signed int result; // r0@3 | |
v1 = 0; | |
v2 = a1; | |
do | |
{ | |
_R5 = v2 + 24 * v1 + 10368; | |
if ( !sub_885C(*(_DWORD *)(v2 + 24 * v1 + 10420)) ) | |
{ | |
__asm | |
{ | |
VLDR S14, [R5,#0x20] | |
VCVT.F32.S32 S0, S14 | |
VLDR D16, =0.001 | |
VLDR S15, [R5,#0x24] | |
} | |
result = 1; | |
__asm | |
{ | |
VCVT.F64.F32 D17, S0 | |
VMUL.F64 D1, D17, D16 | |
VCVT.F32.F64 S1, D1 | |
VCVT.F32.S32 S3, S15 | |
VSTR S1, [R6,#0x70] | |
VCVT.F64.F32 D2, S3 | |
VMUL.F64 D3, D2, D16 | |
VCVT.F32.F64 S5, D3 | |
VSTR S5, [R6,#0x74] | |
} | |
return result; | |
} | |
++v1; | |
} | |
while ( v1 != 15 ); | |
return 0; | |
} | |
//----- (00008908) -------------------------------------------------------- | |
int __fastcall sub_8908(int a1, int a2) | |
{ | |
int v2; // r4@1 | |
signed int v3; // r2@2 | |
signed int v4; // r7@5 | |
int result; // r0@8 | |
signed int v6; // r7@12 | |
int v7; // r8@12 | |
signed int v8; // r9@12 | |
int v9; // r10@12 | |
signed int v10; // r6@12 | |
signed int v11; // r5@12 | |
signed int v12; // r11@12 | |
signed int v13; // r1@13 | |
int v14; // r3@13 | |
signed int v15; // r0@25 | |
signed int v16; // r10@25 | |
unsigned int v17; // r1@25 | |
signed int v18; // r9@25 | |
signed int v19; // r3@25 | |
int v20; // r7@25 | |
signed int v21; // r12@25 | |
int v22; // r2@25 | |
signed int v23; // r0@25 | |
int v24; // r8@26 | |
int v25; // lr@26 | |
int v26; // r7@26 | |
signed int v27; // r8@28 | |
int v28; // r2@28 | |
signed int v29; // lr@28 | |
int v30; // r0@30 | |
int v31; // r10@44 | |
int v32; // r0@50 | |
int v33; // r12@50 | |
int v34; // r7@50 | |
int v35; // r0@51 | |
int v40; // r10@53 | |
int v41; // r3@53 | |
int v43; // r2@53 | |
int v45; // r0@54 | |
int v46; // r1@54 | |
int v47; // r7@61 | |
int v50; // r7@66 | |
int v52; // r2@71 | |
int v53; // r4@75 | |
int v54; // r0@76 | |
int v55; // lr@83 | |
signed int v58; // r8@88 | |
int v59; // r7@88 | |
int v60; // r12@92 | |
int v61; // r1@94 | |
int v64; // r4@98 | |
int v65; // r3@99 | |
int v66; // r0@100 | |
int v67; // r1@110 | |
int v70; // r7@114 | |
signed int v72; // r1@119 | |
signed int v73; // r0@119 | |
int v76; // r12@122 | |
int v77; // r8@122 | |
int v78; // r5@122 | |
int v79; // r3@124 | |
int v80; // r7@127 | |
int v82; // r1@130 | |
signed int v83; // r5@140 | |
signed int v85; // [sp+0h] [bp-80h]@20 | |
int v86; // [sp+0h] [bp-80h]@50 | |
signed int v87; // [sp+8h] [bp-78h]@12 | |
int v88; // [sp+Ch] [bp-74h]@12 | |
int v89; // [sp+10h] [bp-70h]@12 | |
unsigned int v90; // [sp+14h] [bp-6Ch]@10 | |
int v91; // [sp+18h] [bp-68h]@7 | |
signed int v92; // [sp+1Ch] [bp-64h]@10 | |
int v93; // [sp+1Ch] [bp-64h]@50 | |
int v94; // [sp+20h] [bp-60h]@25 | |
int v95; // [sp+20h] [bp-60h]@44 | |
int v96; // [sp+24h] [bp-5Ch]@12 | |
int v97; // [sp+28h] [bp-58h]@12 | |
unsigned int v98; // [sp+2Ch] [bp-54h]@10 | |
int v99; // [sp+30h] [bp-50h]@25 | |
int v100; // [sp+34h] [bp-4Ch]@12 | |
int v101; // [sp+38h] [bp-48h]@12 | |
int v102; // [sp+3Ch] [bp-44h]@25 | |
int v103; // [sp+40h] [bp-40h]@25 | |
signed int v104; // [sp+44h] [bp-3Ch]@10 | |
int v105; // [sp+48h] [bp-38h]@50 | |
int v106; // [sp+4Ch] [bp-34h]@50 | |
v2 = a2; | |
if ( *(_DWORD *)(a1 + 72) == 4 ) | |
v3 = 30; | |
else | |
v3 = 20; | |
if ( *(_DWORD *)(a1 + 72) == 4 ) | |
v4 = 35; | |
else | |
v4 = 25; | |
v91 = a1; | |
if ( *(_DWORD *)(a1 + 72) == 4 ) | |
result = 45; | |
else | |
result = 40; | |
v104 = v3; | |
v98 = result; | |
v90 = v4; | |
v92 = *(_DWORD *)(a2 + 10764); | |
if ( *(_DWORD *)(a2 + 10764) <= 3 ) | |
return result; | |
result = *(_DWORD *)(a2 + 10972); | |
if ( result <= 5 ) | |
return result; | |
v6 = 0; | |
v7 = a2 + 10408; | |
v8 = 999; | |
v87 = 15; | |
v9 = 0; | |
v10 = 0; | |
v11 = 0; | |
v12 = 0; | |
v97 = 0; | |
v96 = 0; | |
v89 = 0; | |
v88 = 0; | |
v101 = 0; | |
v100 = 0; | |
do | |
{ | |
v13 = *(_DWORD *)v7; | |
v14 = *(_DWORD *)(v7 + 12); | |
if ( v6 < *(_DWORD *)v7 ) | |
v6 = *(_DWORD *)v7; | |
if ( v8 >= v13 ) | |
v8 = *(_DWORD *)v7; | |
v9 += v13; | |
if ( v14 != 5 && v14 != 2 ) | |
{ | |
v85 = *(_DWORD *)(v7 + 12); | |
if ( sub_8412(*(_DWORD *)(v7 + 12)) ) | |
{ | |
if ( !sub_885C(v85) ) | |
{ | |
++v10; | |
v96 += *(_DWORD *)(v7 - 8); | |
v97 += *(_DWORD *)(v7 - 4); | |
} | |
} | |
else | |
{ | |
++v11; | |
v88 += *(_DWORD *)(v7 - 8); | |
v89 += *(_DWORD *)(v7 - 4); | |
} | |
} | |
else | |
{ | |
++v12; | |
v100 += *(_DWORD *)(v7 - 8); | |
v101 += *(_DWORD *)(v7 - 4); | |
} | |
v7 += 24; | |
--v87; | |
} | |
while ( v87 ); | |
v15 = v9 + (v92 >> 1); | |
v16 = 255; | |
v99 = v6 - v8; | |
v94 = *(_DWORD *)(v2 + 10968); | |
v102 = v15 / v92; | |
v17 = (v94 + 1) % 0x19u; | |
v18 = 0; | |
v19 = 999; | |
v20 = v2 + 8 * (v94 + 1325); | |
v21 = 0; | |
v103 = 0; | |
v22 = *(_DWORD *)(v20 + 168); | |
v23 = *(_DWORD *)(v20 + 172); | |
while ( v17 != v94 ) | |
{ | |
v24 = v103; | |
v25 = v2 + 8 * (v17 + 1325); | |
v26 = *(_DWORD *)(v25 + 168); | |
if ( v103 < v26 ) | |
v24 = *(_DWORD *)(v25 + 168); | |
v103 = v24; | |
v27 = *(_DWORD *)(v25 + 172); | |
v28 = v26 - v22; | |
v29 = v87; | |
if ( v28 < 0 ) | |
v28 = -v28; | |
v30 = v27 - v23; | |
if ( v19 >= v26 ) | |
v19 = v26; | |
if ( v30 < 0 ) | |
v30 = -v30; | |
if ( v21 < v27 ) | |
v21 = v27; | |
if ( v18 < v30 ) | |
v18 = v30; | |
if ( v87 < v28 ) | |
v29 = v28; | |
if ( v16 >= v27 ) | |
v16 = v27; | |
v87 = v29; | |
v17 = (signed int)(v17 + 1) % 25; | |
v23 = v27; | |
v22 = v26; | |
} | |
v31 = v21 - v16; | |
v95 = v103 - v19; | |
if ( v11 ) | |
{ | |
if ( !v12 && !v10 && v92 == 15 && v99 < (signed int)(v90 >> 2) && v87 < (signed int)(v90 >> 1) ) | |
{ | |
v32 = awb_util_history_find_last_pos(v2); | |
v33 = v2 + 24 * v32; | |
v93 = v32; | |
v34 = *(_DWORD *)(v33 + 10400); | |
v86 = (v11 - 1) >> 1; | |
v105 = *(_DWORD *)(v33 + 10404); | |
v106 = (v88 - v34 + v86) / (v11 - 1); | |
if ( (unsigned int)(1000 * v34 / v106 - 940) > 0x78 | |
|| (v35 = 1000 * v105 / ((v89 - v105 + v86) / (v11 - 1)), v35 > 1060) | |
|| v35 < 940 ) | |
{ | |
__asm { VLDR D16, =0.001 } | |
v40 = v2 + 24 * v93; | |
v41 = v40 + 10368; | |
_R7 = (v34 + 3 * v106 + 2) >> 2; | |
__asm { VMOV S4, R7 } | |
v43 = *(_DWORD *)(v40 + 10404) + 3 * ((v89 - v105 + v86) / (v11 - 1)); | |
__asm { VCVT.F32.S32 S6, S4 } | |
*(_DWORD *)(v41 + 32) = _R7; | |
result = v43 + 2; | |
_R1 = (v43 + 2) >> 2; | |
__asm { VMOV S5, R1 } | |
*(_DWORD *)(v41 + 36) = _R1; | |
__asm | |
{ | |
VCVT.F32.S32 S7, S5 | |
VCVT.F64.F32 D17, S6 | |
VCVT.F64.F32 D19, S7 | |
VMUL.F64 D18, D17, D16 | |
VMUL.F64 D20, D19, D16 | |
VCVT.F32.F64 S3, D18 | |
VCVT.F32.F64 S8, D20 | |
VSTR S3, [R4,#0xF0] | |
VSTR S8, [R4,#0xF4] | |
} | |
return result; | |
} | |
} | |
} | |
v45 = awb_util_history_find_last_pos(v2); | |
v46 = *(_DWORD *)(v91 + 816); | |
if ( v46 - 29 > v103 | |
&& v87 <= (signed int)v90 | |
&& v46 - 45 > v102 | |
&& v10 > v11 | |
&& v10 > v12 | |
&& v18 < v104 | |
&& v31 < (signed int)v98 ) | |
{ | |
v47 = *(_DWORD *)(v2 + 24 * v45 + 10420); | |
if ( v47 ) | |
{ | |
if ( v47 != 6 && v47 != 1 && v47 != 9 ) | |
{ | |
_R0 = (v96 + (v10 >> 1)) / v10; | |
__asm | |
{ | |
VMOV S17, R0 | |
VCVT.F32.S32 S0, S17 | |
VLDR D8, =0.001 | |
VCVT.F64.F32 D29, S0 | |
VMUL.F64 D30, D29, D8 | |
VCVT.F32.F64 S1, D30 | |
VSTR S1, [R5,#0xD0] | |
} | |
_R0 = (v97 + (v10 >> 1)) / v10; | |
*(_DWORD *)(v2 + 17416) = 6; | |
__asm | |
{ | |
VMOV S14, R0 | |
VCVT.F32.S32 S2, S14 | |
VCVT.F64.F32 D31, S2 | |
VMUL.F64 D8, D31, D8 | |
VCVT.F32.F64 S16, D8 | |
VSTR S16, [R5,#0xD4] | |
} | |
return sub_87CC(v2); | |
} | |
} | |
} | |
v50 = awb_util_history_find_last_pos(v2); | |
if ( v10 > v12 && v10 > v11 && *(_DWORD *)(v91 + 816) - 29 > v102 && v87 < (signed int)(v90 >> 1) && v18 <= 9 ) | |
{ | |
_R0 = (v96 + (v10 >> 1)) / v10; | |
__asm { VMOV S16, R0 } | |
result = (v97 + (v10 >> 1)) / v10; | |
__asm | |
{ | |
VCVT.F32.S32 S15, S16 | |
VLDR D16, =0.001 | |
VCVT.F64.F32 D17, S15 | |
VMUL.F64 D0, D17, D16 | |
VCVT.F32.F64 S1, D0 | |
VMOV S14, R0 | |
VCVT.F32.S32 S2, S14 | |
VSTR S1, [R2,#0xF0] | |
VCVT.F64.F32 D2, S2 | |
VMUL.F64 D3, D2, D16 | |
VCVT.F32.F64 S3, D3 | |
VSTR S3, [R2,#0xF4] | |
} | |
v52 = *(_DWORD *)(v2 + 24 * v50 + 10420); | |
if ( !v52 || v52 == 6 || v52 == 1 || v52 == 9 ) | |
{ | |
v53 = v2 + 24 * v50 + 10368; | |
__asm { VSTR S16, [R4,#0x20] } | |
LABEL_135: | |
*(_DWORD *)(v53 + 36) = result; | |
*(_DWORD *)(v53 + 48) = 1; | |
return result; | |
} | |
} | |
v54 = awb_util_history_find_last_pos(v2); | |
if ( v95 > 1 | |
|| v99 > 1 | |
|| v11 <= v10 | |
|| v11 <= v12 | |
|| v102 >= *(_DWORD *)(v91 + 860) - 1 | |
|| v18 >= v104 | |
|| v31 >= (signed int)v98 ) | |
{ | |
*(_DWORD *)(v2 + 12924) = 0; | |
} | |
else | |
{ | |
v55 = v2 + 24 * v54; | |
if ( !sub_8412(*(_DWORD *)(v55 + 10420)) ) | |
{ | |
__asm { VLDR D8, =0.001 } | |
if ( !*(_DWORD *)(v2 + 12924) ) | |
{ | |
*(_DWORD *)(v2 + 12924) = 1; | |
_R9 = (v88 + (v11 >> 1)) / v11; | |
result = (v89 + (v11 >> 1)) / v11; | |
__asm | |
{ | |
VMOV S9, R9 | |
VCVT.F32.S32 S11, S9 | |
VCVT.F64.F32 D26, S11 | |
VMUL.F64 D27, D26, D8 | |
VMOV S13, R0 | |
VCVT.F32.S32 S15, S13 | |
VCVT.F64.F32 D28, S15 | |
VMUL.F64 D8, D28, D8 | |
VCVT.F32.F64 S12, D27 | |
VCVT.F32.F64 S16, D8 | |
VSTR S12, [R4,#0xF0] | |
VSTR S16, [R4,#0xF4] | |
} | |
*(_DWORD *)(v55 + 10416) = 1; | |
*(_DWORD *)(v55 + 10400) = _R9; | |
*(_DWORD *)(v55 + 10404) = result; | |
return result; | |
} | |
_R7 = v2 + 24 * awb_util_history_find_last_pos(v2) + 10368; | |
__asm | |
{ | |
VLDR S3, [R7,#0x20] | |
VCVT.F32.S32 S5, S3 | |
VCVT.F64.F32 D23, S5 | |
VMUL.F64 D24, D23, D8 | |
VCVT.F32.F64 S7, D24 | |
VSTR S7, [R3,#0xD0] | |
VLDR S8, [R7,#0x24] | |
VCVT.F32.S32 S10, S8 | |
VCVT.F64.F32 D25, S10 | |
VMUL.F64 D8, D25, D8 | |
VCVT.F32.F64 S16, D8 | |
VSTR S16, [R3,#0xD4] | |
} | |
return sub_87CC(v2); | |
} | |
} | |
v58 = (signed int)v90 >> 2; | |
v59 = awb_util_history_find_last_pos(v2); | |
if ( v99 < (signed int)v90 >> 2 && v87 < v58 && v11 > v12 && v11 > v10 ) | |
{ | |
v60 = v2 + 24 * v59; | |
if ( *(_DWORD *)(v60 + 10408) >= *(_DWORD *)(v91 + 816) && v31 < (signed int)(v98 >> 1) ) | |
{ | |
v61 = *(_DWORD *)(v60 + 10420); | |
if ( !v61 || v61 == 6 || v61 == 9 || v61 == 8 ) | |
{ | |
_R8 = (v88 + (v11 >> 1)) / v11; | |
_R0 = (v89 + (v11 >> 1)) / v11; | |
__asm | |
{ | |
VMOV S0, R8 | |
VCVT.F32.S32 S1, S0 | |
VLDR D19, =0.001 | |
} | |
*(_DWORD *)(v2 + 17416) = 3; | |
__asm | |
{ | |
VCVT.F64.F32 D18, S1 | |
VMUL.F64 D20, D18, D19 | |
VMOV S2, R0 | |
VCVT.F32.S32 S4, S2 | |
VCVT.F64.F32 D21, S4 | |
VMUL.F64 D22, D21, D19 | |
VCVT.F32.F64 S14, D20 | |
VCVT.F32.F64 S6, D22 | |
VSTR S14, [R1,#0xF0] | |
VSTR S6, [R1,#0xF4] | |
} | |
sub_87CC(v2); | |
result = 1; | |
v64 = v2 + 24 * v59 + 10368; | |
*(_DWORD *)(v64 + 48) = 1; | |
*(_DWORD *)(v64 + 32) = _R8; | |
*(_DWORD *)(v64 + 36) = (v89 + (v11 >> 1)) / v11; | |
*(_DWORD *)(v64 + 52) = 3; | |
return result; | |
} | |
} | |
} | |
v65 = *(_DWORD *)(v2 + 10972); | |
if ( v65 ) | |
{ | |
v66 = *(_DWORD *)(v2 + 10968); | |
if ( v66 ) | |
v65 = v66 - 1; | |
else | |
--v65; | |
} | |
if ( v95 < (signed int)v90 | |
&& v87 < (signed int)(v90 >> 1) | |
&& v11 > v10 | |
&& v11 > v12 | |
&& *(_DWORD *)(v2 + 8 * (v65 + 1325) + 168) >= *(_DWORD *)(v2 + 32) | |
&& v18 < v104 | |
&& v31 < (signed int)v98 ) | |
{ | |
v67 = *(_DWORD *)(v2 + 24 * awb_util_history_find_last_pos(v2) + 10420); | |
if ( v67 == 2 || v67 == 5 ) | |
{ | |
_R0 = (v88 + (v11 >> 1)) / v11; | |
__asm | |
{ | |
VMOV S16, R0 | |
VCVT.F32.S32 S11, S16 | |
VLDR D8, =0.001 | |
VCVT.F64.F32 D31, S11 | |
VMUL.F64 D17, D31, D8 | |
VCVT.F32.F64 S12, D17 | |
VSTR S12, [R6,#0xD0] | |
} | |
_R0 = (v89 + (v11 >> 1)) / v11; | |
*(_DWORD *)(v2 + 17416) = 3; | |
__asm | |
{ | |
VMOV S13, R0 | |
VCVT.F32.S32 S15, S13 | |
VCVT.F64.F32 D16, S15 | |
VMUL.F64 D8, D16, D8 | |
VCVT.F32.F64 S16, D8 | |
VSTR S16, [R6,#0xD4] | |
} | |
return sub_87CC(v2); | |
} | |
} | |
v70 = awb_util_history_find_last_pos(v2); | |
result = v99; | |
if ( v99 > 15 || v31 > 15 || v18 > 3 ) | |
{ | |
if ( *(_DWORD *)(v91 + 72) == 4 && v31 < (signed int)(v98 >> 2) && v99 < v58 ) | |
{ | |
result = v95; | |
if ( v95 < v58 ) | |
{ | |
v83 = v10 + v12 + v11; | |
__asm { VLDR D8, =0.001 } | |
_R0 = (v100 + v88 + v96 + (v83 >> 1)) / v83; | |
__asm | |
{ | |
VMOV S5, R0 | |
VCVT.F32.S32 S7, S5 | |
} | |
v72 = v83; | |
v73 = v101 + v89 + v97 + (v83 >> 1); | |
__asm | |
{ | |
VCVT.F64.F32 D4, S7 | |
VMUL.F64 D5, D4, D8 | |
VCVT.F32.F64 S9, D5 | |
VSTR S9, [R4,#0xF0] | |
} | |
goto LABEL_141; | |
} | |
} | |
} | |
else | |
{ | |
if ( v12 <= v11 ) | |
{ | |
if ( v11 > v12 && v11 > v10 ) | |
{ | |
_R6 = (v88 + (v11 >> 1)) / v11; | |
_R0 = (v89 + (v11 >> 1)) / v11; | |
__asm | |
{ | |
VMOV S11, R6 | |
VCVT.F32.S32 S12, S11 | |
VLDR D19, =0.001 | |
} | |
v76 = v2 + 24 * v70; | |
__asm | |
{ | |
VCVT.F64.F32 D18, S12 | |
VMUL.F64 D20, D18, D19 | |
VMOV S15, R0 | |
VCVT.F32.S32 S0, S15 | |
} | |
v77 = (v89 + (v11 >> 1)) / v11; | |
__asm | |
{ | |
VCVT.F64.F32 D21, S0 | |
VMUL.F64 D22, D21, D19 | |
VCVT.F32.F64 S13, D20 | |
VCVT.F32.F64 S1, D22 | |
VSTR S13, [R5,#0xF0] | |
VSTR S1, [R5,#0xF4] | |
} | |
v78 = v76 + 10368; | |
if ( sub_8412(*(_DWORD *)(v76 + 10420)) ) | |
{ | |
result = v91; | |
v79 = *(_DWORD *)(v91 + 816); | |
if ( v87 <= 2 && v102 >= v79 ) | |
{ | |
result = *(_DWORD *)(v78 + 40); | |
if ( result >= v79 ) | |
{ | |
v80 = v2 + 24 * v70 + 10368; | |
*(_DWORD *)(v80 + 32) = _R6; | |
*(_DWORD *)(v80 + 36) = v77; | |
*(_DWORD *)(v80 + 52) = 3; | |
*(_DWORD *)(v2 + 17416) = 3; | |
*(_DWORD *)(v80 + 48) = 1; | |
} | |
} | |
} | |
else | |
{ | |
result = 1; | |
*(_DWORD *)(v78 + 32) = _R6; | |
*(_DWORD *)(v78 + 36) = v77; | |
*(_DWORD *)(v78 + 48) = 1; | |
} | |
return result; | |
} | |
} | |
else if ( v12 > v10 ) | |
{ | |
_R0 = (v100 + (v12 >> 1)) / v12; | |
v72 = v12; | |
__asm | |
{ | |
VMOV S17, R0 | |
VCVT.F32.S32 S7, S17 | |
VLDR D8, =0.001 | |
} | |
v73 = v101 + (v12 >> 1); | |
__asm | |
{ | |
VCVT.F64.F32 D28, S7 | |
VMUL.F64 D29, D28, D8 | |
VCVT.F32.F64 S8, D29 | |
VSTR S8, [R4,#0xF0] | |
} | |
LABEL_141: | |
result = v73 / v72; | |
__asm | |
{ | |
VMOV S10, R0 | |
VCVT.F32.S32 S9, S10 | |
VCVT.F64.F32 D30, S9 | |
VMUL.F64 D8, D30, D8 | |
VCVT.F32.F64 S16, D8 | |
VSTR S16, [R4,#0xF4] | |
} | |
return result; | |
} | |
if ( v10 > v12 && v10 > v11 ) | |
{ | |
_R8 = (v96 + (v10 >> 1)) / v10; | |
result = (v97 + (v10 >> 1)) / v10; | |
__asm | |
{ | |
VMOV S14, R8 | |
VCVT.F32.S32 S2, S14 | |
VLDR D24, =0.001 | |
VCVT.F64.F32 D23, S2 | |
VMUL.F64 D25, D23, D24 | |
VMOV S6, R0 | |
VCVT.F32.S32 S3, S6 | |
VCVT.F64.F32 D26, S3 | |
VMUL.F64 D27, D26, D24 | |
VCVT.F32.F64 S4, D25 | |
VCVT.F32.F64 S5, D27 | |
VSTR S4, [R1,#0xF0] | |
VSTR S5, [R1,#0xF4] | |
} | |
v82 = *(_DWORD *)(v2 + 24 * v70 + 10420); | |
if ( !v82 || v82 == 6 || v82 == 1 || v82 == 9 ) | |
{ | |
v53 = v2 + 24 * v70 + 10368; | |
*(_DWORD *)(v53 + 32) = _R8; | |
goto LABEL_135; | |
} | |
} | |
} | |
return result; | |
} | |
//----- (00009210) -------------------------------------------------------- | |
signed int __fastcall sub_9210(int a1, int a2) | |
{ | |
int v2; // r6@1 | |
int v3; // r5@1 | |
int v4; // r1@1 | |
int v5; // r7@1 | |
int v6; // r3@3 | |
int v12; // r5@11 | |
signed int result; // r0@12 | |
signed int v14; // r0@14 | |
int v16; // lr@17 | |
int v17; // r2@17 | |
int i; // r3@17 | |
int v19; // t1@18 | |
int v20; // r0@18 | |
int v21; // r1@18 | |
signed int v22; // r0@25 | |
int v23; // r10@28 | |
int v24; // r0@29 | |
int v25; // r2@29 | |
int v26; // r3@31 | |
signed int v27; // r8@31 | |
int v28; // r9@31 | |
int v29; // r2@31 | |
int j; // r3@31 | |
int v31; // r1@32 | |
int v32; // r10@40 | |
int v33; // r1@40 | |
int v34; // r3@40 | |
int v35; // r9@40 | |
int v36; // r0@42 | |
int v37; // r2@50 | |
int v38; // r1@50 | |
int v43; // r8@52 | |
int v44; // r9@53 | |
int v45; // r3@56 | |
int v46; // r1@59 | |
int v50; // r2@62 | |
int v51; // r1@62 | |
int v52; // r8@72 | |
int v53; // r3@75 | |
int v54; // r0@76 | |
int v57; // r3@83 | |
int v58; // r0@88 | |
int v59; // r8@91 | |
int v60; // r9@92 | |
int v61; // r10@92 | |
int v63; // r8@99 | |
int v64; // r9@99 | |
int v65; // r0@108 | |
int v66; // [sp+0h] [bp-170h]@33 | |
int v67; // [sp+10h] [bp-160h]@32 | |
int v68; // [sp+14h] [bp-15Ch]@27 | |
int v69; // [sp+18h] [bp-158h]@31 | |
int v70; // [sp+1Ch] [bp-154h]@31 | |
int v71; // [sp+20h] [bp-150h]@31 | |
int v72; // [sp+24h] [bp-14Ch]@29 | |
int v73; // [sp+28h] [bp-148h]@31 | |
int v74; // [sp+2Ch] [bp-144h]@1 | |
char v75[256]; // [sp+34h] [bp-13Ch]@31 | |
int v76; // [sp+134h] [bp-3Ch]@1 | |
v2 = a1; | |
v3 = a2; | |
v4 = *(_DWORD *)(a1 + 72); | |
v5 = *(_DWORD *)(a1 + 76); | |
v74 = (int)&_stack_chk_guard; | |
v76 = _stack_chk_guard; | |
if ( v4 == 4 ) | |
goto LABEL_12; | |
if ( *(_DWORD *)(a1 + 152) ) | |
{ | |
v6 = *(_DWORD *)(a1 + 156); | |
if ( v6 ) | |
{ | |
if ( v6 != 3 ) | |
{ | |
__asm { VMOV.F32 S15, #1.0 } | |
_R2 = v3 + 17152; | |
__asm | |
{ | |
VLDR S0, [R2,#4] | |
VLDR S2, [R2,#8] | |
VDIV.F32 S1, S15, S0 | |
VDIV.F32 S3, S15, S2 | |
VCMPE.F32 S1, S3 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
__asm | |
{ | |
VCMPE.F32 S1, S15 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
goto LABEL_11; | |
} | |
else | |
{ | |
__asm | |
{ | |
VCMPE.F32 S3, S15 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
goto LABEL_11; | |
__asm | |
{ | |
VCMPE.F32 S1, S3 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF ) | |
{ | |
__asm { VMOV.F32 S15, S3 } | |
LABEL_11: | |
__asm { VMOV.F64 D21, #1.0 } | |
v12 = v3 + 17152; | |
*(_BYTE *)(v12 + 268) = 1; | |
*(_DWORD *)(v12 + 272) = 0; | |
__asm | |
{ | |
VCVT.F64.F32 D20, S15 | |
VDIV.F64 D22, D21, D20 | |
VCVT.F64.F32 D23, S1 | |
VCVT.F64.F32 D25, S3 | |
VMUL.F64 D24, D23, D22 | |
VMUL.F64 D26, D25, D22 | |
VCVT.F32.F64 S4, D24 | |
VCVT.F32.F64 S6, D22 | |
VSTR S4, [R5,#0xD4] | |
VSTR S4, [R5,#0x114] | |
VCVT.F32.F64 S8, D26 | |
VSTR S6, [R5,#0xD8] | |
VSTR S6, [R5,#0x118] | |
VSTR S8, [R5,#0xDC] | |
VSTR S8, [R5,#0x11C] | |
} | |
LABEL_12: | |
result = -1; | |
goto LABEL_113; | |
} | |
} | |
__asm { VMOV.F32 S15, S1 } | |
goto LABEL_11; | |
} | |
} | |
} | |
if ( *(_DWORD *)(v3 + 84) == 1 ) | |
{ | |
v14 = *(_DWORD *)(v3 + 24); | |
*(_DWORD *)(v3 + 88) = 10; | |
*(_DWORD *)(v3 + 28) = 0; | |
if ( v14 > 9 ) | |
*(_DWORD *)(v3 + 24) = v14 - 1; | |
goto LABEL_12; | |
} | |
if ( *(_DWORD *)(a1 + 240) == *(_DWORD *)(a1 + 860) - 1 ) | |
goto LABEL_12; | |
_R4 = v3 + 17184; | |
__asm | |
{ | |
VLDR S15, [R4,#0xC0] | |
VLDR S0, [R4,#0xC4] | |
VSTR S15, [R4,#0xC8] | |
VSTR S0, [R4,#0xCC] | |
} | |
awb_util_convert_to_grid(v3, *(_DWORD *)(v3 + 17236), *(_DWORD *)(v3 + 17240), v3 + 17224, v3 + 17228); | |
v16 = *(_DWORD *)(v3 + 17232); | |
v17 = v3 + 12928; | |
for ( i = 0; i < v16 && i != 256; ++i ) | |
{ | |
v19 = *(_DWORD *)(v17 + 4); | |
v17 += 4; | |
v20 = *(_DWORD *)(v17 + 1024) - *(_DWORD *)(v3 + 17228); | |
v21 = v20 * v20 + (v19 - *(_DWORD *)(v3 + 17224)) * (v19 - *(_DWORD *)(v3 + 17224)); | |
if ( v21 > *(_DWORD *)(v3 + 17200) ) | |
*(_DWORD *)(v3 + 17200) = v21; | |
} | |
v22 = *(_DWORD *)(v3 + 17200) > 4 * *(_WORD *)(v5 + 2180) || *(_DWORD *)(v3 + 84) ? 0 : 1; | |
*(_DWORD *)(v3 + 17264) = v22; | |
sub_84A8(v2, v3, *(_DWORD *)(v3 + 17224), *(_DWORD *)(v3 + 17228)); | |
v68 = *(_DWORD *)(v3 + 17224); | |
if ( v68 > *(_DWORD *)(v3 + 4172) + 3 ) | |
goto LABEL_12; | |
v23 = *(_DWORD *)(v3 + 17228); | |
if ( v23 > *(_DWORD *)(v3 + 4192) ) | |
goto LABEL_12; | |
v24 = *(_DWORD *)(v2 + 240); | |
v25 = *(_DWORD *)(v2 + 816); | |
v72 = *(_DWORD *)(v2 + 76); | |
if ( v24 >= v25 && *(_DWORD *)(v3 + 10764) > 4 ) | |
{ | |
v26 = *(_DWORD *)(v3 + 17200); | |
v69 = v3 + 12932; | |
v70 = v3 + 13956; | |
v73 = (60 * v26 + 50) / 100; | |
memset(v75, 0, 0x100u); | |
v27 = 0; | |
v28 = 0; | |
v29 = 0; | |
v71 = *(_DWORD *)(v3 + 17232); | |
for ( j = 0; j < v71 && j != 256; ++j ) | |
{ | |
v67 = *(_DWORD *)(v69 + 4 * j); | |
v31 = *(_DWORD *)(v70 + 4 * j); | |
if ( (v31 - v23) * (v31 - v23) + (v67 - v68) * (v67 - v68) < v73 ) | |
{ | |
++v27; | |
v28 += v31; | |
v29 += v67; | |
*((_BYTE *)&v66 + j + 52) = 1; | |
} | |
} | |
if ( v27 ) | |
{ | |
v32 = (v29 + (v27 >> 1)) / v27; | |
v33 = 0; | |
v34 = 0; | |
v35 = (v28 + (v27 >> 1)) / v27; | |
while ( v34 < v71 && v34 != 256 ) | |
{ | |
if ( v75[v34] == 1 ) | |
{ | |
v36 = (*(_DWORD *)(v70 + 4 * v34) - v35) * (*(_DWORD *)(v70 + 4 * v34) - v35); | |
if ( v33 < v36 + (*(_DWORD *)(v69 + 4 * v34) - v32) * (*(_DWORD *)(v69 + 4 * v34) - v32) ) | |
v33 = v36 + (*(_DWORD *)(v69 + 4 * v34) - v32) * (*(_DWORD *)(v69 + 4 * v34) - v32); | |
} | |
++v34; | |
} | |
if ( v33 < 8 * *(_WORD *)(v72 + 2180) ) | |
goto LABEL_12; | |
} | |
} | |
__asm | |
{ | |
VLDR D16, =0.3 | |
VLDR D18, =0.7 | |
} | |
v37 = *(_DWORD *)(v3 + 10976); | |
v38 = v37 + 2943; | |
_R3 = v3 + 4 * (*(_DWORD *)(v3 + 10980) + 3998); | |
__asm | |
{ | |
VLDR S1, [R3,#0xAC] | |
VCVT.F64.F32 D19, S1 | |
} | |
_R2 = v3 + 4 * (*(_DWORD *)(v3 + 4 * (v37 + 2701) + 172) + 3998); | |
__asm | |
{ | |
VLDR S16, [R2,#0xAC] | |
VCVT.F64.F32 D17, S16 | |
VMUL.F64 D1, D17, D16 | |
VMLA.F64 D1, D19, D18 | |
VCVT.F32.F64 S17, D1 | |
VSTR S17, [R4,#0xD8] | |
} | |
_R3 = v3 + 4 * (*(_DWORD *)(v3 + 4 * v38 + 168) + 3998); | |
__asm | |
{ | |
VLDR S19, [R3,#0xAC] | |
VCVT.F64.F32 D3, S19 | |
} | |
_R3 = v3 + 4 * (*(_DWORD *)(v3 + 11944) + 3998); | |
__asm | |
{ | |
VLDR S3, [R3,#0xAC] | |
VMUL.F64 D4, D3, D16 | |
VCVT.F64.F32 D2, S3 | |
VMLA.F64 D4, D2, D18 | |
VCVT.F32.F64 S18, D4 | |
VSTR S18, [R4,#0xDC] | |
} | |
if ( !_ZF ) | |
{ | |
if ( *(_DWORD *)(v3 + 17264) ) | |
goto LABEL_106; | |
v58 = *(_DWORD *)(v2 + 240); | |
if ( v58 < *(_DWORD *)(v2 + 820) ) | |
goto LABEL_89; | |
v59 = *(_DWORD *)(v3 + 32); | |
if ( v58 < v59 ) | |
{ | |
v60 = *(_DWORD *)(v3 + 17352); | |
v61 = *(_DWORD *)(v3 + 17452); | |
if ( (v60 <= v61 * *(_BYTE *)(v5 + 2187) / 100 || *(_DWORD *)(v3 + 17356)) | |
&& v60 <= v61 * *(_BYTE *)(v5 + 2193) / 100 | |
|| !*(_DWORD *)(v3 + 80) ) | |
goto LABEL_12; | |
*(_DWORD *)(v3 + 17416) = 9; | |
*(_DWORD *)(v3 + 17304) = 2; | |
_R2 = *(_DWORD *)(v2 + 240) - *(_DWORD *)(v3 + 36); | |
*(_DWORD *)(v3 + 17324) = _R2; | |
_R0 = v59 - *(_DWORD *)(v2 + 240); | |
LABEL_97: | |
__asm | |
{ | |
VMOV S4, R2 | |
VCVT.F32.S32 S6, S4 | |
VMOV S2, R0 | |
} | |
*(_DWORD *)(v3 + 17328) = _R0; | |
_R0 = _R2 + _R0; | |
__asm | |
{ | |
VMOV S8, R0 | |
VMUL.F32 S17, S6, S17 | |
VCVT.F32.S32 S3, S2 | |
VMLA.F32 S17, S16, S3 | |
VCVT.F32.S32 S5, S8 | |
VDIV.F32 S17, S17, S5 | |
VMUL.F32 S18, S6, S18 | |
VSTR S17, [R4,#0xD0] | |
VMLA.F32 S18, S19, S3 | |
VDIV.F32 S18, S18, S5 | |
} | |
LABEL_105: | |
__asm { VSTR S18, [R4,#0xD4] } | |
goto LABEL_106; | |
} | |
if ( *(_DWORD *)(v3 + 17340) <= *(_DWORD *)(v3 + 4208) ) | |
goto LABEL_12; | |
v63 = *(_DWORD *)(v3 + 17352); | |
v64 = *(_DWORD *)(v3 + 17452); | |
if ( (v63 <= v64 * *(_BYTE *)(v5 + 2187) / 100 || *(_DWORD *)(v3 + 17356)) | |
&& v63 <= v64 * *(_BYTE *)(v5 + 2193) / 100 ) | |
goto LABEL_12; | |
LABEL_102: | |
if ( !*(_DWORD *)(v3 + 80) ) | |
goto LABEL_12; | |
v57 = 0; | |
goto LABEL_104; | |
} | |
v43 = *(_DWORD *)(v3 + 17196); | |
if ( v43 < 4 * *(_WORD *)(v5 + 2182) ) | |
{ | |
v44 = *(_DWORD *)(v3 + 17352); | |
if ( (v44 <= *(_DWORD *)(v3 + 17452) * *(_BYTE *)(v5 + 2187) / 100 || *(_DWORD *)(v3 + 17356)) | |
&& v44 <= *(_BYTE *)(v5 + 2193) ) | |
{ | |
__asm | |
{ | |
VLDR S5, [R4,#0xC0] | |
VLDR S7, [R4,#0xC4] | |
VSTR S5, [R4,#0xD0] | |
} | |
LABEL_71: | |
__asm { VSTR S7, [R4,#0xD4] } | |
goto LABEL_115; | |
} | |
v45 = *(_DWORD *)(v2 + 240); | |
if ( v45 < *(_DWORD *)(v2 + 820) ) | |
{ | |
if ( !*(_DWORD *)(v3 + 80) ) | |
goto LABEL_12; | |
__asm { VSTR S16, [R4,#0xD0] } | |
*(_DWORD *)(v3 + 17416) = 6; | |
__asm { VSTR S19, [R4,#0xD4] } | |
goto LABEL_115; | |
} | |
v46 = *(_DWORD *)(v3 + 32); | |
if ( v45 < v46 ) | |
{ | |
if ( !*(_DWORD *)(v3 + 80) ) | |
goto LABEL_12; | |
*(_DWORD *)(v3 + 17416) = 9; | |
*(_DWORD *)(v3 + 17304) = 2; | |
_R2 = *(_DWORD *)(v2 + 240) - *(_DWORD *)(v2 + 820); | |
__asm | |
{ | |
VMOV S9, R2 | |
VCVT.F32.S32 S10, S9 | |
} | |
*(_DWORD *)(v3 + 17324) = _R2; | |
_R1 = v46 - *(_DWORD *)(v2 + 240); | |
__asm { VMOV S14, R1 } | |
_R0 = _R2 + _R1; | |
__asm { VMOV S13, R0 } | |
*(_DWORD *)(v3 + 17328) = _R1; | |
__asm | |
{ | |
VMUL.F32 S15, S10, S17 | |
VCVT.F32.S32 S12, S14 | |
VMLA.F32 S15, S16, S12 | |
VCVT.F32.S32 S11, S13 | |
VDIV.F32 S0, S15, S11 | |
VMUL.F32 S1, S10, S18 | |
VSTR S0, [R4,#0xD0] | |
VMLA.F32 S1, S19, S12 | |
VDIV.F32 S7, S1, S11 | |
} | |
goto LABEL_71; | |
} | |
v50 = *(_DWORD *)(v3 + 17340); | |
v51 = *(_DWORD *)(v3 + 4208); | |
if ( v45 >= *(_DWORD *)(v2 + 816) ) | |
{ | |
if ( v50 <= v51 ) | |
goto LABEL_115; | |
if ( !*(_DWORD *)(v3 + 80) || v68 >= *(_DWORD *)(v3 + 4176) ) | |
goto LABEL_12; | |
} | |
else | |
{ | |
if ( v50 <= v51 ) | |
goto LABEL_115; | |
if ( !*(_DWORD *)(v3 + 80) ) | |
goto LABEL_12; | |
} | |
__asm { VSTR S17, [R4,#0xD0] } | |
*(_DWORD *)(v3 + 17416) = 0; | |
__asm { VSTR S18, [R4,#0xD4] } | |
} | |
LABEL_115: | |
if ( v43 < 4 * *(_WORD *)(v5 + 2182) ) | |
goto LABEL_106; | |
v52 = *(_DWORD *)(v3 + 17352); | |
if ( (v52 <= *(_DWORD *)(v3 + 17452) * *(_BYTE *)(v5 + 2187) / 100 || *(_DWORD *)(v3 + 17356)) | |
&& v52 <= *(_BYTE *)(v5 + 2193) ) | |
{ | |
if ( *(_DWORD *)(v2 + 240) < (*(_DWORD *)(v3 + 32) + *(_DWORD *)(v2 + 816)) >> 1 ) | |
goto LABEL_12; | |
if ( v52 <= 0 ) | |
goto LABEL_12; | |
v57 = *(_DWORD *)(v3 + 17356); | |
if ( v57 || *(_DWORD *)(v3 + 17340) <= *(_DWORD *)(v3 + 4208) || v68 >= *(_DWORD *)(v3 + 4176) ) | |
goto LABEL_12; | |
LABEL_104: | |
*(_DWORD *)(v3 + 17416) = v57; | |
__asm { VSTR S17, [R4,#0xD0] } | |
goto LABEL_105; | |
} | |
v53 = *(_DWORD *)(v2 + 240); | |
if ( v53 >= *(_DWORD *)(v2 + 820) ) | |
{ | |
v54 = *(_DWORD *)(v3 + 32); | |
if ( v53 < v54 ) | |
{ | |
if ( !*(_DWORD *)(v3 + 80) ) | |
goto LABEL_12; | |
*(_DWORD *)(v3 + 17416) = 9; | |
*(_DWORD *)(v3 + 17304) = 2; | |
_R2 = *(_DWORD *)(v2 + 240) - *(_DWORD *)(v2 + 820); | |
*(_DWORD *)(v3 + 17324) = _R2; | |
_R0 = v54 - *(_DWORD *)(v2 + 240); | |
goto LABEL_97; | |
} | |
if ( *(_DWORD *)(v3 + 17340) <= *(_DWORD *)(v3 + 4208) ) | |
goto LABEL_106; | |
goto LABEL_102; | |
} | |
LABEL_89: | |
if ( !*(_DWORD *)(v3 + 80) ) | |
goto LABEL_12; | |
__asm { VSTR S16, [R4,#0xD0] } | |
*(_DWORD *)(v3 + 17416) = 6; | |
__asm { VSTR S19, [R4,#0xD4] } | |
LABEL_106: | |
if ( !sub_885C(*(_DWORD *)(v3 + 17416)) ) | |
{ | |
sub_8428(v2, v3); | |
sub_8908(v2, v3); | |
} | |
__asm | |
{ | |
VMOV.F32 S12, #1.0 | |
VLDR S7, [R4,#0xD0] | |
VLDR S14, [R4,#0xD4] | |
} | |
v65 = *(_DWORD *)(v3 + 17416); | |
__asm | |
{ | |
VCMP.F32 S7, #0.0 | |
VSTR S12, [R4,#0xB8] | |
VMRS APSR_nzcv, FPSCR | |
VCMP.F32 S14, #0.0 | |
} | |
if ( _ZF ) | |
__asm { VSTREQ S12, [R4,#0xD0] } | |
__asm | |
{ | |
VLDR S9, [R4,#0xD0] | |
VMRS APSR_nzcv, FPSCR | |
VDIV.F32 S10, S12, S9 | |
} | |
if ( _ZF ) | |
__asm { VSTREQ S12, [R4,#0xD4] } | |
__asm { VLDR S13, [R4,#0xD4] } | |
*(_DWORD *)(v3 + 17252) = 1; | |
__asm | |
{ | |
VDIV.F32 S11, S12, S13 | |
VSTR S10, [R4,#0xB4] | |
VSTR S11, [R4,#0xBC] | |
} | |
*(_DWORD *)(v3 + 92) = v65; | |
result = 0; | |
__asm | |
{ | |
VSTR S9, [R5,#0x40] | |
VSTR S13, [R5,#0x44] | |
} | |
LABEL_113: | |
if ( v76 != *(_DWORD *)v74 ) | |
_stack_chk_fail(result); | |
return result; | |
} | |
// 1B4C: using guessed type int __fastcall _stack_chk_fail(_DWORD); | |
// 9210: using guessed type char var_13C[256]; | |
//----- (00009950) -------------------------------------------------------- | |
int __fastcall awb_agw_algo(int a1, int a2, int a3) | |
{ | |
int v4; // r4@1 | |
int v5; // r9@1 | |
int v7; // r7@1 | |
int v8; // r0@1 | |
signed int v10; // r3@1 | |
int v11; // r1@2 | |
int v12; // r0@4 | |
int v13; // r6@8 | |
int v14; // r2@16 | |
int v15; // r1@16 | |
int v17; // r8@17 | |
int v18; // r1@23 | |
signed int v22; // r6@24 | |
int v23; // r7@24 | |
int v24; // r1@25 | |
int v25; // r0@25 | |
int v26; // r3@26 | |
int v27; // r2@27 | |
signed int v28; // r11@28 | |
signed int v29; // r11@32 | |
int v30; // ST0C_4@32 | |
int v31; // r0@32 | |
int v32; // r10@32 | |
signed int v33; // r0@32 | |
int v34; // r2@34 | |
int v35; // r1@34 | |
int v36; // r0@36 | |
int v37; // r10@36 | |
int v38; // r11@36 | |
int v39; // lr@36 | |
int v40; // r10@36 | |
int v41; // r0@36 | |
int v42; // r3@36 | |
int v43; // r2@52 | |
int v44; // r1@53 | |
int v45; // r3@55 | |
int v46; // r3@56 | |
int v47; // r10@56 | |
int v48; // r1@57 | |
int v49; // r3@58 | |
int v50; // r0@59 | |
int v51; // r1@60 | |
int v52; // r2@60 | |
int v53; // r3@60 | |
signed int v54; // r0@61 | |
signed int v55; // r1@61 | |
int v56; // r1@62 | |
int v57; // r1@63 | |
int v58; // r3@63 | |
int v59; // r2@64 | |
int v60; // r2@66 | |
int v61; // r0@69 | |
int v62; // r11@69 | |
int v63; // r1@74 | |
int v64; // r3@81 | |
int v65; // r0@81 | |
int v66; // r11@81 | |
int v67; // r10@81 | |
int v68; // r1@81 | |
int v69; // r0@81 | |
int v70; // r3@81 | |
int v71; // r2@83 | |
int v72; // r0@83 | |
int v73; // r0@85 | |
int v74; // r2@85 | |
int v75; // r2@86 | |
int v76; // r0@86 | |
signed int v77; // r10@88 | |
int v78; // r6@93 | |
signed int v79; // r0@94 | |
int v80; // r3@99 | |
int v84; // r7@100 | |
int v85; // r3@100 | |
signed int v88; // r8@100 | |
signed int v89; // r2@106 | |
int v90; // r3@110 | |
int v91; // r3@114 | |
int v93; // r3@118 | |
int v95; // r2@128 | |
int v96; // r6@132 | |
int v97; // r7@133 | |
int v98; // r8@133 | |
signed int v99; // r6@137 | |
signed int v100; // r7@137 | |
int v101; // r1@137 | |
int v102; // r8@138 | |
int v103; // r8@143 | |
int v104; // r4@152 | |
int v105; // r5@152 | |
int v106; // r3@154 | |
int v107; // r0@154 | |
int v108; // r7@155 | |
int v109; // r6@155 | |
int v110; // r6@155 | |
int v111; // r7@159 | |
int v112; // r2@159 | |
int i; // r3@159 | |
int v114; // t1@162 | |
int v115; // r0@162 | |
int v116; // r1@162 | |
bool v117; // r6@169 | |
int v118; // r7@171 | |
int v119; // r3@171 | |
int v122; // r8@171 | |
int v123; // r11@172 | |
int v124; // r1@172 | |
int v125; // r0@174 | |
int v127; // r0@215 | |
int v129; // r0@220 | |
int v130; // r1@222 | |
int v132; // r1@230 | |
signed int v133; // r3@243 | |
int v134; // r11@243 | |
int v135; // r1@244 | |
int v136; // r2@244 | |
int v137; // r8@244 | |
int v138; // r10@244 | |
int v139; // r0@245 | |
signed int v142; // r3@256 | |
int v143; // r11@256 | |
int v144; // r1@259 | |
int v145; // r2@259 | |
int v146; // r8@259 | |
int v147; // r10@259 | |
int v148; // r1@260 | |
int v151; // r3@271 | |
int v152; // r11@271 | |
int v153; // r2@271 | |
int v154; // r1@274 | |
int v155; // t1@274 | |
int v156; // r8@274 | |
int v157; // r10@274 | |
int v158; // r7@275 | |
int v161; // r2@287 | |
int v162; // r3@287 | |
int v163; // r7@287 | |
int v166; // r7@296 | |
int v167; // r3@303 | |
int v168; // r3@305 | |
signed int v169; // r2@307 | |
signed int v170; // r1@308 | |
signed int v171; // r3@310 | |
int v172; // lr@311 | |
int v173; // r12@311 | |
int v174; // r8@311 | |
int v175; // r10@311 | |
int v176; // r2@312 | |
signed int v177; // r0@314 | |
int v178; // r2@320 | |
signed int v182; // r3@328 | |
int v183; // r10@328 | |
signed int v184; // r2@329 | |
signed int v185; // r11@331 | |
signed int v186; // r3@331 | |
int v187; // r7@332 | |
int v188; // r12@332 | |
int v189; // r8@332 | |
int v190; // r0@333 | |
signed int v191; // r0@339 | |
int v195; // r3@351 | |
int v196; // r11@351 | |
int v197; // r3@353 | |
int v199; // r10@355 | |
int v200; // lr@355 | |
int v201; // r0@355 | |
int v202; // r2@356 | |
signed int v203; // r0@364 | |
int v204; // r8@364 | |
signed int v205; // r3@365 | |
signed int v206; // r3@367 | |
int v207; // r11@367 | |
int v208; // r10@368 | |
int v209; // r1@368 | |
int v210; // r7@369 | |
signed int v211; // r0@371 | |
int v212; // r7@377 | |
int v213; // r0@389 | |
int v215; // r2@389 | |
int v216; // r1@389 | |
int v219; // r3@404 | |
int v220; // r7@408 | |
int v221; // r2@412 | |
int v223; // r8@422 | |
int v224; // r0@424 | |
int v225; // r2@428 | |
int v226; // r10@432 | |
unsigned int v229; // r3@440 | |
int v230; // r8@447 | |
int v231; // r3@448 | |
int v232; // r0@448 | |
signed int v233; // r1@454 | |
int v234; // r2@465 | |
int v235; // r3@471 | |
int v236; // r0@477 | |
int v237; // r1@482 | |
int v238; // r11@484 | |
int v239; // r1@485 | |
int v240; // r8@485 | |
int v241; // r10@490 | |
int v248; // r11@513 | |
int v249; // r7@518 | |
signed int v250; // r0@525 | |
signed int v251; // r3@526 | |
signed int v252; // r1@526 | |
int v253; // lr@528 | |
signed int v254; // lr@528 | |
signed int v256; // r0@542 | |
signed int v257; // lr@543 | |
signed int v258; // r2@543 | |
int v259; // r12@545 | |
signed int v260; // r12@545 | |
int v264; // r8@567 | |
int v265; // r11@572 | |
int v266; // r0@585 | |
int v267; // r10@587 | |
int v268; // r1@594 | |
int v271; // r8@602 | |
int v278; // r3@624 | |
int v282; // r3@659 | |
int v283; // r0@681 | |
int v284; // r1@681 | |
int v285; // r3@681 | |
int v286; // r2@682 | |
signed int v287; // r0@693 | |
int v288; // r0@702 | |
int v289; // r6@702 | |
int v290; // r0@706 | |
signed int v291; // r0@709 | |
int v300; // r1@719 | |
int v310; // r0@732 | |
int v311; // r7@736 | |
int v312; // r0@743 | |
int v313; // r5@743 | |
int v314; // r1@743 | |
int v315; // r2@743 | |
int v316; // r3@743 | |
int v317; // r4@743 | |
int v318; // r1@743 | |
int v319; // r2@743 | |
int v321; // [sp+18h] [bp-50h]@24 | |
int v322; // [sp+18h] [bp-50h]@154 | |
int v323; // [sp+1Ch] [bp-4Ch]@171 | |
int v324; // [sp+1Ch] [bp-4Ch]@307 | |
signed int v325; // [sp+1Ch] [bp-4Ch]@367 | |
int v326; // [sp+20h] [bp-48h]@1 | |
int v327; // [sp+24h] [bp-44h]@171 | |
signed int v328; // [sp+24h] [bp-44h]@310 | |
int v329; // [sp+24h] [bp-44h]@331 | |
__asm { VMOV.F32 S18, #1.0 } | |
v4 = a3 + 168; | |
v5 = a2; | |
_R5 = a3; | |
v326 = a1; | |
v7 = *(_DWORD *)(a2 + 76); | |
memset((void *)(a3 + 12932), 0, 0x400u); | |
v8 = v4 + 13760; | |
_R4 = _R5 + 17184; | |
memset((void *)(v8 + 28), 0, 0x400u); | |
memset((void *)(v5 + 260), -1, 0x100u); | |
memset((void *)(_R5 + 17184), 0, 0x108u); | |
v10 = 1; | |
*(_DWORD *)(_R5 + 17184) = 1; | |
__asm { VLDR S15, =0.0 } | |
*(_DWORD *)(_R5 + 17416) = 10; | |
__asm | |
{ | |
VSTR S18, [R4,#0xB4] | |
VSTR S18, [R4,#0xB8] | |
VSTR S18, [R4,#0xBC] | |
VSTR S18, [R4,#0xD8] | |
VSTR S18, [R4,#0xDC] | |
} | |
*(_DWORD *)(_R5 + 17288) = -1; | |
__asm { VSTR S15, [R4,#0xE0] } | |
*(_DWORD *)(_R5 + 17272) = -1; | |
__asm { VSTR S15, [R4,#0xE4] } | |
*(_DWORD *)(_R5 + 17268) = -1; | |
__asm { VSTR S18, [R4,#0xD0] } | |
*(_DWORD *)(_R5 + 17244) = 1; | |
__asm { VSTR S18, [R4,#0xD4] } | |
*(_DWORD *)(_R5 + 17248) = 1; | |
__asm { VSTR S18, [R4,#0x104] } | |
*(_BYTE *)(_R5 + 17420) = 0; | |
__asm | |
{ | |
VSTR S18, [R4,#0x100] | |
VSTR S18, [R4,#0xF4] | |
VSTR S18, [R4,#0xF8] | |
VSTR S18, [R4,#0xFC] | |
} | |
*(_DWORD *)(_R5 + 17424) = 10; | |
if ( !*(_DWORD *)(v5 + 240) ) | |
goto LABEL_741; | |
v11 = *(_DWORD *)(v5 + 836) - *(_DWORD *)(v5 + 840); | |
if ( v11 < 0 ) | |
v11 = -v11; | |
*(_DWORD *)(_R5 + 17360) = v11; | |
v12 = *(_DWORD *)(_R5 + 84); | |
if ( v12 == 1 ) | |
{ | |
if ( v11 > 15 && *(_DWORD *)(v5 + 240) < *(_DWORD *)(v5 + 860) - 1 ) | |
goto LABEL_741; | |
goto LABEL_7; | |
} | |
if ( v12 ) | |
LABEL_7: | |
v10 = 0; | |
*(_DWORD *)(v5 + 252) = v10; | |
v13 = *(_DWORD *)(_R5 + 84); | |
if ( v13 ) | |
{ | |
if ( v13 != 1 || *(_DWORD *)(_R5 + 88) == 10 ) | |
goto LABEL_15; | |
__asm | |
{ | |
VLDR S0, [R5,#0x48] | |
VSTR S0, [R4,#0xD0] | |
VLDR S1, [R5,#0x4C] | |
} | |
goto LABEL_14; | |
} | |
if ( *(_DWORD *)(_R5 + 92) != 10 ) | |
{ | |
__asm | |
{ | |
VLDR S2, [R5,#0x40] | |
VSTR S2, [R4,#0xD0] | |
VLDR S1, [R5,#0x44] | |
} | |
LABEL_14: | |
__asm { VSTR S1, [R4,#0xD4] } | |
} | |
LABEL_15: | |
if ( *(_BYTE *)(v7 + 54264) ) | |
{ | |
v14 = *(_DWORD *)(v5 + 76); | |
v15 = *(_DWORD *)(v5 + 240); | |
_R3 = v14 + 54268; | |
if ( v15 > *(_DWORD *)(v14 + 54268) ) | |
{ | |
v17 = v14 + 54284; | |
if ( v15 > *(_DWORD *)(v14 + 54284) | |
&& (v17 = v14 + 54300, v15 > *(_DWORD *)(v14 + 54300)) | |
&& (v17 = v14 + 54316, v15 > *(_DWORD *)(v14 + 54316)) | |
&& (v17 = v14 + 54332, v15 > *(_DWORD *)(v14 + 54332)) ) | |
_R3 = v14 + 54348; | |
else | |
_R3 = v17; | |
} | |
__asm | |
{ | |
VLDR S3, [R3,#8] | |
VCVTR.S32.F32 S4, S3 | |
} | |
v18 = _R5 + 10368; | |
__asm { VMOV R10, S4 } | |
*(_DWORD *)(v18 + 20) = 2 * (_R10 + *(_DWORD *)(v14 + 2164)); | |
__asm | |
{ | |
VLDR S5, [R3,#4] | |
VCVTR.S32.F32 S6, S5 | |
VMOV R12, S6 | |
} | |
*(_DWORD *)(v18 + 16) = 2 * (_R12 + *(_DWORD *)(v14 + 2160)); | |
__asm | |
{ | |
VLDR S7, [R3,#0xC] | |
VCVTR.S32.F32 S8, S7 | |
VMOV LR, S8 | |
} | |
*(_DWORD *)(_R5 + 17180) = 2 * (_LR + *(_DWORD *)(v14 + 2156)); | |
} | |
*(_DWORD *)(v5 + 256) = 1; | |
v22 = 0; | |
v23 = v5; | |
v321 = _R5 + 4208; | |
while ( 1 ) | |
{ | |
v77 = *(_DWORD *)(_R5 + 17448); | |
if ( v22 >= v77 || v22 == 256 ) | |
break; | |
v24 = _R5 + 17448 + 4 * v22; | |
v25 = *(_DWORD *)(v24 + 8); | |
if ( v25 < 0 ) | |
goto LABEL_741; | |
v26 = *(_DWORD *)(v24 + 1032); | |
if ( v26 < 0 ) | |
goto LABEL_741; | |
v27 = *(_DWORD *)(v24 + 2056); | |
if ( v27 < 0 ) | |
goto LABEL_741; | |
v28 = *(_DWORD *)_R4; | |
*(_DWORD *)(_R5 + 17188) += *(_DWORD *)(_R5 + 17184); | |
if ( v28 > *(_DWORD *)(_R5 + 17192) ) | |
*(_DWORD *)(_R5 + 17192) = v28; | |
if ( v26 ) | |
*(_DWORD *)_R4 = v26; | |
v29 = *(_DWORD *)_R4; | |
v30 = *(_DWORD *)_R4 >> 1; | |
v31 = ((v29 >> 1) + (v25 << 10)) / v29; | |
*(_DWORD *)(_R5 + 17244) = v31; | |
v32 = v31; | |
v33 = (v30 + (v27 << 10)) / v29; | |
*(_DWORD *)(_R5 + 17236) += v32; | |
*(_DWORD *)(_R5 + 17248) = v33; | |
*(_DWORD *)(_R5 + 17240) += v33; | |
if ( v32 > 4000 || v33 > 4000 ) | |
goto LABEL_741; | |
awb_util_convert_to_grid(_R5, v32, v33, _R5 + 17216, _R5 + 17220); | |
v34 = *(_DWORD *)(_R5 + 17216); | |
v35 = *(_DWORD *)(_R5 + 4176); | |
if ( *(_DWORD *)(_R5 + 4168) < v35 ) | |
v35 = *(_DWORD *)(_R5 + 4168); | |
v36 = _R5 + 17280; | |
*(_DWORD *)(v36 + 44) = v35; | |
v37 = *(_DWORD *)(_R5 + 10388); | |
v38 = v37 + (*(_DWORD *)(_R5 + 4188) + *(_DWORD *)(_R5 + 4212)) / 2; | |
*(_DWORD *)(v36 + 48) = v38; | |
v39 = *(_DWORD *)v321; | |
v40 = v37 + *(_DWORD *)v321; | |
*(_DWORD *)(v36 + 52) = v40; | |
v41 = *(_DWORD *)(_R5 + 10396) + *(_DWORD *)(_R5 + 10392) * v34 / 256; | |
*(_DWORD *)(_R5 + 17336) = v41; | |
v42 = *(_DWORD *)(_R5 + 17220); | |
if ( v42 > v41 || v34 <= 0 || v34 > v35 + 2 * *(_DWORD *)(_R5 + 10384) || v42 >= v38 ) | |
{ | |
if ( v34 < v35 ) | |
{ | |
if ( v42 > v40 ) | |
goto LABEL_49; | |
LABEL_48: | |
++*(_DWORD *)(_R5 + 17356); | |
goto LABEL_49; | |
} | |
goto LABEL_745; | |
} | |
if ( v42 <= v40 ) | |
{ | |
if ( v34 < v35 ) | |
goto LABEL_48; | |
LABEL_745: | |
if ( v42 < v39 ) | |
goto LABEL_47; | |
goto LABEL_49; | |
} | |
++*(_DWORD *)(_R5 + 17352); | |
*(_DWORD *)(_R5 + 17340) += v42; | |
if ( v42 < v39 && v34 >= v35 ) | |
{ | |
LABEL_47: | |
if ( v34 >= *(_DWORD *)(_R5 + 4160) ) | |
goto LABEL_49; | |
goto LABEL_48; | |
} | |
LABEL_49: | |
sub_84A8(v5, _R5, v34, v42); | |
*(_DWORD *)(v23 + 260) = *(_DWORD *)(_R5 + 17416); | |
if ( *(_DWORD *)(_R5 + 17196) > 4 * *(_DWORD *)(_R5 + 17180) * *(_DWORD *)(_R5 + 17180) ) | |
*(_DWORD *)(v23 + 260) = -1; | |
if ( *(_DWORD *)(_R5 + 17196) > *(_DWORD *)(_R5 + 17180) * *(_DWORD *)(_R5 + 17180) | |
|| (v43 = *(_DWORD *)(_R5 + 17220), v43 > *(_DWORD *)(_R5 + 4192)) | |
|| (v44 = *(_DWORD *)(_R5 + 17216), v44 > *(_DWORD *)(_R5 + 4172) + 3) | |
|| v43 < *(_DWORD *)v321 - 3 ) | |
{ | |
v45 = *(_DWORD *)(_R5 + 17232); | |
*(_DWORD *)(_R5 + 4 * (v45 + 3190) + 172) = *(_DWORD *)(_R5 + 17216); | |
*(_DWORD *)(_R5 + 4 * (v45 + 3446) + 172) = *(_DWORD *)(_R5 + 17220); | |
*(_DWORD *)(_R5 + 17232) = v45 + 1; | |
goto LABEL_87; | |
} | |
v46 = *(_DWORD *)(_R5 + 17256); | |
*(_DWORD *)(_R5 + 4 * (v46 + 1014) + 168) = v44; | |
*(_DWORD *)(_R5 + 4 * (v46 + 1270) + 168) = v43; | |
*(_DWORD *)(_R5 + 17256) = v46 + 1; | |
v47 = *(_DWORD *)(v5 + 240); | |
if ( v47 >= *(_DWORD *)(v5 + 816) ) | |
{ | |
v48 = *(_DWORD *)(_R5 + 17416); | |
if ( v48 < 0 ) | |
LABEL_68: | |
v49 = 0; | |
else | |
v49 = *(_DWORD *)(_R5 + 12 * v48 + 168); | |
LABEL_80: | |
*(_DWORD *)(_R5 + 17260) = v49; | |
goto LABEL_81; | |
} | |
v50 = *(_DWORD *)(_R5 + 32); | |
if ( v47 >= v50 ) | |
{ | |
v51 = v47 - v50; | |
*(_DWORD *)(_R5 + 17324) = v47 - v50; | |
v52 = *(_DWORD *)(v5 + 816) - *(_DWORD *)(v5 + 240); | |
v53 = *(_DWORD *)(_R5 + 17416); | |
*(_DWORD *)(_R5 + 17328) = v52; | |
if ( v53 < 0 ) | |
goto LABEL_68; | |
v54 = *(_DWORD *)(_R5 + 12 * v53 + 176) * v52 + *(_DWORD *)(_R5 + 12 * v53 + 168) * v51; | |
v55 = v51 + v52; | |
goto LABEL_78; | |
} | |
v56 = *(_DWORD *)(v5 + 820); | |
if ( v47 >= v56 ) | |
{ | |
v57 = v47 - v56; | |
*(_DWORD *)(_R5 + 17324) = v57; | |
v58 = v50 - *(_DWORD *)(v5 + 240); | |
LABEL_66: | |
v60 = *(_DWORD *)(_R5 + 17416); | |
*(_DWORD *)(_R5 + 17328) = v58; | |
if ( v60 < 0 ) | |
goto LABEL_68; | |
v54 = *(_DWORD *)(_R5 + 12 * v60 + 172) * v58 + *(_DWORD *)(_R5 + 12 * v60 + 176) * v57; | |
v55 = v57 + v58; | |
goto LABEL_78; | |
} | |
v59 = *(_DWORD *)(_R5 + 36); | |
if ( v47 >= v59 ) | |
{ | |
v57 = v47 - v59; | |
*(_DWORD *)(_R5 + 17324) = v47 - v59; | |
v58 = *(_DWORD *)(v5 + 820) - *(_DWORD *)(v5 + 240); | |
goto LABEL_66; | |
} | |
v61 = *(_DWORD *)(_R5 + 17416); | |
*(_DWORD *)(_R5 + 17324) = v47; | |
v62 = v59 - *(_DWORD *)(v5 + 240); | |
*(_DWORD *)(_R5 + 17328) = v62; | |
if ( v61 == 1 ) | |
{ | |
v54 = v62 + *(_DWORD *)(_R5 + 184) * v47; | |
} | |
else if ( v61 ) | |
{ | |
if ( v61 != 9 ) | |
{ | |
v49 = *(_DWORD *)(_R5 + 12 * v61 + 172); | |
goto LABEL_80; | |
} | |
v63 = *(_DWORD *)(_R5 + 280); | |
if ( *(_DWORD *)(_R5 + 17320) == 1 ) | |
v54 = 2 * v62 + v63 * v47; | |
else | |
v54 = v63 * v47 + v63 * v62 / 3; | |
} | |
else | |
{ | |
v54 = 2 * v62 + *(_DWORD *)(_R5 + 172) * v47; | |
} | |
v55 = v47 + v62; | |
LABEL_78: | |
*(_DWORD *)(_R5 + 17260) = v54 / v55; | |
LABEL_81: | |
v64 = *(_DWORD *)(_R5 + 17260); | |
v65 = *(_DWORD *)(_R5 + 17208); | |
v66 = *(_DWORD *)(_R5 + 17244); | |
*(_DWORD *)(_R5 + 17204) += v64; | |
v67 = *(_DWORD *)(_R5 + 17248); | |
v68 = v65 + v64 * v66; | |
v69 = *(_DWORD *)(_R5 + 17416); | |
v70 = *(_DWORD *)(_R5 + 17212) + v64 * v67; | |
*(_DWORD *)(_R5 + 17208) = v68; | |
*(_DWORD *)(_R5 + 17212) = v70; | |
if ( v69 != 2 && v69 != 5 ) | |
{ | |
if ( sub_8412(v69) ) | |
{ | |
v75 = *(_DWORD *)(_R5 + 17312); | |
v76 = *(_DWORD *)(_R5 + 17316); | |
++*(_DWORD *)(_R5 + 17308); | |
*(_DWORD *)(_R5 + 17312) = v75 + v66; | |
*(_DWORD *)(_R5 + 17316) = v76 + v67; | |
} | |
else | |
{ | |
v73 = *(_DWORD *)(_R5 + 17296); | |
v74 = *(_DWORD *)(_R5 + 17300); | |
++*(_DWORD *)(_R5 + 17292); | |
*(_DWORD *)(_R5 + 17296) = v73 + v66; | |
*(_DWORD *)(_R5 + 17300) = v74 + v67; | |
} | |
} | |
else | |
{ | |
v71 = *(_DWORD *)(_R5 + 17280); | |
v72 = *(_DWORD *)(_R5 + 17284); | |
++*(_DWORD *)(_R5 + 17276); | |
*(_DWORD *)(_R5 + 17280) = v71 + v66; | |
*(_DWORD *)(_R5 + 17284) = v72 + v67; | |
} | |
LABEL_87: | |
++v22; | |
v23 += 4; | |
} | |
v310 = *(_DWORD *)(_R5 + 17188) / v77; | |
v289 = _R5 + 17152; | |
*(_DWORD *)(_R5 + 17188) = v310 >> 10; | |
if ( v310 >> 10 <= 9 && *(_DWORD *)(_R5 + 17192) <= 19 && *(_DWORD *)(v5 + 240) >= *(_DWORD *)(v5 + 860) - 1 ) | |
{ | |
LABEL_704: | |
v104 = v326; | |
v105 = v289 + 268; | |
goto LABEL_743; | |
} | |
v78 = *(_DWORD *)(_R5 + 84); | |
if ( v78 == 1 ) | |
{ | |
v79 = *(_DWORD *)(_R5 + 17308) > 0; | |
if ( *(_DWORD *)(_R5 + 17292) > 0 ) | |
++v79; | |
if ( *(_DWORD *)(_R5 + 17276) > 0 ) | |
++v79; | |
if ( v79 > 1 ) | |
{ | |
v80 = *(_DWORD *)(_R5 + 24); | |
_VF = __OFSUB__(v80, 49); | |
_ZF = v80 == 49; | |
_NF = v80 - 49 < 0; | |
goto LABEL_458; | |
} | |
} | |
v84 = *(_DWORD *)(_R5 + 17236); | |
v85 = *(_DWORD *)(_R5 + 17240); | |
*(_DWORD *)(_R5 + 17236) = ((v77 >> 1) + v84) / v77; | |
_R7 = ((v77 >> 1) + v84) / v77; | |
__asm | |
{ | |
VMOV S13, R7 | |
VCVT.F32.S32 S14, S13 | |
VLDR S9, =0.00097656 | |
VMUL.F32 S10, S14, S9 | |
} | |
_R10 = ((v77 >> 1) + v85) / v77; | |
__asm | |
{ | |
VMOV S11, R10 | |
VCVT.F32.S32 S12, S11 | |
} | |
*(_DWORD *)(_R5 + 17240) = _R10; | |
__asm | |
{ | |
VSTR S10, [R0,#0x60] | |
VMUL.F32 S16, S12, S9 | |
VSTR S16, [R0,#0x64] | |
} | |
v88 = *(_DWORD *)(_R5 + 17352); | |
__asm { VMOV.F32 S16, S9 } | |
if ( v88 > 0 ) | |
*(_DWORD *)(_R5 + 17340) /= v88; | |
if ( v78 == 1 ) | |
{ | |
*(_DWORD *)(_R5 + 16) = v88; | |
if ( !*(_DWORD *)(_R5 + 17308) && !*(_DWORD *)(_R5 + 17276) && !*(_DWORD *)(_R5 + 17292) ) | |
{ | |
v89 = *(_DWORD *)(_R5 + 24); | |
if ( *(_DWORD *)(v5 + 240) == *(_DWORD *)(v5 + 860) - 1 ) | |
{ | |
if ( (v89 + 10 < 0) ^ __OFADD__(v89, 10) ) | |
goto LABEL_593; | |
} | |
else if ( v89 <= 9 ) | |
{ | |
goto LABEL_593; | |
} | |
v90 = v89 - 1; | |
goto LABEL_463; | |
} | |
} | |
if ( !*(_DWORD *)(v5 + 840) && *(_DWORD *)(v5 + 240) == *(_DWORD *)(v5 + 860) - 1 ) | |
{ | |
if ( *(_DWORD *)(v5 + 152) ) | |
{ | |
v91 = *(_DWORD *)(v5 + 156); | |
if ( v91 && v91 != 3 ) | |
{ | |
_R2 = _R5 + 17152; | |
__asm | |
{ | |
VLDR S0, [R2,#4] | |
VSTR S0, [R4,#0xD0] | |
VDIV.F32 S1, S18, S0 | |
VLDR S15, [R2,#8] | |
} | |
*(_DWORD *)(_R5 + 17416) = 0; | |
__asm | |
{ | |
VSTR S15, [R4,#0xD4] | |
VSTR S18, [R4,#0xB8] | |
} | |
*(_DWORD *)(_R5 + 17348) = 1; | |
__asm | |
{ | |
VDIV.F32 S2, S18, S15 | |
VSTR S1, [R4,#0xB4] | |
VSTR S2, [R4,#0xBC] | |
} | |
} | |
goto LABEL_117; | |
} | |
LABEL_741: | |
_R5 = _R5 + 17152; | |
goto LABEL_742; | |
} | |
LABEL_117: | |
if ( *(_DWORD *)(v5 + 152) ) | |
{ | |
v93 = *(_DWORD *)(v5 + 156); | |
if ( v93 ) | |
{ | |
if ( v93 != 3 ) | |
*(_DWORD *)(_R5 + 17352) = 0; | |
} | |
} | |
if ( *(_DWORD *)(v5 + 240) == *(_DWORD *)(v5 + 860) - 1 ) | |
{ | |
_R6 = _R5 + 17152; | |
if ( !*(_DWORD *)(_R5 + 17308) && !*(_DWORD *)(_R5 + 17292) && !*(_DWORD *)(_R5 + 17276) ) | |
{ | |
awb_util_convert_to_grid(_R5, _R7, _R10, _R5 + 17216, _R5 + 17220); | |
sub_84A8(v5, _R5, *(_DWORD *)(_R5 + 17216), *(_DWORD *)(_R5 + 17220)); | |
if ( *(_DWORD *)(v5 + 152) ) | |
{ | |
v95 = *(_DWORD *)(v5 + 156); | |
if ( !v95 || v95 == 3 ) | |
goto LABEL_741; | |
__asm | |
{ | |
VLDR S3, [R6,#4] | |
VSTR S3, [R4,#0xD0] | |
VLDR S4, [R6,#8] | |
} | |
*(_DWORD *)(_R5 + 17416) = 0; | |
__asm { VSTR S4, [R4,#0xD4] } | |
} | |
else | |
{ | |
if ( *(_DWORD *)(_R5 + 17196) > 2 * *(_DWORD *)(_R5 + 17180) * *(_DWORD *)(_R5 + 17180) ) | |
goto LABEL_741; | |
__asm | |
{ | |
VLDR S5, [R4,#0xC0] | |
VLDR S6, [R4,#0xC4] | |
VSTR S5, [R4,#0xD0] | |
VSTR S6, [R4,#0xD4] | |
} | |
} | |
__asm | |
{ | |
VLDR S7, [R4,#0xD0] | |
VLDR S13, [R4,#0xD4] | |
VDIV.F32 S8, S18, S7 | |
VSTR S18, [R4,#0xB8] | |
} | |
*(_DWORD *)(_R5 + 17348) = 1; | |
__asm | |
{ | |
VDIV.F32 S14, S18, S13 | |
VSTR S8, [R4,#0xB4] | |
VSTR S14, [R4,#0xBC] | |
} | |
} | |
} | |
if ( *(_DWORD *)(_R5 + 17348) ) | |
{ | |
v291 = *(_DWORD *)(_R5 + 17416); | |
goto LABEL_724; | |
} | |
v96 = *(_DWORD *)(_R5 + 17256); | |
if ( v96 <= 0 ) | |
{ | |
if ( sub_9210(v5, _R5) < 0 ) | |
{ | |
v104 = v326; | |
v105 = _R5 + 17420; | |
goto LABEL_743; | |
} | |
} | |
else | |
{ | |
v97 = *(_DWORD *)(v5 + 76); | |
v98 = *(_DWORD *)(_R5 + 17276); | |
if ( v98 <= *(_BYTE *)(v97 + 2184) * v96 / 100 || *(_DWORD *)(v5 + 240) < *(_DWORD *)(_R5 + 32) ) | |
{ | |
v102 = *(_DWORD *)(_R5 + 17292); | |
if ( v102 <= *(_BYTE *)(v97 + 2185) * v96 / 100 || *(_DWORD *)(v5 + 240) < *(_DWORD *)(v5 + 816) ) | |
{ | |
v103 = *(_DWORD *)(_R5 + 17308); | |
if ( v103 <= *(_BYTE *)(v97 + 2186) * v96 / 100 ) | |
{ | |
if ( !*(_DWORD *)(_R5 + 17204) ) | |
*(_DWORD *)(_R5 + 17204) = 1; | |
v99 = *(_DWORD *)(_R5 + 17204); | |
v100 = v99 >> 1; | |
v101 = *(_DWORD *)(_R5 + 17212); | |
*(_DWORD *)(_R5 + 17208) = ((v99 >> 1) + *(_DWORD *)(_R5 + 17208)) / *(_DWORD *)(_R5 + 17204); | |
} | |
else | |
{ | |
if ( !v103 ) | |
*(_DWORD *)(_R5 + 17308) = 1; | |
v99 = *(_DWORD *)(_R5 + 17308); | |
v100 = v99 >> 1; | |
v101 = *(_DWORD *)(_R5 + 17316); | |
*(_DWORD *)(_R5 + 17208) = ((v99 >> 1) + *(_DWORD *)(_R5 + 17312)) / *(_DWORD *)(_R5 + 17308); | |
} | |
} | |
else | |
{ | |
if ( !v102 ) | |
*(_DWORD *)(_R5 + 17292) = 1; | |
v99 = *(_DWORD *)(_R5 + 17292); | |
v100 = v99 >> 1; | |
v101 = *(_DWORD *)(_R5 + 17300); | |
*(_DWORD *)(_R5 + 17208) = ((v99 >> 1) + *(_DWORD *)(_R5 + 17296)) / *(_DWORD *)(_R5 + 17292); | |
} | |
} | |
else | |
{ | |
if ( !v98 ) | |
*(_DWORD *)(_R5 + 17276) = 1; | |
v99 = *(_DWORD *)(_R5 + 17276); | |
v100 = v99 >> 1; | |
v101 = *(_DWORD *)(_R5 + 17284); | |
*(_DWORD *)(_R5 + 17208) = ((v99 >> 1) + *(_DWORD *)(_R5 + 17280)) / *(_DWORD *)(_R5 + 17276); | |
} | |
__asm | |
{ | |
VLDR S9, [R4,#0x18] | |
VCVT.F32.S32 S10, S9 | |
VMUL.F32 S11, S10, S16 | |
VSTR S11, [R4,#0xC8] | |
} | |
*(_DWORD *)(_R5 + 17212) = (v100 + v101) / v99; | |
__asm | |
{ | |
VLDR S12, [R4,#0x1C] | |
VCVT.F32.S32 S0, S12 | |
VMUL.F32 S16, S0, S16 | |
VSTR S16, [R4,#0xCC] | |
} | |
sub_8804(_R5); | |
} | |
if ( *(_DWORD *)(_R5 + 17252) == 1 ) | |
goto LABEL_701; | |
v322 = *(_DWORD *)(v5 + 76); | |
awb_util_convert_to_grid(_R5, *(_DWORD *)(_R5 + 17208), *(_DWORD *)(_R5 + 17212), _R5 + 17224, _R5 + 17228); | |
v106 = 0; | |
v107 = *(_DWORD *)(_R5 + 17256); | |
*(_DWORD *)(_R5 + 17200) = 0; | |
while ( v106 < v107 && v106 != 256 ) | |
{ | |
v108 = _R5 + 168 + 4 * v106; | |
v109 = *(_DWORD *)(v108 + 4056) - *(_DWORD *)(_R5 + 17224); | |
v110 = (*(_DWORD *)(v108 + 5080) - *(_DWORD *)(_R5 + 17228)) * (*(_DWORD *)(v108 + 5080) - *(_DWORD *)(_R5 + 17228)) | |
+ v109 * v109; | |
if ( v110 > *(_DWORD *)(_R5 + 17200) ) | |
*(_DWORD *)(_R5 + 17200) = v110; | |
++v106; | |
} | |
v111 = *(_DWORD *)(_R5 + 17232); | |
v112 = _R5 + 12928; | |
for ( i = 0; i < v111 && i != 256; ++i ) | |
{ | |
v114 = *(_DWORD *)(v112 + 4); | |
v112 += 4; | |
v115 = *(_DWORD *)(v112 + 1024) - *(_DWORD *)(_R5 + 17228); | |
v116 = v115 * v115 + (v114 - *(_DWORD *)(_R5 + 17224)) * (v114 - *(_DWORD *)(_R5 + 17224)); | |
if ( v116 > *(_DWORD *)(_R5 + 17200) ) | |
*(_DWORD *)(_R5 + 17200) = v116; | |
} | |
v117 = *(_DWORD *)(_R5 + 17200) <= 4 * *(_WORD *)(v322 + 2180) && !*(_DWORD *)(_R5 + 84); | |
__asm { VMOV.F64 D8, #1.0 } | |
v118 = *(_DWORD *)(_R5 + 17228); | |
*(_DWORD *)(_R5 + 17264) = v117; | |
v119 = *(_DWORD *)(_R5 + 17224); | |
_R6 = _R5 + 17184; | |
v327 = v118; | |
_R7 = _R5 + 16056; | |
v122 = 0; | |
*(_DWORD *)(_R5 + 17196) = 0x3FFFFFFF; | |
v323 = v119; | |
while ( 2 ) | |
{ | |
v123 = (v327 - *(_DWORD *)(_R7 - 11868)) * (v327 - *(_DWORD *)(_R7 - 11868)) | |
+ (v323 - *(_DWORD *)(_R7 - 11904)) * (v323 - *(_DWORD *)(_R7 - 11904)); | |
v124 = *(_DWORD *)(_R5 + 17196); | |
if ( v123 >= v124 ) | |
{ | |
if ( v123 != v124 ) | |
goto LABEL_239; | |
if ( !sub_8412(v122) ) | |
{ | |
if ( v122 == 7 && (unsigned int)(*(_DWORD *)(_R5 + 17416) - 3) <= 1 ) | |
{ | |
v127 = *(_DWORD *)(_R5 + 17264); | |
*(_DWORD *)(_R5 + 17416) = 7; | |
if ( v127 && v123 <= 4 * *(_WORD *)(v322 + 2182) ) | |
{ | |
__asm | |
{ | |
VLDR S14, [R4,#0xC0] | |
VLDR S13, [R4,#0xC4] | |
VSTR S14, [R4,#0xD0] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VLDR S2, [R4,#0xC8] | |
VLDR S1, [R7,#-0x24] | |
VCVT.F64.F32 D17, S1 | |
} | |
_R2 = v322 + 2232; | |
__asm | |
{ | |
VLDR S15, [R2] | |
VLDR S7, [R4,#0xCC] | |
VMUL.F32 S3, S15, S2 | |
VCVT.F64.F32 D18, S15 | |
VSUB.F64 D19, D8, D18 | |
VCVT.F64.F32 D16, S3 | |
VMLA.F64 D16, D19, D17 | |
VCVT.F32.F64 S4, D16 | |
VSTR S4, [R4,#0xD0] | |
VLDR S5, [R2] | |
VMUL.F32 S8, S5, S7 | |
VLDR S6, [R7] | |
VCVT.F64.F32 D20, S5 | |
VSUB.F64 D21, D8, D20 | |
VCVT.F64.F32 D22, S6 | |
VCVT.F64.F32 D23, S8 | |
VMLA.F64 D23, D21, D22 | |
VCVT.F32.F64 S13, D23 | |
} | |
} | |
__asm { VSTR S13, [R4,#0xD4] } | |
} | |
v129 = *(_DWORD *)(_R5 + 17416); | |
if ( v129 == 2 || v129 == 5 ) | |
{ | |
v130 = *(_DWORD *)(_R5 + 17264); | |
*(_DWORD *)(_R5 + 17416) = v122; | |
if ( v130 && v123 <= 4 * *(_WORD *)(v322 + 2182) ) | |
{ | |
__asm | |
{ | |
VLDR S5, [R4,#0xC0] | |
VLDR S4, [R4,#0xC4] | |
VSTR S5, [R4,#0xD0] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VLDR S11, [R4,#0xC8] | |
VLDR S10, [R7,#-0x24] | |
VCVT.F64.F32 D26, S10 | |
} | |
_R1 = v322 + 2232; | |
__asm | |
{ | |
VLDR S9, [R1] | |
VLDR S2, [R4,#0xCC] | |
VMUL.F32 S12, S9, S11 | |
VCVT.F64.F32 D24, S9 | |
VSUB.F64 D25, D8, D24 | |
VCVT.F64.F32 D27, S12 | |
VMLA.F64 D27, D25, D26 | |
VCVT.F32.F64 S0, D27 | |
VSTR S0, [R4,#0xD0] | |
VLDR S15, [R1] | |
VMUL.F32 S3, S15, S2 | |
VLDR S1, [R7] | |
VCVT.F64.F32 D28, S15 | |
VSUB.F64 D29, D8, D28 | |
VCVT.F64.F32 D30, S1 | |
VCVT.F64.F32 D31, S3 | |
VMLA.F64 D31, D29, D30 | |
VCVT.F32.F64 S4, D31 | |
} | |
} | |
__asm { VSTR S4, [R4,#0xD4] } | |
} | |
} | |
if ( v122 != 6 || *(_DWORD *)(v5 + 240) < *(_DWORD *)(_R5 + 32) || sub_8412(*(_DWORD *)(_R5 + 17416)) ) | |
goto LABEL_239; | |
v132 = *(_DWORD *)(_R5 + 17264); | |
*(_DWORD *)(_R5 + 17416) = v122; | |
if ( !v132 || v123 > 4 * *(_WORD *)(v322 + 2182) ) | |
{ | |
__asm | |
{ | |
VLDR S7, [R7,#-0x24] | |
VLDR S6, [R4,#0xC8] | |
VCMP.F32 S6, S7 | |
VLDR S8, [R4,#0xCC] | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
__asm { VMOVGT.F32 S7, S6 } | |
__asm | |
{ | |
VSTR S7, [R4,#0xD0] | |
VLDR S13, [R7] | |
VCMP.F32 S8, S13 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F32 S13, S8 } | |
__asm { VSTR S13, [R6,#0xD4] } | |
goto LABEL_239; | |
} | |
goto LABEL_232; | |
} | |
*(_DWORD *)(_R5 + 17416) = v122; | |
*(_DWORD *)(_R5 + 17196) = v123; | |
if ( (unsigned int)(v122 - 3) <= 1 ) | |
{ | |
LABEL_177: | |
if ( *(_DWORD *)(_R5 + 17264) && v123 <= 4 * *(_WORD *)(v322 + 2182) ) | |
{ | |
__asm | |
{ | |
VLDR S0, [R4,#0xC0] | |
VLDR S12, [R4,#0xC4] | |
VSTR S0, [R4,#0xD0] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VLDR S7, [R4,#0xC8] | |
VLDR S6, [R7,#-0x24] | |
VCVT.F64.F32 D17, S6 | |
} | |
_R3 = v322 + 2232; | |
__asm | |
{ | |
VLDR S5, [R3] | |
VLDR S10, [R4,#0xCC] | |
VMUL.F32 S8, S5, S7 | |
VCVT.F64.F32 D18, S5 | |
VSUB.F64 D19, D8, D18 | |
VCVT.F64.F32 D16, S8 | |
VMLA.F64 D16, D19, D17 | |
VCVT.F32.F64 S13, D16 | |
VSTR S13, [R4,#0xD0] | |
VLDR S9, [R3] | |
VMUL.F32 S11, S9, S10 | |
VLDR S14, [R7] | |
VCVT.F64.F32 D20, S9 | |
VSUB.F64 D21, D8, D20 | |
VCVT.F64.F32 D22, S14 | |
VCVT.F64.F32 D23, S11 | |
VMLA.F64 D23, D21, D22 | |
VCVT.F32.F64 S12, D23 | |
} | |
} | |
__asm { VSTR S12, [R4,#0xD4] } | |
if ( _ZF ) | |
{ | |
*(_DWORD *)(_R5 + 17288) = 0; | |
} | |
else if ( v122 == 3 ) | |
{ | |
*(_DWORD *)(_R5 + 17288) = *(_DWORD *)(_R5 + 6272) - 1; | |
} | |
goto LABEL_239; | |
} | |
v125 = *(_DWORD *)(_R5 + 80); | |
if ( v122 != 7 ) | |
{ | |
if ( v122 == 2 ) | |
{ | |
if ( v125 && v125 != 2 ) | |
goto LABEL_203; | |
if ( *(_DWORD *)(_R5 + 17264) && v123 <= 4 * *(_WORD *)(v322 + 2182) ) | |
{ | |
__asm | |
{ | |
VLDR S0, [R4,#0xC0] | |
VLDR S12, [R4,#0xC4] | |
VSTR S0, [R4,#0xD0] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VLDR S11, [R4,#0xC8] | |
VLDR S12, [R4,#0xCC] | |
VSTR S11, [R4,#0xD0] | |
} | |
} | |
__asm { VSTR S12, [R4,#0xD4] } | |
*(_DWORD *)(_R5 + 17272) = 0; | |
} | |
else | |
{ | |
if ( v122 != 5 || v125 && v125 != 2 ) | |
goto LABEL_203; | |
if ( *(_DWORD *)(_R5 + 17264) && v123 <= 4 * *(_WORD *)(v322 + 2182) ) | |
{ | |
__asm | |
{ | |
VLDR S10, [R4,#0xC0] | |
VLDR S9, [R4,#0xC4] | |
VSTR S10, [R4,#0xD0] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VLDR S14, [R4,#0xC8] | |
VLDR S9, [R4,#0xCC] | |
VSTR S14, [R4,#0xD0] | |
} | |
} | |
__asm { VSTR S9, [R4,#0xD4] } | |
*(_DWORD *)(_R5 + 17272) = *(_DWORD *)(_R5 + 8328) - 1; | |
} | |
*(_DWORD *)(_R5 + 17268) = 2; | |
goto LABEL_239; | |
} | |
if ( !v125 || v125 == 2 ) | |
goto LABEL_177; | |
LABEL_203: | |
if ( (unsigned int)(*(_DWORD *)(_R5 + 80) - 1) > 1 ) | |
goto LABEL_239; | |
if ( *(_DWORD *)(_R5 + 17264) && v123 <= 4 * *(_WORD *)(v322 + 2182) ) | |
{ | |
LABEL_232: | |
__asm | |
{ | |
VLDR S3, [R4,#0xC0] | |
VLDR S4, [R4,#0xC4] | |
VSTR S3, [R4,#0xD0] | |
} | |
goto LABEL_233; | |
} | |
__asm | |
{ | |
VLDR S15, [R7,#-0x24] | |
VLDR S1, [R4,#0xC8] | |
VCMP.F32 S1, S15 | |
VLDR S2, [R4,#0xCC] | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
__asm { VMOVGT.F32 S15, S1 } | |
__asm | |
{ | |
VSTR S15, [R4,#0xD0] | |
VLDR S4, [R7] | |
VCMP.F32 S2, S4 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F32 S4, S2 } | |
LABEL_233: | |
__asm { VSTR S4, [R4,#0xD4] } | |
LABEL_239: | |
++v122; | |
_R7 += 4; | |
if ( v122 != 9 ) | |
continue; | |
break; | |
} | |
if ( (unsigned int)(*(_DWORD *)(_R5 + 80) - 1) <= 1 ) | |
{ | |
v133 = 1; | |
v134 = *(_DWORD *)(_R5 + 288) - 1; | |
while ( v133 < v134 && v133 != 241 ) | |
{ | |
v135 = _R5 + 168 + 8 * v133; | |
v136 = *(_DWORD *)(v135 + 128); | |
v137 = *(_DWORD *)(v135 + 132); | |
v138 = (*(_DWORD *)(_R5 + 17228) - v137) * (*(_DWORD *)(_R5 + 17228) - v137) | |
+ (*(_DWORD *)(_R5 + 17224) - v136) * (*(_DWORD *)(_R5 + 17224) - v136); | |
if ( v138 < *(_DWORD *)(_R5 + 17196) ) | |
{ | |
v139 = *(_DWORD *)(_R5 + 17264); | |
*(_DWORD *)(_R5 + 17196) = v138; | |
*(_DWORD *)(_R5 + 17416) = 9; | |
if ( v139 && v138 <= 4 * *(_WORD *)(v322 + 2182) ) | |
{ | |
__asm | |
{ | |
VLDR S1, [R4,#0xC0] | |
VLDR S2, [R4,#0xC4] | |
VSTR S1, [R4,#0xD0] | |
VSTR S2, [R4,#0xD4] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VLDR S14, [R4,#0xC8] | |
VLDR S11, [R6,#0xCC] | |
} | |
_R2 = _R5 + 4 * (v136 + 3998); | |
__asm | |
{ | |
VLDR S12, [R2,#0xAC] | |
VCMP.F32 S14, S12 | |
} | |
_R1 = _R5 + 4 * (v137 + 3998); | |
__asm { VMRS APSR_nzcv, FPSCR } | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
__asm { VMOVGT.F32 S12, S14 } | |
__asm | |
{ | |
VSTR S12, [R6,#0xD0] | |
VLDR S0, [R1,#0xAC] | |
VCMP.F32 S11, S0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F32 S0, S11 } | |
__asm { VSTR S0, [R6,#0xD4] } | |
} | |
*(_DWORD *)(_R5 + 17304) = 1; | |
*(_DWORD *)(_R5 + 17320) = v133; | |
} | |
++v133; | |
} | |
v142 = 1; | |
v143 = *(_DWORD *)(_R5 + 292) - 1; | |
while ( v142 < v143 && v142 != 241 ) | |
{ | |
v144 = _R5 + 168 + 8 * v142; | |
v145 = *(_DWORD *)(v144 + 2056); | |
v146 = *(_DWORD *)(v144 + 2060); | |
v147 = (*(_DWORD *)(_R5 + 17228) - v146) * (*(_DWORD *)(_R5 + 17228) - v146) | |
+ (*(_DWORD *)(_R5 + 17224) - v145) * (*(_DWORD *)(_R5 + 17224) - v145); | |
if ( v147 < *(_DWORD *)(_R5 + 17196) ) | |
{ | |
v148 = *(_DWORD *)(_R5 + 17264); | |
*(_DWORD *)(_R5 + 17196) = v147; | |
*(_DWORD *)(_R5 + 17416) = 9; | |
if ( v148 && v147 <= 4 * *(_WORD *)(v322 + 2182) ) | |
{ | |
__asm | |
{ | |
VLDR S13, [R4,#0xC0] | |
VLDR S10, [R4,#0xC4] | |
VSTR S13, [R4,#0xD0] | |
VSTR S10, [R4,#0xD4] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VLDR S6, [R6,#0xC8] | |
VLDR S8, [R6,#0xCC] | |
} | |
_R1 = _R5 + 4 * (v145 + 3998); | |
__asm | |
{ | |
VLDR S7, [R1,#0xAC] | |
VCMP.F32 S6, S7 | |
} | |
_R0 = _R5 + 4 * (v146 + 3998); | |
__asm { VMRS APSR_nzcv, FPSCR } | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
__asm { VMOVGT.F32 S7, S6 } | |
__asm | |
{ | |
VSTR S7, [R6,#0xD0] | |
VLDR S9, [R0,#0xAC] | |
VCMP.F32 S8, S9 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F32 S9, S8 } | |
__asm { VSTR S9, [R6,#0xD4] } | |
} | |
*(_DWORD *)(_R5 + 17304) = 2; | |
*(_DWORD *)(_R5 + 17320) = v142; | |
} | |
++v142; | |
} | |
v151 = 0; | |
v152 = *(_DWORD *)(_R5 + 10976); | |
v153 = _R5 + 10976; | |
while ( v151 < v152 && v151 != 241 ) | |
{ | |
v155 = *(_DWORD *)(v153 + 4); | |
v153 += 4; | |
v154 = v155; | |
v156 = *(_DWORD *)(v153 + 964); | |
v157 = (*(_DWORD *)(_R5 + 17228) - v156) * (*(_DWORD *)(_R5 + 17228) - v156) | |
+ (*(_DWORD *)(_R5 + 17224) - v155) * (*(_DWORD *)(_R5 + 17224) - v155); | |
if ( v157 < *(_DWORD *)(_R5 + 17196) ) | |
{ | |
v158 = *(_DWORD *)(_R5 + 17264); | |
*(_DWORD *)(_R5 + 17196) = v157; | |
*(_DWORD *)(_R5 + 17416) = 9; | |
if ( v158 && v157 <= 4 * *(_WORD *)(v322 + 2182) ) | |
{ | |
__asm | |
{ | |
VLDR S5, [R6,#0xC0] | |
VLDR S15, [R6,#0xC4] | |
VSTR S5, [R6,#0xD0] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VLDR S2, [R6,#0xC8] | |
VLDR S3, [R6,#0xCC] | |
} | |
_R1 = _R5 + 4 * (v154 + 3998); | |
__asm | |
{ | |
VLDR S4, [R1,#0xAC] | |
VCMP.F32 S2, S4 | |
} | |
_R0 = _R5 + 4 * (v156 + 3998); | |
__asm { VMRS APSR_nzcv, FPSCR } | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
__asm { VMOVGT.F32 S4, S2 } | |
__asm | |
{ | |
VSTR S4, [R6,#0xD0] | |
VLDR S15, [R0,#0xAC] | |
VCMP.F32 S3, S15 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F32 S15, S3 } | |
} | |
__asm { VSTR S15, [R6,#0xD4] } | |
*(_DWORD *)(_R5 + 17304) = 2; | |
*(_DWORD *)(_R5 + 17320) = v151; | |
} | |
++v151; | |
} | |
} | |
if ( *(_DWORD *)(v5 + 152) ) | |
{ | |
v161 = *(_DWORD *)(_R5 + 17224); | |
v162 = *(_DWORD *)(_R5 + 17228); | |
v163 = (v162 - *(_DWORD *)(_R5 + 12920)) * (v162 - *(_DWORD *)(_R5 + 12920)) | |
+ (v161 - *(_DWORD *)(_R5 + 12916)) * (v161 - *(_DWORD *)(_R5 + 12916)); | |
if ( v163 < *(_DWORD *)(_R5 + 17196) ) | |
{ | |
*(_DWORD *)(_R5 + 17196) = v163; | |
*(_DWORD *)(_R5 + 17416) = 0; | |
} | |
if ( *(_DWORD *)(_R5 + 17264) && *(_DWORD *)(_R5 + 17196) <= 4 * *(_WORD *)(v322 + 2182) ) | |
{ | |
__asm | |
{ | |
VLDR S2, [R4,#0xC0] | |
VLDR S15, [R4,#0xC4] | |
VSTR S2, [R4,#0xD0] | |
} | |
} | |
else | |
{ | |
_R2 = _R5 + 4 * (v161 + 3998); | |
_R3 = _R5 + 4 * (v162 + 3998); | |
__asm | |
{ | |
VLDR S1, [R2,#0xAC] | |
VSTR S1, [R4,#0xD0] | |
VLDR S15, [R3,#0xAC] | |
} | |
} | |
__asm { VSTR S15, [R4,#0xD4] } | |
} | |
if ( *(_DWORD *)(*(_DWORD *)(v5 + 76) + 2364) && !sub_885C(*(_DWORD *)(_R5 + 17416)) ) | |
{ | |
v166 = *(_DWORD *)(v5 + 836) - *(_DWORD *)(v5 + 840); | |
if ( v166 < 0 ) | |
v166 = -v166; | |
*(_DWORD *)(_R5 + 17360) = v166; | |
if ( *(_DWORD *)(v5 + 820) - 45 > *(_DWORD *)(v5 + 240) && !sub_887A(_R5) && v166 <= 7 ) | |
awb_self_cal_update(v5, _R5, *(_DWORD *)(_R5 + 17384), *(_DWORD *)(_R5 + 17388)); | |
} | |
if ( *(_BYTE *)(v322 + 2191) ) | |
{ | |
v168 = *(_DWORD *)(_R5 + 80); | |
if ( !v168 || v168 == 2 ) | |
{ | |
v169 = *(_DWORD *)(_R5 + 6272); | |
v324 = v169 - 1; | |
if ( *(_DWORD *)(_R5 + 6276) <= *(_DWORD *)(_R5 + 8 * (v169 + 762) + 172) ) | |
v170 = -1; | |
else | |
v170 = 1; | |
*(_DWORD *)(_R5 + 17324) = v170; | |
v328 = v169 >> 1; | |
v171 = 1; | |
*(_DWORD *)(_R5 + 17328) = v169 >> 1; | |
__asm { VMOV.F64 D17, #1.0 } | |
while ( v171 < v324 && v171 != 128 ) | |
{ | |
v172 = _R5 + 168 + 8 * v171; | |
v173 = *(_DWORD *)(v172 + 6108); | |
v174 = *(_DWORD *)(v172 + 6112); | |
v175 = (*(_DWORD *)(_R5 + 17228) - v174) * (*(_DWORD *)(_R5 + 17228) - v174) | |
+ (*(_DWORD *)(_R5 + 17224) - v173) * (*(_DWORD *)(_R5 + 17224) - v173); | |
if ( v175 < *(_DWORD *)(_R5 + 17196) ) | |
{ | |
*(_DWORD *)(_R5 + 17196) = v175; | |
v176 = *(_DWORD *)(_R5 + 17324); | |
if ( v171 >= v328 ) | |
{ | |
if ( v176 > 0 ) | |
v177 = 4; | |
else | |
v177 = 3; | |
} | |
else if ( v176 > 0 ) | |
{ | |
v177 = 3; | |
} | |
else | |
{ | |
v177 = 4; | |
} | |
v178 = *(_DWORD *)(_R5 + 17264); | |
*(_DWORD *)(_R5 + 17416) = v177; | |
*(_DWORD *)(_R5 + 17288) = v171; | |
if ( v178 && v175 <= 4 * *(_WORD *)(v322 + 2182) ) | |
{ | |
__asm | |
{ | |
VLDR S1, [R6,#0xC0] | |
VLDR S0, [R6,#0xC4] | |
VSTR S1, [R6,#0xD0] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VLDR S8, [R6,#0xC8] | |
VLDR S12, [R6,#0xCC] | |
} | |
_R0 = v322 + 2232; | |
__asm | |
{ | |
VLDR S6, [R0] | |
VMUL.F32 S9, S6, S8 | |
} | |
_R2 = _R5 + 4 * (v173 + 3998); | |
__asm | |
{ | |
VLDR S7, [R2,#0xAC] | |
VCVT.F64.F32 D19, S6 | |
VSUB.F64 D20, D17, D19 | |
VCVT.F64.F32 D21, S7 | |
VCVT.F64.F32 D16, S9 | |
VMLA.F64 D16, D20, D21 | |
VCVT.F32.F64 S13, D16 | |
VSTR S13, [R6,#0xD0] | |
VLDR S10, [R0] | |
VMUL.F32 S11, S10, S12 | |
} | |
_R0 = _R5 + 4 * (v174 + 3998); | |
__asm | |
{ | |
VLDR S14, [R0,#0xAC] | |
VCVT.F64.F32 D22, S10 | |
VSUB.F64 D23, D17, D22 | |
VCVT.F64.F32 D24, S14 | |
VCVT.F64.F32 D25, S11 | |
VMLA.F64 D25, D23, D24 | |
VCVT.F32.F64 S0, D25 | |
} | |
} | |
__asm { VSTR S0, [R6,#0xD4] } | |
} | |
++v171; | |
} | |
v182 = *(_DWORD *)(_R5 + 9356); | |
v183 = v182 - 1; | |
if ( *(_DWORD *)(_R5 + 9364) <= *(_DWORD *)(_R5 + 8 * (v182 - 1) + 9364) ) | |
v184 = -1; | |
else | |
v184 = 1; | |
v185 = v182 >> 1; | |
*(_DWORD *)(_R5 + 17324) = v184; | |
*(_DWORD *)(_R5 + 17328) = v182 >> 1; | |
v186 = 1; | |
v329 = _R5 + 168; | |
__asm { VMOV.F64 D24, #1.0 } | |
while ( 2 ) | |
{ | |
if ( v186 >= v183 || v186 == 128 ) | |
break; | |
v187 = *(_DWORD *)(v329 + 8 * v186 + 9192); | |
v188 = *(_DWORD *)(v329 + 8 * v186 + 9196); | |
v189 = (*(_DWORD *)(_R5 + 17228) - v188) * (*(_DWORD *)(_R5 + 17228) - v188) | |
+ (*(_DWORD *)(_R5 + 17224) - v187) * (*(_DWORD *)(_R5 + 17224) - v187); | |
if ( v189 < *(_DWORD *)(_R5 + 17196) ) | |
{ | |
*(_DWORD *)(_R5 + 17196) = v189; | |
v190 = *(_DWORD *)(_R5 + 17324); | |
if ( v186 >= v185 ) | |
{ | |
if ( v190 <= 0 ) | |
goto LABEL_338; | |
} | |
else if ( v190 > 0 ) | |
{ | |
LABEL_338: | |
if ( *(_DWORD *)(v5 + 240) <= *(_DWORD *)(v5 + 816) ) | |
v191 = 6; | |
else | |
v191 = 7; | |
*(_DWORD *)(_R5 + 17416) = v191; | |
goto LABEL_342; | |
} | |
*(_DWORD *)(_R5 + 17416) = 7; | |
LABEL_342: | |
if ( *(_DWORD *)(_R5 + 17264) && v189 <= 4 * *(_WORD *)(v322 + 2182) ) | |
{ | |
__asm | |
{ | |
VLDR S5, [R6,#0xC0] | |
VLDR S3, [R6,#0xC4] | |
VSTR S5, [R6,#0xD0] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VLDR S12, [R6,#0xC8] | |
VLDR S4, [R6,#0xCC] | |
} | |
_R1 = v322 + 2232; | |
__asm | |
{ | |
VLDR S10, [R1] | |
VMUL.F32 S11, S10, S12 | |
} | |
_R7 = _R5 + 4 * (v187 + 3998); | |
__asm | |
{ | |
VLDR S14, [R7,#0xAC] | |
VCVT.F64.F32 D25, S10 | |
VSUB.F64 D26, D24, D25 | |
VCVT.F64.F32 D27, S14 | |
VCVT.F64.F32 D28, S11 | |
VMLA.F64 D28, D26, D27 | |
VCVT.F32.F64 S0, D28 | |
VSTR S0, [R6,#0xD0] | |
VLDR S1, [R1] | |
VMUL.F32 S15, S1, S4 | |
} | |
_R1 = _R5 + 4 * (v188 + 3998); | |
__asm | |
{ | |
VLDR S2, [R1,#0xAC] | |
VCVT.F64.F32 D29, S1 | |
VSUB.F64 D30, D24, D29 | |
VCVT.F64.F32 D31, S2 | |
VCVT.F64.F32 D18, S15 | |
VMLA.F64 D18, D30, D31 | |
VCVT.F32.F64 S3, D18 | |
} | |
} | |
__asm { VSTR S3, [R6,#0xD4] } | |
} | |
++v186; | |
continue; | |
} | |
} | |
} | |
v167 = *(_DWORD *)(_R5 + 80); | |
if ( !v167 || v167 == 2 ) | |
{ | |
v195 = 0; | |
v196 = *(_DWORD *)(_R5 + 7300) - 1; | |
while ( v195 < v196 && v195 != 128 ) | |
{ | |
v199 = _R5 + 168 + 8 * v195; | |
v200 = *(_DWORD *)(_R5 + 17224) - *(_DWORD *)(v199 + 7136); | |
v201 = (*(_DWORD *)(_R5 + 17228) - *(_DWORD *)(v199 + 7140)) | |
* (*(_DWORD *)(_R5 + 17228) - *(_DWORD *)(v199 + 7140)) | |
+ v200 * v200; | |
if ( v201 < *(_DWORD *)(_R5 + 17196) ) | |
{ | |
v202 = *(_DWORD *)(_R5 + 17264); | |
*(_DWORD *)(_R5 + 17196) = v201; | |
*(_DWORD *)(_R5 + 17416) = 2; | |
if ( v202 && v201 <= 4 * *(_WORD *)(v322 + 2182) ) | |
{ | |
__asm | |
{ | |
VLDR S13, [R6,#0xC0] | |
VLDR S9, [R6,#0xC4] | |
VSTR S13, [R6,#0xD0] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VLDR S8, [R6,#0xC8] | |
VLDR S9, [R6,#0xCC] | |
VSTR S8, [R6,#0xD0] | |
} | |
} | |
__asm { VSTR S9, [R6,#0xD4] } | |
} | |
++v195; | |
*(_DWORD *)(_R5 + 17272) = 0; | |
*(_DWORD *)(_R5 + 17268) = 2; | |
} | |
v203 = *(_DWORD *)(_R5 + 8328); | |
v204 = v203 - 1; | |
if ( *(_DWORD *)(_R5 + 8332) <= *(_DWORD *)(_R5 + 8 * (v203 + 1019) + 172) ) | |
v205 = -1; | |
else | |
v205 = 1; | |
*(_DWORD *)(_R5 + 17324) = v205; | |
v325 = v203 >> 1; | |
v206 = 1; | |
*(_DWORD *)(_R5 + 17328) = v203 >> 1; | |
v207 = _R5 + 168; | |
while ( v206 < v204 && v206 != 128 ) | |
{ | |
v208 = *(_DWORD *)(_R5 + 17224) - *(_DWORD *)(v207 + 8 * v206 + 8164); | |
v209 = (*(_DWORD *)(_R5 + 17228) - *(_DWORD *)(v207 + 8 * v206 + 8168)) | |
* (*(_DWORD *)(_R5 + 17228) - *(_DWORD *)(v207 + 8 * v206 + 8168)) | |
+ v208 * v208; | |
if ( v209 < *(_DWORD *)(_R5 + 17196) ) | |
{ | |
*(_DWORD *)(_R5 + 17268) = 2; | |
*(_DWORD *)(_R5 + 17272) = v206; | |
*(_DWORD *)(_R5 + 17196) = v209; | |
v210 = *(_DWORD *)(_R5 + 17324); | |
if ( v206 >= v325 ) | |
{ | |
if ( v210 > 0 ) | |
v211 = 2; | |
else | |
v211 = 5; | |
} | |
else if ( v210 > 0 ) | |
{ | |
v211 = 5; | |
} | |
else | |
{ | |
v211 = 2; | |
} | |
v212 = *(_DWORD *)(_R5 + 17264); | |
*(_DWORD *)(_R5 + 17416) = v211; | |
if ( v212 && v209 <= 4 * *(_WORD *)(v322 + 2182) ) | |
{ | |
__asm | |
{ | |
VLDR S7, [R6,#0xC0] | |
VLDR S6, [R6,#0xC4] | |
VSTR S7, [R6,#0xD0] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VLDR S5, [R6,#0xC8] | |
VLDR S6, [R6,#0xCC] | |
VSTR S5, [R6,#0xD0] | |
} | |
} | |
__asm { VSTR S6, [R6,#0xD4] } | |
} | |
++v206; | |
} | |
} | |
v197 = *(_DWORD *)(_R5 + 17416); | |
_R0 = _R5 + 17152; | |
if ( v197 == 9 || !v197 || v197 == 6 ) | |
{ | |
__asm | |
{ | |
VLDR S3, [R4,#0xD4] | |
VLDR S4, [R0] | |
VCMPE.F32 S3, S4 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
v213 = *(_DWORD *)(v5 + 820); | |
__asm | |
{ | |
VMOV.F32 S8, #0.5 | |
VLDR S5, [R4,#0xD0] | |
} | |
*(_DWORD *)(_R5 + 17324) = v213; | |
_R1 = _R5 + 17024; | |
v215 = *(_DWORD *)(v5 + 820) / 2; | |
*(_DWORD *)(_R5 + 17328) = v215; | |
__asm | |
{ | |
VADD.F32 S9, S3, S4 | |
VLDR S6, [R1,#0x7C] | |
VADD.F32 S7, S5, S6 | |
VMUL.F32 S14, S9, S8 | |
VMUL.F32 S13, S7, S8 | |
VSTR S14, [R4,#0xE4] | |
VSTR S13, [R4,#0xE0] | |
} | |
v216 = *(_DWORD *)(v5 + 240); | |
if ( v216 >= v213 ) | |
{ | |
if ( v216 < v215 ) | |
goto LABEL_395; | |
} | |
else | |
{ | |
if ( v216 >= v215 ) | |
{ | |
_LR = v216 - v215; | |
_R0 = v213 - v215; | |
__asm | |
{ | |
VMOV S10, LR | |
VMOV S11, R0 | |
VCVT.F32.S32 S12, S10 | |
VCVT.F32.S32 S0, S11 | |
VDIV.F32 S1, S12, S0 | |
VMOV.F32 S15, #1.0 | |
VSUB.F32 S2, S15, S1 | |
VMUL.F32 S4, S2, S13 | |
VMLA.F32 S4, S1, S5 | |
VMUL.F32 S14, S2, S14 | |
VCMP.F32 S5, S4 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
__asm { VMOVGT.F32 S4, S5 } | |
__asm | |
{ | |
VMLA.F32 S14, S1, S3 | |
VSTR S4, [R6,#0xD0] | |
} | |
goto LABEL_398; | |
} | |
LABEL_395: | |
__asm | |
{ | |
VCMP.F32 S5, S13 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
__asm { VMOVGT.F32 S13, S5 } | |
__asm { VSTR S13, [R6,#0xD0] } | |
LABEL_398: | |
__asm | |
{ | |
VCMP.F32 S3, S14 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
__asm { VMOVMI.F32 S14, S3 } | |
__asm { VSTR S14, [R6,#0xD4] } | |
} | |
} | |
} | |
if ( *(_DWORD *)(_R5 + 84) == 1 ) | |
{ | |
if ( v197 == 5 ) | |
goto LABEL_593; | |
if ( v197 == 2 ) | |
{ | |
v219 = *(_DWORD *)(_R5 + 92); | |
if ( v219 != 5 && v219 != 2 ) | |
goto LABEL_593; | |
if ( *(_DWORD *)(_R5 + 17268) == 2 && *(_DWORD *)(_R5 + 17272) > *(_DWORD *)(_R5 + 8328) / 5 ) | |
goto LABEL_593; | |
} | |
} | |
sub_8804(_R5); | |
v220 = *(_DWORD *)(_R5 + 84); | |
if ( v220 == 1 ) | |
{ | |
*(_DWORD *)(_R5 + 88) = *(_DWORD *)(_R5 + 17416); | |
} | |
else if ( !v220 ) | |
{ | |
*(_DWORD *)(_R5 + 92) = *(_DWORD *)(_R5 + 17416); | |
} | |
v221 = *(_DWORD *)(v5 + 152); | |
if ( *(_DWORD *)(_R5 + 92) < 0 && !v221 ) | |
goto LABEL_741; | |
if ( v221 ) | |
{ | |
if ( *(_DWORD *)(v5 + 240) >= (*(_DWORD *)(_R5 + 32) + *(_DWORD *)(v5 + 816)) >> 1 | |
&& !v220 | |
&& !*(_DWORD *)(_R5 + 17352) | |
&& !*(_DWORD *)(_R5 + 17264) | |
&& !*(_DWORD *)(_R5 + 17356) | |
&& !*(_DWORD *)(_R5 + 17344) | |
&& !sub_8412(*(_DWORD *)(_R5 + 88)) ) | |
{ | |
v283 = 0; | |
v284 = 0; | |
v285 = 0; | |
do | |
{ | |
v286 = *(_DWORD *)(_R5 + 24 * v285 + 10420); | |
if ( v286 != 5 && v286 != 2 ) | |
{ | |
if ( (unsigned int)(v286 - 3) > 1 && v286 != 7 ) | |
++v220; | |
else | |
++v283; | |
} | |
else | |
{ | |
++v284; | |
} | |
++v285; | |
} | |
while ( v285 != 15 ); | |
if ( v220 <= v283 || v220 <= v284 ) | |
sub_8838(_R5); | |
} | |
goto LABEL_692; | |
} | |
if ( !v220 && *(_DWORD *)(v5 + 240) > *(_DWORD *)(_R5 + 32) && !sub_885C(*(_DWORD *)(_R5 + 17416)) ) | |
{ | |
_R0 = _R5 + 16064; | |
__asm | |
{ | |
VLDR S3, [R6,#0xC4] | |
VLDR S5, [R0,#8] | |
VCMPE.F32 S3, S5 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
if ( !*(_DWORD *)(_R5 + 17352) | |
&& *(_DWORD *)(_R5 + 17308) < *(_DWORD *)(_R5 + 17452) * *(_BYTE *)(v322 + 2192) / 100 ) | |
goto LABEL_741; | |
} | |
} | |
v223 = *(_DWORD *)(_R5 + 17264); | |
if ( v223 == 1 ) | |
{ | |
if ( *(_DWORD *)(_R5 + 17224) > *(_DWORD *)(_R5 + 4172) + 3 ) | |
goto LABEL_741; | |
v224 = *(_DWORD *)(_R5 + 17228); | |
if ( v224 < *(_DWORD *)(_R5 + 4208) - 3 || v224 > *(_DWORD *)(_R5 + 4192) ) | |
goto LABEL_741; | |
} | |
if ( *(_DWORD *)(v5 + 240) > (*(_DWORD *)(_R5 + 32) + *(_DWORD *)(v5 + 816)) >> 1 && *(_DWORD *)(_R5 + 17256) > 0 ) | |
{ | |
v225 = *(_DWORD *)(_R5 + 17416); | |
if ( v225 == 6 || v225 == 8 || v225 == 9 && *(_DWORD *)(_R5 + 17304) == 2 ) | |
{ | |
v226 = *(_DWORD *)(_R5 + 17452); | |
if ( *(_DWORD *)(_R5 + 17352) > v226 * *(_BYTE *)(v322 + 2193) / 100 | |
&& !v223 | |
&& *(_DWORD *)(_R5 + 17308) < v226 * *(_BYTE *)(v322 + 2192) / 100 ) | |
{ | |
*(_DWORD *)(_R5 + 17416) = 0; | |
if ( v220 == 1 ) | |
{ | |
*(_DWORD *)(_R5 + 88) = 0; | |
_R1 = _R5 + 16000; | |
__asm | |
{ | |
VLDR S8, [R1,#0x14] | |
VSTR S8, [R6,#0xD0] | |
VLDR S13, [R1,#0x38] | |
VSTR S13, [R6,#0xD4] | |
VSTR S8, [R5,#0x48] | |
VSTR S13, [R5,#0x4C] | |
} | |
} | |
else if ( !v220 ) | |
{ | |
*(_DWORD *)(_R5 + 92) = 0; | |
_R0 = _R5 + 16000; | |
__asm | |
{ | |
VLDR S6, [R0,#0x14] | |
VSTR S6, [R6,#0xD0] | |
VLDR S7, [R0,#0x38] | |
VSTR S7, [R6,#0xD4] | |
VSTR S6, [R5,#0x40] | |
VSTR S7, [R5,#0x44] | |
} | |
} | |
*(_DWORD *)(_R5 + 17344) = 1; | |
} | |
} | |
} | |
v229 = *(_DWORD *)(_R5 + 17416); | |
if ( (v229 <= 1 || v229 == 9 || v229 == 8) && v223 && !v220 && *(_DWORD *)(v5 + 240) <= *(_DWORD *)(v5 + 820) ) | |
_android_log_print(6, 0, "decision changed from %d to D50, bright and compact - DELETE THIS LOGIC\n"); | |
v230 = *(_DWORD *)(_R5 + 84); | |
if ( v230 == 1 ) | |
{ | |
v231 = *(_DWORD *)(_R5 + 17308); | |
v232 = *(_DWORD *)(_R5 + 17292); | |
*(_DWORD *)(_R5 + 17324) = 0; | |
if ( v231 > 0 ) | |
*(_DWORD *)(_R5 + 17324) = 1; | |
if ( v232 > 0 ) | |
++*(_DWORD *)(_R5 + 17324); | |
if ( *(_DWORD *)(_R5 + 17276) > 0 ) | |
++*(_DWORD *)(_R5 + 17324); | |
v233 = *(_DWORD *)(_R5 + 17324); | |
if ( v233 == 1 ) | |
{ | |
*(_DWORD *)(_R5 + 28) = 1; | |
goto LABEL_460; | |
} | |
*(_DWORD *)(_R5 + 28) = 0; | |
if ( v233 > 1 ) | |
{ | |
LABEL_457: | |
v80 = *(_DWORD *)(_R5 + 24); | |
_VF = __OFSUB__(v80, 50); | |
_ZF = v80 == 50; | |
_NF = v80 - 50 < 0; | |
LABEL_458: | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
goto LABEL_593; | |
v90 = v80 + 1; | |
LABEL_463: | |
*(_DWORD *)(_R5 + 24) = v90; | |
goto LABEL_593; | |
} | |
LABEL_460: | |
if ( *(_DWORD *)(_R5 + 17232) > 0 ) | |
goto LABEL_457; | |
v311 = *(_DWORD *)(_R5 + 17416); | |
if ( v311 == 5 || v311 == 2 ) | |
{ | |
v234 = *(_DWORD *)(_R5 + 92); | |
if ( v234 != 5 && v234 != 2 ) | |
goto LABEL_593; | |
__asm | |
{ | |
VLDR S9, [R5,#0x40] | |
VLDR S14, [R6,#0xD0] | |
VCMPE.F32 S14, S9 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
__asm | |
{ | |
VSTR S9, [R6,#0xD0] | |
VLDR S10, [R5,#0x44] | |
} | |
*(_DWORD *)(_R5 + 17344) = 1; | |
__asm { VSTR S10, [R6,#0xD4] } | |
} | |
} | |
if ( (v311 == 7 || v311 == 4 || v311 == 3) | |
&& ((v235 = *(_DWORD *)(_R5 + 92), v235 == 7) || v235 == 4 || v235 == 3) | |
&& v235 != v311 | |
|| *(_DWORD *)(v5 + 240) >= *(_DWORD *)(v5 + 816) | |
&& !sub_885C(*(_DWORD *)(_R5 + 88)) | |
&& ((v236 = *(_DWORD *)(_R5 + 92), v236 == 5) || v236 == 2 || !sub_8412(v236)) | |
|| (v311 == 5 || v311 == 2) && ((v237 = *(_DWORD *)(_R5 + 92), (unsigned int)(v237 - 3) <= 1) || v237 == 7) ) | |
{ | |
LABEL_593: | |
*(_DWORD *)(_R5 + 88) = 10; | |
goto LABEL_741; | |
} | |
} | |
v238 = *(_DWORD *)(_R5 + 92); | |
if ( sub_8412(*(_DWORD *)(_R5 + 92)) ) | |
{ | |
v266 = *(_DWORD *)(_R5 + 17416); | |
if ( v266 != 2 && v266 != 5 ) | |
goto LABEL_692; | |
v267 = *(_DWORD *)(v5 + 76); | |
if ( v230 == 1 && (v238 == 6 || !v238 || v238 == 1 || v238 == 9) && !sub_887A(_R5) ) | |
goto LABEL_593; | |
v268 = *(_DWORD *)(v5 + 240); | |
if ( v268 < *(_DWORD *)(v5 + 820) ) | |
{ | |
if ( (unsigned int)(*(_DWORD *)(_R5 + 80) - 1) > 1 ) | |
goto LABEL_692; | |
if ( !*(_DWORD *)(_R5 + 17264) && !*(_DWORD *)(_R5 + 17344) ) | |
{ | |
LABEL_598: | |
*(_DWORD *)(_R5 + 17344) = 1; | |
_R1 = _R5 + 16000; | |
*(_DWORD *)(_R5 + 17416) = 6; | |
_R0 = _R5 + 16064; | |
__asm | |
{ | |
VLDR S14, [R1,#0x2C] | |
VSTR S14, [R6,#0xD0] | |
VLDR S12, [R0,#0x10] | |
} | |
goto LABEL_599; | |
} | |
LABEL_600: | |
if ( *(_DWORD *)(v5 + 152) ) | |
goto LABEL_692; | |
goto LABEL_741; | |
} | |
v271 = *(_DWORD *)(_R5 + 32); | |
if ( v268 >= v271 ) | |
{ | |
if ( v268 < *(_DWORD *)(v5 + 816) ) | |
{ | |
if ( *(_DWORD *)(_R5 + 17352) > *(_DWORD *)(_R5 + 17452) * *(_BYTE *)(v267 + 2196) / 100 | |
&& !*(_DWORD *)(_R5 + 17264) | |
&& *(_DWORD *)(_R5 + 17200) < 4 * *(_WORD *)(v267 + 2194) | |
&& !*(_DWORD *)(_R5 + 17344) | |
&& !*(_DWORD *)(_R5 + 17356) | |
&& *(_DWORD *)(_R5 + 17340) > *(_DWORD *)(_R5 + 4208) ) | |
{ | |
if ( sub_887A(_R5) ) | |
{ | |
_R0 = _R5 + 16000; | |
*(_DWORD *)(_R5 + 17416) = 0; | |
__asm | |
{ | |
VLDR S15, [R0,#0x14] | |
VSTR S15, [R6,#0xD0] | |
VLDR S2, [R0,#0x38] | |
VSTR S2, [R6,#0xD4] | |
} | |
} | |
else | |
{ | |
sub_88A0(_R5); | |
*(_DWORD *)(_R5 + 17416) = 9; | |
*(_DWORD *)(_R5 + 17304) = 2; | |
*(_DWORD *)(_R5 + 17320) = 0; | |
} | |
*(_DWORD *)(_R5 + 17344) = 1; | |
sub_876E(_R5); | |
} | |
if ( *(_DWORD *)(_R5 + 84) || *(_DWORD *)(_R5 + 17344) ) | |
goto LABEL_692; | |
v278 = *(_DWORD *)(_R5 + 88); | |
if ( (v278 == 2 || v278 == 5) && *(_DWORD *)(_R5 + 28) == 1 ) | |
sub_8838(_R5); | |
if ( !sub_8412(*(_DWORD *)(_R5 + 88)) ) | |
sub_8838(_R5); | |
if ( *(_DWORD *)(_R5 + 17352) <= 0 | |
|| *(_DWORD *)(_R5 + 17264) | |
|| *(_DWORD *)(_R5 + 17344) | |
|| *(_DWORD *)(_R5 + 17340) <= *(_DWORD *)(_R5 + 4208) | |
|| sub_885C(*(_DWORD *)(_R5 + 88)) ) | |
goto LABEL_692; | |
if ( sub_887A(_R5) ) | |
{ | |
*(_DWORD *)(_R5 + 17416) = 0; | |
_R3 = _R5 + 16000; | |
__asm | |
{ | |
VLDR S4, [R3,#0x14] | |
VSTR S4, [R6,#0xD0] | |
VLDR S3, [R3,#0x38] | |
VSTR S3, [R6,#0xD4] | |
} | |
} | |
else | |
{ | |
sub_88A0(_R5); | |
*(_DWORD *)(_R5 + 17416) = 9; | |
*(_DWORD *)(_R5 + 17304) = 2; | |
*(_DWORD *)(_R5 + 17320) = 0; | |
} | |
*(_DWORD *)(_R5 + 17344) = 1; | |
goto LABEL_673; | |
} | |
if ( *(_DWORD *)(_R5 + 17352) > *(_BYTE *)(v267 + 2197) * *(_DWORD *)(_R5 + 17452) / 100 | |
&& !*(_DWORD *)(_R5 + 17264) | |
&& *(_DWORD *)(_R5 + 17200) < 4 * *(_WORD *)(v267 + 2194) | |
&& !*(_DWORD *)(_R5 + 17344) | |
&& !*(_DWORD *)(_R5 + 17356) | |
&& *(_DWORD *)(_R5 + 17340) > *(_DWORD *)(_R5 + 4208) ) | |
{ | |
if ( sub_887A(_R5) ) | |
{ | |
_R1 = _R5 + 16000; | |
*(_DWORD *)(_R5 + 17416) = 0; | |
__asm | |
{ | |
VLDR S12, [R1,#0x14] | |
VSTR S12, [R6,#0xD0] | |
VLDR S11, [R1,#0x38] | |
VSTR S11, [R6,#0xD4] | |
} | |
} | |
else | |
{ | |
sub_88A0(_R5); | |
*(_DWORD *)(_R5 + 17416) = 9; | |
*(_DWORD *)(_R5 + 17304) = 2; | |
*(_DWORD *)(_R5 + 17320) = 0; | |
} | |
*(_DWORD *)(_R5 + 17344) = 1; | |
sub_876E(_R5); | |
} | |
if ( *(_DWORD *)(_R5 + 17352) > *(_DWORD *)(_R5 + 17452) * *(_BYTE *)(v267 + 2193) / 100 | |
&& !*(_DWORD *)(_R5 + 17344) | |
&& !*(_DWORD *)(_R5 + 17356) | |
&& *(_DWORD *)(_R5 + 17340) > *(_DWORD *)(_R5 + 4208) ) | |
{ | |
if ( sub_887A(_R5) ) | |
{ | |
*(_DWORD *)(_R5 + 17416) = 0; | |
_R0 = _R5 + 16000; | |
__asm | |
{ | |
VLDR S0, [R0,#0x14] | |
VSTR S0, [R6,#0xD0] | |
VLDR S1, [R0,#0x38] | |
VSTR S1, [R6,#0xD4] | |
} | |
} | |
else | |
{ | |
sub_88A0(_R5); | |
*(_DWORD *)(_R5 + 17416) = 9; | |
*(_DWORD *)(_R5 + 17304) = 2; | |
*(_DWORD *)(_R5 + 17320) = 0; | |
} | |
*(_DWORD *)(_R5 + 17344) = 1; | |
sub_876E(_R5); | |
} | |
if ( !*(_DWORD *)(_R5 + 84) && !*(_DWORD *)(_R5 + 17344) ) | |
{ | |
v282 = *(_DWORD *)(_R5 + 88); | |
if ( (v282 == 2 || v282 == 5) && *(_DWORD *)(_R5 + 28) == 1 ) | |
sub_8838(_R5); | |
} | |
if ( !sub_8412(*(_DWORD *)(_R5 + 88)) ) | |
sub_8838(_R5); | |
if ( *(_DWORD *)(_R5 + 17352) <= 0 | |
|| *(_DWORD *)(_R5 + 17264) | |
|| *(_DWORD *)(_R5 + 17344) | |
|| *(_DWORD *)(_R5 + 17340) <= *(_DWORD *)(_R5 + 4208) | |
|| sub_887A(_R5) | |
|| sub_885C(*(_DWORD *)(_R5 + 88)) ) | |
goto LABEL_692; | |
sub_88A0(_R5); | |
*(_DWORD *)(_R5 + 17416) = 9; | |
*(_DWORD *)(_R5 + 17304) = 2; | |
*(_DWORD *)(_R5 + 17320) = 0; | |
} | |
else | |
{ | |
if ( *(_DWORD *)(_R5 + 17264) | |
|| *(_DWORD *)(_R5 + 17344) | |
|| *(_DWORD *)(_R5 + 17200) >= 4 * *(_WORD *)(v267 + 2194) | |
|| *(_DWORD *)(_R5 + 17352) <= 0 ) | |
goto LABEL_600; | |
if ( (unsigned int)(*(_DWORD *)(_R5 + 80) - 1) > 1 ) | |
goto LABEL_692; | |
if ( sub_887A(_R5) ) | |
{ | |
*(_DWORD *)(_R5 + 17416) = 9; | |
*(_DWORD *)(_R5 + 17304) = 2; | |
_R1 = *(_DWORD *)(v5 + 240) - *(_DWORD *)(v5 + 820); | |
__asm | |
{ | |
VMOV S7, R1 | |
VCVT.F32.S32 S8, S7 | |
} | |
*(_DWORD *)(_R5 + 17324) = _R1; | |
_R3 = _R5 + 16000; | |
_R0 = v271 - *(_DWORD *)(v5 + 240); | |
*(_DWORD *)(_R5 + 17328) = _R0; | |
__asm | |
{ | |
VLDR S14, [R3,#0x2C] | |
VMOV S5, R0 | |
VLDR S10, [R3,#0x14] | |
} | |
_R12 = _R1 + _R0; | |
__asm { VMOV S13, R12 } | |
_R1 = _R5 + 16064; | |
__asm | |
{ | |
VMUL.F32 S12, S8, S14 | |
VCVT.F32.S32 S6, S5 | |
VMLA.F32 S12, S6, S10 | |
VCVT.F32.S32 S9, S13 | |
VDIV.F32 S11, S12, S9 | |
VSTR S11, [R6,#0xD0] | |
VLDR S1, [R1,#0x10] | |
VMUL.F32 S15, S8, S1 | |
VLDR S0, [R3,#0x38] | |
VMLA.F32 S15, S6, S0 | |
VDIV.F32 S2, S15, S9 | |
VSTR S2, [R6,#0xD4] | |
} | |
} | |
else | |
{ | |
sub_88A0(_R5); | |
*(_DWORD *)(_R5 + 17416) = 9; | |
*(_DWORD *)(_R5 + 17304) = 2; | |
*(_DWORD *)(_R5 + 17320) = 0; | |
} | |
} | |
*(_DWORD *)(_R5 + 17344) = 1; | |
goto LABEL_673; | |
} | |
v239 = *(_DWORD *)(v5 + 240); | |
v240 = *(_DWORD *)(v5 + 76); | |
if ( v239 >= *(_DWORD *)(v5 + 820) ) | |
{ | |
v241 = *(_DWORD *)(_R5 + 32); | |
if ( v239 < v241 ) | |
{ | |
if ( *(_DWORD *)(_R5 + 17264) | |
|| *(_DWORD *)(_R5 + 17200) >= 4 * *(_WORD *)(v240 + 2194) | |
|| *(_DWORD *)(_R5 + 17352) <= 0 | |
|| *(_DWORD *)(_R5 + 17340) <= *(_DWORD *)(_R5 + 4208) | |
|| (unsigned int)(*(_DWORD *)(_R5 + 80) - 1) > 1 ) | |
goto LABEL_692; | |
*(_DWORD *)(_R5 + 17344) = 1; | |
if ( !sub_887A(_R5) ) | |
{ | |
sub_88A0(_R5); | |
*(_DWORD *)(_R5 + 17416) = 9; | |
*(_DWORD *)(_R5 + 17304) = 2; | |
*(_DWORD *)(_R5 + 17320) = 0; | |
goto LABEL_673; | |
} | |
*(_DWORD *)(_R5 + 17416) = 9; | |
*(_DWORD *)(_R5 + 17304) = 2; | |
_R1 = *(_DWORD *)(v5 + 240) - *(_DWORD *)(v5 + 820); | |
__asm | |
{ | |
VMOV S15, R1 | |
VCVT.F32.S32 S2, S15 | |
} | |
*(_DWORD *)(_R5 + 17324) = _R1; | |
_R3 = _R5 + 16000; | |
_R2 = v241 - *(_DWORD *)(v5 + 240); | |
*(_DWORD *)(_R5 + 17328) = _R2; | |
__asm | |
{ | |
VLDR S6, [R3,#0x2C] | |
VMOV S0, R2 | |
VLDR S5, [R3,#0x14] | |
} | |
_R12 = _R1 + _R2; | |
__asm { VMOV S4, R12 } | |
_R1 = _R5 + 16064; | |
__asm | |
{ | |
VMUL.F32 S7, S2, S6 | |
VCVT.F32.S32 S1, S0 | |
VMLA.F32 S7, S1, S5 | |
VCVT.F32.S32 S3, S4 | |
VDIV.F32 S8, S7, S3 | |
VSTR S8, [R6,#0xD0] | |
VLDR S13, [R1,#0x10] | |
VMUL.F32 S10, S2, S13 | |
VLDR S9, [R3,#0x38] | |
VMLA.F32 S10, S1, S9 | |
VDIV.F32 S12, S10, S3 | |
} | |
LABEL_599: | |
__asm { VSTR S12, [R6,#0xD4] } | |
goto LABEL_673; | |
} | |
if ( v239 > *(_DWORD *)(v5 + 816) ) | |
goto LABEL_692; | |
if ( *(_DWORD *)(_R5 + 17352) > *(_BYTE *)(v240 + 2188) * *(_DWORD *)(_R5 + 17452) / 100 | |
&& !*(_DWORD *)(_R5 + 17264) | |
&& *(_DWORD *)(_R5 + 17200) < 4 * *(_WORD *)(v240 + 2194) | |
&& !*(_DWORD *)(_R5 + 17356) | |
&& *(_DWORD *)(_R5 + 17340) > (*(_DWORD *)(_R5 + 4208) + *(_DWORD *)(_R5 + 4196)) >> 1 ) | |
{ | |
*(_DWORD *)(_R5 + 17344) = 1; | |
if ( sub_887A(_R5) ) | |
{ | |
_R1 = _R5 + 16000; | |
*(_DWORD *)(_R5 + 17416) = 0; | |
__asm | |
{ | |
VLDR S4, [R1,#0x14] | |
VSTR S4, [R6,#0xD0] | |
VLDR S3, [R1,#0x38] | |
VSTR S3, [R6,#0xD4] | |
} | |
} | |
else | |
{ | |
sub_88A0(_R5); | |
*(_DWORD *)(_R5 + 17416) = 9; | |
*(_DWORD *)(_R5 + 17304) = 2; | |
*(_DWORD *)(_R5 + 17320) = 0; | |
} | |
sub_876E(_R5); | |
} | |
if ( !*(_DWORD *)(_R5 + 84) && !*(_DWORD *)(_R5 + 17344) && !sub_8412(*(_DWORD *)(_R5 + 88)) ) | |
sub_8838(_R5); | |
v248 = *(_DWORD *)(_R5 + 17352); | |
if ( v248 > 0 | |
&& !*(_DWORD *)(_R5 + 17264) | |
&& !*(_DWORD *)(_R5 + 17344) | |
&& !sub_887A(_R5) | |
&& *(_DWORD *)(_R5 + 17340) > (*(_DWORD *)(_R5 + 4208) + *(_DWORD *)(_R5 + 4196)) >> 1 ) | |
{ | |
v249 = *(_DWORD *)(_R5 + 88); | |
if ( sub_885C(*(_DWORD *)(_R5 + 88)) ) | |
goto LABEL_692; | |
*(_DWORD *)(_R5 + 17416) = v249; | |
*(_DWORD *)(_R5 + 17344) = 1; | |
goto LABEL_584; | |
} | |
if ( v248 > *(_BYTE *)(v240 + 2189) * *(_DWORD *)(_R5 + 17452) / 100 | |
&& !*(_DWORD *)(_R5 + 17264) | |
&& *(_DWORD *)(_R5 + 17200) < 4 * *(_WORD *)(v240 + 2194) | |
&& !*(_DWORD *)(_R5 + 17356) | |
&& *(_DWORD *)(_R5 + 17340) > *(_DWORD *)(_R5 + 4196) ) | |
{ | |
v250 = sub_878A(_R5); | |
if ( v250 ) | |
goto LABEL_749; | |
v251 = 9999; | |
v252 = *(_DWORD *)(_R5 + 10972); | |
if ( v252 ) | |
{ | |
while ( v250 < v252 && v250 != 25 ) | |
{ | |
v253 = _R5 + 168 + 8 * v250++; | |
v254 = *(_DWORD *)(v253 + 10600); | |
if ( v251 >= v254 ) | |
v251 = v254; | |
} | |
} | |
if ( v251 < *(_DWORD *)(v5 + 816) && sub_887A(_R5) ) | |
{ | |
LABEL_749: | |
*(_DWORD *)(_R5 + 17344) = 1; | |
if ( sub_887A(_R5) ) | |
{ | |
_R2 = _R5 + 16000; | |
*(_DWORD *)(_R5 + 17416) = 0; | |
__asm | |
{ | |
VLDR S5, [R2,#0x14] | |
VSTR S5, [R6,#0xD0] | |
VLDR S6, [R2,#0x38] | |
VSTR S6, [R6,#0xD4] | |
} | |
} | |
else | |
{ | |
sub_88A0(_R5); | |
*(_DWORD *)(_R5 + 17416) = 9; | |
*(_DWORD *)(_R5 + 17304) = 2; | |
*(_DWORD *)(_R5 + 17320) = 0; | |
} | |
sub_876E(_R5); | |
} | |
} | |
if ( *(_DWORD *)(_R5 + 17352) > *(_BYTE *)(v240 + 2193) * *(_DWORD *)(_R5 + 17452) / 100 | |
&& !*(_DWORD *)(_R5 + 17344) | |
&& !*(_DWORD *)(_R5 + 17356) | |
&& *(_DWORD *)(_R5 + 17340) > *(_DWORD *)(_R5 + 4196) ) | |
{ | |
v256 = sub_878A(_R5); | |
if ( v256 ) | |
goto LABEL_750; | |
v257 = 9999; | |
v258 = *(_DWORD *)(_R5 + 10972); | |
if ( v258 ) | |
{ | |
while ( v256 < v258 && v256 != 25 ) | |
{ | |
v259 = _R5 + 168 + 8 * v256++; | |
v260 = *(_DWORD *)(v259 + 10600); | |
if ( v257 >= v260 ) | |
v257 = v260; | |
} | |
} | |
if ( v257 < *(_DWORD *)(v5 + 816) && sub_887A(_R5) ) | |
{ | |
LABEL_750: | |
*(_DWORD *)(_R5 + 17344) = 1; | |
if ( sub_887A(_R5) ) | |
{ | |
_R3 = _R5 + 16000; | |
*(_DWORD *)(_R5 + 17416) = 0; | |
__asm | |
{ | |
VLDR S7, [R3,#0x14] | |
VSTR S7, [R6,#0xD0] | |
VLDR S8, [R3,#0x38] | |
VSTR S8, [R6,#0xD4] | |
} | |
} | |
else | |
{ | |
sub_88A0(_R5); | |
*(_DWORD *)(_R5 + 17416) = 9; | |
*(_DWORD *)(_R5 + 17304) = 2; | |
*(_DWORD *)(_R5 + 17320) = 0; | |
} | |
sub_876E(_R5); | |
} | |
} | |
if ( !*(_DWORD *)(_R5 + 84) && !*(_DWORD *)(_R5 + 17344) ) | |
{ | |
if ( *(_DWORD *)(_R5 + 88) == 2 && *(_DWORD *)(_R5 + 28) == 1 ) | |
{ | |
__asm { VLDR S9, [R5,#0x48] } | |
_R2 = _R5 + 16000; | |
__asm | |
{ | |
VLDR S13, [R2,#0x1C] | |
VCMPE.F32 S9, S13 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !(!_ZF & _CF) ) | |
{ | |
__asm { VLDR S10, [R5,#0x4C] } | |
_R3 = _R5 + 16064; | |
__asm | |
{ | |
VLDR S14, [R3] | |
VCMPE.F32 S10, S14 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !(_NF ^ _VF) ) | |
{ | |
__asm | |
{ | |
VLDR S12, [R6,#0xC8] | |
VCVT.F64.F32 D24, S12 | |
VLDR D25, =1.3 | |
VMUL.F64 D26, D24, D25 | |
VCVT.F64.F32 D27, S9 | |
VCMPE.F64 D26, D27 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
__asm | |
{ | |
VCVT.F64.F32 D29, S10 | |
VLDR S11, [R6,#0xCC] | |
VMUL.F64 D30, D29, D25 | |
VCVT.F64.F32 D28, S11 | |
VCMPE.F64 D28, D30 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
sub_8838(_R5); | |
} | |
} | |
} | |
} | |
if ( !sub_8412(*(_DWORD *)(_R5 + 88)) ) | |
sub_8838(_R5); | |
} | |
v264 = *(_DWORD *)(_R5 + 17352); | |
if ( v264 <= 0 | |
|| *(_DWORD *)(_R5 + 17264) | |
|| *(_DWORD *)(_R5 + 17344) | |
|| *(_DWORD *)(_R5 + 17340) <= *(_DWORD *)(_R5 + 4196) | |
|| sub_887A(_R5) ) | |
goto LABEL_692; | |
v265 = *(_DWORD *)(_R5 + 88); | |
if ( (v265 == 9 || v265 == 6 || v265 == 8) && !*(_DWORD *)(_R5 + 84) && *(_DWORD *)(_R5 + 92) == 7 ) | |
{ | |
if ( *(_DWORD *)(_R5 + 17308) >= 15 * *(_DWORD *)(_R5 + 17256) / 100 | |
&& *(_DWORD *)(_R5 + 17292) <= 80 * *(_DWORD *)(_R5 + 17256) / 100 | |
|| v264 >= 30 * *(_DWORD *)(_R5 + 17452) / 100 ) | |
{ | |
*(_DWORD *)(_R5 + 17416) = v265; | |
*(_DWORD *)(_R5 + 17344) = 1; | |
sub_88A0(_R5); | |
if ( !*(_DWORD *)(_R5 + 84) ) | |
*(_DWORD *)(_R5 + 92) = *(_DWORD *)(_R5 + 17416); | |
} | |
goto LABEL_692; | |
} | |
if ( v265 != 10 ) | |
{ | |
*(_DWORD *)(_R5 + 17416) = v265; | |
*(_DWORD *)(_R5 + 17344) = 1; | |
LABEL_584: | |
sub_88A0(_R5); | |
} | |
LABEL_673: | |
sub_876E(_R5); | |
goto LABEL_692; | |
} | |
if ( *(_DWORD *)(_R5 + 17264) || *(_DWORD *)(_R5 + 17344) ) | |
goto LABEL_741; | |
if ( (unsigned int)(*(_DWORD *)(_R5 + 80) - 1) <= 1 ) | |
goto LABEL_598; | |
LABEL_692: | |
if ( !*(_DWORD *)(_R5 + 17264) ) | |
{ | |
v287 = *(_DWORD *)(_R5 + 17180); | |
if ( (*(_DWORD *)(_R5 + 17224) > *(_DWORD *)(_R5 + 4172) + (v287 >> 1) | |
|| *(_DWORD *)(_R5 + 17228) < *(_DWORD *)(_R5 + 4208) - v287) | |
&& !*(_DWORD *)(v5 + 152) ) | |
goto LABEL_741; | |
} | |
if ( !*(_DWORD *)(v5 + 152) ) | |
{ | |
sub_8428(v5, _R5); | |
sub_8908(v5, _R5); | |
sub_8804(_R5); | |
if ( *(_DWORD *)(_R5 + 84) ) | |
*(_DWORD *)(_R5 + 88) = *(_DWORD *)(_R5 + 17416); | |
else | |
*(_DWORD *)(_R5 + 92) = *(_DWORD *)(_R5 + 17416); | |
} | |
__asm | |
{ | |
VMOV.F32 S11, #1.0 | |
VLDR S0, [R6,#0xD0] | |
VLDR S15, [R6,#0xD4] | |
VDIV.F32 S1, S11, S0 | |
VSTR S11, [R6,#0xB8] | |
VDIV.F32 S2, S11, S15 | |
VSTR S1, [R6,#0xB4] | |
VSTR S2, [R6,#0xBC] | |
} | |
LABEL_701: | |
if ( *(_DWORD *)(v5 + 152) ) | |
goto LABEL_709; | |
v288 = *(_DWORD *)(_R5 + 80); | |
v289 = _R5 + 17152; | |
if ( v288 ) | |
{ | |
if ( v288 != 1 ) | |
goto LABEL_709; | |
v290 = *(_DWORD *)(_R5 + 17416); | |
if ( v290 != 5 && v290 != 2 && sub_8412(v290) ) | |
goto LABEL_709; | |
goto LABEL_741; | |
} | |
if ( !sub_885C(*(_DWORD *)(_R5 + 17416)) ) | |
goto LABEL_704; | |
LABEL_709: | |
v291 = *(_DWORD *)(_R5 + 17416); | |
if ( v291 > 8 ) | |
{ | |
v300 = *(_DWORD *)(_R5 + 17304); | |
if ( v300 == 1 ) | |
{ | |
__asm | |
{ | |
VLDR S1, [R5,#0x120] | |
VLDR S15, [R4,#0x88] | |
VCVT.F32.S32 S2, S1 | |
} | |
_R2 = _R5 + 16064; | |
__asm | |
{ | |
VLDR S6, [R2,#0x20] | |
VLDR S5, [R2,#0x1C] | |
} | |
_R3 = _R5 + 16128; | |
__asm | |
{ | |
VCVT.F32.S32 S4, S15 | |
VSUB.F32 S3, S2, S4 | |
VDIV.F32 S9, S3, S2 | |
VMUL.F32 S7, S9, S6 | |
VSUB.F32 S13, S18, S9 | |
VMLA.F32 S7, S13, S5 | |
VSTR S7, [R4,#0x100] | |
VLDR S11, [R3] | |
VLDR S0, [R3,#4] | |
} | |
} | |
else | |
{ | |
if ( v300 != 2 ) | |
{ | |
_R2 = _R5 + 16064; | |
_R3 = _R5 + 16128; | |
__asm | |
{ | |
VLDR S4, [R2,#0x1C] | |
VSTR S4, [R4,#0x100] | |
VLDR S9, [R3] | |
} | |
goto LABEL_725; | |
} | |
__asm | |
{ | |
VLDR S3, [R5,#0x124] | |
VLDR S6, [R4,#0x88] | |
VCVT.F32.S32 S5, S3 | |
} | |
_R0 = _R5 + 16064; | |
__asm | |
{ | |
VLDR S14, [R0,#0x1C] | |
VLDR S10, [R0,#0x34] | |
} | |
_R1 = _R5 + 16128; | |
__asm | |
{ | |
VCVT.F32.S32 S7, S6 | |
VSUB.F32 S8, S5, S7 | |
VDIV.F32 S9, S8, S5 | |
VMUL.F32 S12, S9, S14 | |
VSUB.F32 S13, S18, S9 | |
VMLA.F32 S12, S13, S10 | |
VSTR S12, [R4,#0x100] | |
VLDR S11, [R1,#0x18] | |
VLDR S0, [R1] | |
} | |
} | |
LABEL_718: | |
__asm | |
{ | |
VMUL.F32 S9, S9, S0 | |
VMLA.F32 S9, S13, S11 | |
} | |
goto LABEL_725; | |
} | |
if ( *(_DWORD *)(_R5 + 17344) == 1 ) | |
goto LABEL_724; | |
if ( v291 != 5 && v291 != 2 ) | |
{ | |
if ( (unsigned int)(v291 - 3) > 1 ) | |
goto LABEL_724; | |
_R1 = *(_DWORD *)(_R5 + 17288); | |
if ( _R1 < 0 ) | |
goto LABEL_724; | |
__asm { VMOV S13, R1 } | |
_R0 = _R5 + 6272; | |
__asm | |
{ | |
VCVT.F32.S32 S10, S13 | |
VLDR S8, [R0] | |
} | |
_R3 = _R5 + 16064; | |
__asm | |
{ | |
VLDR S11, [R3,#0x2C] | |
VLDR S12, [R3,#0x28] | |
} | |
_R2 = _R5 + 16128; | |
__asm | |
{ | |
VCVT.F32.S32 S9, S8 | |
VSUB.F32 S14, S9, S10 | |
VDIV.F32 S9, S14, S9 | |
VMUL.F32 S0, S9, S11 | |
VSUB.F32 S13, S18, S9 | |
VMLA.F32 S0, S13, S12 | |
VSTR S0, [R4,#0x100] | |
VLDR S11, [R2,#0xC] | |
VLDR S0, [R2,#0x10] | |
} | |
goto LABEL_718; | |
} | |
_R1 = *(_DWORD *)(_R5 + 17272); | |
if ( _R1 >= 0 ) | |
{ | |
_R0 = _R5 + 8320; | |
__asm | |
{ | |
VMOV S15, R1 | |
VLDR S1, [R0,#8] | |
VCVT.F32.S32 S4, S15 | |
} | |
_R3 = _R5 + 16064; | |
__asm | |
{ | |
VLDR S6, [R3,#0x24] | |
VLDR S5, [R3,#0x30] | |
} | |
_R2 = _R5 + 16128; | |
__asm | |
{ | |
VCVT.F32.S32 S2, S1 | |
VSUB.F32 S3, S2, S4 | |
VDIV.F32 S9, S3, S2 | |
VMUL.F32 S7, S9, S6 | |
VSUB.F32 S13, S18, S9 | |
VMLA.F32 S7, S13, S5 | |
VSTR S7, [R4,#0x100] | |
VLDR S11, [R2,#0x14] | |
VLDR S0, [R2,#8] | |
} | |
goto LABEL_718; | |
} | |
LABEL_724: | |
_R3 = _R5 + 4 * (v291 + 3980); | |
_R2 = _R5 + 4 * (v291 + 3990); | |
__asm | |
{ | |
VLDR S8, [R3,#0xAC] | |
VSTR S8, [R4,#0x100] | |
VLDR S9, [R2,#0xA8] | |
} | |
LABEL_725: | |
__asm | |
{ | |
VMOV.F32 S10, #1.0 | |
VLDR S13, [R4,#0xB4] | |
VLDR S14, [R4,#0xBC] | |
VSTR S9, [R4,#0x104] | |
} | |
_R5 = _R5 + 17152; | |
__asm | |
{ | |
VLDR S12, [R5,#0xD8] | |
VLDR S1, [R5,#0x120] | |
VLDR S15, [R5,#0x124] | |
} | |
*(_DWORD *)(_R5 + 272) = *(_DWORD *)(_R5 + 264); | |
__asm | |
{ | |
VCMPE.F32 S13, S18 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !(!_ZF & _CF) ) | |
__asm { VMOVLS.F32 S10, S13 } | |
__asm | |
{ | |
VCMP.F32 S14, S10 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !(!_ZF & _CF) ) | |
__asm { VMOVLS.F32 S10, S14 } | |
*(_BYTE *)(_R5 + 268) = 1; | |
__asm | |
{ | |
VMOV.F64 D18, #1.0 | |
VCVT.F64.F32 D31, S10 | |
VDIV.F64 D19, D18, D31 | |
VCVT.F64.F32 D20, S13 | |
VCVT.F64.F32 D22, S14 | |
VMUL.F64 D21, D20, D19 | |
VMUL.F64 D23, D22, D19 | |
VCVT.F64.F32 D17, S12 | |
VMUL.F64 D16, D17, D19 | |
VCVT.F32.F64 S0, D21 | |
VCVT.F32.F64 S4, D23 | |
VMUL.F32 S2, S0, S1 | |
VMUL.F32 S3, S4, S15 | |
VSTR S2, [R5,#0xD4] | |
VSTR S2, [R5,#0x114] | |
VCVT.F32.F64 S11, D16 | |
VSTR S3, [R5,#0xDC] | |
VSTR S3, [R5,#0x11C] | |
VSTR S11, [R5,#0xD8] | |
VSTR S11, [R5,#0x118] | |
} | |
LABEL_742: | |
v104 = v326; | |
v105 = _R5 + 268; | |
LABEL_743: | |
v312 = *(_DWORD *)v105; | |
v314 = *(_DWORD *)(v105 + 4); | |
v315 = *(_DWORD *)(v105 + 8); | |
v316 = *(_DWORD *)(v105 + 12); | |
v313 = v105 + 16; | |
*(_DWORD *)v104 = v312; | |
*(_DWORD *)(v104 + 4) = v314; | |
*(_DWORD *)(v104 + 8) = v315; | |
*(_DWORD *)(v104 + 12) = v316; | |
v317 = v104 + 16; | |
v318 = *(_DWORD *)(v313 + 4); | |
v319 = *(_DWORD *)(v313 + 8); | |
*(_DWORD *)v317 = *(_DWORD *)v313; | |
*(_DWORD *)(v317 + 4) = v318; | |
*(_DWORD *)(v317 + 8) = v319; | |
return v326; | |
} | |
// 1AEC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...); | |
//----- (0000BE18) -------------------------------------------------------- | |
signed int __fastcall asd_init(int a1) | |
{ | |
int v1; // r4@1 | |
unsigned int v2; // r5@1 | |
signed int result; // r0@2 | |
void *v4; // r1@3 | |
v1 = a1; | |
v2 = *(_BYTE *)a1; | |
if ( v2 <= 7 && (v4 = malloc(0x40u), (dword_122CC[v2] = v4) != 0) ) | |
{ | |
asd_init_data(v1, v4); | |
result = 0; | |
} | |
else | |
{ | |
result = -1; | |
} | |
return result; | |
} | |
//----- (0000BE4C) -------------------------------------------------------- | |
signed int asd_get_params() | |
{ | |
_android_log_print(6, 0, "Invalid ASD Get Params Type"); | |
return -1; | |
} | |
// 1AEC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...); | |
//----- (0000BE64) -------------------------------------------------------- | |
signed int __fastcall asd_set_params(int a1, int a2) | |
{ | |
int v2; // r2@1 | |
v2 = dword_122CC[*(_BYTE *)a1]; | |
if ( *(_DWORD *)a2 ) | |
{ | |
if ( *(_DWORD *)a2 != 1 ) | |
{ | |
_android_log_print(6, 0, "Invalid ASD Set Params Type"); | |
return -1; | |
} | |
} | |
else | |
{ | |
*(_DWORD *)(a2 + 4) = 0; | |
*(_DWORD *)v2 = 0; | |
*(_DWORD *)(a1 + 1616) = 0; | |
*(_DWORD *)(v2 + 56) = 0; | |
*(_DWORD *)(a1 + 1620) = 0; | |
*(_DWORD *)(a1 + 1624) = 0; | |
*(_DWORD *)(a1 + 776) = 0; | |
*(_DWORD *)(a1 + 1628) = 0; | |
*(_DWORD *)(a1 + 1632) = 0; | |
*(_DWORD *)(v2 + 8) = 0; | |
} | |
return 0; | |
} | |
// 1AEC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...); | |
//----- (0000BEBC) -------------------------------------------------------- | |
int __fastcall asd_process(int a1) | |
{ | |
int v1; // r1@1 | |
v1 = dword_122CC[*(_BYTE *)a1]; | |
*(_DWORD *)v1 = 0; | |
if ( *(_DWORD *)(a1 + 792) ) | |
{ | |
*(_DWORD *)(a1 + 1640) = *(_DWORD *)(v1 + 4); | |
*(_DWORD *)(a1 + 1644) = *(_DWORD *)(v1 + 56); | |
} | |
return 0; | |
} | |
//----- (0000BEE4) -------------------------------------------------------- | |
void __fastcall asd_deinit(unsigned int *a1) | |
{ | |
unsigned int v1; // r3@1 | |
void *v2; // r0@2 | |
v1 = *(_BYTE *)a1; | |
if ( v1 <= 7 ) | |
{ | |
v2 = (void *)dword_122CC[v1]; | |
if ( v2 ) | |
j_j_free(v2); | |
} | |
} | |
//----- (0000BF00) -------------------------------------------------------- | |
unsigned int __fastcall sub_BF00(unsigned int result, int a2, int a3, int a4) | |
{ | |
int v4; // r3@2 | |
if ( (signed int)result <= 0 ) | |
{ | |
*(_DWORD *)a3 = -1; | |
*(_DWORD *)a4 = -1; | |
} | |
else | |
{ | |
v4 = 0; | |
do | |
{ | |
result = *(_DWORD *)(a2 + 4 * v4); | |
if ( result > *(_DWORD *)(a2 + 4 * *(_DWORD *)a3) ) | |
*(_DWORD *)a3 = v4; | |
++v4; | |
} | |
while ( v4 != 10 ); | |
} | |
return result; | |
} | |
//----- (0000BF2C) -------------------------------------------------------- | |
signed int __fastcall asd_init_data(int a1, void *a2) | |
{ | |
void *v2; // r4@1 | |
int v3; // r5@1 | |
signed int result; // r0@1 | |
v2 = a2; | |
v3 = a1; | |
memset(a2, 0, 0x40u); | |
memset((char *)v2 + 16, -1, 0xCu); | |
memset((char *)v2 + 28, -1, 0xCu); | |
memset((void *)(v3 + 1616), 0, 0x20u); | |
__asm | |
{ | |
VMOV.F32 S15, #1.0 | |
VLDR S0, =0.075 | |
} | |
result = 200; | |
__asm { VSTR S15, [R5] } | |
*((_DWORD *)v2 + 10) = 30; | |
*((_DWORD *)v2 + 11) = 200; | |
__asm | |
{ | |
VSTR S0, [R4,#0x30] | |
VSTR S0, [R4,#0x34] | |
} | |
*(_DWORD *)v2 = 0; | |
return result; | |
} | |
//----- (0000BF90) -------------------------------------------------------- | |
int __fastcall asd_histogram_backlight_detect(int result, int _R1) | |
{ | |
int v3; // r12@1 | |
unsigned int v4; // r3@1 | |
int v5; // r4@2 | |
unsigned int v6; // r6@4 | |
int v8; // r8@4 | |
unsigned int v9; // r5@4 | |
int v10; // r7@5 | |
int v12; // r12@7 | |
int v14; // r7@8 | |
signed int v19; // r3@13 | |
_R2 = 0; | |
v3 = *(_DWORD *)(_R1 + 40); | |
v4 = 0; | |
while ( v4 != v3 ) | |
{ | |
v5 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(result + 60) + 5192) + 4 * v4++); | |
_R2 += v5; | |
} | |
v6 = *(_DWORD *)(_R1 + 44); | |
_R4 = 0; | |
v8 = 4 * v6; | |
v9 = *(_DWORD *)(_R1 + 44); | |
while ( v9 <= 0xFF ) | |
{ | |
++v9; | |
v10 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(result + 60) + 5192) + v8); | |
v8 += 4; | |
_R4 += v10; | |
} | |
_R8 = _R4 + _R2; | |
v12 = 4 * v3; | |
_R5 = _R4 + _R2; | |
while ( v4 < v6 ) | |
{ | |
++v4; | |
v14 = *(_DWORD *)(*(_DWORD *)(*(_DWORD *)(result + 60) + 5192) + v12); | |
v12 += 4; | |
_R5 += v14; | |
} | |
__asm | |
{ | |
VMOV S12, R5 | |
VCVT.F32.U32 S15, S12 | |
VLDR S14, [R1,#0x30] | |
VMOV S13, R2 | |
VMUL.F32 S1, S15, S14 | |
VCVT.F32.U32 S0, S13 | |
VCMPE.F32 S0, S1 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
goto LABEL_18; | |
__asm | |
{ | |
VLDR S4, [R1,#0x34] | |
VMUL.F32 S5, S15, S4 | |
VMOV S2, R4 | |
VCVT.F32.U32 S3, S2 | |
VCMPE.F32 S3, S5 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
v19 = 0; | |
*(_DWORD *)(_R1 + 60) = 0; | |
} | |
else | |
{ | |
LABEL_18: | |
__asm | |
{ | |
VMOV S8, R8 | |
VCVT.F32.S32 S9, S8 | |
VLDR S6, [R1,#0x34] | |
VLDR S13, =255.0 | |
} | |
v19 = 1; | |
__asm | |
{ | |
VDIV.F32 S10, S9, S15 | |
VADD.F32 S7, S14, S6 | |
VMOV.F32 S12, #1.0 | |
VSUB.F32 S11, S10, S7 | |
VSUB.F32 S15, S12, S7 | |
VDIV.F32 S14, S11, S15 | |
VMUL.F32 S0, S14, S13 | |
VCVTR.U32.F32 S1, S0 | |
VSTR S1, [R1,#0x3C] | |
} | |
} | |
*(_DWORD *)(_R1 + 56) = v19; | |
return result; | |
} | |
//----- (0000C07C) -------------------------------------------------------- | |
void *__fastcall asd_backlight_and_snowscene_detect(int a1, int a2) | |
{ | |
int v2; // r6@1 | |
int v3; // r2@1 | |
int v5; // r4@1 | |
int v6; // r7@1 | |
void *result; // r0@1 | |
int v15; // r1@1 | |
unsigned int v16; // r8@2 | |
char *v17; // r9@2 | |
int v18; // r3@4 | |
int v19; // r2@7 | |
int v20; // r8@7 | |
int v21; // r9@7 | |
unsigned int v22; // r6@7 | |
unsigned int v23; // r7@7 | |
int v24; // r10@7 | |
unsigned int v25; // r8@9 | |
int v26; // r1@13 | |
signed int v28; // r3@13 | |
char *v29; // r1@19 | |
int v30; // r3@39 | |
int v31; // r1@40 | |
int v32; // r0@41 | |
int v33; // r1@51 | |
int v34; // r7@52 | |
int v35; // r7@54 | |
int v36; // r7@56 | |
int v37; // r1@58 | |
int v38; // r7@59 | |
int v39; // r7@61 | |
int v40; // r7@63 | |
int v41; // r1@64 | |
signed int v46; // r3@75 | |
int v47; // r0@79 | |
int v48; // r0@82 | |
unsigned int v49; // r0@84 | |
int v52; // r3@86 | |
int v53; // r2@86 | |
int v54; // r0@87 | |
int v55; // r1@88 | |
int v64; // r2@92 | |
unsigned int v65; // [sp+4h] [bp-1ECh]@7 | |
unsigned int v66; // [sp+20h] [bp-1D0h]@1 | |
unsigned int v67; // [sp+24h] [bp-1CCh]@1 | |
int v68; // [sp+28h] [bp-1C8h]@39 | |
int v69; // [sp+2Ch] [bp-1C4h]@39 | |
int v70; // [sp+30h] [bp-1C0h]@39 | |
int v71; // [sp+34h] [bp-1BCh]@39 | |
int v72; // [sp+38h] [bp-1B8h]@39 | |
int v73; // [sp+3Ch] [bp-1B4h]@39 | |
char v74; // [sp+40h] [bp-1B0h]@1 | |
char v75; // [sp+68h] [bp-188h]@1 | |
char v76; // [sp+90h] [bp-160h]@1 | |
char v77; // [sp+B4h] [bp-13Ch]@2 | |
char v78[256]; // [sp+B8h] [bp-138h]@10 | |
char v79; // [sp+1B8h] [bp-38h]@69 | |
v2 = 0; | |
v3 = *(_DWORD *)(a1 + 76); | |
_R5 = a1; | |
*(_DWORD *)(a1 + 772) = 0; | |
v5 = a2; | |
v6 = *(_DWORD *)(a1 + 60); | |
_R3 = v3 + 54016; | |
__asm { VLDR S16, [R3,#4] } | |
v66 = *(_DWORD *)(v3 + 54008); | |
__asm { VLDR S17, [R3,#8] } | |
_R0 = *(_BYTE *)(v3 + 6988); | |
v67 = *(_DWORD *)(v3 + 54012); | |
__asm { VMOV S19, R0 } | |
_R11 = *(_DWORD *)(v3 + 54016); | |
__asm { VLDR S18, [R3,#0x44] } | |
memset(&v74, 0, 0x28u); | |
memset(&v75, 0, 0x28u); | |
result = memset(&v76, 0, 0x28u); | |
*(_DWORD *)(v5 + 4) = 0; | |
v15 = *(_DWORD *)(_R5 + 44); | |
if ( v15 == 256 ) | |
{ | |
v16 = *(_DWORD *)(_R5 + 4); | |
v17 = &v77; | |
while ( 1 ) | |
{ | |
v18 = v2 + 2; | |
if ( !((v2 + 2) << 28) ) | |
v18 = v2 + 18; | |
*((_DWORD *)v17 + 1) = ((unsigned int)(*(_DWORD *)(v6 + 4 * (v2 + 257)) | |
+ *(_DWORD *)(v6 + 4 * (v2 + 272)) | |
+ *(_DWORD *)(v6 + 4 * (v2 + 256)) | |
+ *(_DWORD *)(v6 + 4 * (v2 + 273))) >> 2) | |
/ v16; | |
v17 += 4; | |
if ( (unsigned int)v18 > 0xFF ) | |
break; | |
v2 = v18; | |
} | |
} | |
else | |
{ | |
if ( v15 != 64 ) | |
return result; | |
v25 = *(_DWORD *)(_R5 + 4); | |
do | |
{ | |
*(_DWORD *)&v78[v2] = *(_DWORD *)(v6 + v2 + 1024) / v25; | |
v2 += 4; | |
} | |
while ( v2 != 256 ); | |
} | |
v19 = 0; | |
v65 = 0; | |
__asm { VMOV.F64 D16, #2.5 } | |
v20 = 0; | |
v21 = 0; | |
v22 = 0; | |
v23 = 0; | |
v24 = 0; | |
do | |
{ | |
if ( *(_DWORD *)(_R5 + v19 + 516) != -1 ) | |
{ | |
v26 = _R5 + 4 * v24++; | |
_LR = *(_DWORD *)&v78[v19]; | |
v28 = *(_DWORD *)(v26 + 260); | |
if ( (unsigned int)v28 >= 0xA ) | |
v28 = 10; | |
if ( !*(_DWORD *)(v5 + 56) || !*(_DWORD *)v5 ) | |
goto LABEL_26; | |
if ( _LR < *(_DWORD *)(v5 + 40) && v28 != 10 ) | |
{ | |
++v65; | |
v29 = &v74; | |
LABEL_25: | |
++*(_DWORD *)&v29[4 * v28]; | |
goto LABEL_26; | |
} | |
__asm | |
{ | |
VLDR S13, [R5,#0x344] | |
VCVT.F64.U32 D17, S13 | |
VMOV S12, LR | |
VMUL.F64 D0, D17, D16 | |
VCVT.F64.U32 D18, S12 | |
VCMPE.F64 D18, D0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
if ( v28 != 10 ) | |
{ | |
++v22; | |
v29 = &v76; | |
goto LABEL_25; | |
} | |
} | |
else if ( v28 != 10 ) | |
{ | |
++v23; | |
v29 = &v75; | |
goto LABEL_25; | |
} | |
LABEL_26: | |
if ( _LR > v66 && ((unsigned int)v28 <= 1 || v28 == 6 || v28 == 8 || v28 == 9) ) | |
++v21; | |
goto LABEL_34; | |
} | |
if ( *(_DWORD *)&v78[v19] > v67 ) | |
++v20; | |
LABEL_34: | |
v19 += 4; | |
} | |
while ( v19 != 256 ); | |
if ( (v65 || v23 || v22) && *(_DWORD *)(v5 + 56) ) | |
{ | |
v68 = 0; | |
v69 = 0; | |
v70 = 0; | |
v71 = 0; | |
v72 = 0; | |
v73 = 0; | |
sub_BF00(v65, (int)&v74, (int)&v68, (int)&v71); | |
sub_BF00(v23, (int)&v75, (int)&v69, (int)&v72); | |
sub_BF00(v22, (int)&v76, (int)&v70, (int)&v73); | |
v30 = v70; | |
if ( *(_DWORD *)(_R5 + 252) ) | |
{ | |
v31 = v69; | |
*(_DWORD *)(v5 + 16) = v68; | |
*(_DWORD *)(v5 + 20) = v30; | |
*(_DWORD *)(v5 + 24) = v31; | |
} | |
else | |
{ | |
v32 = v69; | |
*(_DWORD *)(v5 + 28) = v68; | |
*(_DWORD *)(v5 + 32) = v30; | |
*(_DWORD *)(v5 + 36) = v32; | |
} | |
if ( v68 == -1 ) | |
{ | |
if ( v70 != -1 ) | |
goto LABEL_49; | |
goto LABEL_51; | |
} | |
if ( v69 != -1 && v68 != v69 ) | |
goto LABEL_75; | |
if ( v70 == -1 ) | |
goto LABEL_51; | |
if ( v68 != v70 ) | |
goto LABEL_75; | |
LABEL_49: | |
if ( v69 == -1 ) | |
goto LABEL_51; | |
if ( v70 != v69 ) | |
{ | |
LABEL_75: | |
v46 = 1; | |
} | |
else | |
{ | |
LABEL_51: | |
v33 = *(_DWORD *)(v5 + 16); | |
if ( v33 != -1 ) | |
{ | |
v34 = *(_DWORD *)(v5 + 28); | |
if ( v34 != -1 && v33 != v34 ) | |
goto LABEL_75; | |
v35 = *(_DWORD *)(v5 + 32); | |
if ( v35 != -1 && v33 != v35 ) | |
goto LABEL_75; | |
v36 = *(_DWORD *)(v5 + 36); | |
if ( v36 != -1 && v33 != v36 ) | |
goto LABEL_75; | |
} | |
v37 = *(_DWORD *)(v5 + 20); | |
if ( v37 != -1 ) | |
{ | |
v38 = *(_DWORD *)(v5 + 32); | |
if ( v38 != -1 && v37 != v38 ) | |
goto LABEL_75; | |
v39 = *(_DWORD *)(v5 + 36); | |
if ( v39 != -1 && v37 != v39 ) | |
goto LABEL_75; | |
} | |
v40 = *(_DWORD *)(v5 + 24); | |
if ( v40 != -1 ) | |
{ | |
v41 = *(_DWORD *)(v5 + 36); | |
if ( v41 != -1 && v40 != v41 ) | |
goto LABEL_75; | |
} | |
if ( v70 != -1 && v73 != -1 && v73 != v70 ) | |
{ | |
__asm { VMOV.F32 S4, #0.5 } | |
_R2 = &v79 + 4 * v70 - 296; | |
_R6 = &v79 + 4 * v73 - 296; | |
__asm | |
{ | |
VLDR S14, [R2] | |
VLDR S15, [R6] | |
VCVT.F32.U32 S1, S14 | |
VCVT.F32.U32 S2, S15 | |
VDIV.F32 S3, S1, S2 | |
VCMPE.F32 S3, S4 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
goto LABEL_75; | |
} | |
if ( v69 != -1 && v72 != -1 && v69 != v72 ) | |
{ | |
__asm { VMOV.F32 S10, #0.5 } | |
_R2 = &v79 + 4 * v69 - 336; | |
_R1 = &v79 + 4 * v72 - 336; | |
__asm | |
{ | |
VLDR S5, [R2] | |
VLDR S7, [R1] | |
VCVT.F32.U32 S6, S5 | |
VCVT.F32.U32 S8, S7 | |
VDIV.F32 S9, S6, S8 | |
VCMPE.F32 S9, S10 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
goto LABEL_75; | |
} | |
v46 = 0; | |
} | |
*(_DWORD *)(v5 + 4) = v46; | |
} | |
if ( *(_DWORD *)(v5 + 4) ) | |
v47 = 0; | |
else | |
v47 = *(_DWORD *)(v5 + 8) + 1; | |
*(_DWORD *)(v5 + 8) = v47; | |
if ( *(_DWORD *)(v5 + 8) <= 2 ) | |
{ | |
*(_DWORD *)(_R5 + 1616) = 1; | |
v48 = *(_DWORD *)(v5 + 60); | |
} | |
else | |
{ | |
v48 = 0; | |
*(_DWORD *)(_R5 + 1616) = 0; | |
} | |
__asm { VCVT.F32.S32 S19, S19 } | |
v49 = (v48 + 4 * *(_DWORD *)(_R5 + 1620)) / 5u; | |
__asm | |
{ | |
VMUL.F32 S18, S18, S19 | |
VCVTR.U32.F32 S18, S18 | |
VMOV R3, S18 | |
} | |
*(_DWORD *)(_R5 + 1620) = v49; | |
*(_DWORD *)(_R5 + 772) = v49 * _R3 / 0xFF; | |
memset((void *)(_R5 + 516), -1, 0x100u); | |
if ( *(_DWORD *)(_R5 + 252) ) | |
{ | |
_R8 = v20 + v21; | |
if ( _R8 <= _R11 || (v52 = *(_DWORD *)(_R5 + 76), v53 = *(_DWORD *)(_R5 + 812), v53 >= *(_DWORD *)(v52 + 7004)) ) | |
{ | |
v64 = 0; | |
*(_DWORD *)(_R5 + 1624) = 0; | |
} | |
else | |
{ | |
*(_DWORD *)(_R5 + 1624) = 1; | |
__asm { VCVTR.U32.F32 S11, S17 } | |
v54 = *(_DWORD *)(v52 + 7008); | |
__asm { VMOV.F64 D19, #0.5 } | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
_R2 = 0; | |
} | |
else | |
{ | |
v55 = *(_DWORD *)(v52 + 7004); | |
_R3 = v53 - v54; | |
__asm | |
{ | |
VMOV S12, R3 | |
VCVT.F32.S32 S13, S12 | |
} | |
_R0 = v55 - v54; | |
__asm | |
{ | |
VMOV S0, R0 | |
VCVT.F32.S32 S14, S0 | |
VDIV.F32 S1, S13, S14 | |
VCVT.F32.U32 S15, S11 | |
VMUL.F32 S2, S1, S15 | |
VCVT.F64.F32 D20, S2 | |
VADD.F64 D21, D20, D19 | |
VCVTR.S32.F64 S3, D21 | |
VMOV R2, S3 | |
} | |
} | |
__asm | |
{ | |
VCVT.F32.U32 S6, S16 | |
VMOV S4, R8 | |
VMOV S7, R11 | |
VMOV R3, S16 | |
} | |
_R1 = _R3 - _R11; | |
__asm | |
{ | |
VMOV S16, R1 | |
VMOV R0, S11 | |
} | |
_R2 = _R0 - _R2; | |
__asm | |
{ | |
VMOV S11, R2 | |
VCVT.F32.U32 S5, S4 | |
VCMPE.F32 S5, S6 | |
VCVT.F32.U32 S8, S7 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
__asm { VMOVLE.F32 S6, S5 } | |
__asm | |
{ | |
VSUB.F32 S9, S6, S8 | |
VCVT.F32.U32 S16, S16 | |
VDIV.F32 S10, S9, S16 | |
VCVT.F32.U32 S12, S11 | |
VMUL.F32 S13, S10, S12 | |
VCVT.F64.F32 D22, S13 | |
VADD.F64 D0, D22, D19 | |
VCVTR.U32.F64 S14, D0 | |
VMOV R3, S14 | |
} | |
v64 = (unsigned __int8)_R3; | |
} | |
*(_DWORD *)(_R5 + 776) = (v64 + 4 * *(_DWORD *)(_R5 + 776)) / 5u; | |
} | |
result = *(void **)v5; | |
if ( !*(_DWORD *)v5 ) | |
{ | |
*(_DWORD *)(_R5 + 1624) = 0; | |
*(_DWORD *)(_R5 + 776) = 0; | |
} | |
return result; | |
} | |
// C07C: using guessed type char var_138[256]; | |
//----- (0000C50C) -------------------------------------------------------- | |
int __fastcall asd_landscape_detect(int result, int a2) | |
{ | |
int v2; // r3@1 | |
int v3; // r5@1 | |
v2 = *(_DWORD *)(result + 76); | |
v3 = *(_DWORD *)(result + 60); | |
if ( *(_DWORD *)(result + 252) ) | |
{ | |
_R2 = v2 + 54016; | |
_R4 = *(_DWORD *)(v2 + 54128); | |
if ( _R4 ) | |
{ | |
if ( *(_DWORD *)a2 ) | |
{ | |
_R4 = v3 + 5120; | |
_R5 = v3 + 5152; | |
__asm | |
{ | |
VLDR S11, [R4,#0xC] | |
VLDR S14, [R4,#0x1C] | |
VCVT.F32.U32 S15, S11 | |
VLDR S13, [R5,#0xC] | |
VLDR S5, [R2,#0x80] | |
VCVT.F32.U32 S0, S14 | |
VCVT.F32.U32 S2, S13 | |
VDIV.F32 S1, S0, S15 | |
VDIV.F32 S3, S2, S15 | |
VADD.F32 S4, S1, S3 | |
VCMPE.F32 S4, S5 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
_R4 = 0; | |
} | |
else | |
{ | |
__asm | |
{ | |
VSUB.F32 S6, S4, S5 | |
VLDR S7, [R2,#0x84] | |
VLDR S10, =255.0 | |
VSUB.F32 S8, S7, S5 | |
VDIV.F32 S9, S6, S8 | |
VMUL.F32 S12, S9, S10 | |
VCVTR.U32.F32 S11, S12 | |
VMOV R4, S11 | |
} | |
if ( (unsigned int)_R4 >= 0xFF ) | |
_R4 = 255; | |
} | |
__asm { VLDR S15, [R0,#0x338] } | |
_R1 = *(_DWORD *)(v2 + 54164); | |
__asm | |
{ | |
VMOV S14, R1 | |
VCVT.F32.S32 S0, S14 | |
VCMPE.F32 S15, S0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
_R2 = *(_DWORD *)(v2 + 54168); | |
__asm | |
{ | |
VMOV S1, R2 | |
VCVT.F32.S32 S13, S1 | |
VCMPE.F32 S15, S13 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
__asm | |
{ | |
VSUB.F32 S4, S0, S15 | |
VMOV S2, R4 | |
} | |
_R4 = _R1 - _R2; | |
__asm | |
{ | |
VMOV S6, R4 | |
VCVT.F32.S32 S3, S2 | |
VMUL.F32 S5, S3, S4 | |
VCVT.F32.S32 S7, S6 | |
VDIV.F32 S8, S5, S7 | |
VCVTR.S32.F32 S9, S8 | |
VMOV R4, S9 | |
} | |
} | |
} | |
else | |
{ | |
_R4 = 0; | |
} | |
} | |
else | |
{ | |
_R4 = 0; | |
} | |
} | |
} | |
else | |
{ | |
_R4 = 0; | |
} | |
__asm | |
{ | |
VMOV S12, R4 | |
VCVT.F32.U32 S11, S12 | |
} | |
_R3 = v2 + 54016; | |
__asm { VLDR S10, [R3,#0x90] } | |
_R1 = *(_DWORD *)(result + 1628); | |
__asm | |
{ | |
VMOV S0, R1 | |
VMOV.F64 D18, #1.0 | |
VMUL.F32 S15, S11, S10 | |
VCVT.F64.F32 D16, S10 | |
VCVT.F32.U32 S1, S0 | |
VSUB.F64 D19, D18, D16 | |
VCVT.F64.F32 D7, S15 | |
VCVT.F64.F32 D17, S1 | |
VMLA.F64 D7, D17, D19 | |
VCVTR.U32.F64 S13, D7 | |
VMOV R2, S13 | |
} | |
if ( (unsigned int)_R2 > 0xFF ) | |
_R2 = 255; | |
*(_DWORD *)(result + 1628) = _R2; | |
return result; | |
} | |
//----- (0000C648) -------------------------------------------------------- | |
signed int __fastcall asd_portrait_detect(int a1, int a2) | |
{ | |
int v2; // r4@1 | |
int v3; // r7@1 | |
signed int result; // r0@5 | |
signed int v12; // r3@7 | |
unsigned int v14; // r12@10 | |
int v15; // r2@10 | |
unsigned int v16; // r0@10 | |
int v19; // r10@11 | |
v2 = a1; | |
v3 = *(_DWORD *)(a1 + 76); | |
_R5 = v3 + 54016; | |
if ( !*(_DWORD *)(v3 + 54176) || !*(_DWORD *)a2 ) | |
goto LABEL_2; | |
if ( *(_DWORD *)(a1 + 224) ) | |
{ | |
v12 = 0; | |
*(_DWORD *)(a2 + 12) = 0; | |
if ( !*(_DWORD *)(a1 + 216) ) | |
goto LABEL_2; | |
if ( !*(_DWORD *)(a1 + 236) ) | |
goto LABEL_2; | |
_R1 = *(_DWORD *)(a1 + 228) * *(_DWORD *)(a1 + 232); | |
__asm { VMOV S16, R1 } | |
if ( _ZF ) | |
goto LABEL_2; | |
v14 = *(_DWORD *)(a1 + 224); | |
v15 = a1; | |
v16 = 0; | |
_R6 = 0; | |
_R9 = v3 + 54016; | |
while ( v15 != v2 + 8 * v14 ) | |
{ | |
__asm { VCVT.F32.U32 S7, S16 } | |
v19 = *(_WORD *)(v15 + 190); | |
__asm { VLDR S11, [R9,#0xA8] } | |
_R5 = v19 * *(_WORD *)(v15 + 188); | |
__asm | |
{ | |
VMOV S10, R5 | |
VCVT.F32.U32 S5, S10 | |
} | |
if ( v16 < _R5 ) | |
v16 = v19 * *(_WORD *)(v15 + 188); | |
if ( _R1 >= _R5 ) | |
_R1 = v19 * *(_WORD *)(v15 + 188); | |
_R6 += _R5; | |
__asm | |
{ | |
VDIV.F32 S9, S5, S7 | |
VCMP.F32 S9, S11 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
v12 = 1; | |
v15 += 8; | |
} | |
if ( v12 ) | |
{ | |
__asm | |
{ | |
VMOV S13, R6 | |
VCVT.F32.U32 S15, S13 | |
} | |
} | |
else | |
{ | |
if ( v14 <= 1 ) | |
goto LABEL_47; | |
_R0 = v16 / _R1; | |
__asm | |
{ | |
VMOV.F64 D16, #4.0 | |
VMOV S14, R0 | |
VCVT.F64.U32 D17, S14 | |
VCMPE.F64 D17, D16 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
LABEL_47: | |
__asm { VLDR S0, =0.0 } | |
goto LABEL_27; | |
} | |
__asm | |
{ | |
VMOV S12, R6 | |
VCVT.F32.U32 S15, S12 | |
} | |
} | |
__asm | |
{ | |
VCVT.F32.U32 S16, S16 | |
VDIV.F32 S0, S15, S16 | |
} | |
LABEL_27: | |
_R3 = v3 + 54016; | |
__asm | |
{ | |
VLDR S1, [R3,#0xA8] | |
VCMPE.F32 S0, S1 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
__asm { VLDR S3, =0.0 } | |
goto LABEL_34; | |
} | |
__asm | |
{ | |
VLDR S2, [R3,#0xAC] | |
VCMPE.F32 S0, S2 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF ) | |
{ | |
__asm { VLDR S3, =255.0 } | |
LABEL_34: | |
__asm { VCVTR.S32.F32 S9, S3 } | |
LABEL_35: | |
__asm { VCVT.F32.S32 S15, S9 } | |
_R7 = v3 + 54016; | |
__asm { VLDR S11, [R7,#0xB4] } | |
_R1 = *(_DWORD *)(v2 + 1632); | |
__asm | |
{ | |
VMOV S14, R1 | |
VLDR D27, =255.0 | |
VMOV.F64 D21, #1.0 | |
VMUL.F32 S0, S15, S11 | |
VCVT.F64.F32 D20, S11 | |
VCVT.F32.U32 S12, S14 | |
VSUB.F64 D22, D21, D20 | |
VCVT.F64.F32 D19, S12 | |
VCVT.F64.F32 D1, S0 | |
VMLA.F64 D1, D19, D22 | |
VCVTR.U32.F64 S13, D1 | |
VMOV R0, S13 | |
} | |
if ( (unsigned int)result >= 0xFF ) | |
result = 255; | |
*(_DWORD *)(v2 + 1632) = result; | |
__asm | |
{ | |
VMOV S1, R0 | |
VLDR S4, [R7,#0xB0] | |
VCVT.F64.F32 D24, S4 | |
VCVT.F32.S32 S3, S1 | |
VSUB.F64 D25, D21, D24 | |
VCVT.F64.F32 D23, S3 | |
VMUL.F64 D26, D23, D25 | |
VDIV.F64 D28, D26, D27 | |
VSUB.F64 D29, D21, D28 | |
VCVT.F32.F64 S8, D29 | |
VCMPE.F32 S8, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF ) | |
{ | |
__asm | |
{ | |
VMOV.F32 S6, #1.0 | |
VCMPE.F32 S8, S6 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
goto LABEL_43; | |
__asm | |
{ | |
VCMPE.F32 S8, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF ) | |
{ | |
__asm { VMOV.F32 S8, S6 } | |
goto LABEL_43; | |
} | |
} | |
__asm { VLDR S8, =0.0 } | |
LABEL_43: | |
__asm { VSTR S8, [R4] } | |
return result; | |
} | |
__asm | |
{ | |
VSUB.F32 S4, S0, S1 | |
VLDR D4, =255.0 | |
VCVT.F64.F32 D3, S4 | |
VSUB.F32 S5, S2, S1 | |
VMUL.F64 D5, D3, D4 | |
VCVT.F64.F32 D18, S5 | |
VDIV.F64 D7, D5, D18 | |
VCVT.F32.F64 S3, D7 | |
VCMPE.F32 S3, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF ) | |
{ | |
__asm | |
{ | |
VLDR S7, =255.0 | |
VCMPE.F32 S3, S7 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
goto LABEL_34; | |
__asm | |
{ | |
VCMPE.F32 S3, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF ) | |
{ | |
__asm { VLDR S9, =?bad floating? } | |
goto LABEL_35; | |
} | |
} | |
LABEL_2: | |
__asm { VLDR S9, =0.0 } | |
goto LABEL_35; | |
} | |
result = *(_DWORD *)(a2 + 12); | |
*(_DWORD *)(a2 + 12) = result + 1; | |
if ( result + 1 > 30 ) | |
{ | |
__asm | |
{ | |
VMOV.F32 S0, #1.0 | |
VLDR S15, [R5,#0xB4] | |
} | |
_R1 = *(_DWORD *)(v2 + 1632); | |
__asm | |
{ | |
VMOV S14, R1 | |
VSUB.F32 S2, S0, S15 | |
VCVT.F32.U32 S12, S14 | |
VMUL.F32 S13, S12, S2 | |
VCVTR.U32.F32 S1, S13 | |
VMOV R3, S1 | |
} | |
*(_DWORD *)(v2 + 1632) = _R3; | |
} | |
return result; | |
} | |
//----- (0000C8A8) -------------------------------------------------------- | |
signed int __fastcall af_init(int a1) | |
{ | |
int v1; // r4@1 | |
unsigned int v2; // r5@1 | |
signed int result; // r0@2 | |
void *v4; // r0@3 | |
int v5; // r6@3 | |
v1 = a1; | |
v2 = *(_BYTE *)a1; | |
if ( v2 <= 7 && (v4 = malloc(0x38Cu), v5 = (int)v4, (dword_122EC[v2] = v4) != 0) ) | |
{ | |
memset(v4, 0, 0x38Cu); | |
af_load_chromatix(v1, v5); | |
af_init_data(v1, dword_122EC[v2]); | |
result = 0; | |
} | |
else | |
{ | |
result = -1; | |
} | |
return result; | |
} | |
//----- (0000C8F4) -------------------------------------------------------- | |
signed int __fastcall af_get_params(int a1, int a2) | |
{ | |
int v2; // r4@1 | |
int v3; // r2@1 | |
int v4; // r3@3 | |
int v5; // r1@6 | |
int v6; // r2@6 | |
int v7; // r4@6 | |
int v9; // [sp+0h] [bp-20h]@6 | |
int v10; // [sp+4h] [bp-1Ch]@6 | |
int v11; // [sp+8h] [bp-18h]@6 | |
v2 = a2; | |
v3 = dword_122EC[*(_BYTE *)a1]; | |
if ( *(_DWORD *)a2 == 1 ) | |
{ | |
af_get_focus_distance((int)&v9, a1, v3); | |
v5 = v10; | |
v6 = v11; | |
v7 = v2 + 4; | |
*(_DWORD *)v7 = v9; | |
*(_DWORD *)(v7 + 4) = v5; | |
*(_DWORD *)(v7 + 8) = v6; | |
return 0; | |
} | |
if ( *(_DWORD *)a2 < 1u ) | |
{ | |
v4 = *(_DWORD *)(v3 + 268); | |
LABEL_8: | |
*(_DWORD *)(a2 + 4) = v4; | |
return 0; | |
} | |
if ( *(_DWORD *)a2 == 2 ) | |
{ | |
v4 = *(_DWORD *)(v3 + 212); | |
goto LABEL_8; | |
} | |
_android_log_print(6, 0, "Invalid AF Get Params Type", a1); | |
return -1; | |
} | |
// 1AEC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...); | |
//----- (0000C958) -------------------------------------------------------- | |
signed int __fastcall af_set_params(int a1, unsigned int *a2) | |
{ | |
unsigned int *v2; // r4@1 | |
unsigned int v3; // r5@1 | |
int v4; // r1@1 | |
int v5; // r0@3 | |
signed int v6; // r5@8 | |
int v7; // r1@16 | |
int v8; // r3@16 | |
int v9; // r4@16 | |
int v10; // t1@17 | |
v2 = a2; | |
v3 = *a2; | |
v4 = dword_122EC[*(_BYTE *)a1]; | |
if ( v3 > 0xF ) | |
{ | |
def_C96C: | |
v6 = -1; | |
_android_log_print(6, 0, "Invalid AF Set Params Type"); | |
LABEL_23: | |
_android_log_print(6, 0, "%s:ERROR INVAL parm for set type %d", "af_set_params", *v2); | |
} | |
else | |
{ | |
switch ( v3 ) | |
{ | |
case 0u: | |
v5 = af_reset_lens(a1, v4); | |
goto LABEL_8; | |
case 1u: | |
*(_DWORD *)(v4 + 208) = v2[1]; | |
break; | |
case 2u: | |
*(_DWORD *)(v4 + 204) = v2[1]; | |
break; | |
case 3u: | |
v5 = af_set_start_parameters(a1, v4); | |
goto LABEL_8; | |
case 4u: | |
v5 = af_move_lens_to(a1, v4, v2[1]); | |
goto LABEL_8; | |
case 5u: | |
*(_DWORD *)(a1 + 1132) = 0; | |
break; | |
case 8u: | |
*(_DWORD *)(a1 + 1136) = v2[1]; | |
break; | |
case 6u: | |
v5 = af_lens_move_done(a1, v4, v2[1]); | |
goto LABEL_8; | |
case 7u: | |
af_done(a1, v4, -2); | |
break; | |
case 9u: | |
*(_DWORD *)(a1 + 1112) = v2[1]; | |
break; | |
case 0xBu: | |
*(_DWORD *)(a1 + 1148) = v2[1]; | |
break; | |
case 0xCu: | |
*(_DWORD *)(a1 + 1144) = v2[1]; | |
break; | |
case 0xDu: | |
v7 = (int)(v2 + 1); | |
v8 = a1 + 1152; | |
v9 = (int)(v2 + 15); | |
do | |
{ | |
v10 = *(_DWORD *)v7; | |
v7 += 4; | |
*(_DWORD *)v8 = v10; | |
v8 += 4; | |
} | |
while ( v7 != v9 ); | |
break; | |
case 0xAu: | |
v5 = af_set_bestshot_mode(a1, v4, v2[1]); | |
LABEL_8: | |
v6 = v5; | |
if ( v5 < 0 ) | |
goto LABEL_23; | |
return v6; | |
case 0xFu: | |
*(_DWORD *)(v4 + 904) = v2[1]; | |
break; | |
case 0xEu: | |
break; | |
default: | |
goto def_C96C; | |
} | |
v6 = 0; | |
} | |
return v6; | |
} | |
// 1AEC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...); | |
//----- (0000CA48) -------------------------------------------------------- | |
int __fastcall af_process(int a1) | |
{ | |
int v1; // r2@1 | |
int v2; // r4@1 | |
int v3; // r5@1 | |
int v4; // r6@3 | |
int v5; // r6@5 | |
int v6; // r0@8 | |
signed int v7; // r1@8 | |
int v8; // r7@10 | |
int v9; // r8@10 | |
int v10; // r3@10 | |
int v11; // r7@10 | |
v1 = *(_BYTE *)a1; | |
v2 = a1; | |
v3 = dword_122EC[v1]; | |
if ( *(_DWORD *)(v3 + 904) && *(_DWORD *)(a1 + 792) ) | |
return 0; | |
v4 = *(_DWORD *)(a1 + 72); | |
if ( v4 != 2 && v4 != 4 ) | |
{ | |
v5 = -1; | |
_android_log_print(6, 0, "%s: %d: Failed: af_algo_preview\n", "af_process", 169); | |
} | |
else | |
{ | |
v5 = af_run_algorithm(a1, dword_122EC[v1]); | |
} | |
if ( *(_DWORD *)(v2 + 792) ) | |
{ | |
v6 = *(_DWORD *)(v2 + 60); | |
*(_DWORD *)(v2 + 1208) = *(_DWORD *)(v3 + 212); | |
v7 = *(_DWORD *)(v3 + 676); | |
if ( !v7 ) | |
goto LABEL_13; | |
if ( v7 == 5 ) | |
{ | |
v8 = *(_DWORD *)(v2 + 1212); | |
v9 = v8 + 304; | |
v10 = v8 + 354; | |
v11 = v8 + 1; | |
*(_DWORD *)(v2 + 4 * v9) = *(_DWORD *)(v6 + 5184) / *(_DWORD *)(v6 + 5188); | |
*(_DWORD *)(v2 + 4 * v10) = *(_DWORD *)(v3 + 212); | |
if ( v11 <= 50 ) | |
{ | |
*(_DWORD *)(v2 + 1212) = v11; | |
return v5; | |
} | |
v7 = 50; | |
LABEL_13: | |
*(_DWORD *)(v2 + 1212) = v7; | |
return v5; | |
} | |
} | |
return v5; | |
} | |
// 1AEC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...); | |
//----- (0000CAFC) -------------------------------------------------------- | |
void __fastcall af_deinit(unsigned int *a1) | |
{ | |
unsigned int v1; // r3@1 | |
void *v2; // r0@2 | |
v1 = *(_BYTE *)a1; | |
if ( v1 <= 7 ) | |
{ | |
v2 = (void *)dword_122EC[v1]; | |
if ( v2 ) | |
j_j_free(v2); | |
} | |
} | |
//----- (0000CB18) -------------------------------------------------------- | |
int __fastcall af_chromatix_reload(int a1) | |
{ | |
return af_load_chromatix(a1, dword_122EC[*(_BYTE *)a1]); | |
} | |
//----- (0000CB30) -------------------------------------------------------- | |
int __fastcall af_cont_gyro_monitor_mode_camera(int a1, int _R1) | |
{ | |
signed int v6; // r1@2 | |
signed int v7; // r3@6 | |
if ( *(_DWORD *)_R1 ) | |
{ | |
__asm | |
{ | |
VLDR S15, [R1,#8] | |
VMUL.F32 S0, S15, S15 | |
VLDR S13, [R1,#4] | |
VLDR S14, [R1,#0xC] | |
VLDR D17, =0.015 | |
} | |
v6 = 1; | |
*(_DWORD *)(a1 + 4) = 1; | |
__asm | |
{ | |
VMLA.F32 S0, S13, S13 | |
VMLA.F32 S0, S14, S14 | |
VCVT.F64.F32 D16, S0 | |
VSTR S0, [R0,#0x18] | |
VCMPE.F64 D16, D17 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
__asm | |
{ | |
VLDR D1, =0.01 | |
VCMPE.F64 D16, D1 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF ) | |
return 0; | |
v7 = *(_DWORD *)(a1 + 20); | |
if ( *(_DWORD *)(a1 + 20) ) | |
v7 = 1; | |
v6 = 0; | |
*(_DWORD *)a1 = v7; | |
} | |
*(_DWORD *)(a1 + 20) = v6; | |
} | |
else | |
{ | |
*(_DWORD *)(a1 + 4) = 1; | |
} | |
return 0; | |
} | |
//----- (0000CBA0) -------------------------------------------------------- | |
signed int __fastcall af_cont_gyro_monitor_mode_video(int _R0, int _R1) | |
{ | |
int v2; // r3@1 | |
int v7; // r2@4 | |
int v8; // r2@7 | |
signed int v9; // r2@10 | |
v2 = *(_DWORD *)_R1; | |
if ( *(_DWORD *)_R1 ) | |
{ | |
__asm | |
{ | |
VLDR S15, [R1,#8] | |
VMUL.F32 S0, S15, S15 | |
VLDR S13, [R1,#4] | |
VLDR S14, [R1,#0xC] | |
VLDR D17, =0.015 | |
VMLA.F32 S0, S13, S13 | |
VMLA.F32 S0, S14, S14 | |
VCVT.F64.F32 D16, S0 | |
VSTR S0, [R0,#0x18] | |
VCMPE.F64 D16, D17 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
__asm | |
{ | |
VLDR D1, =0.01 | |
VCMPE.F64 D16, D1 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
__asm | |
{ | |
VLDR S1, [R0,#0x1C] | |
VLDR S3, [R0,#0x20] | |
VADD.F32 S4, S1, S3 | |
VLDR S5, [R0,#0x24] | |
} | |
v9 = *(_DWORD *)(_R0 + 8); | |
++*(_DWORD *)(_R0 + 16); | |
__asm | |
{ | |
VADD.F32 S6, S4, S5 | |
VCMPE.F32 S6, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
__asm { VNEGMI.F32 S6, S6 } | |
if ( v9 > 8 ) | |
{ | |
__asm | |
{ | |
VMOV.F32 S7, #15.0 | |
VCMPE.F32 S6, S7 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
*(_DWORD *)_R0 = 1; | |
*(_DWORD *)(_R0 + 16) = 31; | |
} | |
} | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VLDR S9, [R1,#4] | |
VLDR S8, [R0,#0x1C] | |
VADD.F32 S10, S8, S9 | |
VLDR S11, [R0,#0x20] | |
VLDR S14, [R0,#0x24] | |
VLDR D18, =0.08 | |
VSTR S10, [R0,#0x1C] | |
VLDR S12, [R1,#8] | |
VADD.F32 S13, S11, S12 | |
VSTR S13, [R0,#0x20] | |
VLDR S15, [R1,#0xC] | |
VADD.F32 S0, S14, S15 | |
} | |
*(_DWORD *)(_R0 + 16) = 0; | |
*(_DWORD *)(_R0 + 4) = 0; | |
__asm | |
{ | |
VCMPE.F64 D16, D18 | |
VSTR S0, [R0,#0x24] | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
__asm | |
{ | |
VLDR D19, =0.02 | |
VCMPE.F64 D16, D19 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
v8 = *(_DWORD *)(_R0 + 12); | |
*(_DWORD *)(_R0 + 8) = 0; | |
*(_DWORD *)(_R0 + 12) = v8 + 1; | |
} | |
} | |
else | |
{ | |
v7 = *(_DWORD *)(_R0 + 8); | |
*(_DWORD *)(_R0 + 12) = 0; | |
*(_DWORD *)(_R0 + 8) = v7 + 1; | |
} | |
} | |
if ( *(_DWORD *)(_R0 + 16) <= 30 ) | |
return 1; | |
__asm { VLDR S2, =0.0 } | |
v2 = 0; | |
__asm { VSTR S2, [R0,#0x1C] } | |
*(_DWORD *)(_R0 + 16) = 0; | |
__asm | |
{ | |
VSTR S2, [R0,#0x20] | |
VSTR S2, [R0,#0x24] | |
} | |
} | |
*(_DWORD *)(_R0 + 4) = 1; | |
return v2; | |
} | |
//----- (0000CCE0) -------------------------------------------------------- | |
void __fastcall af_safe_move_lens(int a1, int a2, int a3, int a4) | |
{ | |
int v4; // r2@2 | |
int v5; // r2@5 | |
int v6; // r1@5 | |
if ( !a3 ) | |
{ | |
v4 = *(_DWORD *)(a2 + 212); | |
if ( v4 - *(_DWORD *)a4 >= 0 ) | |
return; | |
goto LABEL_7; | |
} | |
if ( a3 == 1 ) | |
{ | |
v5 = *(_DWORD *)(a2 + 212); | |
v6 = *(_DWORD *)(a2 + 224); | |
if ( v5 + *(_DWORD *)a4 > v6 ) | |
{ | |
v4 = v6 - v5; | |
LABEL_7: | |
*(_DWORD *)a4 = v4; | |
return; | |
} | |
} | |
} | |
//----- (0000CD0C) -------------------------------------------------------- | |
signed int __fastcall af_move_lens(int a1, int a2, int a3, int a4) | |
{ | |
int v4; // r4@1 | |
int v5; // r6@1 | |
int v6; // r3@1 | |
signed int result; // r0@1 | |
int v8; // [sp+4h] [bp-14h]@1 | |
v4 = a1; | |
v5 = a3; | |
v8 = a4; | |
af_safe_move_lens(a1, a2, a3, (int)&v8); | |
v6 = v8; | |
result = 1; | |
*(_DWORD *)(v4 + 1124) = v5; | |
*(_DWORD *)(v4 + 1132) = 1; | |
*(_DWORD *)(v4 + 1128) = v6; | |
return result; | |
} | |
//----- (0000CD30) -------------------------------------------------------- | |
signed int __fastcall af_stop_focus(int a1, int a2) | |
{ | |
int v2; // r3@1 | |
signed int result; // r0@2 | |
signed int v4; // r2@5 | |
int v5; // r1@5 | |
v2 = a1; | |
if ( !*(_DWORD *)(a1 + 1104) || (result = *(_DWORD *)(a1 + 1136)) != 0 ) | |
{ | |
result = -1; | |
} | |
else | |
{ | |
*(_DWORD *)(v2 + 1128) = 0; | |
*(_DWORD *)(v2 + 1112) = 1; | |
} | |
v4 = 0; | |
*(_DWORD *)(a2 + 676) = 0; | |
v5 = *(_DWORD *)(v2 + 152); | |
*(_DWORD *)(v2 + 1104) = 0; | |
if ( v5 && *(_DWORD *)(v2 + 156) != 3 ) | |
v4 = 3; | |
*(_DWORD *)(v2 + 1140) = v4; | |
return result; | |
} | |
//----- (0000CD70) -------------------------------------------------------- | |
int __fastcall af_load_chromatix(int a1, int a2) | |
{ | |
int v2; // r3@1 | |
int result; // r0@1 | |
v2 = *(_DWORD *)(a1 + 76) + 9408; | |
*(_DWORD *)(a2 + 212) = *(_WORD *)(*(_DWORD *)(a1 + 76) + 9432); | |
*(_DWORD *)(a2 + 672) = *(_WORD *)(v2 + 14); | |
result = *(_DWORD *)(a1 + 1144); | |
if ( !result ) | |
{ | |
result = *(_WORD *)(v2 + 20); | |
*(_DWORD *)(a2 + 216) = result; | |
*(_DWORD *)(a2 + 220) = *(_WORD *)(v2 + 24); | |
LABEL_7: | |
*(_DWORD *)(a2 + 224) = *(_WORD *)(v2 + 24); | |
return result; | |
} | |
if ( result == 1 ) | |
{ | |
*(_DWORD *)(a2 + 216) = *(_WORD *)(v2 + 16); | |
result = *(_WORD *)(v2 + 24); | |
*(_DWORD *)(a2 + 220) = result; | |
*(_DWORD *)(a2 + 228) = *(_WORD *)(v2 + 18); | |
goto LABEL_7; | |
} | |
if ( result != -1 ) | |
result = _android_log_print(6, 0, "%s: %d:Failed: Unknown AF mode\n"); | |
return result; | |
} | |
// 1AEC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...); | |
//----- (0000CDDC) -------------------------------------------------------- | |
int __fastcall af_init_data(int a1, int a2) | |
{ | |
int v6; // r4@1 | |
int v7; // r5@1 | |
int v8; // r0@1 | |
unsigned int v9; // r3@8 | |
int result; // r0@12 | |
__asm { VMOV.F32 S15, #1.0 } | |
v6 = a2; | |
*(_DWORD *)(a1 + 1144) = 1; | |
v7 = a1; | |
*(_DWORD *)(a2 + 248) = 1; | |
*(_DWORD *)(a2 + 676) = 0; | |
*(_DWORD *)(a1 + 1104) = 0; | |
*(_DWORD *)(a2 + 256) = 0; | |
*(_DWORD *)(a2 + 252) = 0; | |
__asm { VSTR S15, [R4,#0x200] } | |
v8 = *(_DWORD *)(a1 + 1144); | |
if ( v8 ) | |
{ | |
if ( v8 == 1 ) | |
{ | |
*(_DWORD *)(a2 + 208) = 1; | |
} | |
else if ( v8 != -1 ) | |
{ | |
_android_log_print(6, 0, "%s: %d:Failed: Unknown AF mode\n", "af_init_data", 317); | |
} | |
} | |
else | |
{ | |
*(_DWORD *)(a2 + 208) = 0; | |
*(_DWORD *)(a2 + 228) = *(_WORD *)(*(_DWORD *)(v7 + 76) + 9430); | |
} | |
v9 = *(_DWORD *)(v6 + 672); | |
if ( v9 > 4 ) | |
{ | |
def_CE4A: | |
_android_log_print(6, 0, "%s: %d:Failed: Undefined af_process_type %d\n", "af_init_data", 340, v9); | |
} | |
else | |
{ | |
switch ( v9 ) | |
{ | |
case 0u: | |
case 1u: | |
__asm { VMOV.F32 S0, #0.5; jumptable 0000CE4A cases 0,1 } | |
*(_DWORD *)(v6 + 676) = 0; | |
*(_DWORD *)(v7 + 1104) = 0; | |
*(_DWORD *)(v6 + 284) = 2; | |
*(_DWORD *)(v6 + 288) = 3; | |
__asm { VSTR S0, [R4,#0x204] } | |
break; | |
case 2u: | |
case 3u: | |
case 4u: | |
break; | |
default: | |
goto def_CE4A; | |
} | |
} | |
result = 0; | |
*(_DWORD *)(v6 + 264) = 0; | |
*(_DWORD *)(v7 + 1124) = 0; | |
*(_DWORD *)(v6 + 508) = 1; | |
return result; | |
} | |
// 1AEC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...); | |
//----- (0000CEB0) -------------------------------------------------------- | |
int __fastcall af_reset_lens(int a1, int a2) | |
{ | |
int v2; // r3@1 | |
int result; // r0@1 | |
v2 = a1; | |
result = 0; | |
*(_DWORD *)(a2 + 212) = *(_DWORD *)(a2 + 224); | |
*(_DWORD *)(v2 + 1128) = 0; | |
*(_DWORD *)(v2 + 1108) = 1; | |
*(_DWORD *)(a2 + 900) = 1; | |
return result; | |
} | |
//----- (0000CECC) -------------------------------------------------------- | |
signed int __fastcall af_set_start_parameters(int a1, int a2) | |
{ | |
unsigned int v2; // r2@1 | |
int v3; // r4@2 | |
int v4; // r0@3 | |
*(_DWORD *)(a2 + 676) = 1; | |
*(_DWORD *)(a1 + 1104) = 1; | |
*(_DWORD *)(a2 + 232) = 0; | |
*(_DWORD *)(a1 + 1112) = 0; | |
*(_DWORD *)(a1 + 1120) = 0; | |
*(_DWORD *)(a1 + 1116) = 0; | |
v2 = *(_DWORD *)(a2 + 208); | |
if ( v2 > 2 ) | |
{ | |
if ( v2 != -1 ) | |
{ | |
_android_log_print(6, 0, "%s: Failed: Unknown AF mode\n", "af_set_start_parameters"); | |
return -1; | |
} | |
} | |
else | |
{ | |
v3 = *(_DWORD *)(a1 + 76); | |
if ( v2 ) | |
{ | |
*(_DWORD *)(a2 + 216) = *(_WORD *)(v3 + 9424); | |
*(_DWORD *)(a2 + 220) = *(_WORD *)(*(_DWORD *)(a1 + 76) + 9432); | |
*(_DWORD *)(a2 + 224) = *(_WORD *)(*(_DWORD *)(a1 + 76) + 9432); | |
v4 = *(_WORD *)(*(_DWORD *)(a1 + 76) + 9426); | |
} | |
else | |
{ | |
*(_DWORD *)(a2 + 216) = *(_WORD *)(v3 + 9428); | |
*(_DWORD *)(a2 + 220) = *(_WORD *)(*(_DWORD *)(a1 + 76) + 9432); | |
*(_DWORD *)(a2 + 224) = *(_WORD *)(*(_DWORD *)(a1 + 76) + 9432); | |
v4 = *(_WORD *)(*(_DWORD *)(a1 + 76) + 9430); | |
} | |
*(_DWORD *)(a2 + 228) = v4; | |
} | |
return 0; | |
} | |
// 1AEC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...); | |
//----- (0000CF7C) -------------------------------------------------------- | |
int __fastcall af_move_lens_to(int a1, int a2, int a3) | |
{ | |
int v3; // r4@1 | |
int v4; // r5@1 | |
int v5; // r6@1 | |
v3 = a1; | |
v4 = a2; | |
v5 = a3; | |
if ( *(_DWORD *)(a1 + 1104) ) | |
af_stop_focus(a1, a2); | |
*(_DWORD *)(v3 + 1132) = 1; | |
*(_DWORD *)(v4 + 676) = 0; | |
*(_DWORD *)(v3 + 1104) = 0; | |
if ( v5 > 0 ) | |
{ | |
*(_DWORD *)(v3 + 1124) = 1; | |
*(_DWORD *)(v3 + 1128) = v5; | |
LABEL_7: | |
*(_DWORD *)(v4 + 212) += v5; | |
return 0; | |
} | |
if ( v5 ) | |
{ | |
*(_DWORD *)(v3 + 1124) = 0; | |
*(_DWORD *)(v3 + 1128) = -v5; | |
goto LABEL_7; | |
} | |
return 0; | |
} | |
//----- (0000CFC6) -------------------------------------------------------- | |
int __fastcall af_done(int a1, int a2, int a3) | |
{ | |
int v3; // r5@1 | |
int v4; // r4@1 | |
int v5; // r7@1 | |
int v6; // r6@1 | |
int result; // r0@3 | |
int v8; // r1@5 | |
v3 = a1; | |
v4 = a2; | |
v5 = a3; | |
v6 = *(_DWORD *)(a1 + 76); | |
if ( !af_stop_focus(a1, a2) ) | |
{ | |
*(_DWORD *)(v3 + 1120) = v5; | |
*(_DWORD *)(v3 + 1116) = 1; | |
} | |
result = *(_DWORD *)(v4 + 676); | |
if ( !result ) | |
{ | |
if ( *(_DWORD *)(v3 + 1136) ) | |
{ | |
*(_DWORD *)(v4 + 588) = 0; | |
*(_DWORD *)(v4 + 628) = 0; | |
v8 = *(_DWORD *)(v3 + 812); | |
*(_DWORD *)(v4 + 676) = 12; | |
*(_DWORD *)(v4 + 532) = v8; | |
result = *(_WORD *)(v6 + 9532); | |
*(_DWORD *)(v4 + 240) = result; | |
} | |
} | |
return result; | |
} | |
//----- (0000D010) -------------------------------------------------------- | |
int __fastcall af_lens_move_done(int a1, int a2, int a3) | |
{ | |
int v3; // r5@1 | |
int v4; // r4@1 | |
int v5; // r3@1 | |
int v6; // r6@1 | |
int v7; // r3@3 | |
int v8; // r2@6 | |
int v9; // r0@11 | |
int v10; // r0@11 | |
int v11; // r3@11 | |
int v12; // r2@12 | |
int v13; // r0@15 | |
int v14; // r0@15 | |
int v15; // r1@16 | |
int v16; // r2@17 | |
int v17; // r1@20 | |
v3 = a1; | |
v4 = a2; | |
v5 = *(_DWORD *)(a1 + 76); | |
v6 = a3; | |
if ( !a3 ) | |
{ | |
_android_log_print(6, 0, "%s: Failed: Lens move failed.\n", "af_lens_move_done"); | |
v13 = *(_DWORD *)(v4 + 260); | |
*(_DWORD *)(v4 + 212) = *(_DWORD *)(v4 + 224); | |
*(_DWORD *)(v4 + 260) = v13 + 1; | |
v14 = v3; | |
*(_DWORD *)(v3 + 1128) = v6; | |
*(_DWORD *)(v3 + 1108) = 1; | |
*(_DWORD *)(v4 + 900) = 1; | |
goto LABEL_20; | |
} | |
if ( *(_DWORD *)(a1 + 1136) ) | |
v7 = *(_WORD *)(v5 + 9532); | |
else | |
v7 = *(_DWORD *)(v5 + 9544); | |
if ( *(_DWORD *)(a2 + 236) ) | |
{ | |
v8 = *(_DWORD *)(a2 + 244); | |
*(_DWORD *)(a2 + 240) = 0; | |
if ( v8 ) | |
{ | |
*(_DWORD *)(a2 + 244) = 0; | |
*(_DWORD *)(a2 + 240) = 1; | |
} | |
} | |
else | |
{ | |
if ( *(_DWORD *)(a2 + 252) ) | |
--v7; | |
*(_DWORD *)(a2 + 240) = v7; | |
} | |
v9 = *(_DWORD *)(a2 + 256); | |
*(_DWORD *)(a2 + 248) = 1; | |
*(_DWORD *)(a2 + 256) = v9 + 1; | |
v10 = *(_DWORD *)(a2 + 212); | |
v11 = *(_DWORD *)(v3 + 1128); | |
if ( *(_DWORD *)(v3 + 1124) ) | |
v12 = v10 + v11; | |
else | |
v12 = v10 - v11; | |
*(_DWORD *)(a2 + 212) = v12; | |
v15 = *(_DWORD *)(a2 + 676); | |
if ( (unsigned int)(v15 - 6) <= 1 ) | |
{ | |
v16 = *(_DWORD *)(v4 + 264); | |
if ( v16 ) | |
{ | |
*(_DWORD *)(v4 + 676) = 9; | |
return 0; | |
} | |
v14 = v3; | |
if ( v15 != 7 && *(_DWORD *)(v4 + 216) != *(_DWORD *)(v4 + 212) ) | |
{ | |
v17 = v4; | |
goto LABEL_23; | |
} | |
LABEL_20: | |
v17 = v4; | |
v16 = -1; | |
LABEL_23: | |
af_done(v14, v17, v16); | |
} | |
return 0; | |
} | |
// 1AEC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...); | |
//----- (0000D100) -------------------------------------------------------- | |
void __fastcall af_get_focus_distance(int a1, int _R1, int a3) | |
{ | |
int v8; // r1@6 | |
__asm | |
{ | |
VLDR S15, [R1,#0x7C] | |
VCMP.F32 S15, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _ZF ) | |
goto LABEL_10; | |
__asm | |
{ | |
VLDR S10, [R1,#0x80] | |
VCMP.F32 S10, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _ZF ) | |
goto LABEL_10; | |
__asm | |
{ | |
VLDR S14, [R1,#0x84] | |
VCMP.F32 S14, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _ZF ) | |
goto LABEL_10; | |
_R3 = *(_WORD *)(*(_DWORD *)(_R1 + 76) + 9432); | |
if ( !*(_WORD *)(*(_DWORD *)(_R1 + 76) + 9432) ) | |
goto LABEL_10; | |
__asm | |
{ | |
VLDR S11, [R1,#0x88] | |
VCMP.F32 S11, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _ZF ) | |
{ | |
LABEL_10: | |
__asm | |
{ | |
VLDR S7, =0.1 | |
VLDR S8, =0.15 | |
VLDR S9, =0.17 | |
VSTR S7, [R0] | |
VSTR S8, [R0,#4] | |
VSTR S9, [R0,#8] | |
} | |
} | |
else | |
{ | |
__asm | |
{ | |
VMOV S13, R3 | |
VCVT.F32.U32 S12, S13 | |
} | |
v8 = *(_DWORD *)(a3 + 212); | |
__asm | |
{ | |
VLDR D16, =1000.0 | |
VLDR S5, =1000.0 | |
VCVTR.S32.F32 S0, S12 | |
VCVT.F32.S32 S7, S0 | |
VMOV R2, S0 | |
} | |
_R1 = _R2 - v8 + 1; | |
__asm | |
{ | |
VMOV S9, R1 | |
VDIV.F32 S8, S11, S7 | |
VADD.F32 S2, S14, S14 | |
VMOV.F32 S14, #5.0 | |
VMUL.F32 S3, S10, S2 | |
VCVT.F32.S32 S10, S9 | |
VMLA.F32 S14, S8, S10 | |
VCVT.F64.F32 D18, S15 | |
VCVT.F64.F32 D17, S14 | |
VMLA.F64 D17, D18, D16 | |
VDIV.F64 D19, D17, D16 | |
VCVT.F32.F64 S11, D19 | |
VMOV.F64 D20, #1.0 | |
VCVT.F64.F32 D22, S11 | |
VDIV.F64 D21, D20, D18 | |
VDIV.F64 D23, D20, D22 | |
VSUB.F64 D24, D21, D23 | |
VDIV.F64 D25, D20, D24 | |
VMUL.F32 S1, S15, S15 | |
VDIV.F32 S4, S1, S3 | |
VCVT.F32.F64 S13, D25 | |
VMUL.F32 S6, S4, S5 | |
VSUB.F32 S15, S13, S15 | |
VMUL.F32 S0, S6, S13 | |
VADD.F32 S12, S6, S15 | |
VSUB.F32 S4, S6, S15 | |
VDIV.F32 S1, S0, S12 | |
VDIV.F32 S6, S0, S4 | |
VDIV.F32 S2, S1, S5 | |
VDIV.F32 S3, S13, S5 | |
VSTR S2, [R0] | |
VDIV.F32 S5, S6, S5 | |
VSTR S3, [R0,#4] | |
VSTR S5, [R0,#8] | |
} | |
} | |
} | |
//----- (0000D228) -------------------------------------------------------- | |
signed int __fastcall af_panning_stable_check(int a1, int a2) | |
{ | |
int v3; // r12@1 | |
int v4; // r4@1 | |
int v5; // r6@1 | |
signed int v6; // r3@1 | |
int v7; // r7@1 | |
signed int v8; // r0@1 | |
int v10; // r1@1 | |
int v11; // r5@3 | |
signed int result; // r0@8 | |
int v20; // r1@12 | |
signed int v22; // r0@14 | |
_R2 = 0; | |
v3 = *(_DWORD *)(a2 + 544); | |
v4 = a2; | |
v5 = *(_DWORD *)(a1 + 76); | |
v6 = 1; | |
v7 = 0; | |
v8 = 0; | |
_R8 = v5 + 9472; | |
v10 = a2 + 4 * v3 + 548; | |
do | |
{ | |
if ( v3 - v6 > 0 ) | |
v11 = *(_DWORD *)(v10 - 4); | |
else | |
v11 = *(_DWORD *)(v10 + 32); | |
if ( v6 == 1 ) | |
{ | |
v7 = v11; | |
} | |
else if ( v6 == 2 ) | |
{ | |
_R2 = v11; | |
} | |
else | |
{ | |
__asm { VLDR S15, [R8,#0x2C] } | |
_R10 = ((v7 - _R2) ^ ((v7 - _R2) >> 31)) - ((v7 - _R2) >> 31); | |
__asm | |
{ | |
VMOV S14, R10 | |
VCVT.F32.S32 S0, S14 | |
VMOV S13, R2 | |
VMUL.F32 S1, S0, S15 | |
VCVT.F32.S32 S2, S13 | |
VCMPE.F32 S1, S2 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
result = -1; | |
*(_DWORD *)(v4 + 504) = 0; | |
return result; | |
} | |
} | |
++v6; | |
v10 -= 4; | |
v8 += v11; | |
} | |
while ( v6 != 6 ); | |
_R6 = v5 + 9472; | |
_R0 = v8 / 5; | |
__asm { VLDR S5, [R6,#0x30] } | |
v20 = *(_DWORD *)(v4 + 4 * (*(_DWORD *)(v4 + 200) - 1)); | |
__asm { VMOV S7, R0 } | |
_R2 = ((v20 - _R0) ^ ((v20 - _R0) >> 31)) - ((v20 - _R0) >> 31); | |
__asm | |
{ | |
VMOV S3, R2 | |
VCVT.F32.S32 S4, S3 | |
VMUL.F32 S6, S4, S5 | |
VCVT.F32.S32 S8, S7 | |
VCMPE.F32 S6, S8 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
v22 = *(_DWORD *)(v4 + 504); | |
if ( v22 <= *(_WORD *)(_R6 + 54) ) | |
*(_DWORD *)(v4 + 504) = v22 + 1; | |
result = 0; | |
} | |
else | |
{ | |
result = 0; | |
*(_DWORD *)(v4 + 504) = 0; | |
} | |
return result; | |
} | |
//----- (0000D30C) -------------------------------------------------------- | |
void __fastcall af_slow_move_lens(int a1, int a2, int a3, int a4) | |
{ | |
int v4; // r4@1 | |
int v5; // r6@1 | |
int v6; // r5@1 | |
int v7; // r3@1 | |
int v8; // r1@1 | |
int v9; // r2@1 | |
int v10; // r7@2 | |
int v11; // r2@4 | |
int v12; // r2@7 | |
int v13; // r1@8 | |
int v14; // [sp+4h] [bp-24h]@1 | |
int v15; // [sp+Ch] [bp-1Ch]@1 | |
v4 = a2; | |
v5 = a3; | |
v14 = a4; | |
v6 = a1; | |
v7 = *(_DWORD *)(a2 + 592); | |
v8 = *(_DWORD *)(a1 + 1136); | |
v9 = *(_DWORD *)(a1 + 76); | |
v15 = v7; | |
if ( v8 ) | |
v10 = *(_WORD *)(v9 + 9532); | |
else | |
v10 = *(_DWORD *)(v9 + 9544); | |
v11 = *(_DWORD *)(v4 + 676); | |
if ( v11 != 15 ) | |
*(_DWORD *)(v4 + 520) = v11; | |
if ( v14 <= v7 ) | |
{ | |
af_safe_move_lens(a1, v4, v5, (int)&v14); | |
v13 = v14; | |
*(_DWORD *)(v4 + 676) = *(_DWORD *)(v4 + 520); | |
*(_DWORD *)(v6 + 1128) = v13; | |
*(_DWORD *)(v4 + 240) = v10; | |
} | |
else | |
{ | |
af_safe_move_lens(a1, v4, v5, (int)&v15); | |
v12 = v15; | |
*(_DWORD *)(v4 + 676) = 15; | |
*(_DWORD *)(v6 + 1128) = v12; | |
} | |
*(_DWORD *)(v6 + 1124) = v5; | |
*(_DWORD *)(v6 + 1132) = 1; | |
} | |
//----- (0000D388) -------------------------------------------------------- | |
signed int __fastcall af_set_bestshot_mode(int a1, int _R1, unsigned int a3) | |
{ | |
int v3; // r7@1 | |
int v4; // r3@2 | |
signed int v9; // r6@7 | |
int v10; // r3@7 | |
v3 = *(_DWORD *)(a1 + 76); | |
if ( a3 > 0x15 ) | |
return -1; | |
v4 = *(_DWORD *)(_R1 + 688); | |
if ( v4 != a3 ) | |
{ | |
if ( !v4 ) | |
{ | |
__asm | |
{ | |
VLDR S15, [R1,#0x200] | |
VSTR S15, [R1,#0x2AC] | |
} | |
*(_DWORD *)(_R1 + 680) = *(_DWORD *)(_R1 + 208); | |
} | |
if ( !a3 ) | |
{ | |
__asm { VLDR S0, [R1,#0x2AC] } | |
*(_DWORD *)(_R1 + 208) = *(_DWORD *)(_R1 + 680); | |
goto LABEL_20; | |
} | |
if ( a3 <= 0x11 ) | |
{ | |
v9 = 1 << a3; | |
v10 = (1 << a3) & 0x32624; | |
if ( v10 ) | |
{ | |
*(_DWORD *)(_R1 + 208) = 2; | |
*(_DWORD *)(_R1 + 212) = *(_DWORD *)(_R1 + 224); | |
*(_DWORD *)(a1 + 1108) = 1; | |
*(_DWORD *)(a1 + 1128) = 0; | |
*(_DWORD *)(_R1 + 900) = 1; | |
goto LABEL_16; | |
} | |
if ( v9 & 0x51D8 ) | |
{ | |
*(_DWORD *)(_R1 + 208) = 0; | |
LABEL_15: | |
*(_DWORD *)(a1 + 1108) = v10; | |
LABEL_16: | |
if ( a3 == 7 ) | |
{ | |
_R0 = v3 + 46592; | |
__asm { VLDR S0, [R0,#0x94] } | |
LABEL_20: | |
__asm { VSTR S0, [R1,#0x200] } | |
*(_DWORD *)(_R1 + 688) = a3; | |
return 0; | |
} | |
LABEL_18: | |
__asm { VMOV.F32 S0, #1.0 } | |
goto LABEL_20; | |
} | |
if ( v9 & 0x800 ) | |
{ | |
*(_DWORD *)(_R1 + 208) = 1; | |
*(_DWORD *)(a1 + 1108) = v9 & 0x51D8; | |
goto LABEL_18; | |
} | |
} | |
*(_DWORD *)(_R1 + 208) = 2; | |
v10 = 0; | |
goto LABEL_15; | |
} | |
return 0; | |
} | |
//----- (0000D43C) -------------------------------------------------------- | |
int __fastcall af_run_algorithm(int a1, int a2) | |
{ | |
int v2; // r4@1 | |
int v3; // r5@1 | |
int v4; // r3@1 | |
int v5; // r1@3 | |
unsigned int v6; // r0@5 | |
unsigned int v7; // r1@6 | |
unsigned int v8; // r3@8 | |
int v10; // [sp+0h] [bp-18h]@1 | |
int v11; // [sp+4h] [bp-14h]@1 | |
v10 = a1; | |
v11 = a2; | |
*(_DWORD *)(a1 + 1108) = 0; | |
v2 = a1; | |
*(_DWORD *)(a1 + 1116) = 0; | |
v3 = a2; | |
*(_DWORD *)(a1 + 1132) = 0; | |
*(_DWORD *)(a1 + 1112) = 0; | |
v4 = *(_DWORD *)(a1 + 60); | |
if ( *(_DWORD *)(a2 + 232) <= 414 ) | |
{ | |
v5 = v4 + 5184; | |
if ( *(_DWORD *)(v4 + 5188) > 0x420u ) | |
*(_DWORD *)(v4 + 5188) = 1056; | |
v6 = *(_DWORD *)v5; | |
if ( *(_DWORD *)v5 && (v7 = *(_DWORD *)(v4 + 5188)) != 0 ) | |
{ | |
v8 = *(_DWORD *)(v3 + 672); | |
*(_DWORD *)(v3 + 280) = v6 / v7; | |
if ( v8 == 1 && !*(_DWORD *)(v2 + 1136) ) | |
{ | |
*(_DWORD *)(v3 + 236) = 1; | |
LABEL_13: | |
if ( *(_DWORD *)(v2 + 1136) ) | |
return af_exhaustive_search(v2, v3); | |
af_slope_predictive_srch(v2, v3); | |
return 0; | |
} | |
*(_DWORD *)(v3 + 236) = 0; | |
if ( v8 <= 4 ) | |
{ | |
switch ( v8 ) | |
{ | |
case 0u: | |
case 1u: | |
goto LABEL_13; | |
case 2u: | |
case 3u: | |
case 4u: | |
return 0; | |
default: | |
break; | |
} | |
} | |
_android_log_print(6, 0, "%s:Fail Undefined ALGO TYPE %d", "af_run_algorithm", v8, v11); | |
} | |
else | |
{ | |
_android_log_print(6, 0, "%s:Fail Invalid AF stats", "af_run_algorithm", v10, v11); | |
af_done(v2, v3, -1); | |
} | |
return -1; | |
} | |
_android_log_print(6, 0, "%s: Fail: AF is taking too long - exiting", "af_run_algorithm", a1, a2); | |
af_stop_focus(v2, v3); | |
return 0; | |
} | |
// 1AEC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...); | |
//----- (0000D534) -------------------------------------------------------- | |
signed int __fastcall sub_D534(int a1, int a2) | |
{ | |
int v2; // r2@1 | |
int v3; // r3@1 | |
int v4; // r3@2 | |
v2 = *(_DWORD *)(a1 + 1124); | |
v3 = *(_DWORD *)(a2 + 212); | |
if ( v2 ) | |
{ | |
v4 = *(_DWORD *)(a2 + 220) - v3; | |
v2 = 1; | |
} | |
else | |
{ | |
v4 = v3 - *(_DWORD *)(a2 + 216); | |
} | |
if ( v4 >= *(_DWORD *)(a2 + 596) ) | |
v4 = *(_DWORD *)(a2 + 596); | |
return af_move_lens(a1, a2, v2, v4); | |
} | |
//----- (0000D564) -------------------------------------------------------- | |
void *__fastcall sub_D564(int a1, int a2) | |
{ | |
int v2; // r4@1 | |
int v3; // r2@1 | |
int v4; // r5@1 | |
void *v5; // r7@1 | |
int v6; // r1@1 | |
int v7; // r0@1 | |
signed int v8; // r0@2 | |
signed int v9; // r6@4 | |
signed int v10; // r1@4 | |
int v11; // r0@6 | |
signed int v12; // r0@6 | |
int v13; // r1@9 | |
signed int v14; // r0@11 | |
int v15; // r3@16 | |
v2 = a2; | |
v3 = *(_DWORD *)(a1 + 812); | |
v4 = a1; | |
v5 = (void *)(a2 + 632); | |
v6 = *(_DWORD *)(a1 + 76); | |
v7 = *(_DWORD *)(v2 + 252); | |
*(_DWORD *)(v2 + 532) = v3; | |
*(_DWORD *)(v2 + 628) = 0; | |
*(_DWORD *)(v2 + 200) = 0; | |
*(_DWORD *)(v2 + 292) = 0; | |
*(_DWORD *)(v2 + 536) = 0; | |
*(_DWORD *)(v2 + 524) = 0; | |
*(_DWORD *)(v2 + 620) = 0; | |
*(_DWORD *)(v2 + 608) = 0; | |
if ( v7 ) | |
{ | |
v8 = 2; | |
*(_DWORD *)(v2 + 600) = 2 * *(_WORD *)(v6 + 9418); | |
*(_DWORD *)(v2 + 604) = 4 * *(_WORD *)(v6 + 9418); | |
} | |
else | |
{ | |
v8 = 1; | |
*(_DWORD *)(v2 + 600) = *(_WORD *)(v6 + 9418); | |
*(_DWORD *)(v2 + 604) = 3 * *(_WORD *)(v6 + 9418); | |
} | |
v9 = *(_DWORD *)(v2 + 212); | |
v10 = *(_DWORD *)(v2 + 616); | |
*(_DWORD *)(v2 + 592) = v8; | |
if ( v10 < 1 ) | |
v10 = 1; | |
*(_DWORD *)(v2 + 304) = v9; | |
v11 = *(_DWORD *)(v2 + 280) / v10; | |
*(_DWORD *)(v2 + 200) = 1; | |
*(_DWORD *)(v2 + 300) = v9; | |
*(_DWORD *)(v2 + 528) = 0; | |
*(_DWORD *)v2 = v11; | |
*(_DWORD *)(v2 + 268) = v11; | |
*(_DWORD *)(v2 + 272) = v11; | |
v12 = *(_DWORD *)(v2 + 220); | |
if ( v9 >= v12 ) | |
{ | |
if ( v9 == v12 ) | |
{ | |
*(_DWORD *)(v4 + 1124) = 0; | |
LABEL_15: | |
af_move_lens(v4, v2, *(_DWORD *)(v4 + 1124), *(_DWORD *)(v2 + 604)); | |
v14 = 14; | |
goto LABEL_16; | |
} | |
LABEL_14: | |
*(_DWORD *)(v4 + 1124) = 1; | |
goto LABEL_15; | |
} | |
if ( v9 <= *(_DWORD *)(v2 + 216) ) | |
goto LABEL_14; | |
if ( v12 - v9 >= v12 / 3 ) | |
v13 = *(_DWORD *)(v2 + 600); | |
else | |
v13 = *(_DWORD *)(v2 + 604); | |
*(_DWORD *)(v2 + 596) = v13; | |
sub_D534(v4, v2); | |
v14 = 13; | |
LABEL_16: | |
v15 = *(_DWORD *)(v2 + 612); | |
*(_DWORD *)(v2 + 676) = v14; | |
*(_DWORD *)(v2 + 240) = v15; | |
return j_j_memset(v5, 0, 0x28u); | |
} | |
//----- (0000D66A) -------------------------------------------------------- | |
int __fastcall af_CAF_monitor(int a1, int a2) | |
{ | |
int v2; // r5@1 | |
int v3; // r3@1 | |
int v4; // r4@1 | |
int v5; // r0@1 | |
int v6; // r9@1 | |
int v7; // r1@1 | |
int v8; // r8@1 | |
signed int v9; // r0@2 | |
int v10; // r2@7 | |
int v11; // r1@8 | |
signed int v12; // r6@9 | |
int v13; // r10@13 | |
int v14; // r7@13 | |
int v15; // r1@13 | |
int v16; // r0@16 | |
int v17; // r2@17 | |
int v18; // r2@21 | |
int v19; // r2@22 | |
signed int v20; // r3@22 | |
int v21; // r10@26 | |
int v22; // r0@26 | |
unsigned int v23; // r9@26 | |
signed int v24; // r1@28 | |
int v25; // r0@30 | |
int v26; // r7@30 | |
int v27; // r6@33 | |
bool v28; // r6@35 | |
signed int v29; // r0@39 | |
signed int v30; // r3@39 | |
int v31; // r2@46 | |
int v32; // r0@46 | |
v2 = a1; | |
v3 = *(_DWORD *)(a1 + 72); | |
v4 = a2; | |
v5 = a2 + 632; | |
v6 = *(_DWORD *)(v2 + 60); | |
v7 = v2 + 168; | |
v8 = *(_DWORD *)(v2 + 76); | |
if ( v3 == 4 ) | |
v9 = af_cont_gyro_monitor_mode_video(v5, v7); | |
else | |
v9 = af_cont_gyro_monitor_mode_camera(v5, v7); | |
if ( !v9 ) | |
{ | |
if ( *(_DWORD *)(v4 + 632) ) | |
goto LABEL_54; | |
v10 = *(_DWORD *)(v4 + 240); | |
if ( v10 > 0 ) | |
{ | |
v11 = *(_DWORD *)(v4 + 524); | |
*(_DWORD *)(v4 + 240) = v10 - 1; | |
*(_DWORD *)(v4 + 524) = v11 + 1; | |
return 0; | |
} | |
v12 = *(_DWORD *)(v4 + 616); | |
if ( *(_DWORD *)(v4 + 544) == 10 ) | |
*(_DWORD *)(v4 + 544) = 0; | |
if ( v12 < 1 ) | |
v12 = 1; | |
v13 = *(_DWORD *)(v4 + 544); | |
v14 = *(_DWORD *)(v4 + 280) / v12; | |
*(_DWORD *)(v4 + 4 * v13 + 548) = v14; | |
v15 = *(_DWORD *)(v4 + 588); | |
*(_DWORD *)(v4 + 544) = v13 + 1; | |
if ( v15 ) | |
{ | |
v16 = 0; | |
*(_DWORD *)(v4 + 588) = 0; | |
do | |
{ | |
v17 = v4 + 524 + v16; | |
v16 += 4; | |
*(_DWORD *)(v17 + 24) = v14; | |
} | |
while ( v16 != 40 ); | |
} | |
if ( *(_DWORD *)(v4 + 508) && *(_DWORD *)(v2 + 872) <= 25 && *(_DWORD *)(v2 + 812) < *(_DWORD *)(v2 + 860) - 1 ) | |
{ | |
v18 = *(_DWORD *)(v4 + 524); | |
*(_DWORD *)(v4 + 240) = 0; | |
*(_DWORD *)(v4 + 508) = 0; | |
*(_DWORD *)(v4 + 524) = v18 + 1; | |
return 0; | |
} | |
v19 = *(_DWORD *)(v4 + 524); | |
v20 = *(_DWORD *)(v4 + 200); | |
*(_DWORD *)(v4 + 508) = 1; | |
*(_DWORD *)(v4 + 524) = v19 + 1; | |
if ( v20 ) | |
{ | |
if ( v20 > 49 ) | |
{ | |
*(_DWORD *)(v4 + 200) = 1; | |
*(_DWORD *)v4 = *(_DWORD *)(v4 + 196); | |
} | |
} | |
else | |
{ | |
*(_DWORD *)(v4 + 532) = *(_DWORD *)(v2 + 812); | |
} | |
v21 = *(_DWORD *)(v4 + 200); | |
*(_DWORD *)(v4 + 4 * v21) = (unsigned int)(*(_DWORD *)(v6 + 5184) / *(_DWORD *)(v6 + 5188)) / v12; | |
v22 = *(_DWORD *)(v4 + 252); | |
*(_DWORD *)(v4 + 200) = v21 + 1; | |
v23 = *(_WORD *)(v8 + 9534); | |
if ( v22 ) | |
v23 >>= 1; | |
v24 = *(_DWORD *)(v4 + 620); | |
if ( v24 < 1 ) | |
v24 = 1; | |
v25 = *(_DWORD *)(v4 + 268) / v24; | |
v26 = v14 - v25; | |
if ( v26 < 0 ) | |
v26 = -v26; | |
if ( *(_BYTE *)(v8 + 9512) * v26 > v25 ) | |
{ | |
v28 = 1; | |
} | |
else | |
{ | |
v27 = *(_DWORD *)(v4 + 532) - *(_DWORD *)(v2 + 812); | |
if ( v27 < 0 ) | |
v27 = -v27; | |
v28 = v27 > (signed int)v23; | |
} | |
if ( *(_DWORD *)(v4 + 528) == 1 ) | |
v28 = 1; | |
v29 = af_panning_stable_check(v2, v4); | |
v30 = 0; | |
if ( v29 >= 0 ) | |
{ | |
*(_DWORD *)(v4 + 628) = 0; | |
v30 = 1; | |
} | |
else | |
{ | |
++*(_DWORD *)(v4 + 628); | |
} | |
if ( *(_DWORD *)(v4 + 628) > (signed int)*(_WORD *)(v8 + 9524) ) | |
v28 = 1; | |
if ( *(_DWORD *)(v4 + 544) == 10 ) | |
*(_DWORD *)(v4 + 544) = 0; | |
v31 = *(_DWORD *)(v4 + 544); | |
*(_DWORD *)(v4 + 4 * v31 + 548) = *(_DWORD *)(v4 + 4 * (*(_DWORD *)(v4 + 200) - 1)); | |
v32 = *(_DWORD *)(v4 + 616); | |
*(_DWORD *)(v4 + 544) = v31 + 1; | |
*(_DWORD *)(v4 + 624) = v32; | |
if ( v28 == 1 | |
&& v30 | |
&& *(_DWORD *)(v4 + 636) | |
&& (*(_DWORD *)(v2 + 244) > 1u || *(_DWORD *)(v2 + 812) == *(_DWORD *)(v2 + 860) - 1) ) | |
LABEL_54: | |
sub_D564(v2, v4); | |
} | |
return 0; | |
} | |
//----- (0000D890) -------------------------------------------------------- | |
int __fastcall af_CAF_make_decision(int a1, int _R1) | |
{ | |
int v2; // r5@1 | |
int v3; // r2@1 | |
int v4; // r4@1 | |
int v5; // r3@1 | |
int v6; // r1@2 | |
int v7; // r2@2 | |
int v13; // r7@7 | |
int v14; // r6@7 | |
unsigned int v15; // r1@8 | |
unsigned int v16; // r0@10 | |
unsigned int v17; // r3@10 | |
int v18; // r0@10 | |
int v19; // r2@10 | |
signed int v21; // r0@15 | |
int v22; // r0@17 | |
int v23; // lr@17 | |
int v24; // r1@19 | |
int v25; // r2@19 | |
int v27; // r1@23 | |
int v28; // r0@29 | |
signed int v30; // r1@29 | |
signed int v31; // r12@30 | |
signed int v32; // r2@31 | |
int v33; // r6@37 | |
int v34; // r1@40 | |
int v35; // r2@42 | |
int v36; // r12@42 | |
int v37; // r3@42 | |
int v38; // r0@46 | |
int v39; // r3@51 | |
int v40; // r1@52 | |
int v41; // r12@52 | |
int v42; // t1@57 | |
signed int v44; // r2@59 | |
int v45; // r0@64 | |
int v46; // r1@64 | |
int v47; // r3@70 | |
signed int v48; // r2@72 | |
int v49; // r2@80 | |
int v50; // r6@80 | |
int v51; // r0@82 | |
int v52; // r1@85 | |
int v53; // r0@85 | |
int v54; // r1@85 | |
int v55; // r0@86 | |
int v57; // r2@98 | |
int v58; // r1@101 | |
int v59; // r0@103 | |
int v60; // r3@103 | |
int v61; // r12@103 | |
int v62; // r0@103 | |
int v63; // r1@105 | |
int v64; // r3@105 | |
int v65; // r2@108 | |
int v66; // r3@110 | |
int v67; // r2@113 | |
int v68; // r1@113 | |
int v69; // r3@113 | |
int v70; // r1@113 | |
int v71; // r0@119 | |
v2 = a1; | |
v3 = *(_DWORD *)(_R1 + 240); | |
v4 = _R1; | |
v5 = *(_DWORD *)(a1 + 60); | |
if ( v3 <= 0 ) | |
{ | |
_R8 = *(_DWORD *)(_R1 + 616); | |
if ( _R8 > 0 ) | |
{ | |
__asm | |
{ | |
VLDR S13, [R1,#0x270] | |
VMOV S0, R8 | |
VCVT.F32.S32 S14, S13 | |
VLDR D17, =0.8 | |
VCVT.F32.S32 S15, S0 | |
VDIV.F32 S1, S14, S15 | |
VCVT.F64.F32 D16, S1 | |
VCMPE.F64 D16, D17 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
goto LABEL_129; | |
__asm | |
{ | |
VLDR D1, =1.2 | |
VCMPE.F64 D16, D1 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
LABEL_129: | |
*(_DWORD *)(_R1 + 528) = 1; | |
} | |
v13 = *(_DWORD *)(_R1 + 200); | |
++*(_DWORD *)(_R1 + 524); | |
v14 = *(_DWORD *)(_R1 + 212); | |
*(_DWORD *)(_R1 + 4 * (v13 + 76)) = v14; | |
if ( _R8 < 1 ) | |
v15 = 1; | |
else | |
v15 = _R8; | |
v16 = (unsigned int)(*(_DWORD *)(v5 + 5184) / *(_DWORD *)(v5 + 5188)) / v15; | |
*(_DWORD *)(v4 + 4 * v13) = v16; | |
v17 = v16; | |
v18 = *(_DWORD *)(v4 + 536); | |
*(_DWORD *)(v4 + 200) = v13 + 1; | |
v19 = v13 - 1; | |
if ( !v18 ) | |
{ | |
_R2 = *(_DWORD *)(v4 + 4 * v19); | |
if ( (signed int)v17 <= *(_DWORD *)(v4 + 268) ) | |
{ | |
if ( (signed int)v17 < *(_DWORD *)(v4 + 272) ) | |
*(_DWORD *)(v4 + 272) = v17; | |
} | |
else | |
{ | |
*(_DWORD *)(v4 + 268) = v17; | |
*(_DWORD *)(v4 + 300) = v14; | |
} | |
v21 = *(_DWORD *)(v4 + 220); | |
if ( v14 == v21 ) | |
{ | |
*(_DWORD *)(v2 + 1124) = 0; | |
v22 = *(_DWORD *)(v4 + 604); | |
v23 = *(_DWORD *)(v4 + 212) - *(_DWORD *)(v4 + 304); | |
goto LABEL_19; | |
} | |
if ( v14 == *(_DWORD *)(v4 + 216) ) | |
{ | |
*(_DWORD *)(v2 + 1124) = 1; | |
v22 = *(_DWORD *)(v4 + 600); | |
v23 = *(_DWORD *)(v4 + 304) - *(_DWORD *)(v4 + 212); | |
LABEL_19: | |
*(_DWORD *)(v4 + 540) = v22 + v23; | |
af_slow_move_lens(v2, v4, *(_DWORD *)(v2 + 1124), *(_DWORD *)(v4 + 540)); | |
v24 = *(_DWORD *)(v4 + 540); | |
v25 = *(_DWORD *)(v4 + 592); | |
*(_DWORD *)(v4 + 676) = 14; | |
*(_DWORD *)(v4 + 540) = v24 - v25; | |
return 0; | |
} | |
__asm { VMOV S1, R2 } | |
_R7 = ((v17 - _R2) ^ ((signed int)(v17 - _R2) >> 31)) - ((signed int)(v17 - _R2) >> 31); | |
__asm | |
{ | |
VCVT.F32.S32 S2, S1 | |
VMOV S0, R7 | |
VLDR D21, =0.05 | |
VCVT.F32.S32 S15, S0 | |
VDIV.F32 S3, S15, S2 | |
VCVT.F64.F32 D20, S3 | |
VCMPE.F64 D20, D21 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
{ | |
if ( v21 - v14 >= v21 / 3 ) | |
v27 = *(_DWORD *)(v4 + 600); | |
else | |
v27 = *(_DWORD *)(v4 + 604); | |
*(_DWORD *)(v4 + 596) = v27; | |
sub_D534(v2, v4); | |
++*(_DWORD *)(v4 + 536); | |
goto LABEL_123; | |
} | |
if ( _R2 <= (signed int)v17 ) | |
{ | |
if ( _R2 >= (signed int)v17 ) | |
return 0; | |
goto LABEL_68; | |
} | |
goto LABEL_97; | |
} | |
v28 = v13 - 2; | |
_R2 = *(_DWORD *)(v4 + 4 * v19); | |
v30 = *(_DWORD *)(v4 + 4 * (v13 - 2)); | |
if ( v30 > _R2 ) | |
{ | |
if ( _R2 >= (signed int)v17 ) | |
{ | |
LABEL_44: | |
if ( v30 > *(_DWORD *)(v4 + 268) ) | |
{ | |
*(_DWORD *)(v4 + 268) = v30; | |
*(_DWORD *)(v4 + 300) = *(_DWORD *)(v4 + 4 * (v13 + 74)); | |
} | |
v38 = *(_DWORD *)(v4 + 272); | |
_VF = __OFSUB__(v17, v38); | |
_NF = ((v17 - v38) & 0x80000000) != 0; | |
v21 = *(_DWORD *)(v4 + 220); | |
if ( _NF ^ _VF ) | |
*(_DWORD *)(v4 + 272) = v17; | |
LABEL_95: | |
if ( v14 == v21 ) | |
goto LABEL_64; | |
if ( v14 != *(_DWORD *)(v4 + 216) ) | |
{ | |
LABEL_97: | |
if ( v21 - v14 >= v21 / 3 ) | |
v57 = *(_DWORD *)(v4 + 600); | |
else | |
v57 = *(_DWORD *)(v4 + 604); | |
*(_DWORD *)(v4 + 596) = v57; | |
if ( *(_DWORD *)(v2 + 1124) ) | |
{ | |
v35 = 0; | |
*(_DWORD *)(v2 + 1124) = 0; | |
v40 = *(_DWORD *)(v4 + 212); | |
v39 = v40 - *(_DWORD *)(v4 + 304) + *(_DWORD *)(v4 + 596); | |
v41 = v40 - *(_DWORD *)(v4 + 216); | |
} | |
else | |
{ | |
v35 = 1; | |
*(_DWORD *)(v2 + 1124) = 1; | |
v58 = *(_DWORD *)(v4 + 212); | |
v39 = *(_DWORD *)(v4 + 304) - v58 + *(_DWORD *)(v4 + 596); | |
v41 = *(_DWORD *)(v4 + 220) - v58; | |
} | |
if ( v39 >= v41 ) | |
v39 = v41; | |
goto LABEL_55; | |
} | |
goto LABEL_50; | |
} | |
v42 = *(_DWORD *)(v4 + 272); | |
__asm | |
{ | |
VMOV S5, R2 | |
VCVT.F32.S32 S6, S5 | |
VLDR D5, =0.05 | |
} | |
_R7 = v17 - _R2; | |
__asm { VMOV S3, R7 } | |
if ( _NF ^ _VF ) | |
*(_DWORD *)(v4 + 272) = _R2; | |
v44 = *(_DWORD *)(v4 + 268); | |
__asm | |
{ | |
VCVT.F32.S32 S4, S3 | |
VDIV.F32 S7, S4, S6 | |
VCVT.F64.F32 D4, S7 | |
VCMPE.F64 D4, D5 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
v21 = *(_DWORD *)(v4 + 220); | |
if ( (signed int)v17 > v44 ) | |
{ | |
*(_DWORD *)(v4 + 268) = v17; | |
*(_DWORD *)(v4 + 300) = v14; | |
} | |
if ( v14 != v21 ) | |
{ | |
if ( v14 != *(_DWORD *)(v4 + 216) ) | |
{ | |
LABEL_68: | |
v33 = v21 - v14; | |
LABEL_69: | |
if ( v33 >= v21 / 3 ) | |
v47 = *(_DWORD *)(v4 + 600); | |
else | |
v47 = *(_DWORD *)(v4 + 604); | |
*(_DWORD *)(v4 + 596) = v47; | |
sub_D534(v2, v4); | |
v48 = 14; | |
LABEL_122: | |
*(_DWORD *)(v4 + 676) = v48; | |
LABEL_123: | |
*(_DWORD *)(v4 + 240) = *(_DWORD *)(v4 + 612); | |
return 0; | |
} | |
v35 = 1; | |
++*(_DWORD *)(v4 + 292); | |
*(_DWORD *)(v2 + 1124) = 1; | |
v45 = *(_DWORD *)(v4 + 304); | |
v46 = *(_DWORD *)(v4 + 212); | |
goto LABEL_65; | |
} | |
++*(_DWORD *)(v4 + 292); | |
LABEL_64: | |
v35 = 0; | |
*(_DWORD *)(v2 + 1124) = 0; | |
v45 = *(_DWORD *)(v4 + 212); | |
v46 = *(_DWORD *)(v4 + 304); | |
LABEL_65: | |
v36 = v45 - v46; | |
v37 = *(_DWORD *)(v4 + 604); | |
goto LABEL_51; | |
} | |
if ( v30 >= (signed int)v17 ) | |
{ | |
if ( v30 > v44 ) | |
{ | |
*(_DWORD *)(v4 + 268) = v30; | |
*(_DWORD *)(v4 + 300) = *(_DWORD *)(v4 + 4 * (v28 + 76)); | |
} | |
} | |
else if ( (signed int)v17 > v44 ) | |
{ | |
*(_DWORD *)(v4 + 268) = v17; | |
*(_DWORD *)(v4 + 300) = v14; | |
} | |
v21 = *(_DWORD *)(v4 + 220); | |
if ( v14 == v21 ) | |
goto LABEL_64; | |
if ( v14 == *(_DWORD *)(v4 + 216) ) | |
{ | |
LABEL_50: | |
v35 = 1; | |
*(_DWORD *)(v2 + 1124) = 1; | |
v37 = *(_DWORD *)(v4 + 600); | |
v36 = *(_DWORD *)(v4 + 304) - *(_DWORD *)(v4 + 212); | |
goto LABEL_51; | |
} | |
v49 = *(_DWORD *)(v4 + 608); | |
v50 = v21 - v14; | |
*(_DWORD *)(v4 + 608) = v49 + 1; | |
if ( v49 + 1 > 1 ) | |
{ | |
if ( v50 >= v21 / 3 ) | |
v51 = *(_DWORD *)(v4 + 600); | |
else | |
v51 = *(_DWORD *)(v4 + 604); | |
*(_DWORD *)(v4 + 596) = v51; | |
if ( *(_DWORD *)(v2 + 1124) ) | |
{ | |
v35 = 0; | |
*(_DWORD *)(v2 + 1124) = 0; | |
v54 = *(_DWORD *)(v4 + 212); | |
v55 = *(_DWORD *)(v4 + 304); | |
*(_DWORD *)(v4 + 676) = 14; | |
v39 = *(_DWORD *)(v4 + 596) + v54 - v55; | |
} | |
else | |
{ | |
v35 = 1; | |
*(_DWORD *)(v2 + 1124) = 1; | |
v52 = *(_DWORD *)(v4 + 212); | |
v53 = *(_DWORD *)(v4 + 304); | |
*(_DWORD *)(v4 + 676) = 14; | |
v39 = *(_DWORD *)(v4 + 596) + v53 - v52; | |
v54 = *(_DWORD *)(v4 + 220) - v52; | |
} | |
if ( v39 >= v54 ) | |
v39 = v54; | |
goto LABEL_107; | |
} | |
} | |
else | |
{ | |
v31 = *(_DWORD *)(v4 + 268); | |
if ( _R2 <= (signed int)v17 ) | |
{ | |
v32 = *(_DWORD *)(v4 + 272); | |
v21 = *(_DWORD *)(v4 + 220); | |
if ( (signed int)v17 > v31 ) | |
{ | |
*(_DWORD *)(v4 + 268) = v17; | |
*(_DWORD *)(v4 + 300) = v14; | |
} | |
if ( v30 < v32 ) | |
*(_DWORD *)(v4 + 272) = v30; | |
if ( v14 == v21 ) | |
{ | |
++*(_DWORD *)(v4 + 292); | |
LABEL_103: | |
v35 = 0; | |
*(_DWORD *)(v2 + 1124) = 0; | |
v59 = *(_DWORD *)(v4 + 212); | |
v60 = *(_DWORD *)(v4 + 304); | |
*(_DWORD *)(v4 + 676) = 14; | |
v61 = v59 - v60; | |
v62 = *(_DWORD *)(v4 + 604); | |
LABEL_106: | |
v39 = v61 + v62; | |
LABEL_107: | |
*(_DWORD *)(v4 + 540) = v39; | |
goto LABEL_56; | |
} | |
_ZF = v14 == *(_DWORD *)(v4 + 216); | |
v33 = v21 - v14; | |
if ( !_ZF ) | |
goto LABEL_69; | |
if ( v33 >= v21 / 3 ) | |
v34 = *(_DWORD *)(v4 + 600); | |
else | |
v34 = *(_DWORD *)(v4 + 604); | |
++*(_DWORD *)(v4 + 292); | |
v35 = 1; | |
*(_DWORD *)(v4 + 596) = v34; | |
*(_DWORD *)(v2 + 1124) = 1; | |
v36 = *(_DWORD *)(v4 + 304) - *(_DWORD *)(v4 + 212); | |
v37 = *(_DWORD *)(v4 + 596); | |
LABEL_51: | |
v39 = v37 + v36; | |
LABEL_55: | |
*(_DWORD *)(v4 + 540) = v39; | |
*(_DWORD *)(v4 + 676) = 14; | |
LABEL_56: | |
af_slow_move_lens(v2, v4, v35, v39); | |
*(_DWORD *)(v4 + 540) -= *(_DWORD *)(v4 + 592); | |
return 0; | |
} | |
if ( v30 >= _R2 ) | |
goto LABEL_44; | |
if ( _R2 > v31 ) | |
{ | |
*(_DWORD *)(v4 + 268) = _R2; | |
*(_DWORD *)(v4 + 300) = *(_DWORD *)(v4 + 4 * (v13 + 75)); | |
} | |
_LR = _R2 - v17; | |
__asm | |
{ | |
VMOV S12, R2 | |
VMOV S9, LR | |
VCVT.F32.S32 S13, S12 | |
VLDR D19, =0.05 | |
} | |
v21 = *(_DWORD *)(v4 + 220); | |
__asm | |
{ | |
VCVT.F32.S32 S11, S9 | |
VDIV.F32 S14, S11, S13 | |
VCVT.F64.F32 D18, S14 | |
VCMPE.F64 D18, D19 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
if ( (signed int)v17 < *(_DWORD *)(v4 + 272) ) | |
*(_DWORD *)(v4 + 272) = v17; | |
goto LABEL_95; | |
} | |
if ( v14 == v21 ) | |
goto LABEL_103; | |
if ( v14 == *(_DWORD *)(v4 + 216) ) | |
{ | |
v35 = 1; | |
*(_DWORD *)(v2 + 1124) = 1; | |
v63 = *(_DWORD *)(v4 + 304); | |
v64 = *(_DWORD *)(v4 + 212); | |
*(_DWORD *)(v4 + 676) = 14; | |
v62 = *(_DWORD *)(v4 + 600); | |
v61 = v63 - v64; | |
goto LABEL_106; | |
} | |
v65 = *(_DWORD *)(v4 + 608); | |
v50 = v21 - v14; | |
*(_DWORD *)(v4 + 608) = v65 + 1; | |
if ( v65 + 1 > 1 ) | |
{ | |
if ( v50 >= v21 / 3 ) | |
v66 = *(_DWORD *)(v4 + 600); | |
else | |
v66 = *(_DWORD *)(v4 + 604); | |
*(_DWORD *)(v4 + 596) = v66; | |
if ( *(_DWORD *)(v2 + 1124) ) | |
{ | |
v67 = 0; | |
*(_DWORD *)(v2 + 1124) = 0; | |
*(_DWORD *)(v4 + 676) = 14; | |
v70 = *(_DWORD *)(v4 + 212); | |
v69 = v70 - *(_DWORD *)(v4 + 304) + *(_DWORD *)(v4 + 596); | |
} | |
else | |
{ | |
v67 = 1; | |
*(_DWORD *)(v2 + 1124) = 1; | |
*(_DWORD *)(v4 + 676) = 14; | |
v68 = *(_DWORD *)(v4 + 212); | |
v69 = *(_DWORD *)(v4 + 304) - v68 + *(_DWORD *)(v4 + 596); | |
v70 = *(_DWORD *)(v4 + 220) - v68; | |
} | |
if ( v69 >= v70 ) | |
v69 = v70; | |
*(_DWORD *)(v4 + 540) = v69; | |
af_move_lens(v2, v4, v67, v69); | |
*(_DWORD *)(v4 + 540) -= *(_DWORD *)(v4 + 592); | |
goto LABEL_123; | |
} | |
} | |
if ( v50 >= v21 / 3 ) | |
v71 = *(_DWORD *)(v4 + 600); | |
else | |
v71 = *(_DWORD *)(v4 + 604); | |
*(_DWORD *)(v4 + 596) = v71; | |
sub_D534(v2, v4); | |
v48 = 13; | |
*(_DWORD *)(v4 + 536) = 0; | |
goto LABEL_122; | |
} | |
v6 = v3 - 1; | |
v7 = *(_DWORD *)(v4 + 524); | |
*(_DWORD *)(v4 + 240) = v6; | |
*(_DWORD *)(v4 + 524) = v7 + 1; | |
return 0; | |
} | |
//----- (0000DEA0) -------------------------------------------------------- | |
int __fastcall af_CAF_gather_stats(int a1, int _R1) | |
{ | |
int v2; // r5@1 | |
int v3; // r4@1 | |
int v5; // r3@1 | |
int v6; // r8@1 | |
int v11; // r2@5 | |
int v12; // r1@8 | |
int v13; // r6@9 | |
unsigned int v14; // r1@10 | |
unsigned int v15; // r0@12 | |
signed int v16; // r2@12 | |
int v17; // r2@13 | |
int v18; // r1@17 | |
signed int v19; // r2@19 | |
int v20; // r3@19 | |
int v21; // r3@26 | |
int v22; // r3@30 | |
int v23; // r1@30 | |
int v24; // r0@34 | |
int v25; // r2@34 | |
int v26; // r1@35 | |
int v27; // r0@35 | |
int v28; // r2@35 | |
int v29; // r3@45 | |
int v30; // r1@45 | |
int v31; // r0@46 | |
v2 = a1; | |
v3 = _R1; | |
_R7 = *(_DWORD *)(_R1 + 616); | |
v5 = *(_DWORD *)(a1 + 60); | |
v6 = *(_DWORD *)(*(_DWORD *)(a1 + 76) + 9528); | |
if ( _R7 > 0 ) | |
{ | |
__asm | |
{ | |
VLDR S13, [R1,#0x270] | |
VMOV S0, R7 | |
VCVT.F32.S32 S14, S13 | |
VLDR D17, =0.8 | |
VCVT.F32.S32 S15, S0 | |
VDIV.F32 S1, S14, S15 | |
VCVT.F64.F32 D16, S1 | |
VCMPE.F64 D16, D17 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
goto LABEL_50; | |
__asm | |
{ | |
VLDR D1, =1.2 | |
VCMPE.F64 D16, D1 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
LABEL_50: | |
*(_DWORD *)(_R1 + 528) = 1; | |
} | |
v11 = *(_DWORD *)(_R1 + 240); | |
if ( v11 > 0 ) | |
{ | |
*(_DWORD *)(_R1 + 240) = v11 - 1; | |
return 0; | |
} | |
if ( *(_DWORD *)(_R1 + 200) > 49 ) | |
{ | |
v12 = *(_DWORD *)(_R1 + 196); | |
*(_DWORD *)(v3 + 200) = 1; | |
*(_DWORD *)v3 = v12; | |
} | |
v13 = *(_DWORD *)(v3 + 200); | |
if ( _R7 < 1 ) | |
v14 = 1; | |
else | |
v14 = _R7; | |
v15 = (unsigned int)(*(_DWORD *)(v5 + 5184) / *(_DWORD *)(v5 + 5188)) / v14; | |
*(_DWORD *)(v3 + 4 * v13) = v15; | |
v16 = *(_DWORD *)(v3 + 268); | |
*(_DWORD *)(v3 + 200) = v13 + 1; | |
if ( v16 >= (signed int)v15 ) | |
{ | |
if ( *(_DWORD *)(v3 + 272) >= (signed int)v15 ) | |
*(_DWORD *)(v3 + 272) = v15; | |
if ( (signed int)v15 < *(_DWORD *)(v3 + 4 * (v13 - 1)) ) | |
{ | |
v18 = *(_DWORD *)(v3 + 292) + 1; | |
goto LABEL_19; | |
} | |
} | |
else | |
{ | |
v17 = *(_DWORD *)(v3 + 212); | |
*(_DWORD *)(v3 + 268) = v15; | |
*(_DWORD *)(v3 + 300) = v17; | |
} | |
v18 = 0; | |
LABEL_19: | |
*(_DWORD *)(v3 + 292) = v18; | |
v19 = *(_DWORD *)(v2 + 1124); | |
v20 = *(_DWORD *)(v3 + 212); | |
if ( v19 == 1 ) | |
{ | |
if ( v20 >= *(_DWORD *)(v3 + 220) ) | |
goto LABEL_29; | |
goto LABEL_24; | |
} | |
if ( v19 ) | |
{ | |
LABEL_29: | |
v19 = 0; | |
goto LABEL_30; | |
} | |
if ( v20 > *(_DWORD *)(v3 + 216) ) | |
{ | |
LABEL_24: | |
if ( *(_DWORD *)(v3 + 292) < v6 ) | |
{ | |
if ( *(_DWORD *)(v3 + 220) - *(_DWORD *)(v3 + 212) >= *(_DWORD *)(v3 + 220) / 3 ) | |
v21 = *(_DWORD *)(v3 + 600); | |
else | |
v21 = *(_DWORD *)(v3 + 604); | |
*(_DWORD *)(v3 + 596) = v21; | |
sub_D534(v2, v3); | |
v19 = 1; | |
goto LABEL_30; | |
} | |
goto LABEL_29; | |
} | |
LABEL_30: | |
v22 = *(_DWORD *)(v3 + 212); | |
v23 = *(_DWORD *)(v3 + 220); | |
if ( (v22 >= v23 || v22 <= *(_DWORD *)(v3 + 216)) && !v19 || *(_DWORD *)(v3 + 292) >= v6 ) | |
{ | |
v24 = *(_DWORD *)(v3 + 300); | |
v25 = v22 - v24; | |
*(_DWORD *)(v3 + 540) = v22 - v24; | |
if ( v22 - v24 <= 0 ) | |
{ | |
if ( v22 == v24 ) | |
{ | |
v29 = *(_DWORD *)(v3 + 280); | |
v30 = *(_DWORD *)(v3 + 616); | |
*(_DWORD *)(v3 + 676) = 12; | |
*(_DWORD *)(v3 + 268) = v29; | |
*(_DWORD *)(v3 + 620) = v30; | |
goto LABEL_46; | |
} | |
if ( 1 - v25 > v23 - v22 ) | |
*(_DWORD *)(v3 + 540) = v23 - v22; | |
else | |
*(_DWORD *)(v3 + 540) = 1 - v25; | |
v28 = 1; | |
} | |
else | |
{ | |
v26 = *(_DWORD *)(v3 + 216); | |
v27 = v25 + 1; | |
v28 = 0; | |
if ( v27 > v22 - v26 ) | |
*(_DWORD *)(v3 + 540) = v22 - v26; | |
else | |
*(_DWORD *)(v3 + 540) = v27; | |
} | |
*(_DWORD *)(v2 + 1124) = v28; | |
*(_DWORD *)(v3 + 676) = 12; | |
af_slow_move_lens(v2, v3, v28, *(_DWORD *)(v3 + 540)); | |
*(_DWORD *)(v3 + 540) -= *(_DWORD *)(v3 + 592); | |
LABEL_46: | |
v31 = *(_DWORD *)(v3 + 612); | |
*(_DWORD *)(v3 + 200) = 0; | |
*(_DWORD *)(v3 + 588) = 1; | |
*(_DWORD *)(v3 + 544) = 0; | |
*(_DWORD *)(v3 + 240) = v31; | |
} | |
return 0; | |
} | |
//----- (0000E098) -------------------------------------------------------- | |
int __fastcall af_continuous_search(int a1, int a2) | |
{ | |
int v2; // r4@1 | |
int v3; // r5@1 | |
signed int v4; // r2@1 | |
int v5; // r2@7 | |
v2 = a2; | |
v3 = *(_DWORD *)(a1 + 60); | |
*(_DWORD *)(a2 + 612) = *(_WORD *)(*(_DWORD *)(a1 + 76) + 9532); | |
*(_DWORD *)(a2 + 616) = *(_DWORD *)(a1 + 248); | |
v4 = *(_DWORD *)(a2 + 260); | |
if ( v3 && v4 <= 100 ) | |
{ | |
v5 = *(_DWORD *)(a2 + 676); | |
if ( v5 == 12 ) | |
return af_CAF_monitor(a1, a2); | |
if ( v5 == 13 ) | |
return af_CAF_make_decision(a1, a2); | |
if ( v5 == 14 ) | |
return af_CAF_gather_stats(a1, a2); | |
if ( v5 == 15 ) | |
{ | |
af_slow_move_lens(a1, a2, *(_DWORD *)(a1 + 1124), *(_DWORD *)(a2 + 540)); | |
*(_DWORD *)(v2 + 540) -= *(_DWORD *)(v2 + 592); | |
} | |
} | |
else | |
{ | |
if ( v4 <= 100 ) | |
*(_DWORD *)(a2 + 676) = 0; | |
else | |
*(_DWORD *)(a2 + 676) = 8; | |
*(_DWORD *)(a1 + 1104) = 0; | |
} | |
return 0; | |
} | |
//----- (0000E128) -------------------------------------------------------- | |
int __fastcall af_exhaustive_search(int a1, int a2) | |
{ | |
int v2; // r5@1 | |
int v3; // r8@1 | |
signed int v4; // r3@1 | |
int v5; // r2@1 | |
int result; // r0@1 | |
int v8; // r2@2 | |
signed int v9; // r0@8 | |
int v10; // r2@15 | |
int v11; // r1@17 | |
int v12; // r3@17 | |
int v13; // r6@17 | |
int v14; // r0@20 | |
int v15; // r3@23 | |
signed int v16; // r0@30 | |
int v17; // r3@32 | |
int v18; // r6@35 | |
int v19; // r1@37 | |
signed int v20; // r7@38 | |
int v21; // r3@39 | |
int v22; // r1@40 | |
int v23; // r2@45 | |
int v29; // r8@52 | |
int v30; // r12@52 | |
int v32; // r7@57 | |
int v33; // r2@57 | |
int v34; // r0@57 | |
int v35; // r1@57 | |
int v36; // r7@57 | |
int v37; // r3@58 | |
int v38; // r3@63 | |
int v40; // r3@63 | |
int v41; // r0@71 | |
int v42; // r2@71 | |
int v43; // r3@74 | |
int v44; // r0@77 | |
int v45; // r1@77 | |
int v46; // r2@77 | |
int v47; // r7@83 | |
signed int v48; // r8@85 | |
int v49; // r6@85 | |
int v50; // r0@88 | |
int v51; // r3@89 | |
int v52; // r0@93 | |
int v53; // r3@95 | |
int v54; // r3@98 | |
int v55; // r2@98 | |
int v56; // r0@104 | |
int v57; // r0@104 | |
int v58; // r2@106 | |
int v59; // r2@109 | |
bool v60; // r0@114 | |
int v61; // r3@123 | |
unsigned int v62; // r2@125 | |
int v63; // r2@125 | |
int v64; // r2@134 | |
int v65; // r1@134 | |
int v66; // r7@136 | |
int v67; // r3@142 | |
int v68; // r0@144 | |
int v69; // r1@144 | |
int v70; // r2@144 | |
int v71; // r0@150 | |
int v72; // r1@150 | |
int v73; // r1@152 | |
int v74; // r6@154 | |
v2 = a1; | |
v3 = *(_DWORD *)(a1 + 60); | |
v4 = 0; | |
v5 = *(_DWORD *)(a1 + 76); | |
_R4 = a2; | |
result = *(_DWORD *)(a2 + 248); | |
*(_DWORD *)(a2 + 692) = 0; | |
if ( !result ) | |
{ | |
v8 = *(_DWORD *)(a2 + 240); | |
*(_DWORD *)(a2 + 240) = v8 - 1; | |
if ( (v8 + 399 < 0) ^ __OFADD__(v8 - 1, 400) ) | |
{ | |
*(_DWORD *)(a2 + 248) = 1; | |
return result; | |
} | |
return 0; | |
} | |
if ( *(_DWORD *)(v2 + 80) >= 0x900u ) | |
{ | |
*(_DWORD *)(a2 + 696) = *(_WORD *)(v5 + 9420); | |
} | |
else | |
{ | |
v4 = 1; | |
*(_DWORD *)(a2 + 696) = (unsigned int)*(_WORD *)(v5 + 9420) >> 1; | |
} | |
*(_DWORD *)(a2 + 252) = v4; | |
v9 = *(_DWORD *)(a2 + 260); | |
if ( !v3 || v9 > 100 ) | |
{ | |
if ( v9 <= 100 ) | |
*(_DWORD *)(a2 + 676) = 0; | |
else | |
*(_DWORD *)(a2 + 676) = 8; | |
*(_DWORD *)(v2 + 1104) = 0; | |
goto LABEL_69; | |
} | |
if ( *(_DWORD *)(a2 + 676) == 1 ) | |
{ | |
v11 = *(_DWORD *)(v2 + 76); | |
*(_DWORD *)(_R4 + 240) = 0; | |
*(_DWORD *)(_R4 + 256) = 0; | |
v12 = *(_DWORD *)(_R4 + 212); | |
*(_DWORD *)(_R4 + 620) = *(_DWORD *)(v2 + 248); | |
v13 = *(_DWORD *)(_R4 + 220); | |
if ( v12 > v13 ) | |
{ | |
*(_DWORD *)(_R4 + 212) = 0; | |
*(_DWORD *)(_R4 + 244) = 1; | |
af_move_lens(v2, _R4, 1, v13); | |
*(_DWORD *)(_R4 + 692) = 1; | |
} | |
else | |
{ | |
if ( *(_DWORD *)(v11 + 9436) && v13 == *(_WORD *)(*(_DWORD *)(v2 + 76) + 9432) ) | |
{ | |
v14 = 8 * (v13 - v12) / 5; | |
if ( v14 < 2 ) | |
v14 = 2; | |
v15 = v14 >= v13 ? *(_DWORD *)(_R4 + 220) : v14; | |
*(_DWORD *)(_R4 + 212) = v13 - v15; | |
} | |
else | |
{ | |
v15 = v13 - v12; | |
} | |
*(_DWORD *)(_R4 + 244) = 1; | |
af_move_lens(v2, _R4, 1, v15); | |
*(_DWORD *)(_R4 + 692) = 1; | |
} | |
v16 = *(_DWORD *)(_R4 + 208) ? 4 : 5; | |
*(_DWORD *)(_R4 + 676) = v16; | |
*(_DWORD *)(v2 + 1124) = 0; | |
v17 = *(_DWORD *)(_R4 + 692); | |
*(_DWORD *)(_R4 + 200) = 0; | |
*(_DWORD *)(_R4 + 268) = 0; | |
*(_DWORD *)(_R4 + 272) = 0; | |
*(_DWORD *)(_R4 + 292) = 0; | |
*(_DWORD *)(_R4 + 296) = 0; | |
if ( v17 == 1 ) | |
return 0; | |
} | |
v10 = *(_DWORD *)(_R4 + 676); | |
if ( v10 == 4 ) | |
{ | |
if ( *(_DWORD *)(v2 + 80) >= 0x900u ) | |
v18 = *(_WORD *)(*(_DWORD *)(v2 + 76) + 9416); | |
else | |
v18 = 3 * *(_WORD *)(*(_DWORD *)(v2 + 76) + 9416) >> 1; | |
v19 = *(_DWORD *)(_R4 + 240); | |
if ( v19 <= 0 ) | |
{ | |
v20 = *(_DWORD *)(_R4 + 200); | |
if ( v20 <= 49 ) | |
{ | |
*(_DWORD *)(_R4 + 4 * v20) = *(_DWORD *)(*(_DWORD *)(v2 + 60) + 5184) / *(_DWORD *)(*(_DWORD *)(v2 + 60) + 5188); | |
*(_DWORD *)(_R4 + 200) = v20 + 1; | |
v21 = *(_DWORD *)(_R4 + 4 * v20); | |
if ( *(_DWORD *)(_R4 + 268) >= v21 ) | |
{ | |
if ( *(_DWORD *)(_R4 + 272) > v21 ) | |
*(_DWORD *)(_R4 + 272) = v21; | |
if ( *(_DWORD *)(_R4 + 4 * v20) > *(_DWORD *)(_R4 + 4 * (v20 - 1)) ) | |
v23 = 0; | |
else | |
v23 = *(_DWORD *)(_R4 + 292) + 1; | |
*(_DWORD *)(_R4 + 292) = v23; | |
} | |
else | |
{ | |
v22 = *(_DWORD *)(_R4 + 212); | |
*(_DWORD *)(_R4 + 268) = v21; | |
*(_DWORD *)(_R4 + 292) = 0; | |
*(_DWORD *)(_R4 + 300) = v22; | |
if ( v20 == 0 ) | |
*(_DWORD *)(_R4 + 272) = v21; | |
} | |
} | |
if ( *(_DWORD *)(_R4 + 212) - v18 >= *(_DWORD *)(_R4 + 216) ) | |
{ | |
if ( *(_DWORD *)(_R4 + 292) < *(_DWORD *)(_R4 + 284) ) | |
goto LABEL_165; | |
__asm | |
{ | |
VLDR S15, [R4,#0x10C] | |
VCVT.F32.S32 S13, S15 | |
VLDR S1, [R4,#0x204] | |
} | |
_R2 = *(_DWORD *)(_R4 + 4 * (*(_DWORD *)(_R4 + 200) - 1)); | |
__asm | |
{ | |
VMOV S14, R2 | |
VMUL.F32 S2, S13, S1 | |
VCVT.F32.S32 S0, S14 | |
VCMPE.F32 S0, S2 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF ) | |
{ | |
LABEL_165: | |
af_move_lens(v2, _R4, 0, v18); | |
*(_DWORD *)(_R4 + 692) = 1; | |
} | |
} | |
v29 = *(_DWORD *)(_R4 + 212); | |
v30 = *(_DWORD *)(_R4 + 216); | |
if ( v29 - v18 > v30 || *(_DWORD *)(_R4 + 692) ) | |
{ | |
if ( *(_DWORD *)(_R4 + 292) < *(_DWORD *)(_R4 + 284) ) | |
return 0; | |
__asm | |
{ | |
VLDR S5, [R4,#0x10C] | |
VCVT.F32.S32 S6, S5 | |
VLDR S7, [R4,#0x204] | |
} | |
_R2 = *(_DWORD *)(_R4 + 4 * (*(_DWORD *)(_R4 + 200) - 1)); | |
__asm | |
{ | |
VMOV S3, R2 | |
VMUL.F32 S8, S6, S7 | |
VCVT.F32.S32 S4, S3 | |
VCMPE.F32 S4, S8 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF ) | |
return 0; | |
} | |
v32 = *(_DWORD *)(_R4 + 200); | |
v33 = 0; | |
v34 = v32 - 1; | |
v35 = 0; | |
*(_DWORD *)(_R4 + 200) = v32 - 1; | |
v36 = 0; | |
while ( v33 <= v34 ) | |
{ | |
v37 = *(_DWORD *)(_R4 + 4 * v33); | |
if ( v37 > v36 ) | |
v35 = v33; | |
else | |
v37 = v36; | |
++v33; | |
v36 = v37; | |
} | |
v38 = v34 - v35; | |
_R0 = *(_DWORD *)(_R4 + 268); | |
v40 = v38 * v18; | |
if ( _R0 < 500 ) | |
goto LABEL_166; | |
__asm | |
{ | |
VMOV S10, R0 | |
VCVT.F32.S32 S11, S10 | |
VLDR D16, =0.9 | |
VLDR S9, [R4,#0x110] | |
VCVT.F64.F32 D18, S11 | |
VMUL.F64 D6, D18, D16 | |
VCVT.F64.S32 D17, S9 | |
VCMPE.F64 D17, D6 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
{ | |
LABEL_166: | |
if ( v40 <= 0 ) | |
{ | |
if ( *(_DWORD *)(_R4 + 264) ) | |
{ | |
*(_DWORD *)(_R4 + 676) = 9; | |
return -1; | |
} | |
} | |
else | |
{ | |
*(_DWORD *)(_R4 + 676) = 7; | |
af_move_lens(v2, _R4, 1, v40); | |
} | |
LABEL_69: | |
af_done(v2, _R4, -1); | |
return -1; | |
} | |
v41 = *(_DWORD *)(_R4 + 696) >> 1; | |
v42 = *(_DWORD *)(_R4 + 236); | |
if ( v40 < v41 ) | |
{ | |
if ( v42 ) | |
*(_DWORD *)(_R4 + 244) = 1; | |
v46 = 0; | |
v43 = v29 - v30; | |
v44 = v2; | |
v45 = _R4; | |
goto LABEL_81; | |
} | |
if ( v42 && v35 > 0 ) | |
{ | |
v43 = v40 + v18 - v41; | |
} | |
else | |
{ | |
v43 = v40 - v41; | |
if ( !v42 ) | |
{ | |
LABEL_77: | |
v44 = v2; | |
v45 = _R4; | |
v46 = 1; | |
LABEL_81: | |
af_move_lens(v44, v45, v46, v43); | |
result = 0; | |
*(_DWORD *)(_R4 + 676) = 5; | |
*(_DWORD *)(v2 + 1124) = 1; | |
*(_DWORD *)(_R4 + 268) = 0; | |
*(_DWORD *)(_R4 + 200) = 0; | |
*(_DWORD *)(_R4 + 292) = 0; | |
return result; | |
} | |
} | |
*(_DWORD *)(_R4 + 244) = 1; | |
goto LABEL_77; | |
} | |
LABEL_84: | |
*(_DWORD *)(_R4 + 240) = v19 - 1; | |
return 0; | |
} | |
if ( v10 == 5 ) | |
{ | |
v19 = *(_DWORD *)(_R4 + 240); | |
v47 = *(_DWORD *)(v2 + 76); | |
if ( v19 > 0 ) | |
goto LABEL_84; | |
v48 = *(_DWORD *)(_R4 + 200); | |
v49 = *(_WORD *)(v47 + 9418); | |
if ( *(_DWORD *)(v2 + 80) < 0x900u ) | |
v49 *= 2; | |
if ( v48 <= 49 ) | |
{ | |
*(_DWORD *)(_R4 + 4 * v48) = *(_DWORD *)(*(_DWORD *)(v2 + 60) + 5184) / *(_DWORD *)(*(_DWORD *)(v2 + 60) + 5188); | |
*(_DWORD *)(_R4 + 200) = v48 + 1; | |
v50 = *(_DWORD *)(_R4 + 4 * v48); | |
if ( *(_DWORD *)(_R4 + 268) >= v50 ) | |
{ | |
if ( *(_DWORD *)(_R4 + 272) >= v50 ) | |
*(_DWORD *)(_R4 + 272) = v50; | |
v52 = 0; | |
if ( *(_DWORD *)(_R4 + 4 * v48) > *(_DWORD *)(_R4 + 4 * (v48 - 1)) ) | |
{ | |
v53 = *(_DWORD *)(_R4 + 296); | |
*(_DWORD *)(_R4 + 292) = 0; | |
v52 = v53 + 1; | |
} | |
else | |
{ | |
++*(_DWORD *)(_R4 + 292); | |
} | |
*(_DWORD *)(_R4 + 296) = v52; | |
} | |
else | |
{ | |
v51 = *(_DWORD *)(_R4 + 212); | |
*(_DWORD *)(_R4 + 292) = 0; | |
*(_DWORD *)(_R4 + 268) = v50; | |
*(_DWORD *)(_R4 + 300) = v51; | |
++*(_DWORD *)(_R4 + 296); | |
if ( v48 == 0 ) | |
*(_DWORD *)(_R4 + 272) = v50; | |
} | |
} | |
if ( !*(_DWORD *)(v47 + 9436) | |
|| ((v54 = *(_DWORD *)(_R4 + 212), v55 = *(_DWORD *)(_R4 + 216), v54 != v55) || *(_DWORD *)(_R4 + 208) != 1) | |
&& v54 != *(_DWORD *)(_R4 + 220) | |
|| *(_DWORD *)(_R4 + 280) != *(_DWORD *)(_R4 + 268) | |
|| *(_DWORD *)(_R4 + 296) <= *(_DWORD *)(_R4 + 288) ) | |
{ | |
LABEL_109: | |
v59 = *(_DWORD *)(v2 + 1124); | |
if ( v59 == 1 ) | |
{ | |
if ( v49 + *(_DWORD *)(_R4 + 212) > *(_DWORD *)(_R4 + 220) ) | |
goto LABEL_115; | |
} | |
else | |
{ | |
if ( v59 ) | |
{ | |
LABEL_115: | |
v60 = 0; | |
goto LABEL_117; | |
} | |
if ( *(_DWORD *)(_R4 + 212) - v49 < *(_DWORD *)(_R4 + 216) ) | |
{ | |
v60 = *(_DWORD *)(v2 + 1124); | |
LABEL_117: | |
if ( *(_DWORD *)(_R4 + 208) ) | |
{ | |
if ( !v60 || *(_DWORD *)(_R4 + 200) >= *(_DWORD *)(_R4 + 696) ) | |
{ | |
LABEL_123: | |
v61 = *(_DWORD *)(_R4 + 212); | |
if ( v61 < *(_DWORD *)(_R4 + 220) && v61 > *(_DWORD *)(_R4 + 216) ) | |
{ | |
v63 = 0; | |
} | |
else | |
{ | |
v62 = *(_DWORD *)(_R4 + 692); | |
_CF = v62 <= 1; | |
v63 = 1 - v62; | |
if ( !_CF ) | |
v63 = 0; | |
} | |
if ( *(_DWORD *)(_R4 + 208) ) | |
{ | |
if ( v63 ) | |
goto LABEL_159; | |
v64 = *(_DWORD *)(_R4 + 200); | |
v65 = *(_DWORD *)(_R4 + 696); | |
if ( v64 >= v65 && !*(_DWORD *)(v47 + 9436) ) | |
goto LABEL_159; | |
v66 = v47 + 9408; | |
if ( v64 < v65 + *(_WORD *)(v66 + 32) ) | |
{ | |
LABEL_131: | |
if ( *(_DWORD *)(_R4 + 292) < *(_DWORD *)(_R4 + 284) ) | |
return 0; | |
LABEL_159: | |
v67 = v61 - *(_DWORD *)(_R4 + 300); | |
if ( *(_DWORD *)(_R4 + 236) ) | |
{ | |
if ( !v67 ) | |
{ | |
LABEL_148: | |
if ( *(_DWORD *)(_R4 + 264) ) | |
{ | |
*(_DWORD *)(_R4 + 676) = 9; | |
return 0; | |
} | |
v71 = v2; | |
v72 = _R4; | |
LABEL_155: | |
af_done(v71, v72, 0); | |
return 0; | |
} | |
if ( (*(_DWORD *)(_R4 + 200) - 1) * v49 <= (v67 ^ (v67 >> 31)) - (v67 >> 31) ) | |
{ | |
if ( v67 > 0 ) | |
goto LABEL_144; | |
goto LABEL_146; | |
} | |
if ( v67 <= 0 ) | |
v49 = -v49; | |
v67 += v49; | |
} | |
if ( v67 > 0 ) | |
{ | |
LABEL_144: | |
v68 = v2; | |
*(_DWORD *)(_R4 + 676) = 6; | |
v69 = _R4; | |
v70 = 0; | |
LABEL_147: | |
af_move_lens(v68, v69, v70, v67); | |
return 0; | |
} | |
if ( v67 ) | |
{ | |
LABEL_146: | |
v70 = 1; | |
v67 = -v67; | |
v68 = v2; | |
*(_DWORD *)(_R4 + 676) = 6; | |
v69 = _R4; | |
goto LABEL_147; | |
} | |
goto LABEL_148; | |
} | |
v63 = *(_DWORD *)(v66 + 28); | |
} | |
if ( v63 ) | |
goto LABEL_159; | |
goto LABEL_131; | |
} | |
} | |
else if ( !v60 ) | |
{ | |
goto LABEL_123; | |
} | |
af_move_lens(v2, _R4, v59, v49); | |
*(_DWORD *)(_R4 + 692) = 1; | |
goto LABEL_123; | |
} | |
} | |
v60 = *(_DWORD *)(_R4 + 292) < *(_DWORD *)(_R4 + 284); | |
goto LABEL_117; | |
} | |
if ( v54 == v55 ) | |
{ | |
v56 = *(_DWORD *)(_R4 + 300); | |
*(_DWORD *)(_R4 + 212) = v54 + *(_WORD *)(v47 + 9440); | |
v57 = v56 + *(_WORD *)(v47 + 9440); | |
} | |
else | |
{ | |
if ( v54 != *(_DWORD *)(_R4 + 220) ) | |
{ | |
LABEL_108: | |
*(_DWORD *)(_R4 + 296) = 0; | |
goto LABEL_109; | |
} | |
v58 = *(_DWORD *)(_R4 + 300); | |
*(_DWORD *)(_R4 + 212) = v54 - *(_WORD *)(v47 + 9440); | |
v57 = v58 - *(_WORD *)(v47 + 9440); | |
} | |
*(_DWORD *)(_R4 + 300) = v57; | |
goto LABEL_108; | |
} | |
if ( v10 == 9 ) | |
{ | |
v73 = *(_DWORD *)(_R4 + 240); | |
if ( !((v73 + 1 < 0) ^ __OFADD__(v73, 1)) ) | |
{ | |
*(_DWORD *)(_R4 + 240) = v73 - 1; | |
return 0; | |
} | |
v74 = *(_DWORD *)(_R4 + 200); | |
*(_DWORD *)(_R4 + 4 * (v74 + 76)) = *(_DWORD *)(_R4 + 212); | |
v72 = _R4; | |
*(_DWORD *)(_R4 + 4 * v74) = *(_DWORD *)(v3 + 5184) / *(_DWORD *)(v3 + 5188); | |
v71 = v2; | |
*(_DWORD *)(_R4 + 200) = v74 + 1; | |
goto LABEL_155; | |
} | |
if ( !*(_DWORD *)(v2 + 1136) ) | |
return 0; | |
return af_continuous_search(v2, _R4); | |
} | |
//----- (0000E790) -------------------------------------------------------- | |
int __fastcall sub_E790(int result) | |
{ | |
__asm | |
{ | |
VLDR S11, [R0,#0x324] | |
VLDR S15, [R0,#0x34C] | |
VCVT.F32.S32 S12, S11 | |
VLDR S0, [R0,#0x320] | |
VLDR S2, [R0,#0x348] | |
VLDR S7, [R0,#0x328] | |
VLDR S9, [R0,#0x350] | |
VCVT.F32.S32 S13, S15 | |
VCVT.F32.S32 S14, S0 | |
VLDR S0, [R0,#0x32C] | |
VCVT.F32.S32 S3, S2 | |
VLDR S2, [R0,#0x354] | |
VSUB.F32 S1, S12, S14 | |
VSUB.F32 S4, S13, S3 | |
VDIV.F32 S5, S1, S4 | |
VCVT.F32.S32 S8, S7 | |
VCVT.F32.S32 S10, S9 | |
VCVT.F32.S32 S14, S0 | |
VCVT.F32.S32 S3, S2 | |
VSUB.F32 S11, S8, S12 | |
VSUB.F32 S1, S14, S8 | |
VSUB.F32 S12, S10, S13 | |
VSUB.F32 S4, S3, S10 | |
VCVTR.S32.F32 S6, S5 | |
VDIV.F32 S15, S11, S12 | |
VSTR S6, [R0,#0x314] | |
VDIV.F32 S5, S1, S4 | |
VCVTR.S32.F32 S13, S15 | |
VCVTR.S32.F32 S6, S5 | |
VSTR S13, [R0,#0x318] | |
VSTR S6, [R0,#0x31C] | |
} | |
return result; | |
} | |
//----- (0000E80E) -------------------------------------------------------- | |
int __fastcall sub_E80E(int result) | |
{ | |
int v1; // r2@1 | |
int v2; // r3@1 | |
int v3; // r1@2 | |
v1 = *(_DWORD *)(result + 884); | |
v2 = *(_DWORD *)(result + 4 * (v1 + 200)); | |
if ( v2 <= *(_DWORD *)(result + 268) ) | |
{ | |
if ( v2 >= *(_DWORD *)(result + 4 * (v1 + 199)) ) | |
return result; | |
v3 = *(_DWORD *)(result + 292) + 1; | |
} | |
else | |
{ | |
*(_DWORD *)(result + 896) = v1; | |
v3 = 0; | |
*(_DWORD *)(result + 268) = v2; | |
} | |
*(_DWORD *)(result + 292) = v3; | |
return result; | |
} | |
//----- (0000E844) -------------------------------------------------------- | |
int __fastcall sub_E844(int result) | |
{ | |
int v1; // r3@1 | |
int v2; // r1@2 | |
int v3; // r2@3 | |
v1 = *(_DWORD *)(result + 884); | |
if ( v1 ) | |
{ | |
v3 = *(_DWORD *)(result + 4 * (v1 + 200)); | |
if ( v3 <= *(_DWORD *)(result + 268) ) | |
{ | |
if ( v3 >= *(_DWORD *)(result + 4 * (v1 + 199)) ) | |
return result; | |
v1 = *(_DWORD *)(result + 292) + 1; | |
} | |
else | |
{ | |
*(_DWORD *)(result + 896) = v1; | |
v1 = 0; | |
*(_DWORD *)(result + 268) = v3; | |
} | |
} | |
else | |
{ | |
v2 = *(_DWORD *)(result + 800); | |
*(_DWORD *)(result + 896) = 0; | |
*(_DWORD *)(result + 268) = v2; | |
} | |
*(_DWORD *)(result + 292) = v1; | |
return result; | |
} | |
//----- (0000E88A) -------------------------------------------------------- | |
signed int __fastcall sub_E88A(int a1) | |
{ | |
int v1; // r3@1 | |
int v2; // r3@3 | |
int v3; // r1@3 | |
int v4; // r3@5 | |
int v5; // r2@7 | |
int v6; // r2@9 | |
int v7; // r1@10 | |
int v8; // r1@14 | |
signed int v9; // r12@22 | |
int v10; // r2@22 | |
signed int result; // r0@23 | |
v1 = *(_DWORD *)(a1 + 744); | |
if ( (unsigned int)(v1 - 1) > 0x10 ) | |
{ | |
def_E896: | |
result = -1; | |
} | |
else | |
{ | |
switch ( v1 ) | |
{ | |
case 0: | |
v2 = *(_DWORD *)(a1 + 764); | |
*(_DWORD *)(a1 + 888) = *(_DWORD *)(a1 + 844) - *(_DWORD *)(a1 + 212) + 1; | |
v3 = *(_DWORD *)(a1 + 760); | |
goto LABEL_5; | |
case 2: | |
v2 = *(_DWORD *)(a1 + 768); | |
v3 = *(_DWORD *)(a1 + 764); | |
*(_DWORD *)(a1 + 888) = *(_DWORD *)(a1 + 848) - *(_DWORD *)(a1 + 212) + 1; | |
goto LABEL_5; | |
case 3: | |
v4 = *(_DWORD *)(a1 + 768); | |
*(_DWORD *)(a1 + 888) = *(_DWORD *)(a1 + 848) - *(_DWORD *)(a1 + 212) + 1; | |
goto LABEL_21; | |
case 4: | |
v5 = *(_DWORD *)(a1 + 768); | |
*(_DWORD *)(a1 + 888) = (*(_DWORD *)(a1 + 852) + *(_DWORD *)(a1 + 848)) / 2 - *(_DWORD *)(a1 + 212) + 1; | |
goto LABEL_14; | |
case 5: | |
v2 = *(_DWORD *)(a1 + 772); | |
*(_DWORD *)(a1 + 888) = *(_DWORD *)(a1 + 852) - *(_DWORD *)(a1 + 212) + 1; | |
v3 = *(_DWORD *)(a1 + 768); | |
goto LABEL_5; | |
case 6: | |
v6 = *(_DWORD *)(a1 + 852); | |
goto LABEL_12; | |
case 7: | |
v7 = *(_DWORD *)(a1 + 776); | |
*(_DWORD *)(a1 + 888) = v7; | |
break; | |
case 8: | |
v6 = *(_DWORD *)(a1 + 844); | |
LABEL_12: | |
v4 = *(_DWORD *)(a1 + 772); | |
*(_DWORD *)(a1 + 888) = v6 - *(_DWORD *)(a1 + 212) + 1; | |
goto LABEL_21; | |
case 10: | |
v5 = *(_DWORD *)(a1 + 776); | |
*(_DWORD *)(a1 + 888) = (*(_DWORD *)(a1 + 848) + *(_DWORD *)(a1 + 844)) / 2 - *(_DWORD *)(a1 + 212) + 1; | |
LABEL_14: | |
v8 = *(_DWORD *)(a1 + 772); | |
goto LABEL_18; | |
case 11: | |
v2 = *(_DWORD *)(a1 + 776); | |
*(_DWORD *)(a1 + 888) = *(_DWORD *)(a1 + 848) - *(_DWORD *)(a1 + 212) + 1; | |
v3 = *(_DWORD *)(a1 + 772); | |
goto LABEL_5; | |
case 9: | |
case 12: | |
v4 = *(_DWORD *)(a1 + 776); | |
*(_DWORD *)(a1 + 888) = *(_DWORD *)(a1 + 848) - *(_DWORD *)(a1 + 212) + 1; | |
goto LABEL_21; | |
case 13: | |
v5 = *(_DWORD *)(a1 + 776); | |
v8 = *(_DWORD *)(a1 + 780); | |
*(_DWORD *)(a1 + 888) = (*(_DWORD *)(a1 + 852) + *(_DWORD *)(a1 + 848)) / 2 - *(_DWORD *)(a1 + 212) + 1; | |
LABEL_18: | |
v4 = (v5 + v8) / 2; | |
goto LABEL_21; | |
case 14: | |
v3 = *(_DWORD *)(a1 + 776); | |
v2 = *(_DWORD *)(a1 + 780); | |
*(_DWORD *)(a1 + 888) = *(_DWORD *)(a1 + 852) - *(_DWORD *)(a1 + 212) + 1; | |
LABEL_5: | |
v4 = v3 + v2; | |
goto LABEL_21; | |
case 15: | |
v4 = *(_DWORD *)(a1 + 780); | |
*(_DWORD *)(a1 + 888) = *(_DWORD *)(a1 + 852) - *(_DWORD *)(a1 + 212) + 1; | |
LABEL_21: | |
v7 = v4 - 1; | |
break; | |
case 16: | |
v9 = *(_DWORD *)(a1 + 852) + *(_DWORD *)(a1 + 848); | |
v10 = *(_DWORD *)(a1 + 216); | |
*(_DWORD *)(a1 + 888) = v9 / 2 - *(_DWORD *)(a1 + 212); | |
v7 = v9 / 2 - v10 + 1; | |
break; | |
default: | |
goto def_E896; | |
} | |
*(_DWORD *)(a1 + 752) = v7; | |
result = 0; | |
} | |
return result; | |
} | |
//----- (0000EA4A) -------------------------------------------------------- | |
signed int __fastcall af_slope_predictive_srch(signed int result, int a2) | |
{ | |
int v2; // r5@1 | |
int v3; // r3@1 | |
int v5; // r1@2 | |
int v6; // r6@4 | |
int v7; // r1@4 | |
int v8; // r3@4 | |
int v9; // r2@4 | |
int v10; // r0@4 | |
int v11; // r3@4 | |
int v12; // r6@4 | |
int v13; // r0@4 | |
int v14; // r6@4 | |
int v15; // r0@4 | |
int v16; // r0@4 | |
int v17; // r1@4 | |
int v18; // r0@4 | |
int v19; // r8@5 | |
int v20; // r1@5 | |
signed int v21; // r6@6 | |
int v22; // r7@6 | |
int v23; // r0@7 | |
unsigned int v24; // r1@7 | |
int v25; // r2@10 | |
int v26; // r3@10 | |
int v27; // r1@10 | |
int v28; // r2@10 | |
int v29; // r0@10 | |
int v30; // r2@12 | |
int v31; // r0@20 | |
signed int v32; // r2@21 | |
int v33; // r6@30 | |
int v34; // r3@30 | |
int v35; // r0@30 | |
int v36; // r2@31 | |
signed int v45; // r3@41 | |
int v49; // r3@51 | |
int v50; // r1@51 | |
int v51; // r2@51 | |
int v52; // r7@55 | |
int v53; // r6@55 | |
int v54; // r7@56 | |
int v55; // r0@56 | |
unsigned int v56; // r1@56 | |
int v57; // r1@61 | |
int v58; // r0@61 | |
int v59; // r3@61 | |
int v60; // r1@65 | |
int v61; // r3@65 | |
int v62; // r1@69 | |
int v64; // r1@73 | |
signed int v68; // r2@78 | |
int v79; // r9@105 | |
int v80; // r0@105 | |
unsigned int v81; // r1@105 | |
int v82; // r1@107 | |
int v83; // r10@107 | |
int v84; // r0@107 | |
int v85; // r0@108 | |
int v86; // r2@109 | |
int v87; // r3@110 | |
int v88; // r1@111 | |
int v89; // r3@113 | |
int v90; // r1@113 | |
int v91; // r3@113 | |
int v92; // r0@114 | |
int v93; // r1@114 | |
int v94; // r2@118 | |
int v95; // r0@122 | |
int v96; // r1@122 | |
int v97; // r2@127 | |
int v98; // r3@127 | |
int v99; // r6@128 | |
int v100; // r3@132 | |
int v101; // r0@133 | |
int v102; // r1@133 | |
int v103; // r2@133 | |
int v104; // r2@134 | |
signed int v105; // r1@136 | |
int v106; // r3@141 | |
int v107; // r3@141 | |
int v108; // r2@142 | |
int v109; // r2@148 | |
int v110; // r0@148 | |
int v111; // r3@148 | |
int v112; // r0@149 | |
int v113; // r1@149 | |
int v115; // r3@154 | |
int v116; // r2@154 | |
int v117; // r12@155 | |
int v118; // r0@159 | |
int v119; // r1@160 | |
int v120; // r2@164 | |
v2 = result; | |
v3 = *(_DWORD *)(a2 + 900); | |
_R4 = a2; | |
if ( v3 > 0 ) | |
{ | |
v5 = v3 - 1; | |
LABEL_104: | |
*(_DWORD *)(_R4 + 900) = v5; | |
return result; | |
} | |
result = *(_DWORD *)(a2 + 676); | |
if ( result == 1 ) | |
{ | |
v6 = *(_DWORD *)(v2 + 76); | |
memset((void *)(a2 + 744), 0, 0xA0u); | |
v7 = v6 + 54016; | |
v8 = *(_DWORD *)(_R4 + 224); | |
*(_DWORD *)(_R4 + 676) = 4; | |
v9 = 0; | |
*(_DWORD *)(_R4 + 268) = 0; | |
*(_DWORD *)(_R4 + 292) = 0; | |
v10 = *(_DWORD *)(v6 + 54228); | |
v11 = v8 - v10; | |
*(_DWORD *)(_R4 + 760) = v11; | |
v12 = *(_DWORD *)(v6 + 54232); | |
*(_DWORD *)(_R4 + 764) = v10 - v12; | |
v13 = *(_DWORD *)(v7 + 220); | |
*(_DWORD *)(_R4 + 768) = v12 - v13; | |
v14 = *(_DWORD *)(v7 + 224); | |
*(_DWORD *)(_R4 + 772) = v13 - v14; | |
v15 = *(_DWORD *)(v7 + 228); | |
*(_DWORD *)(_R4 + 776) = v14 - v15; | |
v16 = v15 - *(_DWORD *)(v7 + 232); | |
v17 = _R4; | |
*(_DWORD *)(_R4 + 780) = v16; | |
v18 = v2; | |
return af_move_lens(v18, v17, v9, v11); | |
} | |
v19 = *(_DWORD *)(a2 + 748); | |
v20 = *(_DWORD *)(v2 + 60); | |
if ( !v19 ) | |
{ | |
v21 = *(_DWORD *)(_R4 + 884); | |
v22 = *(_DWORD *)(v2 + 76); | |
if ( v21 <= 3 ) | |
{ | |
v23 = *(_DWORD *)(v20 + 5184) / *(_DWORD *)(v20 + 5188); | |
v24 = *(_DWORD *)(v2 + 248); | |
if ( v24 < 1 ) | |
v24 = 1; | |
result = v23 / v24; | |
*(_DWORD *)(_R4 + 4 * (v21 + 200)) = result; | |
*(_DWORD *)(_R4 + 4 * (v21 + 210)) = *(_DWORD *)(_R4 + 212); | |
if ( !v21 ) | |
{ | |
v25 = *(_DWORD *)(_R4 + 800); | |
*(_DWORD *)(_R4 + 676) = 4; | |
v26 = *(_DWORD *)(_R4 + 764); | |
v27 = _R4; | |
*(_DWORD *)(_R4 + 268) = v25; | |
v28 = 0; | |
*(_DWORD *)(_R4 + 884) = 1; | |
v29 = v2; | |
*(_DWORD *)(_R4 + 896) = 0; | |
*(_DWORD *)(_R4 + 292) = 0; | |
*(_DWORD *)(_R4 + 888) = v26; | |
LABEL_17: | |
result = af_move_lens(v29, v27, v28, v26); | |
LABEL_103: | |
v5 = 1; | |
goto LABEL_104; | |
} | |
if ( v21 == 1 ) | |
{ | |
sub_E80E(_R4); | |
v30 = *(_DWORD *)(_R4 + 884); | |
if ( *(_DWORD *)(_R4 + 292) >= *(_DWORD *)(v22 + 54256) ) | |
{ | |
*(_DWORD *)(_R4 + 896) = v30; | |
*(_DWORD *)(_R4 + 744) = 1; | |
result = sub_E88A(_R4); | |
if ( !result ) | |
result = af_move_lens(v2, _R4, 1, *(_DWORD *)(_R4 + 888)); | |
*(_DWORD *)(_R4 + 748) = 1; | |
*(_DWORD *)(_R4 + 884) = 0; | |
goto LABEL_103; | |
} | |
v26 = *(_DWORD *)(_R4 + 768); | |
v27 = _R4; | |
*(_DWORD *)(_R4 + 884) = v30 + 1; | |
v28 = 0; | |
v29 = v2; | |
*(_DWORD *)(_R4 + 888) = v26; | |
goto LABEL_17; | |
} | |
} | |
if ( v21 == 2 ) | |
{ | |
sub_E80E(_R4); | |
if ( *(_DWORD *)(_R4 + 292) >= *(_DWORD *)(v22 + 54256) ) | |
{ | |
v31 = *(_DWORD *)(_R4 + 896); | |
*(_DWORD *)(_R4 + 300) = *(_DWORD *)(_R4 + 4 * (v31 + 210)); | |
if ( v31 ) | |
{ | |
if ( v31 != 1 ) | |
{ | |
LABEL_25: | |
if ( !sub_E88A(_R4) ) | |
af_move_lens(v2, _R4, 1, *(_DWORD *)(_R4 + 888)); | |
*(_DWORD *)(_R4 + 884) = 0; | |
LABEL_54: | |
result = 1; | |
LABEL_102: | |
*(_DWORD *)(_R4 + 748) = result; | |
goto LABEL_103; | |
} | |
v32 = 3; | |
} | |
else | |
{ | |
v32 = 1; | |
} | |
*(_DWORD *)(_R4 + 744) = v32; | |
goto LABEL_25; | |
} | |
v26 = *(_DWORD *)(_R4 + 772); | |
++*(_DWORD *)(_R4 + 884); | |
LABEL_60: | |
*(_DWORD *)(_R4 + 888) = v26; | |
v29 = v2; | |
v27 = _R4; | |
v28 = 0; | |
goto LABEL_17; | |
} | |
if ( v21 != 3 ) | |
goto LABEL_103; | |
sub_E790(_R4); | |
sub_E80E(_R4); | |
v33 = *(_DWORD *)(_R4 + 896); | |
v34 = _R4; | |
v35 = *(_DWORD *)(_R4 + 4 * (v33 + 210)); | |
*(_DWORD *)(_R4 + 272) = *(_DWORD *)(_R4 + 800); | |
*(_DWORD *)(_R4 + 300) = v35; | |
do | |
{ | |
v36 = *(_DWORD *)(v34 + 804); | |
if ( v36 < *(_DWORD *)(_R4 + 272) ) | |
*(_DWORD *)(_R4 + 272) = v36; | |
v34 += 4; | |
} | |
while ( v34 != _R4 + 12 ); | |
__asm | |
{ | |
VLDR S3, [R4,#0x10C] | |
VCVT.F32.S32 S4, S3 | |
} | |
_R1 = v22 + 54016; | |
__asm | |
{ | |
VLDR S5, [R1,#0xC0] | |
VLDR S1, [R4,#0x110] | |
VMUL.F32 S6, S4, S5 | |
VCVT.F32.S32 S2, S1 | |
VCMPE.F32 S2, S6 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
*(_DWORD *)(_R4 + 756) = 1; | |
*(_DWORD *)(_R4 + 884) = 0; | |
if ( v33 == 1 ) | |
{ | |
*(_DWORD *)(_R4 + 744) = 3; | |
goto LABEL_52; | |
} | |
_R7 = v22 + 54016; | |
if ( v33 == 2 ) | |
{ | |
__asm { VLDR S13, [R7,#0xD0] } | |
_R0 = (*(_DWORD *)(_R4 + 792) ^ (*(_DWORD *)(_R4 + 792) >> 31)) - (*(_DWORD *)(_R4 + 792) >> 31); | |
__asm | |
{ | |
VMOV S14, R0 | |
VCVT.F32.S32 S1, S14 | |
} | |
_R1 = (*(_DWORD *)(_R4 + 788) ^ (*(_DWORD *)(_R4 + 788) >> 31)) - (*(_DWORD *)(_R4 + 788) >> 31); | |
__asm | |
{ | |
VMOV S15, R1 | |
VMUL.F32 S2, S13, S1 | |
VCVT.F32.S32 S0, S15 | |
VCMPE.F32 S0, S2 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
goto LABEL_176; | |
_R6 = -*(_DWORD *)(_R4 + 796); | |
__asm | |
{ | |
VMOV S3, R6 | |
VCVT.F32.S32 S4, S3 | |
VCMPE.F32 S4, S2 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
LABEL_176: | |
__asm | |
{ | |
VMUL.F32 S5, S13, S0 | |
VCMPE.F32 S1, S5 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
goto LABEL_177; | |
_R12 = (*(_DWORD *)(_R4 + 796) ^ (*(_DWORD *)(_R4 + 796) >> 31)) - (*(_DWORD *)(_R4 + 796) >> 31); | |
__asm | |
{ | |
VMOV S6, R12 | |
VCVT.F32.S32 S7, S6 | |
VCMPE.F32 S7, S5 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
LABEL_177: | |
v45 = 6; | |
else | |
v45 = 5; | |
} | |
else | |
{ | |
v45 = 4; | |
} | |
} | |
else | |
{ | |
__asm { VLDR S12, [R7,#0xCC] } | |
_LR = (*(_DWORD *)(_R4 + 792) ^ (*(_DWORD *)(_R4 + 792) >> 31)) - (*(_DWORD *)(_R4 + 792) >> 31); | |
__asm | |
{ | |
VMOV S9, LR | |
VCVT.F32.S32 S10, S9 | |
} | |
_R6 = (*(_DWORD *)(_R4 + 796) ^ (*(_DWORD *)(_R4 + 796) >> 31)) - (*(_DWORD *)(_R4 + 796) >> 31); | |
__asm | |
{ | |
VMOV S7, R6 | |
VMUL.F32 S11, S10, S12 | |
VCVT.F32.S32 S8, S7 | |
VCMPE.F32 S8, S11 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF || *(_DWORD *)(_R4 + 756) ) | |
{ | |
v49 = *(_DWORD *)(_R4 + 808); | |
v50 = *(_DWORD *)(_R4 + 812); | |
v51 = *(_DWORD *)(_R4 + 852); | |
*(_DWORD *)(_R4 + 840) = *(_DWORD *)(_R4 + 848); | |
v33 = 0; | |
*(_DWORD *)(_R4 + 744) = 8; | |
*(_DWORD *)(_R4 + 800) = v49; | |
*(_DWORD *)(_R4 + 804) = v50; | |
*(_DWORD *)(_R4 + 844) = v51; | |
*(_DWORD *)(_R4 + 884) = 2; | |
LABEL_52: | |
if ( !sub_E88A(_R4) ) | |
af_move_lens(v2, _R4, v33, *(_DWORD *)(_R4 + 888)); | |
goto LABEL_54; | |
} | |
v45 = 7; | |
} | |
*(_DWORD *)(_R4 + 744) = v45; | |
v33 = 1; | |
goto LABEL_52; | |
} | |
v52 = *(_DWORD *)(_R4 + 744); | |
v53 = *(_DWORD *)(_R4 + 884); | |
if ( v52 == 8 ) | |
{ | |
v54 = *(_DWORD *)(v2 + 76); | |
v55 = *(_DWORD *)(v20 + 5184) / *(_DWORD *)(v20 + 5188); | |
v56 = *(_DWORD *)(v2 + 248); | |
if ( v56 < 1 ) | |
v56 = 1; | |
*(_DWORD *)(_R4 + 4 * (v53 + 200)) = v55 / v56; | |
*(_DWORD *)(_R4 + 4 * (v53 + 210)) = *(_DWORD *)(_R4 + 212); | |
if ( v53 != 2 ) | |
{ | |
v57 = *(_DWORD *)(_R4 + 808); | |
v58 = *(_DWORD *)(_R4 + 800); | |
v59 = *(_DWORD *)(_R4 + 268); | |
*(_DWORD *)(_R4 + 896) = 1; | |
*(_DWORD *)(_R4 + 272) = v58; | |
if ( v57 < v58 ) | |
*(_DWORD *)(_R4 + 272) = v57; | |
if ( v57 > v59 ) | |
{ | |
*(_DWORD *)(_R4 + 268) = v57; | |
*(_DWORD *)(_R4 + 896) = 2; | |
} | |
v60 = *(_DWORD *)(_R4 + 812); | |
v61 = *(_DWORD *)(_R4 + 268); | |
if ( v60 < *(_DWORD *)(_R4 + 272) ) | |
*(_DWORD *)(_R4 + 272) = v60; | |
if ( v60 > v61 ) | |
{ | |
*(_DWORD *)(_R4 + 268) = v60; | |
*(_DWORD *)(_R4 + 896) = 3; | |
} | |
v62 = *(_DWORD *)(_R4 + 896); | |
if ( v62 > 0 ) | |
*(_DWORD *)(_R4 + 300) = *(_DWORD *)(_R4 + 4 * (v62 + 210)); | |
__asm | |
{ | |
VLDR S0, [R4,#0x10C] | |
VCVT.F32.S32 S13, S0 | |
} | |
_R3 = v54 + 54016; | |
__asm | |
{ | |
VLDR S1, [R3,#0xC4] | |
VLDR S15, [R4,#0x110] | |
VMUL.F32 S2, S13, S1 | |
VCVT.F32.S32 S14, S15 | |
VCMPE.F32 S14, S2 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !((unsigned __int8)(_NF ^ _VF) | _ZF) ) | |
*(_DWORD *)(_R4 + 756) = 1; | |
sub_E790(_R4); | |
v64 = *(_DWORD *)(_R4 + 896); | |
if ( v64 == 1 ) | |
{ | |
_R3 = v54 + 54016; | |
__asm { VLDR S8, [R3,#0xC8] } | |
_R1 = (*(_DWORD *)(_R4 + 792) ^ (*(_DWORD *)(_R4 + 792) >> 31)) - (*(_DWORD *)(_R4 + 792) >> 31); | |
__asm { VMOV S4, R1 } | |
_R6 = (*(_DWORD *)(_R4 + 796) ^ (*(_DWORD *)(_R4 + 796) >> 31)) - (*(_DWORD *)(_R4 + 796) >> 31); | |
__asm | |
{ | |
VMOV S6, R6 | |
VCVT.F32.S32 S7, S6 | |
VMUL.F32 S9, S7, S8 | |
VCVT.F32.S32 S5, S4 | |
VCMPE.F32 S5, S9 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !_NF ) | |
goto LABEL_178; | |
__asm | |
{ | |
VLDR S10, [R3,#0xC4] | |
VMUL.F32 S12, S7, S10 | |
VCMPE.F32 S5, S12 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF || *(_DWORD *)(_R4 + 804) <= *(_DWORD *)(_R4 + 812) ) | |
{ | |
LABEL_178: | |
_R7 = v54 + 54016; | |
__asm | |
{ | |
VLDR S14, [R7,#0xD0] | |
VMUL.F32 S0, S14, S5 | |
} | |
_R12 = (*(_DWORD *)(_R4 + 788) ^ (*(_DWORD *)(_R4 + 788) >> 31)) - (*(_DWORD *)(_R4 + 788) >> 31); | |
__asm | |
{ | |
VMOV S11, R12 | |
VCVT.F32.S32 S15, S11 | |
VCMPE.F32 S15, S0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
goto LABEL_179; | |
__asm | |
{ | |
VCMPE.F32 S7, S0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
LABEL_179: | |
__asm | |
{ | |
VMUL.F32 S13, S14, S7 | |
VCMPE.F32 S15, S13 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
goto LABEL_180; | |
__asm | |
{ | |
VCMPE.F32 S5, S13 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
LABEL_180: | |
v68 = 12; | |
else | |
v68 = 11; | |
} | |
else | |
{ | |
v68 = 10; | |
} | |
} | |
else | |
{ | |
v68 = 9; | |
} | |
} | |
else if ( v64 == 2 ) | |
{ | |
_R7 = v54 + 54016; | |
__asm { VLDR S12, [R7,#0xD0] } | |
_R1 = (*(_DWORD *)(_R4 + 792) ^ (*(_DWORD *)(_R4 + 792) >> 31)) - (*(_DWORD *)(_R4 + 792) >> 31); | |
__asm | |
{ | |
VMOV S11, R1 | |
VCVT.F32.S32 S14, S11 | |
} | |
_R6 = (*(_DWORD *)(_R4 + 796) ^ (*(_DWORD *)(_R4 + 796) >> 31)) - (*(_DWORD *)(_R4 + 796) >> 31); | |
__asm | |
{ | |
VMOV S9, R6 | |
VMUL.F32 S15, S12, S14 | |
VCVT.F32.S32 S10, S9 | |
VCMPE.F32 S10, S15 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
goto LABEL_181; | |
_R6 = (*(_DWORD *)(_R4 + 788) ^ (*(_DWORD *)(_R4 + 788) >> 31)) - (*(_DWORD *)(_R4 + 788) >> 31); | |
__asm | |
{ | |
VMOV S0, R6 | |
VCVT.F32.S32 S13, S0 | |
VCMPE.F32 S13, S15 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
LABEL_181: | |
_R0 = (*(_DWORD *)(_R4 + 788) ^ (*(_DWORD *)(_R4 + 788) >> 31)) - (*(_DWORD *)(_R4 + 788) >> 31); | |
__asm | |
{ | |
VMOV S1, R0 | |
VCVT.F32.S32 S2, S1 | |
VMUL.F32 S3, S12, S2 | |
VCMPE.F32 S10, S3 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
goto LABEL_182; | |
__asm | |
{ | |
VCMPE.F32 S14, S3 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
LABEL_182: | |
v68 = 15; | |
else | |
v68 = 14; | |
} | |
else | |
{ | |
v68 = 13; | |
} | |
} | |
else | |
{ | |
if ( *(_DWORD *)(_R4 + 756) ) | |
goto LABEL_183; | |
_R7 = v54 + 54016; | |
__asm { VLDR S7, [R7,#0xCC] } | |
_R1 = (*(_DWORD *)(_R4 + 792) ^ (*(_DWORD *)(_R4 + 792) >> 31)) - (*(_DWORD *)(_R4 + 792) >> 31); | |
__asm | |
{ | |
VMOV S5, R1 | |
VCVT.F32.S32 S6, S5 | |
} | |
_R6 = (*(_DWORD *)(_R4 + 796) ^ (*(_DWORD *)(_R4 + 796) >> 31)) - (*(_DWORD *)(_R4 + 796) >> 31); | |
__asm | |
{ | |
VMOV S3, R6 | |
VMUL.F32 S8, S6, S7 | |
VCVT.F32.S32 S4, S3 | |
VCMPE.F32 S4, S8 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _NF ) | |
v68 = 16; | |
else | |
LABEL_183: | |
v68 = 17; | |
} | |
*(_DWORD *)(_R4 + 744) = v68; | |
if ( !sub_E88A(_R4) ) | |
af_move_lens(v2, _R4, 1, *(_DWORD *)(_R4 + 888)); | |
result = 2; | |
*(_DWORD *)(_R4 + 884) = 0; | |
goto LABEL_102; | |
} | |
v26 = *(_DWORD *)(_R4 + 780); | |
*(_DWORD *)(_R4 + 884) = 3; | |
goto LABEL_60; | |
} | |
v79 = v53 + 200; | |
v80 = *(_DWORD *)(v20 + 5184) / *(_DWORD *)(v20 + 5188); | |
v81 = *(_DWORD *)(v2 + 248); | |
if ( v81 < 1 ) | |
v81 = 1; | |
*(_DWORD *)(_R4 + 4 * v79) = v80 / v81; | |
v82 = *(_DWORD *)(_R4 + 212); | |
*(_DWORD *)(_R4 + 4 * (v53 + 210)) = v82; | |
v83 = *(_DWORD *)(v2 + 76); | |
v84 = *(_DWORD *)(_R4 + 752); | |
if ( *(_DWORD *)(_R4 + 880) ) | |
{ | |
if ( v53 >= v84 - 1 ) | |
{ | |
v115 = 0; | |
v116 = _R4; | |
*(_DWORD *)(_R4 + 268) = 0; | |
*(_DWORD *)(_R4 + 896) = 0; | |
while ( v115 < v84 ) | |
{ | |
v117 = *(_DWORD *)(v116 + 800); | |
if ( v117 > *(_DWORD *)(_R4 + 268) ) | |
{ | |
*(_DWORD *)(_R4 + 896) = v115; | |
*(_DWORD *)(_R4 + 268) = v117; | |
*(_DWORD *)(_R4 + 300) = *(_DWORD *)(v116 + 840); | |
} | |
++v115; | |
v116 += 4; | |
} | |
v118 = *(_DWORD *)(_R4 + 300); | |
if ( v52 == 17 ) | |
v119 = v82 - v118; | |
else | |
v119 = v118 - v82; | |
*(_DWORD *)(_R4 + 888) = v119; | |
v111 = *(_DWORD *)(_R4 + 888); | |
if ( v111 > 0 ) | |
{ | |
v112 = v2; | |
v113 = _R4; | |
if ( v52 == 17 ) | |
{ | |
LABEL_170: | |
v120 = 0; | |
goto LABEL_171; | |
} | |
v120 = 1; | |
v111 = -v111; | |
LABEL_171: | |
af_move_lens(v112, v113, v120, v111); | |
goto LABEL_172; | |
} | |
if ( v111 ) | |
{ | |
_ZF = v52 == 17; | |
v112 = v2; | |
v113 = _R4; | |
LABEL_167: | |
v111 = -v111; | |
if ( !_ZF ) | |
goto LABEL_170; | |
LABEL_169: | |
v120 = 1; | |
goto LABEL_171; | |
} | |
} | |
else | |
{ | |
sub_E844(_R4); | |
if ( *(_DWORD *)(_R4 + 292) < *(_DWORD *)(v83 + 54260) ) | |
{ | |
af_move_lens(v2, _R4, *(_DWORD *)(_R4 + 744) == 17, 1); | |
result = *(_DWORD *)(_R4 + 884); | |
*(_DWORD *)(_R4 + 884) = result + 1; | |
return result; | |
} | |
v109 = *(_DWORD *)(_R4 + 212); | |
v110 = *(_DWORD *)(_R4 + 4 * (*(_DWORD *)(_R4 + 896) + 210)); | |
v111 = v110 - v109; | |
*(_DWORD *)(_R4 + 888) = v110 - v109; | |
*(_DWORD *)(_R4 + 300) = v110; | |
if ( v110 - v109 > 0 ) | |
{ | |
v112 = v2; | |
v113 = _R4; | |
if ( *(_DWORD *)(_R4 + 744) == 17 ) | |
goto LABEL_170; | |
goto LABEL_169; | |
} | |
if ( v110 != v109 ) | |
{ | |
v112 = v2; | |
v113 = _R4; | |
_ZF = *(_DWORD *)(_R4 + 744) == 17; | |
goto LABEL_167; | |
} | |
} | |
LABEL_172: | |
v95 = v2; | |
*(_DWORD *)(_R4 + 892) = 1; | |
v96 = _R4; | |
return af_done(v95, v96, 0); | |
} | |
v85 = (v84 + 1) / 2; | |
if ( v53 >= v85 - 1 ) | |
{ | |
if ( v52 != 17 ) | |
{ | |
if ( *(_DWORD *)(_R4 + 4 * v79) > *(_DWORD *)(_R4 + 268) ) | |
{ | |
*(_DWORD *)(_R4 + 896) = v53; | |
*(_DWORD *)(_R4 + 268) = *(_DWORD *)(_R4 + 4 * v79); | |
} | |
v106 = *(_DWORD *)(_R4 + 4 * (*(_DWORD *)(_R4 + 896) + 210)); | |
*(_DWORD *)(_R4 + 300) = v106; | |
v107 = v82 - v106 - 1; | |
*(_DWORD *)(_R4 + 888) = v107; | |
if ( v107 <= 0 ) | |
{ | |
v108 = 1; | |
v107 = -v107; | |
} | |
else | |
{ | |
v108 = 0; | |
} | |
af_move_lens(v2, _R4, v108, v107); | |
result = 3; | |
*(_DWORD *)(_R4 + 884) = 0; | |
*(_DWORD *)(_R4 + 752) = 3; | |
goto LABEL_145; | |
} | |
*(_DWORD *)(_R4 + 268) = 0; | |
v97 = _R4; | |
*(_DWORD *)(_R4 + 896) = 0; | |
v98 = 0; | |
while ( v98 < v85 ) | |
{ | |
v99 = *(_DWORD *)(v97 + 800); | |
if ( v99 > *(_DWORD *)(_R4 + 268) ) | |
{ | |
*(_DWORD *)(_R4 + 896) = v98; | |
*(_DWORD *)(_R4 + 268) = v99; | |
*(_DWORD *)(_R4 + 300) = *(_DWORD *)(v97 + 840); | |
} | |
++v98; | |
v97 += 4; | |
} | |
v100 = *(_DWORD *)(_R4 + 300) - v82 - 1; | |
*(_DWORD *)(_R4 + 888) = v100; | |
if ( v100 <= 0 ) | |
{ | |
v104 = *(_DWORD *)(_R4 + 216); | |
v101 = v2; | |
_VF = __OFSUB__(v82, v104); | |
_ZF = v82 == v104; | |
_NF = v82 - v104 < 0; | |
v102 = _R4; | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
{ | |
af_move_lens(v2, _R4, 1, 1); | |
v105 = 2; | |
goto LABEL_138; | |
} | |
v103 = 0; | |
v100 = -v100; | |
} | |
else | |
{ | |
v101 = v2; | |
v102 = _R4; | |
v103 = 1; | |
} | |
af_move_lens(v101, v102, v103, v100); | |
v105 = 3; | |
LABEL_138: | |
result = 0; | |
*(_DWORD *)(_R4 + 752) = v105; | |
*(_DWORD *)(_R4 + 884) = 0; | |
goto LABEL_145; | |
} | |
sub_E844(_R4); | |
v86 = *(_DWORD *)(_R4 + 744); | |
if ( *(_DWORD *)(_R4 + 292) < *(_DWORD *)(v83 + 54256) ) | |
{ | |
++*(_DWORD *)(_R4 + 884); | |
v17 = _R4; | |
v18 = v2; | |
v9 = v86 != 17; | |
v11 = 2; | |
return af_move_lens(v18, v17, v9, v11); | |
} | |
v87 = *(_DWORD *)(_R4 + 212); | |
if ( v86 == 17 ) | |
v88 = v87 - *(_DWORD *)(_R4 + 300); | |
else | |
v88 = v87 - *(_DWORD *)(_R4 + 4 * (*(_DWORD *)(_R4 + 896) + 210)) - 1; | |
v89 = *(_DWORD *)(_R4 + 896); | |
*(_DWORD *)(_R4 + 888) = v88; | |
v90 = *(_DWORD *)(_R4 + 4 * (v89 + 210)); | |
v91 = *(_DWORD *)(_R4 + 888); | |
*(_DWORD *)(_R4 + 300) = v90; | |
if ( v91 <= 0 ) | |
{ | |
if ( !v91 ) | |
goto LABEL_121; | |
v92 = v2; | |
v93 = _R4; | |
v91 = -v91; | |
if ( v86 != 17 ) | |
goto LABEL_119; | |
} | |
else | |
{ | |
v92 = v2; | |
v93 = _R4; | |
if ( v86 == 17 ) | |
{ | |
LABEL_119: | |
v94 = 1; | |
goto LABEL_120; | |
} | |
} | |
v94 = 0; | |
LABEL_120: | |
af_move_lens(v92, v93, v94, v91); | |
LABEL_121: | |
result = *(_DWORD *)(_R4 + 744); | |
*(_DWORD *)(_R4 + 884) = 0; | |
if ( result != 17 ) | |
{ | |
*(_DWORD *)(_R4 + 752) = 3; | |
LABEL_145: | |
*(_DWORD *)(_R4 + 880) = 1; | |
return result; | |
} | |
*(_DWORD *)(_R4 + 892) = 1; | |
v95 = v2; | |
v96 = _R4; | |
return af_done(v95, v96, 0); | |
} | |
//----- (0000F358) -------------------------------------------------------- | |
void __fastcall dis_deinit(unsigned int *a1) | |
{ | |
unsigned int v1; // r3@1 | |
int v2; // r4@2 | |
void *v3; // r0@3 | |
v1 = *(_BYTE *)a1; | |
if ( v1 <= 7 ) | |
{ | |
v2 = dword_1230C[v1]; | |
if ( v2 ) | |
{ | |
v3 = *(void **)(v2 + 16468); | |
if ( v3 ) | |
{ | |
free(v3); | |
*(_DWORD *)(v2 + 16468) = 0; | |
} | |
j_j_free((void *)v2); | |
} | |
} | |
} | |
//----- (0000F38C) -------------------------------------------------------- | |
signed int __fastcall dis_init(unsigned int *a1) | |
{ | |
unsigned int v1; // r4@1 | |
signed int result; // r0@2 | |
void *v3; // r0@3 | |
v1 = *(_BYTE *)a1; | |
if ( v1 <= 7 && (v3 = malloc(0x4080u), (dword_1230C[v1] = v3) != 0) ) | |
{ | |
memset(v3, 0, 0x4080u); | |
result = 0; | |
} | |
else | |
{ | |
result = -1; | |
} | |
return result; | |
} | |
//----- (0000F3C0) -------------------------------------------------------- | |
int dis_set_params() | |
{ | |
return 0; | |
} | |
//----- (0000F3C4) -------------------------------------------------------- | |
int __fastcall sub_F3C4(int a1, int a2, int a3, int a4) | |
{ | |
int v4; // r7@1 | |
int v5; // r1@1 | |
int v6; // r4@1 | |
int v7; // r3@1 | |
int result; // r0@1 | |
int v9; // r6@2 | |
int v10; // r5@2 | |
int v11; // r5@2 | |
v4 = a1 + 4 * a3; | |
v5 = a2 + 4 * a3; | |
v6 = 0; | |
v7 = a3 + a4; | |
result = 0; | |
while ( a3 < v7 ) | |
{ | |
v9 = *(_DWORD *)(v4 + v6); | |
++a3; | |
v10 = *(_DWORD *)(v5 + v6); | |
v6 += 4; | |
v11 = v9 - v10; | |
if ( v11 < 0 ) | |
v11 = -v11; | |
result += v11; | |
} | |
return result; | |
} | |
//----- (0000F3EC) -------------------------------------------------------- | |
int __fastcall dis_offset_calc(int a1, int a2, int a3, int a4, int a5, int a6) | |
{ | |
int v6; // r11@1 | |
int v7; // r6@1 | |
int v8; // r9@1 | |
int v9; // r8@1 | |
int v10; // r10@1 | |
int v11; // r4@1 | |
signed int v12; // r5@1 | |
int v13; // r0@2 | |
int v14; // r0@4 | |
int result; // r0@8 | |
int v16; // [sp+4h] [bp-2Ch]@1 | |
v6 = 4 * a3; | |
v7 = a3; | |
v8 = a2; | |
v9 = a4; | |
v10 = a1 + 4 * a3; | |
v16 = a2 + 8 * a3; | |
v11 = 0; | |
v12 = -1; | |
while ( v11 < v7 ) | |
{ | |
v13 = sub_F3C4(v10, v8 + 4 * v11, v9, a5); | |
if ( v13 < (unsigned int)v12 ) | |
{ | |
*(_DWORD *)a6 = v7 - v11; | |
v12 = v13; | |
} | |
v14 = sub_F3C4(v10, v16 - 4 * v11, v9, a5); | |
if ( v14 < (unsigned int)v12 ) | |
{ | |
v12 = v14; | |
*(_DWORD *)a6 = v11 - v7; | |
} | |
++v11; | |
} | |
result = sub_F3C4(v10, v8 + v6, v9, a5); | |
if ( result < (unsigned int)v12 ) | |
{ | |
result = a6; | |
*(_DWORD *)a6 = 0; | |
} | |
return result; | |
} | |
//----- (0000F478) -------------------------------------------------------- | |
_UNKNOWN *__fastcall gmv_coherence_test(int a1, int a2) | |
{ | |
int v2; // r5@1 | |
int v3; // r4@1 | |
signed int v4; // r9@2 | |
unsigned int v5; // r10@2 | |
unsigned int v6; // r0@5 | |
int v7; // r7@5 | |
int v8; // r0@5 | |
int v9; // r8@5 | |
int v10; // ST1C_4@5 | |
int v12; // r8@5 | |
int v13; // r0@5 | |
int v14; // r1@5 | |
int v16; // ST1C_4@5 | |
int v36; // r1@10 | |
int v39; // r3@14 | |
signed int v41; // r6@14 | |
signed int v44; // kr00_4@21 | |
int v45; // r0@24 | |
int v46; // r3@24 | |
signed int v47; // r2@24 | |
signed int v48; // r1@24 | |
int v49; // r5@30 | |
int v50; // r7@43 | |
int v51; // r5@43 | |
int v52; // r3@45 | |
_UNKNOWN *result; // r0@45 | |
int v54; // [sp+24h] [bp-1DCh]@5 | |
int v55; // [sp+28h] [bp-1D8h]@5 | |
int v56; // [sp+30h] [bp-1D0h]@5 | |
int v57; // [sp+34h] [bp-1CCh]@5 | |
int v58; // [sp+3Ch] [bp-1C4h]@5 | |
int v59; // [sp+40h] [bp-1C0h]@5 | |
double v60; // [sp+48h] [bp-1B8h]@5 | |
double v61; // [sp+50h] [bp-1B0h]@5 | |
double v62; // [sp+58h] [bp-1A8h]@5 | |
double v63; // [sp+60h] [bp-1A0h]@5 | |
double v64; // [sp+70h] [bp-190h]@5 | |
double v65; // [sp+78h] [bp-188h]@5 | |
double v66; // [sp+80h] [bp-180h]@5 | |
double v67; // [sp+88h] [bp-178h]@5 | |
char v68[160]; // [sp+98h] [bp-168h]@15 | |
char v69[160]; // [sp+138h] [bp-C8h]@17 | |
v2 = a1; | |
v3 = a2; | |
if ( *(_DWORD *)(a1 + 36) > 0x120u || *(_DWORD *)(a1 + 40) > 0x160u ) | |
{ | |
v4 = 3; | |
v5 = 4; | |
} | |
else | |
{ | |
v4 = 1; | |
v5 = 2; | |
} | |
v6 = *(_DWORD *)(a1 + 40); | |
v7 = 0; | |
v58 = 0; | |
v8 = v6 / v5; | |
v9 = *(_DWORD *)(v2 + 28); | |
v54 = 0; | |
v10 = v8 + -2 * v9; | |
_R6 = &v54; | |
v59 = v4 * v8; | |
dis_offset_calc(v2 + 12332, v2 + 4140, v9, 0, v8, (int)&v54); | |
v55 = 0; | |
dis_offset_calc(v2 + 12332, v2 + 4140, v9, v59, v10, (int)&v55); | |
v12 = *(_DWORD *)(v2 + 32); | |
v13 = *(_DWORD *)(v2 + 36) / v5; | |
v56 = 0; | |
v14 = v4 * v13; | |
_R9 = &v56; | |
v16 = v13 + -2 * v12; | |
v59 = v14; | |
dis_offset_calc(v2 + 8236, v2 + 44, v12, v58, v13, (int)&v56); | |
v57 = 0; | |
dis_offset_calc(v2 + 8236, v2 + 44, v12, v59, v16, (int)&v57); | |
__asm | |
{ | |
VLDR S0, [R6] | |
VLDR S15, [R9] | |
VCVT.F64.S32 D1, S0 | |
VCVT.F64.S32 D16, S15 | |
VMOV R2, R3, D1 | |
VMOV R0, R1, D16 | |
} | |
_R0 = atan2(_R0, _R2); | |
__asm | |
{ | |
VLDR S3, [R6,#4] | |
VLDR S1, [R9] | |
VCVT.F64.S32 D3, S3 | |
VCVT.F64.S32 D2, S1 | |
VMOV R2, R3, D3 | |
} | |
v60 = _R0; | |
__asm { VMOV R0, R1, D2 } | |
_R0 = atan2(_R0, _R2); | |
__asm | |
{ | |
VLDR S7, [R6] | |
VLDR S5, [R9,#4] | |
VCVT.F64.S32 D5, S7 | |
VCVT.F64.S32 D4, S5 | |
VMOV R2, R3, D5 | |
} | |
v61 = _R0; | |
__asm { VMOV R0, R1, D4 } | |
_R0 = atan2(_R0, _R2); | |
__asm | |
{ | |
VLDR S11, [R6,#4] | |
VLDR S9, [R9,#4] | |
VCVT.F64.S32 D7, S11 | |
VCVT.F64.S32 D6, S9 | |
VMOV R2, R3, D7 | |
} | |
v62 = _R0; | |
__asm { VMOV R0, R1, D6 } | |
_R0 = atan2(_R0, _R2); | |
v63 = _R0; | |
LODWORD(_R0) = v54 * v54 + v56 * v56; | |
__asm | |
{ | |
VMOV S13, R0 | |
VCVT.F64.S32 D17, S13 | |
VMOV R0, R1, D17 | |
} | |
v64 = sqrt(_R0); | |
HIDWORD(_R0) = v56; | |
_R12 = v55 * v55 + HIDWORD(_R0) * HIDWORD(_R0); | |
__asm | |
{ | |
VMOV S15, R12 | |
VCVT.F64.S32 D18, S15 | |
VMOV R0, R1, D18 | |
} | |
v65 = sqrt(_R0); | |
HIDWORD(_R0) = v54 * v54 + v57 * v57; | |
__asm | |
{ | |
VMOV S0, R1 | |
VCVT.F64.S32 D19, S0 | |
VMOV R0, R1, D19 | |
} | |
_R0 = sqrt(_R0); | |
v66 = _R0; | |
LODWORD(_R0) = v55 * v55 + v57 * v57; | |
__asm | |
{ | |
VMOV S2, R0 | |
VCVT.F64.S32 D20, S2 | |
VMOV R0, R1, D20 | |
} | |
v67 = sqrt(_R0); | |
do | |
{ | |
_R2 = (char *)&v60 + v7 * 8; | |
_R1 = (char *)&v64 + v7 * 8; | |
__asm | |
{ | |
VLDR D21, [R2] | |
VLDR D22, [R1] | |
} | |
v36 = 0; | |
do | |
{ | |
_R0 = (char *)&v60 + v36; | |
__asm | |
{ | |
VLDR D23, [R0] | |
VSUB.F64 D24, D21, D23 | |
} | |
_R6 = (char *)&v64 + v36; | |
__asm | |
{ | |
VLDR D25, [R6] | |
VSUB.F64 D26, D22, D25 | |
VCMPE.F64 D24, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
VCMPE.F64 D26, #0.0 | |
} | |
if ( _NF ) | |
__asm { VNEGMI.F64 D24, D24 } | |
__asm { VMRS APSR_nzcv, FPSCR } | |
if ( _NF ) | |
__asm { VNEGMI.F64 D26, D26 } | |
v36 += 8; | |
__asm | |
{ | |
VSTR D24, [R3] | |
VSTR D26, [R0] | |
} | |
} | |
while ( !_ZF ); | |
++v7; | |
} | |
while ( v7 != 4 ); | |
v39 = 0; | |
_R2 = v2 + 0x4000; | |
__asm | |
{ | |
VLDR D28, =8.6 | |
VLDR D27, [R2,#0x48] | |
} | |
v41 = 0; | |
do | |
{ | |
_R1 = &v68[v39]; | |
__asm | |
{ | |
VLDR D29, [R1] | |
VCMPE.F64 D29, D27 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !(_NF ^ _VF) ) | |
goto LABEL_50; | |
_R7 = &v69[v39]; | |
__asm | |
{ | |
VLDR D30, [R7] | |
VCMPE.F64 D30, D28 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( !(_NF ^ _VF) ) | |
LABEL_50: | |
++v41; | |
v39 += 8; | |
} | |
while ( v39 != 128 ); | |
*(_DWORD *)v3 = 0; | |
*(_DWORD *)(v3 + 4) = 0; | |
if ( v41 ) | |
{ | |
v41 = 1; | |
} | |
else | |
{ | |
v44 = v54 + v55; | |
*(_DWORD *)(v3 + 4) = (v56 + v57) / 2; | |
*(_DWORD *)v3 = v44 / 2; | |
} | |
if ( *(_DWORD *)(v2 + 16508) <= 4 ) | |
{ | |
v47 = 0; | |
} | |
else | |
{ | |
v45 = *(_DWORD *)v3; | |
v46 = 0; | |
v47 = 0; | |
v48 = 0; | |
do | |
{ | |
if ( *(_DWORD *)((char *)&unk_1232C + -v46 + 4) == 1 ) | |
++v48; | |
if ( v45 == *(_DWORD *)((char *)&unk_1234C + v46 + 12) | |
&& *(_DWORD *)(v3 + 4) == *(_DWORD *)((char *)&unk_1233C + v46 + 12) ) | |
++v47; | |
v49 = *(_DWORD *)(v3 + 4); | |
if ( (*(_DWORD *)v3 ^ (*(_DWORD *)v3 >> 31)) - (*(_DWORD *)v3 >> 31) == 1 && !v49 ) | |
goto LABEL_51; | |
if ( v49 < 0 ) | |
v49 = -v49; | |
if ( v49 == 1 && !v45 ) | |
{ | |
LABEL_51: | |
if ( !*(_DWORD *)((char *)&unk_1233C + v46 + 12) && !*(_DWORD *)((char *)&unk_1234C + v46 + 12) ) | |
++v47; | |
} | |
v46 -= 4; | |
} | |
while ( v46 != -12 ); | |
if ( v48 > 1 ) | |
{ | |
*(_DWORD *)v3 = 0; | |
*(_DWORD *)(v3 + 4) = 0; | |
} | |
} | |
v50 = *(_DWORD *)v3; | |
v51 = *(_DWORD *)(v3 + 4); | |
if ( v47 > 1 ) | |
{ | |
*(_DWORD *)v3 = 0; | |
*(_DWORD *)(v3 + 4) = 0; | |
} | |
v52 = 0; | |
result = &unk_1232C; | |
do | |
{ | |
*(_DWORD *)((char *)&unk_1232C + v52) = *(_DWORD *)((char *)&unk_1232C + v52 + 4); | |
*(_DWORD *)((char *)&unk_1234C + v52) = *(_DWORD *)((char *)&unk_1234C + v52 + 4); | |
*(_DWORD *)((char *)&unk_1233C + v52) = *(_DWORD *)((char *)&unk_1233C + v52 + 4); | |
v52 += 4; | |
} | |
while ( v52 != 12 ); | |
dword_12338 = v41; | |
dword_12358 = v50; | |
dword_12348 = v51; | |
return result; | |
} | |
// 12338: using guessed type int dword_12338; | |
// 12348: using guessed type int dword_12348; | |
// 12358: using guessed type int dword_12358; | |
// F478: using guessed type char var_168[160]; | |
// F478: using guessed type char var_C8[160]; | |
//----- (0000F848) -------------------------------------------------------- | |
signed int __fastcall dis_execute(int a1, int a2) | |
{ | |
signed int result; // r0@2 | |
if ( a2 ) | |
result = 0; | |
else | |
result = 3; | |
return result; | |
} | |
//----- (0000F854) -------------------------------------------------------- | |
signed int __fastcall afd_init(unsigned int *a1) | |
{ | |
unsigned int *v1; // r5@1 | |
unsigned int v2; // r6@1 | |
signed int result; // r0@2 | |
void *v4; // r0@3 | |
int v5; // r4@4 | |
v1 = a1; | |
v2 = *(_BYTE *)a1; | |
if ( v2 <= 7 && (v4 = malloc(0x2E80u), (dword_1235C[v2] = v4) != 0) ) | |
{ | |
v5 = (int)((char *)v4 + 11840); | |
memset(v4, 0, 0x2E80u); | |
*(_DWORD *)(v5 + 36) = 4; | |
result = 0; | |
v1[197] = 0; | |
} | |
else | |
{ | |
result = -1; | |
} | |
return result; | |
} | |
//----- (0000F898) -------------------------------------------------------- | |
signed int afd_get_params() | |
{ | |
_android_log_print(6, 0, "Invalid AFD Get Params Type"); | |
return -1; | |
} | |
// 1AEC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...); | |
//----- (0000F8B0) -------------------------------------------------------- | |
signed int __fastcall afd_set_params(int a1, int a2) | |
{ | |
int v2; // r4@1 | |
int v3; // r3@1 | |
int v4; // r1@1 | |
int v5; // r0@3 | |
int v6; // r2@5 | |
signed int result; // r0@5 | |
int v8; // r1@5 | |
signed int v9; // r3@7 | |
v2 = a2; | |
v3 = a1; | |
v4 = dword_1235C[*(_BYTE *)a1]; | |
if ( !*(_DWORD *)v2 ) | |
{ | |
if ( !*(_DWORD *)(v4 + 11900) ) | |
afd_reset(a1, v4); | |
return 0; | |
} | |
if ( *(_DWORD *)v2 != 1 ) | |
return -1; | |
v5 = *(_DWORD *)(v2 + 8); | |
if ( *(_DWORD *)(v4 + 11900) && v5 ) | |
return 0; | |
v6 = v4 + 11840; | |
*(_DWORD *)(v6 + 60) = v5; | |
*(_DWORD *)(v3 + 780) = *(_DWORD *)(v2 + 8); | |
*(_DWORD *)(v6 + 36) = 8; | |
result = 0; | |
*(_DWORD *)(v6 + 48) = 0; | |
*(_DWORD *)(v6 + 40) = *(_DWORD *)(v2 + 4); | |
*(_DWORD *)v4 = -3; | |
v8 = *(_DWORD *)(v2 + 4); | |
if ( v8 == 5 ) | |
{ | |
*(_DWORD *)(v3 + 788) = 3; | |
*(_DWORD *)(v3 + 784) = 1; | |
v9 = 50; | |
goto LABEL_9; | |
} | |
if ( v8 == 6 ) | |
{ | |
*(_DWORD *)(v3 + 788) = 2; | |
*(_DWORD *)(v3 + 784) = 2; | |
v9 = 60; | |
LABEL_9: | |
*(_DWORD *)(v6 + 28) = v9; | |
return result; | |
} | |
*(_DWORD *)(v3 + 784) = 0; | |
*(_DWORD *)(v3 + 788) = 1; | |
*(_DWORD *)(v6 + 28) = 0; | |
return result; | |
} | |
//----- (0000F94C) -------------------------------------------------------- | |
signed int __fastcall afd_process(int a1) | |
{ | |
int v1; // r4@1 | |
int v2; // r5@1 | |
signed int result; // r0@2 | |
int v4; // r1@4 | |
int v5; // r7@5 | |
v1 = a1; | |
v2 = dword_1235C[*(_BYTE *)a1]; | |
if ( !*(_DWORD *)(v2 + 11900) ) | |
return 0; | |
if ( *(_DWORD *)(v2 + 11888) ) | |
{ | |
v4 = *(_DWORD *)(v2 + 11892) + 1; | |
*(_DWORD *)(v2 + 11892) = v4; | |
if ( v4 <= 45 ) | |
return 0; | |
v5 = *(_DWORD *)(a1 + 784); | |
afd_reset(a1, v2); | |
*(_DWORD *)(v1 + 780) = 1; | |
*(_DWORD *)(v1 + 784) = v5; | |
*(_DWORD *)(v2 + 11876) = 5; | |
*(_DWORD *)(v2 + 11888) = 0; | |
} | |
result = *(_DWORD *)(v1 + 780); | |
if ( result ) | |
{ | |
result = afd_algo_run(v1, v2); | |
if ( *(_DWORD *)(v2 + 11876) == 7 ) | |
{ | |
*(_DWORD *)(v1 + 780) = 0; | |
*(_DWORD *)(v2 + 11892) = 0; | |
*(_DWORD *)(v2 + 11876) = 4; | |
*(_DWORD *)(v2 + 11888) = 1; | |
} | |
} | |
if ( *(_DWORD *)(v1 + 792) ) | |
{ | |
*(_DWORD *)(v1 + 1680) = *(_DWORD *)(v2 + 11876); | |
*(_DWORD *)(v1 + 1676) = *(_DWORD *)(v2 + 11848); | |
*(_DWORD *)(v1 + 1684) = *(_DWORD *)(v2 + 11864); | |
*(_DWORD *)(v1 + 1672) = *(_DWORD *)(v2 + 308); | |
*(_DWORD *)(v1 + 1668) = *(_DWORD *)(v2 + 11872); | |
*(_DWORD *)(v1 + 1664) = *(_DWORD *)(v2 + 11868); | |
} | |
return result; | |
} | |
//----- (0000F9F0) -------------------------------------------------------- | |
void __fastcall afd_deinit(unsigned int *a1) | |
{ | |
unsigned int v1; // r4@1 | |
void *v2; // r0@2 | |
v1 = *(_BYTE *)a1; | |
if ( v1 <= 7 ) | |
{ | |
v2 = (void *)dword_1235C[v1]; | |
if ( v2 ) | |
{ | |
free(v2); | |
dword_1235C[v1] = 0; | |
} | |
} | |
} | |
//----- (0000FA14) -------------------------------------------------------- | |
bool __fastcall sub_FA14(int a1, int a2) | |
{ | |
int v2; // r4@1 | |
int v3; // r3@1 | |
bool result; // r0@1 | |
unsigned int v5; // r2@4 | |
unsigned int v6; // r1@4 | |
v2 = a2 + 11840; | |
v3 = a1; | |
result = *(_DWORD *)(a2 + 11856); | |
if ( result ) | |
{ | |
result = 0; | |
} | |
else if ( *(_DWORD *)a2 > 1 ) | |
{ | |
*(_DWORD *)a2 = 0; | |
v5 = *(_DWORD *)(v3 + 80); | |
v6 = *(_DWORD *)(v3 + 92); | |
if ( v5 >= v6 || *(_DWORD *)(v3 + 848) < *(_DWORD *)v2 && v5 >= v6 >> 1 ) | |
result = *(_DWORD *)(v3 + 848) > 0x15Eu; | |
} | |
else | |
{ | |
++*(_DWORD *)a2; | |
} | |
return result; | |
} | |
//----- (0000FA5C) -------------------------------------------------------- | |
signed int __fastcall sub_FA5C(int a1, int a2) | |
{ | |
int v6; // r3@1 | |
int v7; // r2@1 | |
signed int v10; // r4@1 | |
int v11; // r3@1 | |
signed int v12; // r0@3 | |
int v13; // r2@3 | |
int v14; // r3@5 | |
int v15; // r5@6 | |
int v16; // r2@6 | |
signed int result; // r0@9 | |
__asm { VLDR S15, =256.0 } | |
v6 = a2 + 11840; | |
__asm { VLDR S4, =800.0 } | |
v7 = *(_DWORD *)(a1 + 76); | |
*(_DWORD *)(v6 + 12) = 3; | |
_R5 = v7 + 48640; | |
*(_DWORD *)(a2 + 304) = 213; | |
*(_DWORD *)(a2 + 308) = 0; | |
__asm | |
{ | |
VLDR S14, [R5,#0x3C] | |
VMUL.F32 S0, S14, S15 | |
VCVTR.S32.F32 S1, S0 | |
VSTR S1, [R1,#0x138] | |
} | |
_R5 = 640 * *(_DWORD *)(v7 + 48708); | |
__asm | |
{ | |
VMOV S2, R5 | |
VCVT.F32.U32 S3, S2 | |
VDIV.F32 S5, S3, S4 | |
VCVTR.S32.F32 S6, S5 | |
VSTR S6, [R4,#0x3C] | |
} | |
*(_DWORD *)v6 = 6000; | |
*(_DWORD *)(v6 + 4) = 30; | |
v10 = 8; | |
v11 = a2; | |
do | |
{ | |
*(_DWORD *)(v11 + 4) = 0; | |
*(_DWORD *)(v11 + 36) = 0; | |
*(_DWORD *)(v11 + 68) = 0; | |
*(_DWORD *)(v11 + 100) = 0; | |
*(_DWORD *)(v11 + 132) = 0; | |
v11 += 4; | |
--v10; | |
} | |
while ( v10 ); | |
v12 = 7; | |
v13 = a2; | |
do | |
{ | |
*(_DWORD *)(v13 + 164) = 0; | |
*(_DWORD *)(v13 + 192) = 0; | |
*(_DWORD *)(v13 + 220) = 0; | |
*(_DWORD *)(v13 + 248) = 0; | |
*(_DWORD *)(v13 + 276) = 0; | |
v13 += 4; | |
--v12; | |
} | |
while ( v12 ); | |
v14 = 0; | |
do | |
{ | |
v16 = 0; | |
do | |
{ | |
v15 = a2 + v14 + v16; | |
v16 += 4; | |
*(_DWORD *)(v15 + 316) = 0; | |
} | |
while ( v16 != 852 ); | |
v14 += 1920; | |
} | |
while ( v14 != 11520 ); | |
result = -1; | |
*(_DWORD *)(a2 + 11848) = -1; | |
return result; | |
} | |
//----- (0000FB2C) -------------------------------------------------------- | |
int __fastcall afd_reset(int result, int a2) | |
{ | |
int v2; // r2@1 | |
v2 = a2 + 11840; | |
*(_DWORD *)(v2 + 16) = 0; | |
*(_DWORD *)(v2 + 36) = 4; | |
*(_DWORD *)(result + 788) = 0; | |
*(_DWORD *)(result + 784) = 0; | |
*(_DWORD *)a2 = 0; | |
*(_DWORD *)(v2 + 20) = 0; | |
*(_DWORD *)(v2 + 44) = 0; | |
return result; | |
} | |
//----- (0000FB4C) -------------------------------------------------------- | |
signed int __fastcall afd_algo_run(int a1, int a2) | |
{ | |
int v2; // r6@1 | |
int v3; // r5@1 | |
int v4; // r4@1 | |
int v5; // r3@1 | |
signed int result; // r0@5 | |
int v7; // r2@15 | |
signed int v8; // r1@16 | |
signed int v9; // r6@24 | |
signed int v10; // r0@31 | |
signed int v11; // r1@37 | |
int v12; // r7@37 | |
int v13; // r10@37 | |
FILE *v14; // r0@37 | |
int v15; // r1@37 | |
FILE *v16; // r8@37 | |
int v17; // r6@37 | |
const char *v18; // r3@37 | |
int v19; // r12@38 | |
const char *v20; // ST14_4@38 | |
int v21; // r11@39 | |
signed int v22; // r2@40 | |
int v23; // r3@40 | |
int i; // r1@44 | |
int v25; // r3@49 | |
signed int v26; // r1@49 | |
const char *v27; // r2@50 | |
int v28; // r11@51 | |
size_t v29; // r8@52 | |
void *v30; // r0@52 | |
void *v31; // r7@52 | |
void *v32; // r0@54 | |
void *v33; // r6@54 | |
int v34; // r3@57 | |
int v35; // r2@58 | |
signed int v36; // r1@58 | |
signed int v37; // r12@59 | |
int v38; // r2@61 | |
int j; // r2@63 | |
int k; // r10@66 | |
int v41; // r2@67 | |
signed int v42; // r9@70 | |
int v43; // r8@70 | |
signed int l; // r1@72 | |
int v45; // r1@78 | |
signed int v46; // r2@78 | |
int v47; // r2@84 | |
signed int v48; // r0@84 | |
signed int v49; // r2@87 | |
int v50; // r10@87 | |
signed int v51; // r8@87 | |
int v52; // r0@89 | |
int v53; // r11@90 | |
signed int v54; // r1@90 | |
int v55; // r0@106 | |
int v56; // r12@107 | |
int v57; // r3@117 | |
int v58; // r8@118 | |
size_t v59; // r10@118 | |
void *v60; // r0@118 | |
void *v61; // r7@118 | |
int v62; // r6@119 | |
int v63; // r11@119 | |
int v65; // lr@119 | |
int v73; // r12@121 | |
signed int v74; // r0@132 | |
bool v75; // r0@134 | |
int v77; // r3@137 | |
int v81; // r1@143 | |
signed int v82; // r0@147 | |
int v83; // r2@148 | |
const char *v84; // r2@148 | |
int v85; // r3@148 | |
signed int v86; // r0@149 | |
int v87; // r2@153 | |
signed int v88; // r0@158 | |
int v89; // r3@164 | |
int v90; // r4@166 | |
int v91; // [sp+0h] [bp-118h]@148 | |
int v92; // [sp+4h] [bp-114h]@148 | |
int v93; // [sp+8h] [bp-110h]@148 | |
int v94; // [sp+18h] [bp-100h]@97 | |
signed int v95; // [sp+1Ch] [bp-FCh]@49 | |
int v96; // [sp+20h] [bp-F8h]@57 | |
int *v97; // [sp+28h] [bp-F0h]@57 | |
int v98; // [sp+2Ch] [bp-ECh]@57 | |
int v99; // [sp+30h] [bp-E8h]@57 | |
signed int v100; // [sp+3Ch] [bp-DCh]@57 | |
int v101; // [sp+40h] [bp-D8h]@57 | |
int v102; // [sp+44h] [bp-D4h]@57 | |
int v103; // [sp+48h] [bp-D0h]@57 | |
int v104; // [sp+4Ch] [bp-CCh]@1 | |
int v105; // [sp+50h] [bp-C8h]@107 | |
int v106; // [sp+54h] [bp-C4h]@107 | |
int v107; // [sp+58h] [bp-C0h]@109 | |
int v108; // [sp+5Ch] [bp-BCh]@111 | |
int v109; // [sp+60h] [bp-B8h]@113 | |
char v110; // [sp+64h] [bp-B4h]@37 | |
int v111; // [sp+E4h] [bp-34h]@1 | |
v2 = a2 + 11840; | |
v3 = a1; | |
v4 = a2; | |
v104 = (int)&_stack_chk_guard; | |
v111 = _stack_chk_guard; | |
v5 = *(_DWORD *)(a2 + 11876); | |
if ( v5 == 7 ) | |
{ | |
_android_log_print(6, 0, "%s :DONE with AFD", "afd_algo_run"); | |
goto LABEL_5; | |
} | |
if ( v5 == 8 ) | |
{ | |
if ( *(_DWORD *)(a1 + 828) ) | |
{ | |
sub_FA5C(a1, a2); | |
if ( sub_FA14(v3, v4) ) | |
{ | |
result = 0; | |
*(_DWORD *)(v2 + 36) = 5; | |
*(_DWORD *)(v2 + 56) = 0; | |
goto LABEL_169; | |
} | |
goto LABEL_168; | |
} | |
goto LABEL_5; | |
} | |
if ( !*(_DWORD *)(a1 + 788) ) | |
{ | |
if ( !*(_DWORD *)(a1 + 828) ) | |
goto LABEL_5; | |
sub_FA5C(a1, a2); | |
if ( !sub_FA14(v3, v4) ) | |
goto LABEL_168; | |
} | |
if ( *(_DWORD *)(v3 + 1104) ) | |
goto LABEL_168; | |
if ( !*(_DWORD *)(v4 + 11896) ) | |
{ | |
*(_DWORD *)(v4 + 11868) = 0; | |
goto LABEL_24; | |
} | |
v7 = *(_DWORD *)(v4 + 11868); | |
if ( v7 == 60 ) | |
{ | |
v8 = 2; | |
*(_DWORD *)(v3 + 788) = 2; | |
} | |
else | |
{ | |
if ( v7 != 50 ) | |
{ | |
if ( !v7 ) | |
{ | |
*(_DWORD *)(v3 + 784) = 0; | |
*(_DWORD *)(v3 + 788) = 1; | |
} | |
goto LABEL_22; | |
} | |
v8 = 1; | |
*(_DWORD *)(v3 + 788) = 3; | |
} | |
*(_DWORD *)(v3 + 784) = v8; | |
LABEL_22: | |
*(_DWORD *)v4 = -3; | |
*(_DWORD *)(v4 + 11896) = 0; | |
LABEL_24: | |
v9 = *(_DWORD *)(v3 + 788); | |
if ( !v9 ) | |
{ | |
if ( *(_DWORD *)(v3 + 828) ) | |
{ | |
sub_FA5C(v3, v4); | |
if ( sub_FA14(v3, v4) ) | |
{ | |
*(_DWORD *)(v3 + 788) = 1; | |
*(_DWORD *)v4 = -3; | |
*(_DWORD *)(v3 + 784) = 0; | |
} | |
goto LABEL_168; | |
} | |
LABEL_5: | |
result = -1; | |
goto LABEL_169; | |
} | |
if ( v9 < 0 || v9 > 3 ) | |
goto LABEL_168; | |
v10 = *(_DWORD *)v4; | |
if ( *(_DWORD *)v4 < 0 ) | |
{ | |
*(_DWORD *)v4 = v10 + 1; | |
goto LABEL_166; | |
} | |
if ( !*(_DWORD *)(v4 + 11860) && !v10 ) | |
{ | |
*(_DWORD *)(v4 + 11860) = 1; | |
goto LABEL_166; | |
} | |
if ( v10 <= 5 ) | |
{ | |
v11 = *(_DWORD *)(v4 + 11852); | |
*(_DWORD *)(v4 + 11860) = 0; | |
v12 = 480 / v11; | |
v13 = *(_DWORD *)(v3 + 52) / 160; | |
_sprintf_chk(&v110, 0, 128, "/data/RS_%d.log"); | |
v14 = fopen(&v110, "wt"); | |
v15 = 0; | |
v16 = v14; | |
++dword_1237C; | |
v17 = 0; | |
v18 = "%d\n"; | |
while ( 1 ) | |
{ | |
v21 = v15 + v13; | |
if ( v17 >= v12 ) | |
break; | |
*(_DWORD *)(v4 + 4 * (v17 + 480 * *(_DWORD *)v4) + 316) = *(_DWORD *)(*(_DWORD *)(v3 + 60) + 4 * (v15 + 1298) + 4); | |
v19 = v17++ + 480 * *(_DWORD *)v4; | |
v20 = v18; | |
fprintf(v16, v18, *(_DWORD *)(v4 + 4 * v19 + 316)); | |
v18 = v20; | |
v15 = v21; | |
} | |
fclose(v16); | |
v22 = *(_DWORD *)v4; | |
v23 = 0; | |
if ( *(_DWORD *)v4 > 0 ) | |
{ | |
for ( i = 0; i < v12; ++i ) | |
{ | |
if ( *(_DWORD *)(v4 + 4 * ((v12 & ~(v12 >> 31)) + 480 * v22) + 316) > *(_DWORD *)(v4 | |
+ 4 | |
* ((v12 & ~(v12 >> 31)) | |
+ 480 * (v22 - 1) | |
+ 78) | |
+ 4) ) | |
++v23; | |
} | |
} | |
if ( v23 != v12 + 1 ) | |
*(_DWORD *)v4 = v22 + 1; | |
goto LABEL_166; | |
} | |
v25 = *(_DWORD *)(v4 + 11884); | |
*(_DWORD *)(v4 + 11884) = v25 + 1; | |
_android_log_print( | |
6, | |
0, | |
"%s: try cnt= %d, freq = %d afd_mode = %d", | |
"afd_algo_run", | |
v25 + 1, | |
*(_DWORD *)(v4 + 11868), | |
*(_DWORD *)(v4 + 11880)); | |
*(_DWORD *)v4 = 6; | |
*(_DWORD *)(v4 + 11864) = 0; | |
v26 = *(_DWORD *)(v3 + 80); | |
v95 = *(_DWORD *)(v4 + 304); | |
if ( !v26 ) | |
{ | |
v27 = "frame_rate 0"; | |
LABEL_56: | |
_android_log_print(6, v26, v27); | |
goto LABEL_117; | |
} | |
v28 = 7864320 / v26; | |
if ( 7864320 / v26 <= 255 ) | |
goto LABEL_117; | |
v29 = 4 * v95; | |
v30 = malloc(4 * v95); | |
v31 = v30; | |
if ( !v30 ) | |
{ | |
v26 = (signed int)v30; | |
v27 = "sum1 == NULL"; | |
goto LABEL_56; | |
} | |
memset(v30, 0, v29); | |
v32 = malloc(v29); | |
v33 = v32; | |
if ( !v32 ) | |
{ | |
free(v31); | |
v26 = (signed int)v33; | |
v27 = "sum2 == NULL"; | |
goto LABEL_56; | |
} | |
memset(v32, 0, v29); | |
v101 = v28 >> 8; | |
v102 = (int)((char *)v33 + v29); | |
v97 = &v104; | |
v34 = 0; | |
v100 = v28 << 12; | |
v98 = v4; | |
v103 = (int)((char *)v31 + v29); | |
v96 = 0; | |
v99 = v95 - 4; | |
do | |
{ | |
v35 = 0; | |
v97[1] = 0; | |
v36 = 0; | |
while ( v36 < v95 ) | |
{ | |
++v36; | |
v37 = *(_DWORD *)(v98 + v35 + 316) - *(_DWORD *)(v98 + v35 + 2236); | |
*(_DWORD *)((char *)v33 + v35) = v37 & ~(v37 >> 31); | |
v35 += 4; | |
} | |
v38 = 0; | |
do | |
{ | |
*(_DWORD *)((char *)v31 + v38) = *(_DWORD *)((char *)v33 + v38); | |
v38 += 4; | |
} | |
while ( v38 != 16 ); | |
for ( j = 0; ; *(_DWORD *)(v103 + j - 20) = *(_DWORD *)(v102 + j - 20) ) | |
{ | |
j += 4; | |
if ( j == 20 ) | |
break; | |
} | |
for ( k = 0; k < (-480 / v95 + 10) / 2; ++k ) | |
{ | |
v43 = (int)((char *)v31 + 12); | |
v42 = 4; | |
while ( v42 < v99 ) | |
{ | |
v41 = 0; | |
for ( *(_DWORD *)(v43 + 4) = 0; ; *(_DWORD *)(v43 + 4) += *(_DWORD *)((char *)v33 + 4 * v42 + v41 - 20) ) | |
{ | |
v41 += 4; | |
if ( v41 == 40 ) | |
break; | |
} | |
++v42; | |
*(_DWORD *)(v43 + 4) = (*(_DWORD *)(v43 + 4) + 4) / 9; | |
v43 += 4; | |
} | |
for ( l = 4; l < v99; ++l ) | |
*((_DWORD *)v33 + l) = *((_DWORD *)v31 + l); | |
} | |
v46 = 0; | |
while ( v46 < v95 ) | |
{ | |
v45 = *((_DWORD *)v31 + v46++); | |
if ( v34 < v45 ) | |
v34 = v45; | |
} | |
if ( v34 >= (*(_DWORD *)(v4 + 11836) << 12) / 4096 ) | |
{ | |
v47 = 0; | |
v48 = 1; | |
v34 = 25 * v34 >> 8; | |
while ( 1 ) | |
{ | |
v47 += 4; | |
if ( v48 >= v95 ) | |
break; | |
++v48; | |
*(_DWORD *)((char *)v33 + v47) = *(_DWORD *)((char *)v31 + v47 - 4) - *(_DWORD *)((char *)v31 + v47); | |
} | |
v49 = -1; | |
v50 = 0; | |
v51 = -1; | |
while ( 1 ) | |
{ | |
if ( v50 >= v95 - 1 ) | |
goto LABEL_106; | |
if ( v51 >= v101 ) | |
{ | |
v50 = v95 - 1; | |
} | |
else | |
{ | |
v52 = *((_DWORD *)v33 + v50); | |
if ( v52 <= 0 ) | |
{ | |
v53 = v50 + 1; | |
v54 = *((_DWORD *)v33 + v50 + 1); | |
if ( v54 >= 0 && *((_DWORD *)v31 + v50) > v34 ) | |
{ | |
if ( v54 ) | |
{ | |
if ( v52 ) | |
v53 = -256 * v52 / v54 / (-256 * v52 / v54 + 256) + v50; | |
else | |
v53 = v50; | |
} | |
if ( v49 == -1 ) | |
{ | |
LABEL_99: | |
++v51; | |
} | |
else | |
{ | |
v94 = v53 - v49 + 1; | |
if ( v94 > (v95 << 20) / v100 ) | |
{ | |
*(_DWORD *)(v4 + 4 * (7 * v96 + v51) + 164) = v94; | |
goto LABEL_99; | |
} | |
} | |
*(_DWORD *)(v4 + 4 * (8 * v96 + v51) + 4) = v53; | |
v49 = v53; | |
goto LABEL_102; | |
} | |
} | |
} | |
LABEL_102: | |
++v50; | |
} | |
} | |
v51 = -1; | |
LABEL_106: | |
v55 = v96; | |
v97[1] = v51 + 1; | |
++v96; | |
++v97; | |
v98 += 1920; | |
} | |
while ( v55 != 4 ); | |
v56 = v105 & ~(v105 >> 31); | |
if ( v56 < v106 ) | |
v56 = v106; | |
if ( v56 < v107 ) | |
v56 = v107; | |
if ( v56 < v108 ) | |
v56 = v108; | |
if ( v56 < v109 ) | |
*(_DWORD *)(v4 + 308) = v109; | |
else | |
*(_DWORD *)(v4 + 308) = v56; | |
free(v31); | |
free(v33); | |
LABEL_117: | |
v57 = *(_DWORD *)(v4 + 308); | |
if ( v57 && (v58 = v57 - 1, v59 = 20 * (v57 - 1), v60 = malloc(20 * (v57 - 1)), (v61 = v60) != 0) ) | |
{ | |
*(_DWORD *)(v4 + 11872) = 0; | |
v62 = v4 + 11872; | |
v63 = 0; | |
memset(v60, 0, v59); | |
HIDWORD(_R0) = 0; | |
v65 = v4; | |
_R9 = 1000; | |
_R2 = 0; | |
__asm { VLDR S15, =0.0 } | |
do | |
{ | |
for ( LODWORD(_R0) = 0; SLODWORD(_R0) < v58; ++LODWORD(_R0) ) | |
{ | |
_R3 = *(_DWORD *)(v65 + 4 * LODWORD(_R0) + 164); | |
if ( _R3 ) | |
{ | |
__asm | |
{ | |
VMOV S14, R3 | |
VCVT.F32.S32 S1, S14 | |
} | |
v73 = *(_DWORD *)v62; | |
if ( _R3 < _R9 ) | |
{ | |
_R9 = *(_DWORD *)(v65 + 4 * LODWORD(_R0) + 164); | |
HIDWORD(_R0) = *(_DWORD *)v62; | |
} | |
*((_DWORD *)v61 + v73) = _R3; | |
if ( _R3 <= _R2 ) | |
_R3 = _R2; | |
__asm { VADD.F32 S15, S15, S1 } | |
if ( (unsigned __int8)(_NF ^ _VF) | _ZF ) | |
v73 = v63; | |
v63 = v73; | |
++*(_DWORD *)v62; | |
_R2 = _R3; | |
} | |
} | |
v65 += 28; | |
} | |
while ( v65 != v4 + 140 ); | |
v74 = *(_DWORD *)(v4 + 11872); | |
if ( v74 <= 5 ) | |
{ | |
free(v61); | |
goto LABEL_134; | |
} | |
__asm | |
{ | |
VMOV S13, R2 | |
VCVT.F32.S32 S16, S13 | |
} | |
_R6 = v74 - 2; | |
__asm | |
{ | |
VMOV S2, R6 | |
VLDR S5, =0.0 | |
VSUB.F32 S0, S15, S16 | |
VMOV S15, R9 | |
VCVT.F32.S32 S14, S15 | |
VSUB.F32 S1, S0, S14 | |
VCVT.F32.S32 S3, S2 | |
VDIV.F32 S16, S1, S3 | |
VMOV.F32 S4, #1.0 | |
VCMP.F32 S16, #0.0 | |
VMRS APSR_nzcv, FPSCR | |
} | |
if ( _ZF ) | |
__asm { VMOVEQ.F32 S16, S4 } | |
v77 = 0; | |
do | |
{ | |
if ( v77 != v63 && v77 != HIDWORD(_R0) ) | |
{ | |
_R2 = *((_DWORD *)v61 + v77); | |
__asm | |
{ | |
VMOV S12, R2 | |
VCVT.F32.S32 S6, S12 | |
VSUB.F32 S7, S6, S16 | |
VMLA.F32 S5, S7, S7 | |
} | |
} | |
++v77; | |
} | |
while ( v77 != v74 ); | |
__asm | |
{ | |
VDIV.F32 S8, S5, S3 | |
VCVT.F64.F32 D5, S8 | |
VMOV R0, R1, D5 | |
} | |
_R0 = COERCE_UNSIGNED_INT64(pow(_R0, 0.5)); | |
__asm | |
{ | |
VLDR S13, =256.0 | |
VMOV D16, R0, R1 | |
VCVT.F32.F64 S9, D16 | |
VDIV.F32 S11, S9, S16 | |
VMUL.F32 S0, S11, S13 | |
VCVTR.S32.F32 S16, S0 | |
VSTR S16, [R1,#8] | |
VMOV R6, S16 | |
} | |
free(v61); | |
v75 = _R6 < *(_DWORD *)(v4 + 312); | |
} | |
else | |
{ | |
LABEL_134: | |
v75 = 0; | |
} | |
*(_DWORD *)(v4 + 11864) = v75; | |
v81 = *(_DWORD *)(v3 + 788); | |
if ( !v75 ) | |
{ | |
if ( v81 == 2 ) | |
{ | |
v88 = 60; | |
} | |
else | |
{ | |
if ( v81 != 3 ) | |
{ | |
if ( v81 == 1 ) | |
*(_DWORD *)(v4 + 11868) = 0; | |
goto LABEL_164; | |
} | |
v88 = 50; | |
} | |
*(_DWORD *)(v4 + 11868) = v88; | |
LABEL_164: | |
v89 = v4 + 11840; | |
*(_DWORD *)(v3 + 788) = 0; | |
*(_DWORD *)v4 = 0; | |
*(_DWORD *)(v89 + 16) = 1; | |
*(_DWORD *)(v89 + 36) = 7; | |
*(_DWORD *)(v89 + 56) = 1; | |
goto LABEL_165; | |
} | |
if ( v81 == 1 ) | |
goto LABEL_155; | |
if ( v81 != 2 ) | |
{ | |
if ( v81 != 3 ) | |
goto LABEL_165; | |
if ( *(_DWORD *)(v4 + 11884) > 2 && *(_DWORD *)(v4 + 11880) == 5 ) | |
{ | |
*(_DWORD *)(v4 + 11868) = 50; | |
*(_DWORD *)(v3 + 788) = 0; | |
*(_DWORD *)v4 = 0; | |
*(_DWORD *)(v4 + 11856) = 1; | |
*(_DWORD *)(v4 + 11896) = 1; | |
v87 = *(_DWORD *)(v4 + 11884); | |
*(_DWORD *)(v4 + 11876) = 7; | |
v91 = v87; | |
v92 = *(_DWORD *)(v4 + 11868); | |
v84 = "%s: over try cnt= %d, freq = %d afd_mode = %d"; | |
v82 = 6; | |
v93 = *(_DWORD *)(v4 + 11880); | |
v85 = (int)"afd_algo_run"; | |
LABEL_154: | |
_android_log_print(v82, 0, v84, v85, v91, v92, v93); | |
goto LABEL_165; | |
} | |
LABEL_155: | |
v86 = 2; | |
*(_DWORD *)(v3 + 788) = 2; | |
goto LABEL_156; | |
} | |
if ( *(_DWORD *)(v4 + 11884) > 2 ) | |
{ | |
v82 = *(_DWORD *)(v4 + 11880); | |
if ( v82 == 6 ) | |
{ | |
*(_DWORD *)(v4 + 11868) = 60; | |
*(_DWORD *)(v3 + 788) = 0; | |
*(_DWORD *)v4 = 0; | |
*(_DWORD *)(v4 + 11856) = 1; | |
*(_DWORD *)(v4 + 11896) = 1; | |
v83 = *(_DWORD *)(v4 + 11884); | |
*(_DWORD *)(v4 + 11876) = 7; | |
v91 = v83; | |
v92 = *(_DWORD *)(v4 + 11868); | |
v93 = *(_DWORD *)(v4 + 11880); | |
v84 = "%s: over try cnt= %d, freq = %d afd_mode = %d"; | |
v85 = (int)"afd_algo_run"; | |
goto LABEL_154; | |
} | |
} | |
v86 = 1; | |
*(_DWORD *)(v3 + 788) = 3; | |
LABEL_156: | |
*(_DWORD *)(v3 + 784) = v86; | |
*(_DWORD *)v4 = -3; | |
LABEL_165: | |
sub_FA5C(v3, v4); | |
LABEL_166: | |
v90 = v4 + 11840; | |
result = *(_DWORD *)(v90 + 16); | |
if ( !result ) | |
{ | |
*(_DWORD *)(v90 + 36) = 5; | |
goto LABEL_169; | |
} | |
LABEL_168: | |
result = 0; | |
LABEL_169: | |
if ( v111 != *(_DWORD *)v104 ) | |
_stack_chk_fail(result); | |
return result; | |
} | |
// 1AEC: using guessed type int _android_log_print(_DWORD, _DWORD, const char *, ...); | |
// 1B4C: using guessed type int __fastcall _stack_chk_fail(_DWORD); | |
// 1BAC: using guessed type int _sprintf_chk(_DWORD, _DWORD, _DWORD, const char *, ...); | |
// 1237C: using guessed type int dword_1237C; | |
//----- (00010350) -------------------------------------------------------- | |
void j_j_free(void *a1) | |
{ | |
j_free(a1); | |
} | |
//----- (00010354) -------------------------------------------------------- | |
void j_free(void *a1) | |
{ | |
free(a1); | |
} | |
//----- (00010360) -------------------------------------------------------- | |
void *j_j_memset(void *a1, int a2, size_t a3) | |
{ | |
return j_memset(a1, a2, a3); | |
} | |
//----- (00010364) -------------------------------------------------------- | |
void *j_memset(void *a1, int a2, size_t a3) | |
{ | |
return memset(a1, a2, a3); | |
} | |
// ALL OK, 153 function(s) have been successfully decompiled |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment