cellSail improvements

This commit is contained in:
Raul Tambre 2015-08-10 15:10:16 +03:00 committed by Nekotekina
parent ff3bfa1ca2
commit c9f3871c68
2 changed files with 339 additions and 141 deletions

View File

@ -77,7 +77,8 @@ s32 cellSailDescriptorSetAutoSelection(vm::ptr<CellSailDescriptor> pSelf, b8 aut
{ {
cellSail.Warning("cellSailDescriptorSetAutoSelection(pSelf=*0x%x, autoSelection=%d)", pSelf, autoSelection); cellSail.Warning("cellSailDescriptorSetAutoSelection(pSelf=*0x%x, autoSelection=%d)", pSelf, autoSelection);
if (pSelf) { if (pSelf)
{
pSelf->autoSelection = autoSelection; pSelf->autoSelection = autoSelection;
return autoSelection; return autoSelection;
} }
@ -90,19 +91,22 @@ s32 cellSailDescriptorIsAutoSelection(vm::ptr<CellSailDescriptor> pSelf)
cellSail.Warning("cellSailDescriptorIsAutoSelection(pSelf=*0x%x)", pSelf); cellSail.Warning("cellSailDescriptorIsAutoSelection(pSelf=*0x%x)", pSelf);
if (pSelf) if (pSelf)
{
return pSelf->autoSelection; return pSelf->autoSelection;
}
return CELL_OK; return CELL_OK;
} }
s32 cellSailDescriptorCreateDatabase(vm::ptr<CellSailDescriptor> pSelf, vm::ptr<void> pDatabase, u32 size, u64 arg) s32 cellSailDescriptorCreateDatabase(vm::ptr<CellSailDescriptor> pSelf, vm::ptr<void> pDatabase, u32 size, u64 arg)
{ {
cellSail.Warning("cellSailDescriptorCreateDatabase(pSelf=*0x%x, pDatabase=*0x%x, size=0x%x, arg=0x%x", pSelf, pDatabase, size, arg); cellSail.Warning("cellSailDescriptorCreateDatabase(pSelf=*0x%x, pDatabase=*0x%x, size=0x%x, arg=0x%llx)", pSelf, pDatabase, size, arg);
switch ((s32)pSelf->streamType) { switch ((s32)pSelf->streamType)
{
case CELL_SAIL_STREAM_PAMF: case CELL_SAIL_STREAM_PAMF:
{ {
u32 addr = pSelf->internalData[1]; u32 addr = pSelf->sp_;
auto ptr = vm::ptr<CellPamfReader>::make(addr); auto ptr = vm::ptr<CellPamfReader>::make(addr);
memcpy(pDatabase.get_ptr(), ptr.get_ptr(), sizeof(CellPamfReader)); memcpy(pDatabase.get_ptr(), ptr.get_ptr(), sizeof(CellPamfReader));
break; break;
@ -162,33 +166,84 @@ s32 cellSailDescriptorSetParameter()
return CELL_OK; return CELL_OK;
} }
s32 cellSailSoundAdapterInitialize() s32 cellSailSoundAdapterInitialize(vm::ptr<CellSailSoundAdapter> pSelf, vm::cptr<CellSailSoundAdapterFuncs> pCallbacks, vm::ptr<void> pArg)
{ {
UNIMPLEMENTED_FUNC(cellSail); cellSail.Warning("cellSailSoundAdapterInitialize(pSelf=*0x%x, pCallbacks=*0x%x, pArg=*0x%x)", pSelf, pCallbacks, pArg);
if (pSelf->initialized)
{
return CELL_SAIL_ERROR_INVALID_STATE;
}
if (pSelf->registered)
{
return CELL_SAIL_ERROR_INVALID_STATE;
}
pSelf->pMakeup = pCallbacks->pMakeup;
pSelf->pCleanup = pCallbacks->pCleanup;
pSelf->pFormatChanged = pCallbacks->pFormatChanged;
pSelf->arg = pArg;
pSelf->initialized = true;
pSelf->registered = false;
return CELL_OK; return CELL_OK;
} }
s32 cellSailSoundAdapterFinalize() s32 cellSailSoundAdapterFinalize(vm::ptr<CellSailSoundAdapter> pSelf)
{ {
UNIMPLEMENTED_FUNC(cellSail); cellSail.Warning("cellSailSoundAdapterFinalize(pSelf=*0x%x)", pSelf);
if (!pSelf->initialized)
{
return CELL_SAIL_ERROR_INVALID_STATE;
}
if (pSelf->registered)
{
return CELL_SAIL_ERROR_INVALID_STATE;
}
return CELL_OK; return CELL_OK;
} }
s32 cellSailSoundAdapterSetPreferredFormat() s32 cellSailSoundAdapterSetPreferredFormat(vm::ptr<CellSailSoundAdapter> pSelf, vm::cptr<CellSailAudioFormat> pFormat)
{ {
UNIMPLEMENTED_FUNC(cellSail); cellSail.Warning("cellSailSoundAdapterSetPreferredFormat(pSelf=*0x%x, pFormat=*0x%x)", pSelf, pFormat);
pSelf->format = *pFormat;
return CELL_OK; return CELL_OK;
} }
s32 cellSailSoundAdapterGetFrame() s32 cellSailSoundAdapterGetFrame(vm::ptr<CellSailSoundAdapter> pSelf, u32 samples, vm::ptr<CellSailSoundFrameInfo> pInfo)
{ {
UNIMPLEMENTED_FUNC(cellSail); cellSail.Todo("cellSailSoundAdapterGetFrame(pSelf=*0x%x, samples=%d, pInfo=*0x%x)", pSelf, samples, pInfo);
if (!pSelf->initialized)
{
return CELL_SAIL_ERROR_INVALID_STATE;
}
if (pSelf->registered)
{
return CELL_SAIL_ERROR_INVALID_STATE;
}
if (samples > 2048)
{
return CELL_SAIL_ERROR_INVALID_ARG;
}
return CELL_OK; return CELL_OK;
} }
s32 cellSailSoundAdapterGetFormat() s32 cellSailSoundAdapterGetFormat(vm::ptr<CellSailSoundAdapter> pSelf, vm::ptr<CellSailAudioFormat> pFormat)
{ {
UNIMPLEMENTED_FUNC(cellSail); cellSail.Warning("cellSailSoundAdapterGetFormat(pSelf=*0x%x, pFormat=*0x%x)", pSelf, pFormat);
*pFormat = pSelf->format;
return CELL_OK; return CELL_OK;
} }
@ -204,39 +259,76 @@ s32 cellSailSoundAdapterPtsToTimePosition()
return CELL_OK; return CELL_OK;
} }
s32 cellSailGraphicsAdapterInitialize() s32 cellSailGraphicsAdapterInitialize(vm::ptr<CellSailGraphicsAdapter> pSelf, vm::cptr<CellSailGraphicsAdapterFuncs> pCallbacks, vm::ptr<void> pArg)
{ {
UNIMPLEMENTED_FUNC(cellSail); cellSail.Warning("cellSailGraphicsAdapterInitialize(pSelf=*0x%x, pCallbacks=*0x%x, pArg=*0x%x)", pSelf, pCallbacks, pArg);
if (pSelf->initialized)
{
return CELL_SAIL_ERROR_INVALID_STATE;
}
if (pSelf->registered)
{
return CELL_SAIL_ERROR_INVALID_STATE;
}
pSelf->pMakeup = pCallbacks->pMakeup;
pSelf->pCleanup = pCallbacks->pCleanup;
pSelf->pFormatChanged = pCallbacks->pFormatChanged;
pSelf->pAlloc = pCallbacks->pAlloc;
pSelf->pFree = pCallbacks->pFree;
pSelf->arg = pArg;
pSelf->initialized = true;
pSelf->registered = true;
return CELL_OK; return CELL_OK;
} }
s32 cellSailGraphicsAdapterFinalize() s32 cellSailGraphicsAdapterFinalize(vm::ptr<CellSailGraphicsAdapter> pSelf)
{ {
UNIMPLEMENTED_FUNC(cellSail); cellSail.Todo("cellSailGraphicsAdapterFinalize(pSelf=*0x%x)", pSelf);
if (!pSelf->initialized)
{
return CELL_SAIL_ERROR_INVALID_STATE;
}
if (pSelf->registered)
{
return CELL_SAIL_ERROR_INVALID_STATE;
}
return CELL_OK; return CELL_OK;
} }
s32 cellSailGraphicsAdapterSetPreferredFormat() s32 cellSailGraphicsAdapterSetPreferredFormat(vm::ptr<CellSailGraphicsAdapter> pSelf, vm::cptr<CellSailVideoFormat> pFormat)
{ {
UNIMPLEMENTED_FUNC(cellSail); cellSail.Warning("cellSailGraphicsAdapterSetPreferredFormat(pSelf=*0x%x, pFormat=*0x%x)", pSelf, pFormat);
pSelf->format = *pFormat;
return CELL_OK; return CELL_OK;
} }
s32 cellSailGraphicsAdapterGetFrame() s32 cellSailGraphicsAdapterGetFrame(vm::ptr<CellSailGraphicsAdapter> pSelf, vm::ptr<CellSailGraphicsFrameInfo> pInfo)
{ {
UNIMPLEMENTED_FUNC(cellSail); cellSail.Todo("cellSailGraphicsAdapterGetFrame(pSelf=*0x%x, pInfo=*0x%x)", pSelf, pInfo);
return CELL_OK; return CELL_OK;
} }
s32 cellSailGraphicsAdapterGetFrame2() s32 cellSailGraphicsAdapterGetFrame2(vm::ptr<CellSailGraphicsAdapter> pSelf, vm::ptr<CellSailGraphicsFrameInfo> pInfo, vm::ptr<CellSailGraphicsFrameInfo> pPrevInfo, vm::ptr<u64> pFlipTime, u64 flags)
{ {
UNIMPLEMENTED_FUNC(cellSail); cellSail.Todo("cellSailGraphicsAdapterGetFrame2(pSelf=*0x%x, pInfo=*0x%x, pPrevInfo=*0x%x, flipTime=*0x%x, flags=0x%llx)", pSelf, pInfo, pPrevInfo, pFlipTime, flags);
return CELL_OK; return CELL_OK;
} }
s32 cellSailGraphicsAdapterGetFormat() s32 cellSailGraphicsAdapterGetFormat(vm::ptr<CellSailGraphicsAdapter> pSelf, vm::ptr<CellSailVideoFormat> pFormat)
{ {
UNIMPLEMENTED_FUNC(cellSail); cellSail.Warning("cellSailGraphicsAdapterGetFormat(pSelf=*0x%x, pFormat=*0x%x)", pSelf, pFormat);
*pFormat = pSelf->format;
return CELL_OK; return CELL_OK;
} }
@ -520,9 +612,20 @@ s32 cellSailPlayerInitialize2(
return CELL_OK; return CELL_OK;
} }
s32 cellSailPlayerFinalize() s32 cellSailPlayerFinalize(vm::ptr<CellSailPlayer> pSelf)
{ {
UNIMPLEMENTED_FUNC(cellSail); cellSail.Todo("cellSailPlayerFinalize(pSelf=*0x%x)", pSelf);
if (pSelf->sAdapter)
{
pSelf->sAdapter->registered = false;
}
if (pSelf->gAdapter)
{
pSelf->gAdapter->registered = false;
}
return CELL_OK; return CELL_OK;
} }
@ -538,15 +641,35 @@ s32 cellSailPlayerGetRegisteredProtocols()
return CELL_OK; return CELL_OK;
} }
s32 cellSailPlayerSetSoundAdapter() s32 cellSailPlayerSetSoundAdapter(vm::ptr<CellSailPlayer> pSelf, u32 index, vm::ptr<CellSailSoundAdapter> pAdapter)
{ {
UNIMPLEMENTED_FUNC(cellSail); cellSail.Warning("cellSailPlayerSetSoundAdapter(pSelf=*0x%x, index=%d, pAdapter=*0x%x)", pSelf, index, pAdapter);
if (index > pSelf->attribute.maxAudioStreamNum)
{
return CELL_SAIL_ERROR_INVALID_ARG;
}
pSelf->sAdapter = pAdapter;
pAdapter->index = index;
pAdapter->registered = true;
return CELL_OK; return CELL_OK;
} }
s32 cellSailPlayerSetGraphicsAdapter() s32 cellSailPlayerSetGraphicsAdapter(vm::ptr<CellSailPlayer> pSelf, u32 index, vm::ptr<CellSailGraphicsAdapter> pAdapter)
{ {
UNIMPLEMENTED_FUNC(cellSail); cellSail.Warning("cellSailPlayerSetGraphicsAdapter(pSelf=*0x%x, index=%d, pAdapter=*0x%x)", pSelf, index, pAdapter);
if (index > pSelf->attribute.maxVideoStreamNum)
{
return CELL_SAIL_ERROR_INVALID_ARG;
}
pSelf->gAdapter = pAdapter;
pAdapter->index = index;
pAdapter->registered = true;
return CELL_OK; return CELL_OK;
} }
@ -568,9 +691,9 @@ s32 cellSailPlayerSetRendererVideo()
return CELL_OK; return CELL_OK;
} }
s32 cellSailPlayerSetParameter() s32 cellSailPlayerSetParameter(vm::ptr<CellSailPlayer> pSelf, s32 parameterType, u64 param0, u64 param1)
{ {
UNIMPLEMENTED_FUNC(cellSail); cellSail.Todo("cellSailPlayerSetParameter(pSelf=*0x%x, parameterType=0x%x (%s), param0=0x%llx, param1=0x%llx)", pSelf, parameterType, ParameterCodeToName(parameterType), param0, param1);
return CELL_OK; return CELL_OK;
} }
@ -622,9 +745,9 @@ s32 cellSailPlayerAddDescriptor(vm::ptr<CellSailPlayer> pSelf, vm::ptr<CellSailD
return CELL_OK; return CELL_OK;
} }
s32 cellSailPlayerCreateDescriptor(vm::ptr<CellSailPlayer> pSelf, s32 streamType, vm::ptr<u32> pMediaInfo, vm::cptr<char> pUri, vm::pptr<CellSailDescriptor> ppDesc) s32 cellSailPlayerCreateDescriptor(vm::ptr<CellSailPlayer> pSelf, s32 streamType, vm::ptr<void> pMediaInfo, vm::cptr<char> pUri, vm::pptr<CellSailDescriptor> ppDesc)
{ {
cellSail.Warning("cellSailPlayerCreateDescriptor(pSelf=*0x%x, streamType=%d, pMediaInfo=*0x%x, pUri=*0x%x, ppDesc=**0x%x)", pSelf, streamType, pMediaInfo, pUri, ppDesc); cellSail.Todo("cellSailPlayerCreateDescriptor(pSelf=*0x%x, streamType=%d, pMediaInfo=*0x%x, pUri=*0x%x, ppDesc=**0x%x)", pSelf, streamType, pMediaInfo, pUri, ppDesc);
u32 descriptorAddress = vm::alloc(sizeof(CellSailDescriptor), vm::main); u32 descriptorAddress = vm::alloc(sizeof(CellSailDescriptor), vm::main);
auto descriptor = vm::ptr<CellSailDescriptor>::make(descriptorAddress); auto descriptor = vm::ptr<CellSailDescriptor>::make(descriptorAddress);
@ -640,28 +763,33 @@ s32 cellSailPlayerCreateDescriptor(vm::ptr<CellSailPlayer> pSelf, s32 streamType
case CELL_SAIL_STREAM_PAMF: case CELL_SAIL_STREAM_PAMF:
{ {
std::string uri = pUri.get_ptr(); std::string uri = pUri.get_ptr();
if (uri.substr(0, 12) == "x-cell-fs://") { if (uri.substr(0, 12) == "x-cell-fs://")
{
std::string path = uri.substr(12); std::string path = uri.substr(12);
vfsFile f; vfsFile f;
if (f.Open(path)) { if (f.Open(path))
{
u64 size = f.GetSize(); u64 size = f.GetSize();
u32 buf_ = vm::alloc(size, vm::main); u32 buffer = vm::alloc(size, vm::main);
auto bufPtr = vm::cptr<PamfHeader>::make(buf_); auto bufPtr = vm::cptr<PamfHeader>::make(buffer);
PamfHeader *buf = const_cast<PamfHeader*>(bufPtr.get_ptr()); PamfHeader *buf = const_cast<PamfHeader*>(bufPtr.get_ptr());
assert(f.Read(buf, size) == size); assert(f.Read(buf, size) == size);
u32 sp_ = vm::alloc(sizeof(CellPamfReader), vm::main); u32 sp_ = vm::alloc(sizeof(CellPamfReader), vm::main);
auto sp = vm::ptr<CellPamfReader>::make(sp_); auto sp = vm::ptr<CellPamfReader>::make(sp_);
u32 r = cellPamfReaderInitialize(sp, bufPtr, size, 0); u32 reader = cellPamfReaderInitialize(sp, bufPtr, size, 0);
descriptor->internalData[0] = buf_; descriptor->buffer = buffer;
descriptor->internalData[1] = sp_; descriptor->sp_ = sp_;
} }
else else
{
cellSail.Warning("Couldn't open PAMF: %s", uri.c_str()); cellSail.Warning("Couldn't open PAMF: %s", uri.c_str());
}
} }
else else
{
cellSail.Warning("Unhandled uri: %s", uri.c_str()); cellSail.Warning("Unhandled uri: %s", uri.c_str());
}
break; break;
} }
default: default:

View File

@ -610,74 +610,76 @@ struct CellSailSourceStreamingProfile
union CellSailEvent union CellSailEvent
{ {
struct u32x2 { struct u32x2
{
be_t<u32> major; be_t<u32> major;
be_t<u32> minor; be_t<u32> minor;
}; };
struct ui64 { struct ui64
{
be_t<u64> value; be_t<u64> value;
}; };
}; };
typedef vm::ptr<u32>(CellSailMemAllocatorFuncAlloc)(vm::ptr<void> pArg, u32 boundary, u32 size); using CellSailMemAllocatorFuncAlloc = vm::ptr<void>(vm::ptr<void> pArg, u32 boundary, u32 size);
typedef void(CellSailMemAllocatorFuncFree)(vm::ptr<void> pArg, u32 boundary, vm::ptr<u32> pMemory); using CellSailMemAllocatorFuncFree = void(vm::ptr<void> pArg, u32 boundary, vm::ptr<void> pMemory);
typedef s32(CellSailSoundAdapterFuncMakeup)(vm::ptr<void> pArg); using CellSailSoundAdapterFuncMakeup = s32(vm::ptr<void> pArg);
typedef s32(CellSailSoundAdapterFuncCleanup)(vm::ptr<void> pArg); using CellSailSoundAdapterFuncCleanup = s32(vm::ptr<void> pArg);
typedef void(CellSailSoundAdapterFuncFormatChanged)(vm::ptr<void> pArg, vm::ptr<CellSailAudioFormat> pFormat, u32 sessionId); using CellSailSoundAdapterFuncFormatChanged = void(vm::ptr<void> pArg, vm::ptr<CellSailAudioFormat> pFormat, u32 sessionId);
typedef s32(CellSailGraphicsAdapterFuncMakeup)(vm::ptr<void> pArg); using CellSailGraphicsAdapterFuncMakeup = s32(vm::ptr<void> pArg);
typedef s32(CellSailGraphicsAdapterFuncCleanup)(vm::ptr<void> pArg); using CellSailGraphicsAdapterFuncCleanup = s32(vm::ptr<void> pArg);
typedef void(CellSailGraphicsAdapterFuncFormatChanged)(vm::ptr<void> pArg, vm::ptr<CellSailVideoFormat> pFormat, u32 sessionId); using CellSailGraphicsAdapterFuncFormatChanged = void(vm::ptr<void> pArg, vm::ptr<CellSailVideoFormat> pFormat, u32 sessionId);
typedef s32(CellSailGraphicsAdapterFuncAllocFrame)(vm::ptr<void> pArg, u32 size, s32 num, vm::pptr<u8> ppFrame); using CellSailGraphicsAdapterFuncAllocFrame = s32(vm::ptr<void> pArg, u32 size, s32 num, vm::pptr<u8> ppFrame);
typedef s32(CellSailGraphicsAdapterFuncFreeFrame)(vm::ptr<void> pArg, s32 num, vm::pptr<u8> ppFrame); using CellSailGraphicsAdapterFuncFreeFrame = s32(vm::ptr<void> pArg, s32 num, vm::pptr<u8> ppFrame);
typedef s32(CellSailSourceFuncMakeup)(vm::ptr<void> pArg, vm::cptr<char> pProtocolNames); using CellSailSourceFuncMakeup = s32(vm::ptr<void> pArg, vm::cptr<char> pProtocolNames);
typedef s32(CellSailSourceFuncCleanup)(vm::ptr<void> pArg); using CellSailSourceFuncCleanup = s32(vm::ptr<void> pArg);
typedef void(CellSailSourceFuncOpen)(vm::ptr<void> pArg, s32 streamType, vm::ptr<u32> pMediaInfo, vm::cptr<char> pUri, vm::ptr<CellSailSourceStreamingProfile> pProfile); using CellSailSourceFuncOpen = void(vm::ptr<void> pArg, s32 streamType, vm::ptr<void> pMediaInfo, vm::cptr<char> pUri, vm::ptr<CellSailSourceStreamingProfile> pProfile);
typedef void(CellSailSourceFuncClose)(vm::ptr<void> pArg); using CellSailSourceFuncClose = void(vm::ptr<void> pArg);
typedef void(CellSailSourceFuncStart)(vm::ptr<void> pArg, vm::ptr<CellSailSourceStartCommand> pCommand, u32 sessionId); using CellSailSourceFuncStart = void(vm::ptr<void> pArg, vm::ptr<CellSailSourceStartCommand> pCommand, u32 sessionId);
typedef void(CellSailSourceFuncStop)(vm::ptr<void> pArg); using CellSailSourceFuncStop = void(vm::ptr<void> pArg);
typedef void(CellSailSourceFuncCancel)(vm::ptr<void> pArg); using CellSailSourceFuncCancel = void(vm::ptr<void> pArg);
typedef s32(CellSailSourceFuncCheckout)(vm::ptr<void> pArg, vm::pptr<CellSailSourceBufferItem> ppItem); using CellSailSourceFuncCheckout = s32(vm::ptr<void> pArg, vm::pptr<CellSailSourceBufferItem> ppItem);
typedef s32(CellSailSourceFuncCheckin)(vm::ptr<void> pArg, vm::ptr<CellSailSourceBufferItem> pItem); using CellSailSourceFuncCheckin = s32(vm::ptr<void> pArg, vm::ptr<CellSailSourceBufferItem> pItem);
typedef s32(CellSailSourceFuncClear)(vm::ptr<void> pArg); using CellSailSourceFuncClear = s32(vm::ptr<void> pArg);
typedef s32(CellSailSourceFuncRead)(vm::ptr<void> pArg, s32 streamType, vm::ptr<u32> pMediaInfo, vm::cptr<char> pUri, u64 offset, vm::ptr<u8> pBuf, u32 size, vm::ptr<u64> pTotalSize); using CellSailSourceFuncRead = s32(vm::ptr<void> pArg, s32 streamType, vm::ptr<void> pMediaInfo, vm::cptr<char> pUri, u64 offset, vm::ptr<u8> pBuf, u32 size, vm::ptr<u64> pTotalSize);
typedef s32(CellSailSourceFuncReadSync)(vm::ptr<void> pArg, s32 streamType, vm::ptr<u32> pMediaInfo, vm::cptr<char> pUri, u64 offset, vm::ptr<u8> pBuf, u32 size, vm::ptr<u64> pTotalSize); using CellSailSourceFuncReadSync = s32(vm::ptr<void> pArg, s32 streamType, vm::ptr<void> pMediaInfo, vm::cptr<char> pUri, u64 offset, vm::ptr<u8> pBuf, u32 size, vm::ptr<u64> pTotalSize);
typedef s32(CellSailSourceFuncGetCapabilities)(vm::ptr<void> pArg, s32 streamType, vm::ptr<u32> pMediaInfo, vm::cptr<char> pUri, vm::ptr<u64> pCapabilities); using CellSailSourceFuncGetCapabilities = s32(vm::ptr<void> pArg, s32 streamType, vm::ptr<void> pMediaInfo, vm::cptr<char> pUri, vm::ptr<u64> pCapabilities);
typedef s32(CellSailSourceFuncInquireCapability)(vm::ptr<void> pArg, s32 streamType, vm::ptr<u32> pMediaInfo, vm::cptr<char> pUri, vm::ptr<CellSailSourceStartCommand> pCommand); using CellSailSourceFuncInquireCapability = s32(vm::ptr<void> pArg, s32 streamType, vm::ptr<void> pMediaInfo, vm::cptr<char> pUri, vm::ptr<CellSailSourceStartCommand> pCommand);
typedef void(CellSailSourceCheckFuncError)(vm::ptr<void> pArg, vm::cptr<char> pMsg, s32 line); using CellSailSourceCheckFuncError = void(vm::ptr<void> pArg, vm::cptr<char> pMsg, s32 line);
typedef s32(CellSailFsFuncOpen)(vm::cptr<char> pPath, s32 flag, vm::ptr<s32> pFd, vm::ptr<void> pArg, u64 size); using CellSailFsFuncOpen = s32(vm::cptr<char> pPath, s32 flag, vm::ptr<s32> pFd, vm::ptr<void> pArg, u64 size);
typedef s32(CellSailFsFuncOpenSecond)(vm::cptr<char> pPath, s32 flag, s32 fd, vm::ptr<void> pArg, u64 size); using CellSailFsFuncOpenSecond = s32(vm::cptr<char> pPath, s32 flag, s32 fd, vm::ptr<void> pArg, u64 size);
typedef s32(CellSailFsFuncClose)(s32 fd); using CellSailFsFuncClose = s32(s32 fd);
typedef s32(CellSailFsFuncFstat)(s32 fd, vm::ptr<u32> pStat_addr); using CellSailFsFuncFstat = s32(s32 fd, vm::ptr<struct CellFstat> pStat);
typedef s32(CellSailFsFuncRead)(s32 fd, vm::ptr<u32> pBuf, u64 numBytes, vm::ptr<u64> pNumRead); using CellSailFsFuncRead = s32(s32 fd, vm::ptr<void> pBuf, u64 numBytes, vm::ptr<u64> pNumRead);
typedef s32(CellSailFsFuncLseek)(s32 fd, s64 offset, s32 whence, vm::ptr<u64> pPosition); using CellSailFsFuncLseek = s32(s32 fd, s64 offset, s32 whence, vm::ptr<u64> pPosition);
typedef s32(CellSailFsFuncCancel)(s32 fd); using CellSailFsFuncCancel = s32(s32 fd);
typedef s32(CellSailRendererAudioFuncMakeup)(vm::ptr<void> pArg); using CellSailRendererAudioFuncMakeup = s32(vm::ptr<void> pArg);
typedef s32(CellSailRendererAudioFuncCleanup)(vm::ptr<void> pArg); using CellSailRendererAudioFuncCleanup = s32(vm::ptr<void> pArg);
typedef void(CellSailRendererAudioFuncOpen)(vm::ptr<void> pArg, vm::ptr<CellSailAudioFormat> pInfo, u32 frameNum); using CellSailRendererAudioFuncOpen = void(vm::ptr<void> pArg, vm::ptr<CellSailAudioFormat> pInfo, u32 frameNum);
typedef void(CellSailRendererAudioFuncClose)(vm::ptr<void> pArg); using CellSailRendererAudioFuncClose = void(vm::ptr<void> pArg);
typedef void(CellSailRendererAudioFuncStart)(vm::ptr<void> pArg, b8 buffering); using CellSailRendererAudioFuncStart = void(vm::ptr<void> pArg, b8 buffering);
typedef void(CellSailRendererAudioFuncStop)(vm::ptr<void> pArg, b8 flush); using CellSailRendererAudioFuncStop = void(vm::ptr<void> pArg, b8 flush);
typedef void(CellSailRendererAudioFuncCancel)(vm::ptr<void> pArg); using CellSailRendererAudioFuncCancel = void(vm::ptr<void> pArg);
typedef s32(CellSailRendererAudioFuncCheckout)(vm::ptr<void> pArg, vm::pptr<CellSailAudioFrameInfo> ppInfo); using CellSailRendererAudioFuncCheckout = s32(vm::ptr<void> pArg, vm::pptr<CellSailAudioFrameInfo> ppInfo);
typedef s32(CellSailRendererAudioFuncCheckin)(vm::ptr<void> pArg, vm::ptr<CellSailAudioFrameInfo> pInfo); using CellSailRendererAudioFuncCheckin = s32(vm::ptr<void> pArg, vm::ptr<CellSailAudioFrameInfo> pInfo);
typedef s32(CellSailRendererVideoFuncMakeup)(vm::ptr<void> pArg); using CellSailRendererVideoFuncMakeup = s32(vm::ptr<void> pArg);
typedef s32(CellSailRendererVideoFuncCleanup)(vm::ptr<void> pArg); using CellSailRendererVideoFuncCleanup = s32(vm::ptr<void> pArg);
typedef void(CellSailRendererVideoFuncOpen)(vm::ptr<void> pArg, vm::ptr<CellSailVideoFormat> pInfo, u32 frameNum, u32 minFrameNum); using CellSailRendererVideoFuncOpen = void(vm::ptr<void> pArg, vm::ptr<CellSailVideoFormat> pInfo, u32 frameNum, u32 minFrameNum);
typedef void(CellSailRendererVideoFuncClose)(vm::ptr<void> pArg); using CellSailRendererVideoFuncClose = void(vm::ptr<void> pArg);
typedef void(CellSailRendererVideoFuncStart)(vm::ptr<void> pArg, b8 buffering); using CellSailRendererVideoFuncStart = void(vm::ptr<void> pArg, b8 buffering);
typedef void(CellSailRendererVideoFuncStop)(vm::ptr<void> pArg, b8 flush, b8 keepRendering); using CellSailRendererVideoFuncStop = void(vm::ptr<void> pArg, b8 flush, b8 keepRendering);
typedef void(CellSailRendererVideoFuncCancel)(vm::ptr<void> pArg); using CellSailRendererVideoFuncCancel = void(vm::ptr<void> pArg);
typedef s32(CellSailRendererVideoFuncCheckout)(vm::ptr<void> pArg, vm::pptr<CellSailVideoFrameInfo> ppInfo); using CellSailRendererVideoFuncCheckout = s32(vm::ptr<void> pArg, vm::pptr<CellSailVideoFrameInfo> ppInfo);
typedef s32(CellSailRendererVideoFuncCheckin)(vm::ptr<void> pArg, vm::ptr<CellSailVideoFrameInfo> pInfo); using CellSailRendererVideoFuncCheckin = s32(vm::ptr<void> pArg, vm::ptr<CellSailVideoFrameInfo> pInfo);
typedef void(CellSailPlayerFuncNotified)(vm::ptr<void> pArg, CellSailEvent event, u64 arg0, u64 arg1); using CellSailPlayerFuncNotified = void(vm::ptr<void> pArg, CellSailEvent event, u64 arg0, u64 arg1);
struct CellSailMemAllocatorFuncs struct CellSailMemAllocatorFuncs
{ {
@ -702,9 +704,9 @@ struct CellSailFuture
struct CellSailSoundAdapterFuncs struct CellSailSoundAdapterFuncs
{ {
CellSailSoundAdapterFuncMakeup pMakeup; vm::bptr<CellSailSoundAdapterFuncMakeup> pMakeup;
CellSailSoundAdapterFuncCleanup pCleanup; vm::bptr<CellSailSoundAdapterFuncCleanup> pCleanup;
CellSailSoundAdapterFuncFormatChanged pFormatChanged; vm::bptr<CellSailSoundAdapterFuncFormatChanged> pFormatChanged;
}; };
struct CellSailSoundFrameInfo struct CellSailSoundFrameInfo
@ -718,16 +720,25 @@ struct CellSailSoundFrameInfo
struct CellSailSoundAdapter struct CellSailSoundAdapter
{ {
be_t<u64> internalData[32]; bool initialized;
bool registered;
vm::ptr<CellSailSoundAdapterFuncMakeup> pMakeup;
vm::ptr<CellSailSoundAdapterFuncCleanup> pCleanup;
vm::ptr<CellSailSoundAdapterFuncFormatChanged> pFormatChanged;
vm::ptr<void> arg;
be_t<u32> index;
CellSailAudioFormat format;
}; };
CHECK_MAX_SIZE(CellSailSoundAdapter, 0x100);
struct CellSailGraphicsAdapterFuncs struct CellSailGraphicsAdapterFuncs
{ {
CellSailGraphicsAdapterFuncMakeup pMakeup; vm::bptr<CellSailGraphicsAdapterFuncMakeup> pMakeup;
CellSailGraphicsAdapterFuncCleanup pCleanup; vm::bptr<CellSailGraphicsAdapterFuncCleanup> pCleanup;
CellSailGraphicsAdapterFuncFormatChanged pFormatChanged; vm::bptr<CellSailGraphicsAdapterFuncFormatChanged> pFormatChanged;
CellSailGraphicsAdapterFuncAllocFrame pAlloc; vm::bptr<CellSailGraphicsAdapterFuncAllocFrame> pAlloc;
CellSailGraphicsAdapterFuncFreeFrame pFree; vm::bptr<CellSailGraphicsAdapterFuncFreeFrame> pFree;
}; };
struct CellSailGraphicsFrameInfo struct CellSailGraphicsFrameInfo
@ -741,9 +752,20 @@ struct CellSailGraphicsFrameInfo
struct CellSailGraphicsAdapter struct CellSailGraphicsAdapter
{ {
be_t<u64> internalData[32]; bool initialized;
bool registered;
vm::ptr<CellSailGraphicsAdapterFuncMakeup> pMakeup;
vm::ptr<CellSailGraphicsAdapterFuncCleanup> pCleanup;
vm::ptr<CellSailGraphicsAdapterFuncFormatChanged> pFormatChanged;
vm::ptr<CellSailGraphicsAdapterFuncAllocFrame> pAlloc;
vm::ptr<CellSailGraphicsAdapterFuncFreeFrame> pFree;
vm::ptr<void> arg;
CellSailVideoFormat format;
be_t<s32> index;
}; };
CHECK_MAX_SIZE(CellSailGraphicsAdapter, 0x100);
struct CellSailAuInfo struct CellSailAuInfo
{ {
be_t<u32> pAu; be_t<u32> pAu;
@ -762,15 +784,15 @@ struct CellSailAuReceiver
struct CellSailRendererAudioFuncs struct CellSailRendererAudioFuncs
{ {
CellSailRendererAudioFuncMakeup pMakeup; vm::bptr<CellSailRendererAudioFuncMakeup> pMakeup;
CellSailRendererAudioFuncCleanup pCleanup; vm::bptr<CellSailRendererAudioFuncCleanup> pCleanup;
CellSailRendererAudioFuncOpen pOpen; vm::bptr<CellSailRendererAudioFuncOpen> pOpen;
CellSailRendererAudioFuncClose pClose; vm::bptr<CellSailRendererAudioFuncClose> pClose;
CellSailRendererAudioFuncStart pStart; vm::bptr<CellSailRendererAudioFuncStart> pStart;
CellSailRendererAudioFuncStop pStop; vm::bptr<CellSailRendererAudioFuncStop> pStop;
CellSailRendererAudioFuncCancel pCancel; vm::bptr<CellSailRendererAudioFuncCancel> pCancel;
CellSailRendererAudioFuncCheckout pCheckout; vm::bptr<CellSailRendererAudioFuncCheckout> pCheckout;
CellSailRendererAudioFuncCheckin pCheckin; vm::bptr<CellSailRendererAudioFuncCheckin> pCheckin;
}; };
struct CellSailRendererAudioAttribute struct CellSailRendererAudioAttribute
@ -786,15 +808,15 @@ struct CellSailRendererAudio
struct CellSailRendererVideoFuncs struct CellSailRendererVideoFuncs
{ {
CellSailRendererVideoFuncMakeup pMakeup; vm::bptr<CellSailRendererVideoFuncMakeup> pMakeup;
CellSailRendererVideoFuncCleanup pCleanup; vm::bptr<CellSailRendererVideoFuncCleanup> pCleanup;
CellSailRendererVideoFuncOpen pOpen; vm::bptr<CellSailRendererVideoFuncOpen> pOpen;
CellSailRendererVideoFuncClose pClose; vm::bptr<CellSailRendererVideoFuncClose> pClose;
CellSailRendererVideoFuncStart pStart; vm::bptr<CellSailRendererVideoFuncStart> pStart;
CellSailRendererVideoFuncStop pStop; vm::bptr<CellSailRendererVideoFuncStop> pStop;
CellSailRendererVideoFuncCancel pCancel; vm::bptr<CellSailRendererVideoFuncCancel> pCancel;
CellSailRendererVideoFuncCheckout pCheckout; vm::bptr<CellSailRendererVideoFuncCheckout> pCheckout;
CellSailRendererVideoFuncCheckin pCheckin; vm::bptr<CellSailRendererVideoFuncCheckin> pCheckin;
}; };
struct CellSailRendererVideoAttribute struct CellSailRendererVideoAttribute
@ -810,20 +832,20 @@ struct CellSailRendererVideo
struct CellSailSourceFuncs struct CellSailSourceFuncs
{ {
CellSailSourceFuncMakeup pMakeup; vm::bptr<CellSailSourceFuncMakeup> pMakeup;
CellSailSourceFuncCleanup pCleanup; vm::bptr<CellSailSourceFuncCleanup> pCleanup;
CellSailSourceFuncOpen pOpen; vm::bptr<CellSailSourceFuncOpen> pOpen;
CellSailSourceFuncClose pClose; vm::bptr<CellSailSourceFuncClose> pClose;
CellSailSourceFuncStart pStart; vm::bptr<CellSailSourceFuncStart> pStart;
CellSailSourceFuncStop pStop; vm::bptr<CellSailSourceFuncStop> pStop;
CellSailSourceFuncCancel pCancel; vm::bptr<CellSailSourceFuncCancel> pCancel;
CellSailSourceFuncCheckout pCheckout; vm::bptr<CellSailSourceFuncCheckout> pCheckout;
CellSailSourceFuncCheckin pCheckin; vm::bptr<CellSailSourceFuncCheckin> pCheckin;
CellSailSourceFuncClear pClear; vm::bptr<CellSailSourceFuncClear> pClear;
CellSailSourceFuncRead pRead; vm::bptr<CellSailSourceFuncRead> pRead;
CellSailSourceFuncReadSync pReadSync; vm::bptr<CellSailSourceFuncReadSync> pReadSync;
CellSailSourceFuncGetCapabilities pGetCapabilities; vm::bptr<CellSailSourceFuncGetCapabilities> pGetCapabilities;
CellSailSourceFuncInquireCapability pInquireCapability; vm::bptr<CellSailSourceFuncInquireCapability> pInquireCapability;
}; };
struct CellSailSource struct CellSailSource
@ -1040,10 +1062,11 @@ struct CellSailDescriptor
b8 autoSelection; b8 autoSelection;
b8 registered; b8 registered;
be_t<s32> streamType; be_t<s32> streamType;
be_t<u64> internalData[31]; be_t<u32> buffer;
be_t<u32> sp_;
}; };
CHECK_SIZE(CellSailDescriptor, 0x100); CHECK_MAX_SIZE(CellSailDescriptor, 0x100);
struct CellSailStartCommand struct CellSailStartCommand
{ {
@ -1107,6 +1130,53 @@ struct CellSailPlayer
s32 descriptors; s32 descriptors;
vm::ptr<CellSailDescriptor> registeredDescriptors[2]; vm::ptr<CellSailDescriptor> registeredDescriptors[2];
bool paused; bool paused;
vm::ptr<CellSailSoundAdapter> sAdapter;
vm::ptr<CellSailGraphicsAdapter> gAdapter;
}; };
CHECK_MAX_SIZE(CellSailPlayer, 0x100); CHECK_MAX_SIZE(CellSailPlayer, 0x100);
inline static const char* ParameterCodeToName(s32 code)
{
switch (code)
{
case CELL_SAIL_PARAMETER_ENABLE_VPOST: return "ENABLE_VPOST";
case CELL_SAIL_PARAMETER_CONTROL_QUEUE_DEPTH: return "CONTROL_QUEUE_DEPTH";
case CELL_SAIL_PARAMETER_CONTROL_PPU_THREAD_PRIORITY: return "CONTROL_PPU_THREAD_PRIORITY";
case CELL_SAIL_PARAMETER_SPURS_NUM_OF_SPUS: return "SPURS_NUM_OF_SPUS";
case CELL_SAIL_PARAMETER_SPURS_SPU_THREAD_PRIORITY: return "SPURS_SPU_THREAD_PRIORITY";
case CELL_SAIL_PARAMETER_SPURS_PPU_THREAD_PRIORITY: return "SPURS_PPU_THREAD_PRIORITY";
case CELL_SAIL_PARAMETER_SPURS_EXIT_IF_NO_WORK: return "SPURS_EXIT_IF_NO_WORK";
case CELL_SAIL_PARAMETER_IO_PPU_THREAD_PRIORITY: return "IO_PPU_THREAD_PRIORITY";
case CELL_SAIL_PARAMETER_DMUX_PPU_THREAD_PRIORITY: return "DMUX_PPU_THREAD_PRIORITY";
case CELL_SAIL_PARAMETER_DMUX_SPU_THREAD_PRIORITY: return "DMUX_SPU_THREAD_PRIORITY";
case CELL_SAIL_PARAMETER_DMUX_NUM_OF_SPUS: return "DMUX_NUM_OF_SPUS";
case CELL_SAIL_PARAMETER_DMUX_SPURS_TASK_PRIORITIES: return "DMUX_SPURS_TASK_PRIORITIES";
case CELL_SAIL_PARAMETER_ADEC_PPU_THREAD_PRIORITY: return "ADEC_PPU_THREAD_PRIORITY";
case CELL_SAIL_PARAMETER_ADEC_SPU_THREAD_PRIORITY: return "ADEC_SPU_THREAD_PRIORITY";
case CELL_SAIL_PARAMETER_ADEC_NUM_OF_SPUS: return "ADEC_NUM_OF_SPUS";
case CELL_SAIL_PARAMETER_ADEC_SPURS_TASK_PRIORITIES: return "ADEC_SPURS_TASK_PRIORITIES";
case CELL_SAIL_PARAMETER_VDEC_PPU_THREAD_PRIORITY: return "VDEC_PPU_THREAD_PRIORITY";
case CELL_SAIL_PARAMETER_VDEC_SPU_THREAD_PRIORITY: return "VDEC_SPU_THREAD_PRIORITY";
case CELL_SAIL_PARAMETER_VDEC_M2V_NUM_OF_SPUS: return "VDEC_M2V_NUM_OF_SPUS";
case CELL_SAIL_PARAMETER_VDEC_AVC_NUM_OF_SPUS: return "VDEC_AVC_NUM_OF_SPUS";
case CELL_SAIL_PARAMETER_VDEC_SPURS_TASK_PRIORITIES: return "VDEC_SPURS_TASK_PRIORITIES";
case CELL_SAIL_PARAMETER_VPOST_PPU_THREAD_PRIORITY: return "VPOST_PPU_THREAD_PRIORITY";
case CELL_SAIL_PARAMETER_VPOST_SPU_THREAD_PRIORITY: return "VPOST_SPU_THREAD_PRIORITY";
case CELL_SAIL_PARAMETER_VPOST_NUM_OF_SPUS: return "VPOST_NUM_OF_SPUS";
case CELL_SAIL_PARAMETER_VPOST_SPURS_TASK_PRIORITIES: return "VPOST_SPURS_TASK_PRIORITIES";
case CELL_SAIL_PARAMETER_GRAPHICS_ADAPTER_BUFFER_RELEASE_DELAY: return "GRAPHICS_ADAPTER_BUFFER_RELEASE_DELAY";
case CELL_SAIL_PARAMETER_AV_SYNC_ES_AUDIO: return "AV_SYNC_ES_AUDIO";
case CELL_SAIL_PARAMETER_AV_SYNC_ES_VIDEO: return "AV_SYNC_ES_VIDEO";
case CELL_SAIL_PARAMETER_AV_SYNC_ES_USER: return "AV_SYNC_ES_USER";
case CELL_SAIL_PARAMETER_CONTROL_PPU_THREAD_STACK_SIZE: return "CONTROL_PPU_THREAD_STACK_SIZE";
case CELL_SAIL_PARAMETER_RESERVED0_: return "RESERVED0_";
case CELL_SAIL_PARAMETER_RESERVED1: return "RESERVED1";
case CELL_SAIL_PARAMETER_ENABLE_APOST_SRC: return "ENABLE_APOST_SRC";
case CELL_SAIL_PARAMETER_FS: return "FS";
case CELL_SAIL_PARAMETER_IO_PPU_THREAD_STACK_SIZE: return "IO_PPU_THREAD_STACK_SIZE";
case CELL_SAIL_PARAMETER_VIDEO_PERFORMANCE_POLICY: return "VIDEO_PERFORMANCE_POLICY";
case _CELL_SAIL_PARAMETER_TYPE_NUM_OF_ELEMENTS: return "TYPE_NUM_OF_ELEMENTS";
default: return "???";
}
}