mirror of
https://github.com/RPCS3/rpcs3.git
synced 2026-06-06 23:25:02 -06:00
cellDmux implementation
This commit is contained in:
parent
f42b09d1fc
commit
22fe8648ef
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "Emu/Memory/vm_ptr.h"
|
#include "Emu/Memory/vm_ptr.h"
|
||||||
#include "cellPamf.h"
|
#include "Emu/Cell/ErrorCodes.h"
|
||||||
|
#include "Utilities/BitField.h"
|
||||||
|
|
||||||
// Error Codes
|
// Error Codes
|
||||||
enum CellDmuxError :u32
|
enum CellDmuxError :u32
|
||||||
@ -18,6 +19,10 @@ enum CellDmuxStreamType : s32
|
|||||||
CELL_DMUX_STREAM_TYPE_UNDEF = 0,
|
CELL_DMUX_STREAM_TYPE_UNDEF = 0,
|
||||||
CELL_DMUX_STREAM_TYPE_PAMF = 1,
|
CELL_DMUX_STREAM_TYPE_PAMF = 1,
|
||||||
CELL_DMUX_STREAM_TYPE_TERMINATOR = 2,
|
CELL_DMUX_STREAM_TYPE_TERMINATOR = 2,
|
||||||
|
|
||||||
|
// Only used in cellSail
|
||||||
|
CELL_DMUX_STREAM_TYPE_MP4 = 0x81,
|
||||||
|
CELL_DMUX_STREAM_TYPE_AVI = 0x82
|
||||||
};
|
};
|
||||||
|
|
||||||
enum CellDmuxMsgType : s32
|
enum CellDmuxMsgType : s32
|
||||||
@ -48,13 +53,14 @@ struct CellDmuxEsMsg
|
|||||||
struct CellDmuxType
|
struct CellDmuxType
|
||||||
{
|
{
|
||||||
be_t<s32> streamType; // CellDmuxStreamType
|
be_t<s32> streamType; // CellDmuxStreamType
|
||||||
be_t<u32> reserved[2];
|
be_t<s32> reserved1;
|
||||||
|
be_t<s32> reserved2;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CellDmuxType2
|
struct CellDmuxType2
|
||||||
{
|
{
|
||||||
be_t<s32> streamType; // CellDmuxStreamType
|
be_t<s32> streamType;
|
||||||
be_t<u32> streamSpecificInfo;
|
vm::bcptr<void> streamSpecificInfo;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CellDmuxResource
|
struct CellDmuxResource
|
||||||
@ -73,8 +79,8 @@ struct CellDmuxResourceEx
|
|||||||
be_t<u32> memSize;
|
be_t<u32> memSize;
|
||||||
be_t<u32> ppuThreadPriority;
|
be_t<u32> ppuThreadPriority;
|
||||||
be_t<u32> ppuThreadStackSize;
|
be_t<u32> ppuThreadStackSize;
|
||||||
be_t<u32> spurs_addr;
|
vm::bptr<void> spurs; // CellSpurs*
|
||||||
u8 priority[8];
|
be_t<u64, 1> priority;
|
||||||
be_t<u32> maxContention;
|
be_t<u32> maxContention;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -85,33 +91,23 @@ struct CellDmuxResourceSpurs
|
|||||||
be_t<u32> maxContention;
|
be_t<u32> maxContention;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
|
||||||
struct CellDmuxResource2Ex
|
|
||||||
{
|
|
||||||
b8 isResourceEx; //true
|
|
||||||
CellDmuxResourceEx resourceEx;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct CellDmuxResource2NoEx
|
|
||||||
{
|
|
||||||
b8 isResourceEx; //false
|
|
||||||
CellDmuxResource resource;
|
|
||||||
};
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct CellDmuxResource2
|
struct CellDmuxResource2
|
||||||
{
|
{
|
||||||
b8 isResourceEx;
|
b8 isResourceEx;
|
||||||
be_t<u32> memAddr;
|
|
||||||
be_t<u32> memSize;
|
union
|
||||||
be_t<u32> ppuThreadPriority;
|
{
|
||||||
be_t<u32> ppuThreadStackSize;
|
CellDmuxResource resource;
|
||||||
be_t<u32> shit[4];
|
CellDmuxResourceEx resourceEx;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
using CellDmuxCbMsg = u32(u32 demuxerHandle, vm::cptr<CellDmuxMsg> demuxerMsg, vm::ptr<void> cbArg);
|
struct DmuxContext;
|
||||||
|
struct DmuxEsContext;
|
||||||
|
|
||||||
using CellDmuxCbEsMsg = u32(u32 demuxerHandle, u32 esHandle, vm::cptr<CellDmuxEsMsg> esMsg, vm::ptr<void> cbArg);
|
using CellDmuxCbMsg = u32(vm::ptr<DmuxContext> demuxerHandle, vm::cptr<CellDmuxMsg> demuxerMsg, vm::ptr<void> cbArg);
|
||||||
|
|
||||||
|
using CellDmuxCbEsMsg = u32(vm::ptr<DmuxContext> demuxerHandle, vm::ptr<DmuxEsContext> esHandle, vm::cptr<CellDmuxEsMsg> esMsg, vm::ptr<void> cbArg);
|
||||||
|
|
||||||
// Used for internal callbacks as well
|
// Used for internal callbacks as well
|
||||||
template <typename F>
|
template <typename F>
|
||||||
@ -177,6 +173,70 @@ struct DmuxAuInfo
|
|||||||
be_t<u32> specific_info_size;
|
be_t<u32> specific_info_size;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct DmuxAuQueueElement
|
||||||
|
{
|
||||||
|
be_t<u32> index;
|
||||||
|
u8 unk; // unused
|
||||||
|
DmuxAuInfo au_info;
|
||||||
|
};
|
||||||
|
|
||||||
|
CHECK_SIZE(DmuxAuQueueElement, 0x38);
|
||||||
|
|
||||||
|
enum DmuxState : u32
|
||||||
|
{
|
||||||
|
DMUX_STOPPED = 1 << 0,
|
||||||
|
DMUX_RUNNING = 1 << 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct alignas(0x10) DmuxContext // CellDmuxHandle = DmuxContext*
|
||||||
|
{
|
||||||
|
vm::bptr<DmuxContext> _this;
|
||||||
|
be_t<u32> _this_size;
|
||||||
|
be_t<u32> version;
|
||||||
|
be_t<u32> dmux_state;
|
||||||
|
CellDmuxType dmux_type;
|
||||||
|
CellDmuxCb dmux_cb;
|
||||||
|
b8 stream_is_set;
|
||||||
|
vm::bptr<void> core_handle;
|
||||||
|
be_t<u32> version_; // Same value as 'version'
|
||||||
|
be_t<u64> user_data;
|
||||||
|
be_t<s32> max_enabled_es_num;
|
||||||
|
be_t<s32> enabled_es_num;
|
||||||
|
be_t<u32> _dx_mhd; // sys_mutex_t
|
||||||
|
u8 reserved[0x7c];
|
||||||
|
};
|
||||||
|
|
||||||
|
CHECK_SIZE_ALIGN(DmuxContext, 0xc0, 0x10);
|
||||||
|
|
||||||
|
struct alignas(0x10) DmuxEsContext // CellDmuxEsHandle = DmuxEsContext*
|
||||||
|
{
|
||||||
|
be_t<u32> _dx_mes; // sys_mutex_t
|
||||||
|
be_t<u32> is_enabled;
|
||||||
|
be_t<u32> error_mem_size;
|
||||||
|
be_t<u32> error_count;
|
||||||
|
vm::bptr<void> error_mem_addr;
|
||||||
|
vm::bptr<DmuxEsContext> _this;
|
||||||
|
be_t<u32> _this_size;
|
||||||
|
be_t<s32> _this_index;
|
||||||
|
vm::bptr<DmuxContext> dmux_handle;
|
||||||
|
CellDmuxEsCb es_cb;
|
||||||
|
vm::bptr<void> core_es_handle;
|
||||||
|
bf_t<be_t<u32>, 0, 1> flush_started;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
be_t<s32> max_size;
|
||||||
|
be_t<s32> allocated_size;
|
||||||
|
be_t<s32> size;
|
||||||
|
be_t<s32> front;
|
||||||
|
be_t<s32> back;
|
||||||
|
be_t<s32> allocated_back;
|
||||||
|
}
|
||||||
|
au_queue;
|
||||||
|
};
|
||||||
|
|
||||||
|
CHECK_SIZE_ALIGN(DmuxEsContext, 0x50, 0x10);
|
||||||
|
|
||||||
using DmuxNotifyDemuxDone = error_code(vm::ptr<void>, u32, vm::ptr<void>);
|
using DmuxNotifyDemuxDone = error_code(vm::ptr<void>, u32, vm::ptr<void>);
|
||||||
using DmuxNotifyFatalErr = error_code(vm::ptr<void>, u32, vm::ptr<void>);
|
using DmuxNotifyFatalErr = error_code(vm::ptr<void>, u32, vm::ptr<void>);
|
||||||
using DmuxNotifyProgEndCode = error_code(vm::ptr<void>, vm::ptr<void>);
|
using DmuxNotifyProgEndCode = error_code(vm::ptr<void>, vm::ptr<void>);
|
||||||
@ -194,10 +254,10 @@ using CellDmuxCoreOpSetStream = error_code(vm::ptr<void>, vm::cptr<void>, u32, b
|
|||||||
using CellDmuxCoreOpReleaseAu = error_code(vm::ptr<void>, vm::ptr<void>, u32);
|
using CellDmuxCoreOpReleaseAu = error_code(vm::ptr<void>, vm::ptr<void>, u32);
|
||||||
using CellDmuxCoreOpQueryEsAttr = error_code(vm::cptr<void>, vm::cptr<void>, vm::ptr<CellDmuxPamfEsAttr>);
|
using CellDmuxCoreOpQueryEsAttr = error_code(vm::cptr<void>, vm::cptr<void>, vm::ptr<CellDmuxPamfEsAttr>);
|
||||||
using CellDmuxCoreOpEnableEs = error_code(vm::ptr<void>, vm::cptr<void>, vm::cptr<CellDmuxEsResource>, vm::cptr<DmuxCb<DmuxEsNotifyAuFound>>, vm::cptr<DmuxCb<DmuxEsNotifyFlushDone>>, vm::cptr<void>, vm::pptr<void>);
|
using CellDmuxCoreOpEnableEs = error_code(vm::ptr<void>, vm::cptr<void>, vm::cptr<CellDmuxEsResource>, vm::cptr<DmuxCb<DmuxEsNotifyAuFound>>, vm::cptr<DmuxCb<DmuxEsNotifyFlushDone>>, vm::cptr<void>, vm::pptr<void>);
|
||||||
using CellDmuxCoreOpDisableEs = u32(vm::ptr<void>);
|
using CellDmuxCoreOpDisableEs = error_code(vm::ptr<void>);
|
||||||
using CellDmuxCoreOpFlushEs = u32(vm::ptr<void>);
|
using CellDmuxCoreOpFlushEs = error_code(vm::ptr<void>);
|
||||||
using CellDmuxCoreOpResetEs = u32(vm::ptr<void>);
|
using CellDmuxCoreOpResetEs = error_code(vm::ptr<void>);
|
||||||
using CellDmuxCoreOpResetStreamAndWaitDone = u32(vm::ptr<void>);
|
using CellDmuxCoreOpResetStreamAndWaitDone = error_code(vm::ptr<void>);
|
||||||
|
|
||||||
struct CellDmuxCoreOps
|
struct CellDmuxCoreOps
|
||||||
{
|
{
|
||||||
|
|||||||
@ -63,7 +63,7 @@ extern const std::map<std::string_view, int> g_prx_list
|
|||||||
{ "libcelpenc.sprx", 0 },
|
{ "libcelpenc.sprx", 0 },
|
||||||
{ "libddpdec.sprx", 0 },
|
{ "libddpdec.sprx", 0 },
|
||||||
{ "libdivxdec.sprx", 0 },
|
{ "libdivxdec.sprx", 0 },
|
||||||
{ "libdmux.sprx", 0 },
|
{ "libdmux.sprx", 1 },
|
||||||
{ "libdmuxpamf.sprx", 1 },
|
{ "libdmuxpamf.sprx", 1 },
|
||||||
{ "libdtslbrdec.sprx", 0 },
|
{ "libdtslbrdec.sprx", 0 },
|
||||||
{ "libfiber.sprx", 0 },
|
{ "libfiber.sprx", 0 },
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user