// Copyright (c) 2012- PPSSPP Project. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, version 2.0 or later versions. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License 2.0 for more details. // A copy of the GPL 2.0 should have been included with the program. // If not, see http://www.gnu.org/licenses/ // Official git repository and contact information can be found at // https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/. #include "Core/HLE/HLE.h" #include "sceAudiocodec.h" #include "Core/Reporting.h" enum { PSP_CODEC_AT3PLUS = 0x00001000, PSP_CODEC_AT3 = 0x00001001, PSP_CODEC_MP3 = 0x00001002, PSP_CODEC_AAC = 0x00001003, }; static const char *const codecNames[4] = { "AT3+", "AT3", "MP3", "AAC", }; static const char *GetCodecName(int codec) { if (codec >= PSP_CODEC_AT3PLUS && codec <= PSP_CODEC_AAC) { return codecNames[codec - PSP_CODEC_AT3PLUS]; } else { return "(unk)"; } } // Following kaien_fr's sample code https://github.com/hrydgard/ppsspp/issues/5620#issuecomment-37086024 // Should probably store the EDRAM get/release status somewhere within here, etc. struct AudioCodecContext { u32_le unknown[6]; u32_le inDataPtr; // 6 u32_le inDataSize; // 7 u32_le outDataPtr; // 8 u32_le audioSamplesPerFrame; // 9 u32_le inDataSizeAgain; // 10 ?? }; int sceAudiocodecInit(u32 ctxPtr, int codec) { ERROR_LOG_REPORT(ME, "UNIMPL sceAudiocodecInit(%08x, %i (%s))", ctxPtr, codec, GetCodecName(codec)); return 0; } int sceAudiocodecDecode(u32 ctxPtr, int codec) { ERROR_LOG_REPORT(ME, "UNIMPL sceAudiocodecDecode(%08x, %i (%s))", ctxPtr, codec, GetCodecName(codec)); if (!ctxPtr) { return -1; } auto ctx = PSPPointer::Create(ctxPtr); return 0; } int sceAudiocodecGetInfo(u32 ctxPtr, int codec) { ERROR_LOG_REPORT(ME, "UNIMPL sceAudiocodecGetInfo(%08x, %i (%s))", ctxPtr, codec, GetCodecName(codec)); return 0; } int sceAudiocodecCheckNeedMem(u32 ctxPtr, int codec) { WARN_LOG(ME, "UNIMPL sceAudiocodecCheckNeedMem(%08x, %i (%s))", ctxPtr, codec, GetCodecName(codec)); return 0; } int sceAudiocodecGetEDRAM(u32 ctxPtr, int codec) { WARN_LOG(ME, "UNIMPL sceAudiocodecGetEDRAM(%08x, %i (%s))", ctxPtr, codec, GetCodecName(codec)); return 0; } int sceAudiocodecReleaseEDRAM(u32 ctxPtr, int codec) { WARN_LOG(ME, "UNIMPL sceAudiocodecReleaseEDRAM(%08x, %i (%s))", ctxPtr, codec, GetCodecName(codec)); return 0; } const HLEFunction sceAudiocodec[] = { {0x70A703F8, WrapI_UI, "sceAudiocodecDecode"}, {0x5B37EB1D, WrapI_UI, "sceAudiocodecInit"}, {0x8ACA11D5, WrapI_UI, "sceAudiocodecGetInfo"}, {0x3A20A200, WrapI_UI, "sceAudiocodecGetEDRAM" }, {0x29681260, WrapI_UI, "sceAudiocodecReleaseEDRAM" }, {0x9D3F790C, WrapI_UI, "sceAudiocodecCheckNeedMem" }, {0x59176a0f, 0, "sceAudiocodec_59176A0F"}, }; void Register_sceAudiocodec() { RegisterModule("sceAudiocodec", ARRAY_SIZE(sceAudiocodec), sceAudiocodec); }