From 89e0dcba5ee8acab45fd2020df119a75898c508a Mon Sep 17 00:00:00 2001 From: Eladash Date: Wed, 7 Sep 2022 11:19:56 +0300 Subject: [PATCH] cellVdec: Adjust for reservations --- rpcs3/Emu/Cell/Modules/cellVdec.cpp | 35 ++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/rpcs3/Emu/Cell/Modules/cellVdec.cpp b/rpcs3/Emu/Cell/Modules/cellVdec.cpp index 5393b46a8c..b6041433d9 100644 --- a/rpcs3/Emu/Cell/Modules/cellVdec.cpp +++ b/rpcs3/Emu/Cell/Modules/cellVdec.cpp @@ -563,9 +563,10 @@ struct vdec_context final break; } } - thread_ctrl::wait_for(1000); - if (elapsed++ >= 5000) // 5 seconds + thread_ctrl::wait_for(10000); + + if (elapsed++ >= 500) // 5 seconds { cellVdec.error("Video au decode has been waiting for a consumer for 5 seconds. (handle=0x%x, seq_id=%d, cmd_id=%d, queue_size=%d)", handle, cmd->seq_id, cmd->id, out_queue.size()); elapsed = 0; @@ -997,8 +998,10 @@ error_code cellVdecClose(ppu_thread& ppu, u32 handle) return CELL_OK; } -error_code cellVdecStartSeq(u32 handle) +error_code cellVdecStartSeq(ppu_thread& ppu, u32 handle) { + ppu.state += cpu_flag::wait; + cellVdec.warning("cellVdecStartSeq(handle=0x%x)", handle); const auto vdec = idm::get(handle); @@ -1047,8 +1050,10 @@ error_code cellVdecStartSeq(u32 handle) return CELL_OK; } -error_code cellVdecEndSeq(u32 handle) +error_code cellVdecEndSeq(ppu_thread& ppu, u32 handle) { + ppu.state += cpu_flag::wait; + cellVdec.warning("cellVdecEndSeq(handle=0x%x)", handle); const auto vdec = idm::get(handle); @@ -1078,8 +1083,10 @@ error_code cellVdecEndSeq(u32 handle) return CELL_OK; } -error_code cellVdecDecodeAu(u32 handle, CellVdecDecodeMode mode, vm::cptr auInfo) +error_code cellVdecDecodeAu(ppu_thread& ppu, u32 handle, CellVdecDecodeMode mode, vm::cptr auInfo) { + ppu.state += cpu_flag::wait; + cellVdec.trace("cellVdecDecodeAu(handle=0x%x, mode=%d, auInfo=*0x%x)", handle, +mode, auInfo); const auto vdec = idm::get(handle); @@ -1124,8 +1131,10 @@ error_code cellVdecDecodeAu(u32 handle, CellVdecDecodeMode mode, vm::cptr auInfo) +error_code cellVdecDecodeAuEx2(ppu_thread& ppu, u32 handle, CellVdecDecodeMode mode, vm::cptr auInfo) { + ppu.state += cpu_flag::wait; + cellVdec.todo("cellVdecDecodeAuEx2(handle=0x%x, mode=%d, auInfo=*0x%x)", handle, +mode, auInfo); const auto vdec = idm::get(handle); @@ -1178,8 +1187,10 @@ error_code cellVdecDecodeAuEx2(u32 handle, CellVdecDecodeMode mode, vm::cptr format, vm::ptr outBuff, u32 arg4) +error_code cellVdecGetPictureExt(ppu_thread& ppu, u32 handle, vm::cptr format, vm::ptr outBuff, u32 arg4) { + ppu.state += cpu_flag::wait; + cellVdec.trace("cellVdecGetPictureExt(handle=0x%x, format=*0x%x, outBuff=*0x%x, arg4=*0x%x)", handle, format, outBuff, arg4); const auto vdec = idm::get(handle); @@ -1323,8 +1334,10 @@ error_code cellVdecGetPictureExt(u32 handle, vm::cptr format return CELL_OK; } -error_code cellVdecGetPicture(u32 handle, vm::cptr format, vm::ptr outBuff) +error_code cellVdecGetPicture(ppu_thread& ppu, u32 handle, vm::cptr format, vm::ptr outBuff) { + ppu.state += cpu_flag::wait; + cellVdec.trace("cellVdecGetPicture(handle=0x%x, format=*0x%x, outBuff=*0x%x)", handle, format, outBuff); if (!format) @@ -1339,11 +1352,13 @@ error_code cellVdecGetPicture(u32 handle, vm::cptr format, vm format2->unk0 = 0; format2->unk1 = 0; - return cellVdecGetPictureExt(handle, format2, outBuff, 0); + return cellVdecGetPictureExt(ppu, handle, format2, outBuff, 0); } -error_code cellVdecGetPicItem(u32 handle, vm::pptr picItem) +error_code cellVdecGetPicItem(ppu_thread& ppu, u32 handle, vm::pptr picItem) { + ppu.state += cpu_flag::wait; + cellVdec.trace("cellVdecGetPicItem(handle=0x%x, picItem=**0x%x)", handle, picItem); const auto vdec = idm::get(handle);