triBool triAt3Init() { int modID = sceUtilityLoadAvModule(PSP_AV_MODULE_AVCODEC); if(modID < 0) { triLogError("triAt3: Init unsuccessful\r\n"); return(0); } triLogPrint("triAt3: Init successful\r\n"); return(1); }
//Load and start needed modules: int initMEAudioModules(){ if (!HW_ModulesInit){ if (sceKernelDevkitVersion() == 0x01050001) { LoadStartAudioModules("flash0:/kd/me_for_vsh.prx", PSP_MEMORY_PARTITION_KERNEL); LoadStartAudioModules("flash0:/kd/audiocodec.prx", PSP_MEMORY_PARTITION_KERNEL); } else { sceUtilityLoadAvModule(PSP_AV_MODULE_AVCODEC); } HW_ModulesInit = 1; } return 0; }
bool Mp3PspStream::initDecoder() { DEBUG_ENTER_FUNC(); if (_decoderInit) { PSP_ERROR("Already initialized!"); return true; } // Based on PSP firmware version, we need to do different things to do Media Engine processing uint32 firmware = sceKernelDevkitVersion(); PSP_DEBUG_PRINT("Firmware version 0x%x\n", firmware); if (firmware == 0x01050001){ if (!loadStartAudioModule((char *)(void *)"flash0:/kd/me_for_vsh.prx", PSP_MEMORY_PARTITION_KERNEL)) { PSP_ERROR("failed to load me_for_vsh.prx. ME cannot start.\n"); _decoderFail = true; return false; } if (!loadStartAudioModule((char *)(void *)"flash0:/kd/audiocodec.prx", PSP_MEMORY_PARTITION_KERNEL)) { PSP_ERROR("failed to load audiocodec.prx. ME cannot start.\n"); _decoderFail = true; return false; } } else { if (sceUtilityLoadAvModule(PSP_AV_MODULE_AVCODEC) < 0) { PSP_ERROR("failed to load AVCODEC module. ME cannot start.\n"); _decoderFail = true; return false; } } PSP_DEBUG_PRINT("Using PSP's ME for MP3\n"); // important to know this is happening _decoderInit = true; return true; }
void load_utils() { int ret; int module; unsigned i; if (isImported(sceUtilityLoadModule)) { // Load modules in order if (!globals->isEmu || sceNetIsImported) for(i = 0; i < sizeof(netModules) / sizeof(int); i++) { ret = sceUtilityLoadModule(netModules[i]); if (ret < 0) dbg_printf("%s: Loading 0x%08X failed 0x%08X\n", __func__, netModules[i], ret); } for(i = 0; i < sizeof(modules) / sizeof(int); i++) { ret = sceUtilityLoadModule(modules[i]); if (ret < 0) dbg_printf("%s: Loading 0x%08X failed 0x%08X\n", __func__, modules[i], ret); } ret = sceUtilityLoadModule(PSP_MODULE_AV_MP3); if (ret < 0) dbg_printf("%s: Loading 0x%08X failed 0x%08X\n", __func__, PSP_MODULE_AV_MP3, ret); } else { if (isImported(sceUtilityLoadNetModule)) for (module = 1; module <= 7; module++) { ret = sceUtilityLoadNetModule(module); if (ret < 0) dbg_printf("%s: Loading net module %d failed 0x%08X\n", __func__, module, ret); } if (isImported(sceUtilityLoadUsbModule)) for (module = 1; module <= 5; module++) { ret = sceUtilityLoadUsbModule(module); if (ret < 0) dbg_printf("%s: Loading USB module %d failed 0x%08X\n", __func__, module, ret); } if (isImported(sceUtilityLoadAvModule)) for (module = 1; module <= 7; module++) { ret = sceUtilityLoadAvModule(module); dbg_printf("%s: Loading AV module %d failed 0x%08X\n", __func__, module, ret); } else { #ifdef UTILITY_AV_AVCODEC_PATH avcodec_modid = sceKernelLoadModule(UTILITY_AV_AVCODEC_PATH, 0, NULL); sceKernelStartModule(avcodec_modid, 0, NULL, NULL, NULL); #endif #ifdef UTILITY_AV_SASCORE_PATH sascore_modid = sceKernelLoadModule(UTILITY_AV_SASCORE_PATH, 0, NULL); sceKernelStartModule(sascore_modid, 0, NULL, NULL, NULL); #endif #ifdef UTILITY_AV_ATRAC3PLUS_PATH atrac3plus_modid = sceKernelLoadModule(UTILITY_AV_ATRAC3PLUS_PATH, 0, NULL); sceKernelStartModule(atrac3plus_modid, 0, NULL, NULL, NULL); #endif #ifdef UTILITY_AV_MPEGBASE_PATH mpegbase_modid = sceKernelLoadModule(UTILITY_AV_MPEGBASE_PATH, 0, NULL); sceKernelStartModule(mpegbase_modid, 0, NULL, NULL, NULL); #endif } } }
// Loads and registers exports from an utility module SceLibraryEntryTable *load_export_util(UtilModInfo *util_mod, const char *lib) { SceLibraryEntryTable *exports; int *p; int ret, nid; if (util_mod == NULL || lib == NULL) return NULL; dbg_printf("Loading utility module for library %s\n", lib); //force load PSP_MODULE_AV_AVCODEC if we request a specific audio module if (util_mod->id > PSP_MODULE_AV_AVCODEC && util_mod->id <= PSP_MODULE_AV_G729) { dbg_printf("Force-Loading AVCODEC\n"); if (isImported(sceUtilityLoadModule)) sceUtilityLoadModule(PSP_MODULE_AV_AVCODEC); else if (isImported(sceUtilityLoadAvModule)) sceUtilityLoadAvModule(PSP_AV_MODULE_AVCODEC); } else if(util_mod->id == PSP_MODULE_NET_HTTP) { dbg_printf("Force-Loading HTTP\n"); if (isImported(sceUtilityLoadModule)) { sceUtilityLoadModule(PSP_MODULE_NET_COMMON); sceUtilityLoadModule(PSP_MODULE_NET_INET); sceUtilityLoadModule(PSP_MODULE_NET_PARSEURI); sceUtilityLoadModule(PSP_MODULE_NET_PARSEHTTP); } else if (isImported(sceUtilityLoadNetModule)) { sceUtilityLoadNetModule(PSP_NET_MODULE_COMMON); sceUtilityLoadNetModule(PSP_NET_MODULE_INET); sceUtilityLoadNetModule(PSP_NET_MODULE_PARSEURI); sceUtilityLoadNetModule(PSP_NET_MODULE_PARSEHTTP); } } ret = load_util(util_mod->id); if (ret < 0 && ret != 0x80111102) return NULL; #ifndef DISABLE_UNLOAD_UTILITY_MODULES #ifdef UTILITY_UNLOAD_MODULE_FILE if (!ret) ret = util_mod->id; #endif // PSP_MODULE_AV_AVCODEC -> cast syscall of sceAudiocodec and sceVideocodec // PSP_MODULE_AV_MP3 -> On 6.20 OFW, libmp3 has a bug when unload it. if ((util_mod->id != PSP_MODULE_AV_AVCODEC || globals->isEmu) && (util_mod->id != PSP_MODULE_AV_MP3 || globals->module_sdk_version > 0x06020010)) { #ifdef UTILITY_UNLOAD_MODULE_FILE add_util_table(ret); #else add_util_table(util_mod->id); #endif } #endif // Get module exports exports = find_exports(util_mod->name, lib); if (exports == NULL) { dbg_printf("->ERROR: could not find module exports for %s\n", util_mod->name); #ifndef DISABLE_UNLOAD_UTILITY_MODULES #ifdef UTILITY_UNLOAD_MODULE_FILE unload_util(ret); rm_util_table(ret); #else unload_util(util_mod->id); rm_util_table(ret); #endif #endif return NULL; } dbg_printf("Number of export functions: %d\n", exports->stubcount); dbg_printf("Pointer to exports: 0x%08X\n", (int)exports->entrytable); switch (util_mod->id) { case PSP_MODULE_NET_INET: if (util_mod == &net_apctl) nid = 0xB3EDD0EC; // sceNetApctlTerm else if (util_mod == &net_resolver) nid = 0x6138194A; // sceNetResolverTerm else if (util_mod == &net_inet) nid = 0xA9ED66B9; // sceNetInetTerm else return exports; break; case PSP_MODULE_NET_COMMON: nid = 0x281928A9; // sceNetTerm break; default: return exports; } for (p = (int *)exports->entrytable; (int)p < (int)exports->entrytable + exports->stubcount; p++) if (*p == nid) { net_term_func[net_term_num] = (void *)p[exports->stubcount]; net_term_num++; break; } return exports; }