Cleaned IPU's COUTFIFO class.

This commit is contained in:
Jean-Philip Desjardins 2014-08-01 02:15:25 -04:00
parent fdaeeb7166
commit b82dd95c6f
2 changed files with 32 additions and 48 deletions

View File

@ -19,7 +19,6 @@
#include "idct/IEEE1180.h"
#include "DMAC.h"
#include "Log.h"
#include "PtrMacro.h"
#define LOG_NAME ("ipu")
//#define _DECODE_LOGGING
@ -589,29 +588,21 @@ void CIPU::DisassembleCommand(uint32 nValue)
}
}
/////////////////////////////////////////////
//COutFifoBase class implementation
/////////////////////////////////////////////
CIPU::COutFifoBase::~COutFifoBase()
{
}
/////////////////////////////////////////////
//OUT FIFO class implementation
/////////////////////////////////////////////
CIPU::COUTFIFO::COUTFIFO()
: m_buffer(nullptr)
, m_alloc(0)
, m_size(0)
{
m_pBuffer = NULL;
m_nAlloc = 0;
m_nSize = 0;
}
CIPU::COUTFIFO::~COUTFIFO()
{
DELETEPTR(m_pBuffer);
free(m_buffer);
}
void CIPU::COUTFIFO::SetReceiveHandler(const Dma3ReceiveHandler& handler)
@ -619,33 +610,33 @@ void CIPU::COUTFIFO::SetReceiveHandler(const Dma3ReceiveHandler& handler)
m_receiveHandler = handler;
}
void CIPU::COUTFIFO::Write(void* pData, unsigned int nSize)
void CIPU::COUTFIFO::Write(void* data, unsigned int size)
{
RequestGrow(nSize);
RequestGrow(size);
memcpy(m_pBuffer + m_nSize, pData, nSize);
m_nSize += nSize;
memcpy(m_buffer + m_size, data, size);
m_size += size;
}
void CIPU::COUTFIFO::Flush()
{
//Write to memory through DMA channel 3
assert((m_nSize & 0x0F) == 0);
uint32 nCopied = m_receiveHandler(m_pBuffer, m_nSize / 0x10);
nCopied *= 0x10;
assert((m_size & 0x0F) == 0);
uint32 copied = m_receiveHandler(m_buffer, m_size / 0x10);
copied *= 0x10;
assert(m_nSize == nCopied);
assert(m_size == copied);
memmove(m_pBuffer, m_pBuffer + nCopied, m_nSize - nCopied);
m_nSize -= nCopied;
memmove(m_buffer, m_buffer + copied, m_size - copied);
m_size -= copied;
}
void CIPU::COUTFIFO::RequestGrow(unsigned int nSize)
void CIPU::COUTFIFO::RequestGrow(unsigned int size)
{
while(m_nAlloc <= (nSize + m_nSize))
while(m_alloc <= (size + m_size))
{
m_nAlloc += GROWSIZE;
m_pBuffer = (uint8*)realloc(m_pBuffer, m_nAlloc);
m_alloc += GROWSIZE;
m_buffer = reinterpret_cast<uint8*>(realloc(m_buffer, m_alloc));
}
}
@ -833,7 +824,7 @@ CIPU::CBDECCommand::CBDECCommand()
memset(&m_context, 0, sizeof(m_context));
}
void CIPU::CBDECCommand::Initialize(CINFIFO* inFifo, COutFifoBase* outFifo, uint32 commandCode, const CONTEXT& context)
void CIPU::CBDECCommand::Initialize(CINFIFO* inFifo, COUTFIFO* outFifo, uint32 commandCode, const CONTEXT& context)
{
m_mbi = static_cast<uint8>((commandCode >> 27) & 1) != 0;
m_dcr = static_cast<uint8>((commandCode >> 26) & 1) != 0;

View File

@ -42,34 +42,27 @@ private:
IPU_CTRL_RST = 0x40000000,
};
class COutFifoBase
class COUTFIFO
{
public:
virtual ~COutFifoBase();
virtual void Write(void*, unsigned int) = 0;
virtual void Flush() = 0;
};
COUTFIFO();
virtual ~COUTFIFO();
class COUTFIFO : public COutFifoBase
{
public:
COUTFIFO();
virtual ~COUTFIFO();
virtual void Write(void*, unsigned int);
virtual void Flush();
void SetReceiveHandler(const Dma3ReceiveHandler&);
void Write(void*, unsigned int);
void Flush();
void SetReceiveHandler(const Dma3ReceiveHandler&);
private:
void RequestGrow(unsigned int);
void RequestGrow(unsigned int);
enum GROWSIZE
{
GROWSIZE = 0x200,
};
unsigned int m_nSize;
unsigned int m_nAlloc;
uint8* m_pBuffer;
unsigned int m_size;
unsigned int m_alloc;
uint8* m_buffer;
Dma3ReceiveHandler m_receiveHandler;
};
@ -202,7 +195,7 @@ private:
};
CBDECCommand();
void Initialize(CINFIFO*, COutFifoBase*, uint32, const CONTEXT&);
void Initialize(CINFIFO*, COUTFIFO*, uint32, const CONTEXT&);
void Execute();
private:
@ -224,7 +217,7 @@ private:
};
CINFIFO* m_IN_FIFO;
COutFifoBase* m_OUT_FIFO;
COUTFIFO* m_OUT_FIFO;
STATE m_state;
bool m_mbi;