Mai_Status MaiWaveOutWO::enqueue(Mai_I8 *buf, Mai_U32 size, Mai_Bool is_syn) { mcs0.enter(); /*Mai_U32 buf_required = (size + sbuf_size - 1) / sbuf_size; SLBufferQueueState state; (*bufferQueueItf)->GetState(bufferQueueItf, &state); */ if ( (!is_syn) )//&& ( (sbuf_num - state.count) < buf_required ) ) { mcs0.leave(); return -1; } Mai_U32 buf_loc = 0; while ( (!is_stop) && (size) )//(buf_required) { WAVEHDR *h_now = &ppWaveHeader[sbuf_counter / sbuf_size]; if (h_now->dwFlags & WHDR_DONE) { ::waveOutUnprepareHeader(p0, h_now, sizeof(WAVEHDR)); Mai_U32 to_copy = size; if (to_copy > sbuf_size) to_copy = sbuf_size; Mai_memcpy(sbuf + sbuf_counter, buf + buf_loc, to_copy); h_now->dwBufferLength = to_copy; h_now->dwFlags = 0; ::waveOutPrepareHeader(p0, h_now, sizeof(WAVEHDR)); ::waveOutWrite(p0, h_now, sizeof(WAVEHDR)); sbuf_counter += sbuf_size; sbuf_counter %= sbuf_num * sbuf_size; buf_loc += to_copy; size -= to_copy; } else { Mai_Sleep(1); } } mcs0.leave(); return 0; }
Mai_Status MaiAT3PlusCoreDecoder::decodeACC6Inner(MaiBitReader *mbr0, MaiAT3PlusCoreDecoderChnInfo **chn_infos, Mai_U32 chns) { Mai_Status rs = 0; if (chns == 2) { Mai_memset(&chn_infos[0]->acc_table_now->inner->table_unk0, 0, sizeof(MaiAT3PlusCoreDecoderPackTable0)); Mai_memset(&chn_infos[0]->acc_table_now->inner->table_unk1, 0, sizeof(MaiAT3PlusCoreDecoderPackTable0)); Mai_memset(&chn_infos[0]->acc_table_now->inner->table_unk2, 0, sizeof(MaiAT3PlusCoreDecoderPackTable0)); } for (Mai_U32 a0 = 0; a0 < chns; a0++) { Mai_memset(chn_infos[a0]->acc_table_now->table, 0, sizeof(chn_infos[a0]->acc_table_now->table)); for (Mai_U32 a1 = 0; a1 < 0x10; a1++) { chn_infos[a0]->acc_table_now->table[a1].unk[7] = 0x20; chn_infos[a0]->acc_table_now->table[a1].unk[6] = 0; } } chn_infos[0]->acc_table_now->inner->ptr_to_use_now = chn_infos[0]->acc_table_now->inner->data; chn_infos[0]->acc_table_now->inner->unk0 = mbr0->getWithI32Buffer(1); if (chn_infos[0]->acc_table_now->inner->unk0) { chn_infos[0]->acc_table_now->inner->unk1 = mbr0->getWithI32Buffer(1); chn_infos[0]->acc_table_now->inner->unk2 = MAPCDSF_getHuffValue(&MAPCDSD_huff_table_global_11[0], mbr0) + 1; if (chns == 2) { MAPCDSF_readPackTable0(mbr0, &chn_infos[0]->acc_table_now->inner->table_unk0, chn_infos[0]->acc_table_now->inner->unk2); MAPCDSF_readPackTable0(mbr0, &chn_infos[0]->acc_table_now->inner->table_unk2, chn_infos[0]->acc_table_now->inner->unk2); MAPCDSF_readPackTable0(mbr0, &chn_infos[0]->acc_table_now->inner->table_unk1, chn_infos[0]->acc_table_now->inner->unk2); } for (Mai_U32 a0 = 0; a0 < chns; a0++) { //call 477e60 if (rs = MAPCDSF_decodeACC6InnerSub0(mbr0, chn_infos[a0])) break; } if (chns == 2) { for (Mai_I32 a0 = 0; a0 < chn_infos[0]->acc_table_now->inner->unk2; a0++) { if (chn_infos[0]->acc_table_now->inner->table_unk0.data[a0]) { /*for (Mai_I32 a1 = 0; a1 < 0xA; a1++) { chn_infos[1]->acc_table_now->table[a0].unk[a1] = chn_infos[0]->acc_table_now->table[a0].unk[a1]; //memcpy? }*/ Mai_memcpy( &chn_infos[1]->acc_table_now->table[a0], &chn_infos[0]->acc_table_now->table[a0], sizeof(MaiAT3PlusCoreDecoderChnACCTableTable)); //left to right acc5 copy 0x10 + 0x28 * a0 0x4 add zumi //left to right acc5 copy 0x14 + 0x28 * a0 0x4 add zumi //left to right acc5 copy 0x18 + 0x28 * a0 0x4 add zumi //left to right acc5 copy 0x1C + 0x28 * a0 0x4 add zumi } if (chn_infos[0]->acc_table_now->inner->table_unk2.data[a0]) { //swap? MaiAT3PlusCoreDecoderChnACCTableTable tmpbuf0; Mai_memcpy( &tmpbuf0, &chn_infos[1]->acc_table_now->table[a0], sizeof(MaiAT3PlusCoreDecoderChnACCTableTable)); Mai_memcpy( &chn_infos[1]->acc_table_now->table[a0], &chn_infos[0]->acc_table_now->table[a0], sizeof(MaiAT3PlusCoreDecoderChnACCTableTable)); Mai_memcpy( &chn_infos[0]->acc_table_now->table[a0], &tmpbuf0, sizeof(MaiAT3PlusCoreDecoderChnACCTableTable)); /* Mai_I32 tmpbuf0[0xA]; for (Mai_I32 a1 = 0; a1 < 0xA; a1++) { tmpbuf0[a1] = *(Mai_I32*)&infos.acc_struct_6_1.table0[a0 * 0x28 + a1 * 0x4]; } for (Mai_I32 a1 = 0; a1 < 0xA; a1++) { *(Mai_I32*)&infos.acc_struct_6_1.table0[a0 * 0x28 + a1 * 0x4] = *(Mai_I32*)&infos.acc_struct_6_0.table0[a0 * 0x28 + a1 * 0x4]; } for (Mai_I32 a1 = 0; a1 < 0xA; a1++) { *(Mai_I32*)&infos.acc_struct_6_0.table0[a0 * 0x28 + a1 * 0x4] = tmpbuf0[a1]; }*/ } } } } return rs; }