Skip to content

Instantly share code, notes, and snippets.

@invisiblek
Created June 20, 2016 18:16
Show Gist options
  • Save invisiblek/8679c16113acc22d1fe607637f997815 to your computer and use it in GitHub Desktop.
Save invisiblek/8679c16113acc22d1fe607637f997815 to your computer and use it in GitHub Desktop.
/* 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