From be69f7a0046624a5376a5451d04b6192c6d67126 Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Sun, 3 Nov 2024 13:19:33 +0200 Subject: [PATCH] filled videodec parameters --- src/core/libraries/videodec/videodec.cpp | 20 +++-- src/core/libraries/videodec/videodec.h | 97 ++++++++++++++++++++++-- 2 files changed, 105 insertions(+), 12 deletions(-) diff --git a/src/core/libraries/videodec/videodec.cpp b/src/core/libraries/videodec/videodec.cpp index 3321f085b..20b735fb1 100644 --- a/src/core/libraries/videodec/videodec.cpp +++ b/src/core/libraries/videodec/videodec.cpp @@ -9,22 +9,29 @@ namespace Libraries::Videodec { -int PS4_SYSV_ABI sceVideodecCreateDecoder() { +int PS4_SYSV_ABI sceVideodecCreateDecoder(const OrbisVideodecConfigInfo* pCfgInfoIn, + const OrbisVideodecResourceInfo* pRsrcInfoIn, + OrbisVideodecCtrl* pCtrlOut) { LOG_ERROR(Lib_Videodec, "(STUBBED) called"); return ORBIS_OK; } -int PS4_SYSV_ABI sceVideodecDecode() { +int PS4_SYSV_ABI sceVideodecDecode(OrbisVideodecCtrl* pCtrlIn, + const OrbisVideodecInputData* pInputDataIn, + OrbisVideodecFrameBuffer* pFrameBufferInOut, + OrbisVideodecPictureInfo* pPictureInfoOut) { LOG_ERROR(Lib_Videodec, "(STUBBED) called"); return ORBIS_OK; } -int PS4_SYSV_ABI sceVideodecDeleteDecoder() { +int PS4_SYSV_ABI sceVideodecDeleteDecoder(OrbisVideodecCtrl* pCtrlIn) { LOG_ERROR(Lib_Videodec, "(STUBBED) called"); return ORBIS_OK; } -int PS4_SYSV_ABI sceVideodecFlush() { +int PS4_SYSV_ABI sceVideodecFlush(OrbisVideodecCtrl* pCtrlIn, + OrbisVideodecFrameBuffer* pFrameBufferInOut, + OrbisVideodecPictureInfo* pPictureInfoOut) { LOG_ERROR(Lib_Videodec, "(STUBBED) called"); return ORBIS_OK; } @@ -34,12 +41,13 @@ int PS4_SYSV_ABI sceVideodecMapMemory() { return ORBIS_OK; } -int PS4_SYSV_ABI sceVideodecQueryResourceInfo() { +int PS4_SYSV_ABI sceVideodecQueryResourceInfo(const OrbisVideodecConfigInfo* pCfgInfoIn, + OrbisVideodecResourceInfo* pRsrcInfoOut) { LOG_ERROR(Lib_Videodec, "(STUBBED) called"); return ORBIS_OK; } -int PS4_SYSV_ABI sceVideodecReset() { +int PS4_SYSV_ABI sceVideodecReset(OrbisVideodecCtrl* pCtrlIn) { LOG_ERROR(Lib_Videodec, "(STUBBED) called"); return ORBIS_OK; } diff --git a/src/core/libraries/videodec/videodec.h b/src/core/libraries/videodec/videodec.h index c0b4d3cbb..48beb3898 100644 --- a/src/core/libraries/videodec/videodec.h +++ b/src/core/libraries/videodec/videodec.h @@ -11,13 +11,98 @@ class SymbolsResolver; namespace Libraries::Videodec { -int PS4_SYSV_ABI sceVideodecCreateDecoder(); -int PS4_SYSV_ABI sceVideodecDecode(); -int PS4_SYSV_ABI sceVideodecDeleteDecoder(); -int PS4_SYSV_ABI sceVideodecFlush(); +struct OrbisVideodecConfigInfo { + u64 thisSize; + u32 codecType; + u32 profile; + u32 maxLevel; + s32 maxFrameWidth; + s32 maxFrameHeight; + s32 maxDpbFrameCount; + u64 videodecFlags; +}; + +struct OrbisVideodecResourceInfo { + u64 thisSize; + u64 cpuMemorySize; + void* pCpuMemory; + u64 cpuGpuMemorySize; + void* pCpuGpuMemory; + u64 maxFrameBufferSize; + u32 frameBufferAlignment; +}; + +struct OrbisVideodecCtrl { + u64 thisSize; + u64 handle; + u64 version; +}; + +struct OrbisVideodecFrameBuffer { + u64 thisSize; + void* pFrameBuffer; + u64 frameBufferSize; +}; + +struct OrbisVideodecAvcInfo { + u32 numUnitsInTick; + u32 timeScale; + u8 fixedFrameRateFlag; + u8 aspectRatioIdc; + u16 sarWidth; + u16 sarHeight; + u8 colourPrimaries; + u8 transferCharacteristics; + u8 matrixCoefficients; + u8 videoFullRangeFlag; + u32 frameCropLeftOffset; + u32 frameCropRightOffset; + u32 frameCropTopOffset; + u32 frameCropBottomOffset; +}; + +union OrbisVideodecCodecInfo { + u8 reserved[64]; + OrbisVideodecAvcInfo avc; +}; + +struct OrbisVideodecPictureInfo { + u64 thisSize; + u32 isValid; + u32 codecType; + u32 frameWidth; + u32 framePitch; + u32 frameHeight; + u32 isErrorPic; + u64 ptsData; + u64 attachedData; + OrbisVideodecCodecInfo codec; +}; + +struct OrbisVideodecInputData { + u64 thisSize; + void* pAuData; + u64 auSize; + u64 ptsData; + u64 dtsData; + u64 attachedData; +}; + +int PS4_SYSV_ABI sceVideodecCreateDecoder(const OrbisVideodecConfigInfo* pCfgInfoIn, + const OrbisVideodecResourceInfo* pRsrcInfoIn, + OrbisVideodecCtrl* pCtrlOut); +int PS4_SYSV_ABI sceVideodecDecode(OrbisVideodecCtrl* pCtrlIn, + const OrbisVideodecInputData* pInputDataIn, + OrbisVideodecFrameBuffer* pFrameBufferInOut, + OrbisVideodecPictureInfo* pPictureInfoOut); +int PS4_SYSV_ABI sceVideodecDeleteDecoder(OrbisVideodecCtrl* pCtrlIn); +int PS4_SYSV_ABI sceVideodecFlush(OrbisVideodecCtrl* pCtrlIn, + OrbisVideodecFrameBuffer* pFrameBufferInOut, + OrbisVideodecPictureInfo* pPictureInfoOut); int PS4_SYSV_ABI sceVideodecMapMemory(); -int PS4_SYSV_ABI sceVideodecQueryResourceInfo(); -int PS4_SYSV_ABI sceVideodecReset(); +int PS4_SYSV_ABI sceVideodecQueryResourceInfo(const OrbisVideodecConfigInfo* pCfgInfoIn, + OrbisVideodecResourceInfo* pRsrcInfoOut); +int PS4_SYSV_ABI sceVideodecReset(OrbisVideodecCtrl* pCtrlIn); void RegisterlibSceVideodec(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Videodec \ No newline at end of file