From edf1b8e8e648de2d59fc1137151aae048eb430e4 Mon Sep 17 00:00:00 2001 From: Megamouse Date: Thu, 6 Feb 2025 17:17:14 +0100 Subject: [PATCH] cellVdec: implement cellVdecOpenExt --- rpcs3/Emu/Cell/Modules/cellVdec.cpp | 21 ++++++++++++++++++--- rpcs3/Emu/Cell/Modules/cellVdec.h | 10 ++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/Cell/Modules/cellVdec.cpp b/rpcs3/Emu/Cell/Modules/cellVdec.cpp index 7ba9644d15..4574d99d59 100644 --- a/rpcs3/Emu/Cell/Modules/cellVdec.cpp +++ b/rpcs3/Emu/Cell/Modules/cellVdec.cpp @@ -1619,10 +1619,25 @@ error_code cellVdecSetFrameRate(u32 handle, CellVdecFrameRate frameRateCode) return CELL_OK; } -error_code cellVdecOpenExt() +error_code cellVdecOpenExt(ppu_thread& ppu, vm::cptr type, vm::cptr res, vm::cptr cb, vm::ptr handle) { - UNIMPLEMENTED_FUNC(cellVdec); - return CELL_OK; + cellVdec.warning("cellVdecOpenExt(type=*0x%x, res=*0x%x, cb=*0x%x, handle=*0x%x)", type, res, cb, handle); + + if (!res) + { + return CELL_VDEC_ERROR_ARG; + } + + vm::var tmp = vm::make_var({}); + tmp->memAddr = res->memAddr; + tmp->memSize = res->memSize; + tmp->ppuThreadPriority = res->ppuThreadPriority; + tmp->ppuThreadStackSize = res->ppuThreadStackSize; + tmp->spuThreadPriority = 0; + tmp->numOfSpus = res->numOfSpus; + + const vm::ptr ptr = vm::cast(tmp.addr()); + return vdecOpen(ppu, type, ptr, cb, handle); } error_code cellVdecStartSeqExt() diff --git a/rpcs3/Emu/Cell/Modules/cellVdec.h b/rpcs3/Emu/Cell/Modules/cellVdec.h index e09695bcc3..9f30b7d1b0 100644 --- a/rpcs3/Emu/Cell/Modules/cellVdec.h +++ b/rpcs3/Emu/Cell/Modules/cellVdec.h @@ -133,6 +133,16 @@ struct CellVdecResourceEx be_t spursResource_addr; }; +struct CellVdecResourceExt // speculative +{ + be_t memAddr; + be_t memSize; + be_t ppuThreadPriority; + be_t ppuThreadStackSize; + u8 unk[12]; + be_t numOfSpus; +}; + // Access Unit Information struct CellVdecAuInfo {