CSPspEmu.Hle.Formats.audio.At3.MaiAT3PlusCoreDecoder.MAPCDDF_initMDataTable C# (CSharp) Method

MAPCDDF_initMDataTable() private method

private MAPCDDF_initMDataTable ( MaiAT3PlusCoreDecoderChnInfo chn_infos, float pptablef0, uint chns ) : int
chn_infos MaiAT3PlusCoreDecoderChnInfo
pptablef0 float
chns uint
return int
        int MAPCDDF_initMDataTable(MaiAT3PlusCoreDecoderChnInfo[] chn_infos, float** pptablef0, uint chns)
        {
            fixed (uint* _table_tmp0 = table_tmp0_o)
            fixed (uint* _table_tmp1 = table_tmp1_o)
            fixed (uint* table_search0 = table_search0_o)
            fixed (uint* table_search1 = table_search1_o)
            {
                var table_tmp0 = (float*)_table_tmp0;
                var table_tmp1 = (float*)_table_tmp1;

                int rs = 0;
                short* l136 = stackalloc short[0x10];

                {
                    short l0 = 0;

                    for (uint a00 = 0; a00 < chns; a00++)
                    {
                        for (uint a0 = 0; a0 < chn_infos[0].joint_chn_info.num_band_splited_used; a0++)
                        {
                            l0 += (short)chn_infos[a00].table1[a0];
                        }
                    }

                    l0 &= 0x3fc;

                    for (uint a0 = 0; a0 < chn_infos[0].joint_chn_info.num_band_used; a0++)
                    {
                        l136[a0] = l0;
                        l0 += 0x80;
                        l0 &= 0x3fc;
                    }
                }

                if (chns == 2)
                {
                    for (uint a0 = 0; a0 < chn_infos[0].joint_chn_info.num_band_splited_used; a0++)
                    {
                        if (chn_infos[1].table0[a0] == 0)
                        {
                            if (chn_infos[0].table0[a0] != 0)
                            {
                                for (uint a1 = 0; a1 < table_search1[a0]; a1++)
                                {
                                    chn_infos[1].table3[table_search0[a0] + a1] =
                                        chn_infos[0].table3[table_search0[a0] + a1];
                                }

                                chn_infos[1].table0[a0] = chn_infos[0].table0[a0];
                            }
                        }
                    }
                }

                for (int a00 = 0; a00 < chns; a00++)
                {
                    var chn_infos_a00 = chn_infos[a00];
                    var pptablef0_a00 = pptablef0[a00];
                    fixed (uint* chn_infos_a00_table0 = chn_infos_a00.table0)
                    fixed (uint* chn_infos_a00_table1 = chn_infos_a00.table1)
                    fixed (short* chn_infos_a00_table3 = chn_infos_a00.table3)
                    {
                        for (uint a0 = 0; a0 < 0x800; a0++) pptablef0_a00[a0] = 0.0f;

                        for (uint a0 = 0; a0 < chn_infos[0].joint_chn_info.num_band_splited_used; a0++)
                        {
                            if (chn_infos_a00_table0[a0] > 0)
                            {
                                for (uint a1 = 0; a1 < table_search1[a0]; a1++)
                                {
                                    pptablef0_a00[table_search0[a0] + a1] = chn_infos_a00_table3[table_search0[a0] + a1] * table_tmp0[chn_infos_a00_table0[a0]] * table_tmp1[chn_infos_a00_table1[a0]];
                                }
                            }
                        }
                    }

                    for (uint a0 = 0; a0 < chn_infos[0].joint_chn_info.num_band_used; a0++)
                    {
                        {
                            uint[] mtmp0;

                            MaiAT3PlusCoreDecoderChnACCData acc_data1;
                            MaiAT3PlusCoreDecoderChnACCData acc_data2;
                            if ((chn_infos[0].joint_chn_info.chns != 2) || (0 == chn_infos[0].joint_chn_info.table48.data[a0]))
                            {
                                mtmp0 = chn_infos[a00].table4;

                                acc_data1 = chn_infos[a00].acc_data_old;
                                acc_data2 = chn_infos[a00].acc_data_now;
                            }
                            else
                            {
                                if (a00 == 0)
                                {
                                    mtmp0 = chn_infos[1].table4;
                                    acc_data1 = chn_infos[1].acc_data_old;
                                    acc_data2 = chn_infos[1].acc_data_now;//
                                }
                                else
                                {
                                    mtmp0 = chn_infos[0].table4;
                                    acc_data1 = chn_infos[0].acc_data_old;
                                    acc_data2 = chn_infos[0].acc_data_now;//
                                }
                            }

                            if (table_tmp3[mtmp0[table_tmp2[a0]]] > 0.0f)
                            {
                                float* l127 = stackalloc float[0x80];
                                int arg3_1 = l136[a0];
                                for (uint a1 = 0; a1 < 0x80; a1++)
                                {
                                    uint tmp0 = 0x38000000;
                                    l127[a1] = MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_static_0[arg3_1 & 0x3FF] * (*(float*)&tmp0);
                                    arg3_1++;
                                }

                                int rt0 = 0;
                                {
                                    int dl_0;
                                    if (acc_data2.table[a0].num_acc <= 0) dl_0 = 0;
                                    else dl_0 = 0 - MAPCDDF_initMDataTable_table_tmp4[acc_data2.table[a0].data1[0]];

                                    int al_0 = 0;

                                    for (int a1 = 0; a1 < acc_data1.table[a0].num_acc; a1++)
                                    {
                                        if (al_0 < (dl_0 - MAPCDDF_initMDataTable_table_tmp4[acc_data1.table[a0].data1[a1]]))
                                        {
                                            al_0 = (dl_0 - MAPCDDF_initMDataTable_table_tmp4[acc_data1.table[a0].data1[a1]]);
                                        }
                                    }

                                    for (int a1 = 0; a1 < acc_data2.table[a0].num_acc; a1++)
                                    {
                                        if (al_0 < (0 - MAPCDDF_initMDataTable_table_tmp4[acc_data2.table[a0].data1[a1]]))
                                        {
                                            al_0 = (0 - MAPCDDF_initMDataTable_table_tmp4[acc_data2.table[a0].data1[a1]]);
                                        }
                                    }

                                    rt0 = al_0;
                                }

                                int dtmp1 = (rt0 < 0) ? 0 : (1 << rt0);
                                float l128 = table_tmp3[mtmp0[table_tmp2[a0]]] / dtmp1;

                                for (uint a1 = MAPCDDF_initMDataTable_table_tmp5[a0]; a1 < MAPCDDF_initMDataTable_table_tmp6[a0]; a1++)
                                {
                                    if (chn_infos[a00].table0[a1] > 0)
                                    {
                                        float l129 = table_tmp0[chn_infos[a00].table0[a1]]
                                            * table_tmp1[chn_infos[a00].table1[a1]]
                                            * l128
                                            / (1 << (int)chn_infos[a00].table0[a1]);

                                        for (int a2 = (int)table_search0[a1], a3 = 0;
                                            a2 < table_search0[a1 + 1];
                                            a2++, a3++)
                                        {
                                            pptablef0[a00][a2] += l129 * l127[a3];
                                        }
                                    }
                                }

                            }
                        }

                    }

                }

                if (chns == 2)
                {
                    for (uint a0 = 0; a0 < chn_infos[0].joint_chn_info.num_band_used; a0++)
                    {
                        if (chn_infos[0].joint_chn_info.table48.data[a0] == 1)
                        {
                            float* l128 = stackalloc float[0x80];
                            for (uint a1 = 0; a1 < 0x80; a1++) l128[a1] = pptablef0[0][a0 * 0x80 + a1];
                            for (uint a1 = 0; a1 < 0x80; a1++) pptablef0[0][a0 * 0x80 + a1] = pptablef0[1][a0 * 0x80 + a1];
                            for (uint a1 = 0; a1 < 0x80; a1++) pptablef0[1][a0 * 0x80 + a1] = l128[a1];
                        }
                        if (chn_infos[0].joint_chn_info.table00.data[a0] == 1)
                        {
                            for (uint a1 = MAPCDDF_initMDataTable_table_tmp7[a0]; a1 < MAPCDDF_initMDataTable_table_tmp7[a0 + 1]; a1++)
                            {
                                for (int a2 = (int)table_search0[a1]; a2 < table_search0[a1 + 1]; a2++)
                                {
                                    pptablef0[1][a2] *= (-1.0f);
                                }
                            }
                        }
                    }
                }

                if (chn_infos[0].joint_chn_info.var118 == 1)
                {
                    for (uint a0 = 0; a0 < 0x800; a0++) pptablef0[0][a0] = 0.0f;
                    for (uint a0 = 0; a0 < 0x800; a0++) pptablef0[1][a0] = 0.0f;
                }

                return rs;
            }
        }
MaiAT3PlusCoreDecoder