private bool RingbufferPutComplete(int tcsId, int state, int result) { sceMpegRingbuffer *rb = ( sceMpegRingbuffer * )_memorySystem.Translate(( uint )state); if (result >= 0) { // Ok RingBuffer.EndWrite(( byte * )rb->pData, rb->iPackets, rb->iPacketSize, ref rb->iWritePackets, result); rb->iUnk0 -= result; } else { // Failed } _kernel.Cpu.SetContextRegister(_kernel.ActiveThread.ContextID, 2, ( uint )result); return(true); }
public int sceMpegRingbufferConstruct(uint ringbuffer, int packets, int allocated, int size, int callback, int cbparam) { sceMpegRingbuffer *rb = ( sceMpegRingbuffer * )_memorySystem.Translate(ringbuffer); rb->iPackets = packets; rb->iReadPackets = 0; rb->iWritePackets = 0; rb->iUnk0 = packets; // using this as remaining for now rb->iPacketSize = 2048; rb->pData = allocated; rb->Callback = callback; rb->pCBparam = cbparam; rb->pDataUpperBound = allocated + (packets * 104) + (packets * 2048); rb->iSemaphoreID = 123456; rb->pSceMpeg = 0; return(0); }
public int sceMpegRingbufferPut(int ringbuffer, int packets, int available) { sceMpegRingbuffer *rb = ( sceMpegRingbuffer * )_memorySystem.Translate(( uint )ringbuffer); int toWrite = Math.Min(rb->iUnk0, packets); if (toWrite == 0) { // Full return(0); } // Write position byte *ptr = RingBuffer.BeginWrite(( byte * )rb->pData, rb->iPackets, rb->iPacketSize, rb->iWritePackets); // int callback( ringbuffer, packets, cbparam ) _kernel.Cpu.MarshalCall(_kernel.ActiveThread.ContextID, ( uint )rb->Callback, new uint[] { ( uint )ptr, ( uint )toWrite, ( uint )rb->pCBparam }, RingbufferPutComplete, ringbuffer); return(toWrite); }
public int sceMpegRingbufferAvailableSize(int ringbuffer) { sceMpegRingbuffer *rb = ( sceMpegRingbuffer * )_memorySystem.Translate(( uint )ringbuffer); return(rb->iUnk0); }