Bootstrap MxMediaPresenter (#274)

* Bootstrap MxMediaPresenter

* Add override
This commit is contained in:
Christian Semmler
2023-11-12 07:47:01 -05:00
committed by GitHub
parent e2f2ef6152
commit 04b503c79f
12 changed files with 176 additions and 49 deletions

View File

@@ -1,5 +1,8 @@
#include "mxmediapresenter.h"
#include "mxautolocker.h"
#include "mxstreamchunk.h"
DECOMP_SIZE_ASSERT(MxMediaPresenter, 0x50);
// OFFSET: LEGO1 0x1000c550
@@ -8,26 +11,59 @@ MxMediaPresenter::~MxMediaPresenter()
Destroy(TRUE);
}
// OFFSET: LEGO1 0x100b5d10 STUB
MxResult MxMediaPresenter::Tickle()
// OFFSET: LEGO1 0x1000c5b0
void MxMediaPresenter::Destroy()
{
// TODO
return SUCCESS;
Destroy(FALSE);
}
// OFFSET: LEGO1 0x100b54e0
void MxMediaPresenter::Init()
{
this->m_unk40 = NULL;
this->m_unk44 = NULL;
this->m_unk48 = NULL;
this->m_unk4c = NULL;
this->m_subscriber = NULL;
this->m_chunks = NULL;
this->m_cursor = NULL;
this->m_currentChunk = NULL;
}
// OFFSET: LEGO1 0x100b54f0 STUB
// OFFSET: LEGO1 0x100b54f0
void MxMediaPresenter::Destroy(MxBool p_fromDestructor)
{
{
MxAutoLocker lock(&m_criticalSection);
if (m_currentChunk && m_subscriber)
m_subscriber->FUN_100b8390(m_currentChunk);
if (m_subscriber)
delete m_subscriber;
if (m_cursor)
delete m_cursor;
if (m_chunks) {
MxStreamChunkListCursor cursor(m_chunks);
MxStreamChunk* chunk;
while (cursor.Next(chunk))
if (chunk->m_unk18)
delete[] chunk->m_unk18;
delete m_chunks;
}
Init();
}
if (!p_fromDestructor)
MxPresenter::Destroy();
}
// OFFSET: LEGO1 0x100b5d10 STUB
MxResult MxMediaPresenter::Tickle()
{
// TODO
return SUCCESS;
}
// OFFSET: LEGO1 0x100b5d90 STUB
@@ -56,16 +92,34 @@ void MxMediaPresenter::Enable(MxBool p_enable)
// TODO
}
// OFFSET: LEGO1 0x1000c5b0
void MxMediaPresenter::Destroy()
// OFFSET: LEGO1 0x100b5700
MxResult MxMediaPresenter::StartAction(MxStreamController* p_controller, MxDSAction* p_action)
{
Destroy(FALSE);
}
MxResult result = FAILURE;
MxAutoLocker lock(&m_criticalSection);
// OFFSET: LEGO1 0x100b5700 STUB
MxLong MxMediaPresenter::StartAction(MxStreamController* p_controller, MxDSAction* p_action)
{
return 0;
if (MxPresenter::StartAction(p_controller, p_action) == SUCCESS) {
if (m_action->GetFlags() & MxDSAction::Flag_Looping) {
m_chunks = new MxStreamChunkList;
m_cursor = new MxStreamChunkListCursor(m_chunks);
if (!m_chunks && !m_cursor)
goto done;
}
if (p_controller) {
m_subscriber = new MxDSSubscriber;
if (!m_subscriber ||
m_subscriber->FUN_100b7ed0(p_controller, p_action->GetObjectId(), p_action->GetUnknown24()) != SUCCESS)
goto done;
}
result = SUCCESS;
}
done:
return result;
}
// OFFSET: LEGO1 0x100b5bc0 STUB