Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
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);
        }
Beispiel #4
0
        public int sceMpegRingbufferAvailableSize(int ringbuffer)
        {
            sceMpegRingbuffer *rb = ( sceMpegRingbuffer * )_memorySystem.Translate(( uint )ringbuffer);

            return(rb->iUnk0);
        }