sceVideoOutClose implementation (partial)
This commit is contained in:
parent
675193fec3
commit
f916fd48b0
|
@ -1,6 +1,7 @@
|
||||||
#include "video_out_ctx.h"
|
#include "video_out_ctx.h"
|
||||||
|
|
||||||
#include <Core/PS4/HLE/LibKernel.h>
|
#include <Core/PS4/HLE/LibKernel.h>
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
namespace HLE::Graphics::Objects {
|
namespace HLE::Graphics::Objects {
|
||||||
|
|
||||||
|
@ -28,6 +29,30 @@ int VideoOutCtx::Open() {
|
||||||
|
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
void VideoOutCtx::Close(s32 handle) {
|
||||||
|
Lib::LockMutexGuard lock(m_mutex);
|
||||||
|
|
||||||
|
m_video_out_ctx.isOpened = false;
|
||||||
|
|
||||||
|
if (m_video_out_ctx.m_flip_evtEq.size() > 0)
|
||||||
|
{
|
||||||
|
BREAKPOINT(); //we need to clear all events if they have been created
|
||||||
|
}
|
||||||
|
|
||||||
|
m_video_out_ctx.m_flip_rate = 0;
|
||||||
|
|
||||||
|
// clear buffers
|
||||||
|
for (auto& buffer : m_video_out_ctx.buffers) {
|
||||||
|
buffer.buffer = nullptr;
|
||||||
|
buffer.buffer_render = nullptr;
|
||||||
|
buffer.buffer_size = 0;
|
||||||
|
buffer.set_id = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_video_out_ctx.buffers_sets.clear();
|
||||||
|
|
||||||
|
m_video_out_ctx.buffers_registration_index = 0;
|
||||||
|
}
|
||||||
|
|
||||||
VideoConfigInternal* VideoOutCtx::getCtx(int handle) {
|
VideoConfigInternal* VideoOutCtx::getCtx(int handle) {
|
||||||
if (handle != 1) return nullptr;
|
if (handle != 1) return nullptr;
|
||||||
|
|
|
@ -58,6 +58,7 @@ class VideoOutCtx {
|
||||||
virtual ~VideoOutCtx() {}
|
virtual ~VideoOutCtx() {}
|
||||||
void Init(u32 width, u32 height);
|
void Init(u32 width, u32 height);
|
||||||
int Open();
|
int Open();
|
||||||
|
void Close(s32 handle);
|
||||||
VideoConfigInternal* getCtx(int handle);
|
VideoConfigInternal* getCtx(int handle);
|
||||||
FlipQueue& getFlipQueue() { return m_flip_queue; }
|
FlipQueue& getFlipQueue() { return m_flip_queue; }
|
||||||
HLE::Libs::Graphics::GraphicCtx* getGraphicCtx() {
|
HLE::Libs::Graphics::GraphicCtx* getGraphicCtx() {
|
||||||
|
|
|
@ -299,6 +299,11 @@ s32 PS4_SYSV_ABI sceVideoOutOpen(SceUserServiceUserId userId, s32 busType, s32 i
|
||||||
|
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
s32 PS4_SYSV_ABI sceVideoOutClose(s32 handle) {
|
||||||
|
auto* videoOut = singleton<HLE::Graphics::Objects::VideoOutCtx>::instance();
|
||||||
|
videoOut->Close(handle);
|
||||||
|
return SCE_OK;
|
||||||
|
}
|
||||||
s32 PS4_SYSV_ABI sceVideoOutUnregisterBuffers(s32 handle, s32 attributeIndex) { BREAKPOINT(); }
|
s32 PS4_SYSV_ABI sceVideoOutUnregisterBuffers(s32 handle, s32 attributeIndex) { BREAKPOINT(); }
|
||||||
|
|
||||||
void videoOutRegisterLib(SymbolsResolver* sym) {
|
void videoOutRegisterLib(SymbolsResolver* sym) {
|
||||||
|
@ -312,5 +317,6 @@ void videoOutRegisterLib(SymbolsResolver* sym) {
|
||||||
LIB_FUNCTION("Up36PTk687E", "libSceVideoOut", 1, "libSceVideoOut", 0, 0, sceVideoOutOpen);
|
LIB_FUNCTION("Up36PTk687E", "libSceVideoOut", 1, "libSceVideoOut", 0, 0, sceVideoOutOpen);
|
||||||
LIB_FUNCTION("zgXifHT9ErY", "libSceVideoOut", 1, "libSceVideoOut", 0, 0, sceVideoOutIsFlipPending);
|
LIB_FUNCTION("zgXifHT9ErY", "libSceVideoOut", 1, "libSceVideoOut", 0, 0, sceVideoOutIsFlipPending);
|
||||||
LIB_FUNCTION("N5KDtkIjjJ4", "libSceVideoOut", 1, "libSceVideoOut", 0, 0, sceVideoOutUnregisterBuffers);
|
LIB_FUNCTION("N5KDtkIjjJ4", "libSceVideoOut", 1, "libSceVideoOut", 0, 0, sceVideoOutUnregisterBuffers);
|
||||||
|
LIB_FUNCTION("uquVH4-Du78", "libSceVideoOut", 1, "libSceVideoOut", 0, 0, sceVideoOutClose);
|
||||||
}
|
}
|
||||||
} // namespace HLE::Libs::Graphics::VideoOut
|
} // namespace HLE::Libs::Graphics::VideoOut
|
|
@ -110,5 +110,5 @@ s32 PS4_SYSV_ABI sceVideoOutSubmitFlip(s32 handle, s32 bufferIndex, s32 flipMode
|
||||||
s32 PS4_SYSV_ABI sceVideoOutGetFlipStatus(s32 handle, SceVideoOutFlipStatus* status);
|
s32 PS4_SYSV_ABI sceVideoOutGetFlipStatus(s32 handle, SceVideoOutFlipStatus* status);
|
||||||
s32 PS4_SYSV_ABI sceVideoOutGetResolutionStatus(s32 handle, SceVideoOutResolutionStatus* status);
|
s32 PS4_SYSV_ABI sceVideoOutGetResolutionStatus(s32 handle, SceVideoOutResolutionStatus* status);
|
||||||
s32 PS4_SYSV_ABI sceVideoOutOpen(SceUserServiceUserId userId, s32 busType, s32 index, const void* param);
|
s32 PS4_SYSV_ABI sceVideoOutOpen(SceUserServiceUserId userId, s32 busType, s32 index, const void* param);
|
||||||
|
s32 PS4_SYSV_ABI sceVideoOutClose(s32 handle);
|
||||||
} // namespace HLE::Libs::Graphics::VideoOut
|
} // namespace HLE::Libs::Graphics::VideoOut
|
Loading…
Reference in New Issue