Skip to content

Commit 65fd004

Browse files
committed
Wait flag for cellCameraGetBufferInfoEx
1 parent 8722501 commit 65fd004

2 files changed

Lines changed: 13 additions & 5 deletions

File tree

rpcs3/Emu/Cell/Modules/cellCamera.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1139,8 +1139,10 @@ error_code cellCameraGetBufferInfo(s32 dev_num, vm::ptr<CellCameraInfo> info)
11391139
return CELL_OK;
11401140
}
11411141

1142-
error_code cellCameraGetBufferInfoEx(s32 dev_num, vm::ptr<CellCameraInfoEx> info)
1142+
error_code cellCameraGetBufferInfoEx(ppu_thread& ppu, s32 dev_num, vm::ptr<CellCameraInfoEx> info)
11431143
{
1144+
ppu.state += cpu_flag::wait;
1145+
11441146
cellCamera.notice("cellCameraGetBufferInfoEx(dev_num=%d, info=0x%x)", dev_num, info);
11451147

11461148
// calls cellCameraGetBufferInfo
@@ -1151,10 +1153,16 @@ error_code cellCameraGetBufferInfoEx(s32 dev_num, vm::ptr<CellCameraInfoEx> info
11511153
}
11521154

11531155
auto& g_camera = g_fxo->get<camera_thread>();
1154-
std::lock_guard lock(g_camera.mutex);
11551156

1156-
*info = g_camera.info;
1157+
CellCameraInfoEx info_out;
1158+
1159+
{
1160+
std::lock_guard lock(g_camera.mutex);
1161+
1162+
info_out = g_camera.info;
1163+
}
11571164

1165+
*info = info_out;
11581166
return CELL_OK;
11591167
}
11601168

rpcs3/Emu/Cell/Modules/cellGem.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3269,15 +3269,15 @@ error_code cellGemPrepareCamera(s32 max_exposure, f32 image_quality)
32693269

32703270
extern error_code cellCameraGetAttribute(s32 dev_num, s32 attrib, vm::ptr<u32> arg1, vm::ptr<u32> arg2);
32713271
extern error_code cellCameraSetAttribute(s32 dev_num, s32 attrib, u32 arg1, u32 arg2);
3272-
extern error_code cellCameraGetBufferInfoEx(s32 dev_num, vm::ptr<CellCameraInfoEx> info);
3272+
extern error_code cellCameraGetBufferInfoEx(ppu_thread&, s32 dev_num, vm::ptr<CellCameraInfoEx> info);
32733273

32743274
vm::var<CellCameraInfoEx> info = vm::make_var<CellCameraInfoEx>({});
32753275
vm::var<u32> arg1 = vm::make_var<u32>({});
32763276
vm::var<u32> arg2 = vm::make_var<u32>({});
32773277

32783278
cellCameraGetAttribute(0, 0x3e6, arg1, arg2);
32793279
cellCameraSetAttribute(0, 0x3e6, 0x3e, *arg2 | 0x80);
3280-
cellCameraGetBufferInfoEx(0, info);
3280+
cellCameraGetBufferInfoEx(*cpu_thread::get_current<ppu_thread>(), 0, info);
32813281

32823282
if (info->width == 640)
32833283
{

0 commit comments

Comments
 (0)