Beispiel #1
0
		public int sceMpegCreate(SceMpegPointer* Mpeg, void* MpegData, int MpegSize, SceMpegRingbuffer* SceMpegRingbuffer, int FrameWidth, int Mode, int DdrTop)
		{
			CheckEnabledMpeg();

			//return -1;

			if (MpegSize < sceMpegQueryMemSize(0))
			{
				throw (new SceKernelException(SceKernelErrors.ERROR_MPEG_NO_MEMORY));
			}

			// Update the ring buffer struct.
			if (SceMpegRingbuffer->PacketSize == 0)
			{
				SceMpegRingbuffer->PacketsFree = 0;
			}
			else
			{
				SceMpegRingbuffer->PacketsFree = (int)((SceMpegRingbuffer->DataUpperBound.Address - SceMpegRingbuffer->Data.Address) / SceMpegRingbuffer->PacketSize);
			}
			SceMpegRingbuffer->SceMpeg = PspMemory.PointerToPspPointer(Mpeg);

			SceMpeg* SceMpegData = (SceMpeg*)&((byte*)MpegData)[0x30];

			Mpeg->SceMpeg = PspMemory.PointerToPspPointer(SceMpegData);

			PointerUtils.StoreStringOnPtr("LIBMPEG.001", Encoding.UTF8, SceMpegData->MagicBytes);
			SceMpegData->Unknown1 = -1;
			SceMpegData->RingBufferAddress = PspMemory.PointerToPspPointer(SceMpegRingbuffer);
			SceMpegData->RingBufferAddressDataUpper = SceMpegRingbuffer->DataUpperBound;
			SceMpegData->FrameWidth = FrameWidth;
			SceMpegData->SceMpegAvcMode.PixelFormat = Core.GuPixelFormats.RGBA_8888;
			SceMpegData->VideoFrameCount = 0;
			SceMpegData->AudioFrameCount = 0;

			SceMpegRingbuffer->Packets = 0;

			return 0;
		}
Beispiel #2
0
		public int sceMpegRingbufferConstruct(SceMpegRingbuffer* Ringbuffer, int Packets, PspPointer Data, int Size, PspPointer Callback, PspPointer CallbackParam)
		{
			//return -1;
			//throw(new NotImplementedException());
			Ringbuffer->Packets = Packets;
			Ringbuffer->PacketsRead = 0;
			Ringbuffer->PacketsWritten = 0;
			Ringbuffer->PacketsFree = 0; // set later
			Ringbuffer->PacketSize = RingBufferPacketSize;
			Ringbuffer->Data = Data;
			Ringbuffer->DataUpperBound = (uint)(Data + Ringbuffer->Packets * Ringbuffer->PacketSize);
			Ringbuffer->Callback = Callback;
			Ringbuffer->CallbackParameter = CallbackParam;
			Ringbuffer->SemaId = -1;
			Ringbuffer->SceMpeg = 0;

			if (Ringbuffer->DataUpperBound > Ringbuffer->Data + Size)
			{
				throw(new InvalidOperationException());
			}

			return 0;
		}
Beispiel #3
0
 public int sceMpegRingbufferPut(SceMpegRingbuffer* Ringbuffer, int iNumPackets, int iAvailable)
 {
     //throw(new NotImplementedException());
     return 0;
 }
Beispiel #4
0
 public void sceMpegRingbufferDestruct(SceMpegRingbuffer* Ringbuffer)
 {
     //throw(new NotImplementedException());
 }
Beispiel #5
0
 public int sceMpegRingbufferConstruct(SceMpegRingbuffer* Ringbuffer, int iPackets, void* pData, int iSize, int/*sceMpegRingbufferCB*/ Callback, void* pCBparam)
 {
     //throw(new NotImplementedException());
     return 0;
 }
Beispiel #6
0
 public int sceMpegRingbufferAvailableSize(SceMpegRingbuffer* Ringbuffer)
 {
     //throw(new NotImplementedException());
     //return -1;
     return 0;
 }
Beispiel #7
0
 public int sceMpegCreate(SceMpeg* Mpeg, void* pData, int iSize, SceMpegRingbuffer* Ringbuffer, int iFrameWidth, int iUnk1, int iUnk2)
 {
     //throw (new NotImplementedException());
     //Ringbuffer.iPackets = 0;
     return -1;
 }
Beispiel #8
0
		public int sceMpegRingbufferAvailableSize(SceMpegRingbuffer* Ringbuffer)
		{
			if (Ringbuffer->PacketsFree > 0) Ringbuffer->PacketsFree--;
			//if (Ringbuffer->avai > 0) Ringbuffer->PacketsFree--;
			return Ringbuffer->PacketsFree;
		}
Beispiel #9
0
		public int sceMpegRingbufferDestruct(SceMpegRingbuffer* Ringbuffer)
		{
			//throw(new NotImplementedException());
			return 0;
		}
Beispiel #10
0
		public int sceMpegRingbufferPut(SceMpegRingbuffer* Ringbuffer, int NumPackets, int Available)
		{
			//throw(new SceKernelException(SceKernelErrors.ERROR_MPEG_NO_MEMORY));

			if (NumPackets < 0)
			{
				return 0;
			}

			NumPackets = Math.Min(Available, NumPackets);

			var SceMpegPointer = (SceMpegPointer *)Ringbuffer->SceMpeg.GetPointer<SceMpegPointer>(PspMemory);
			var SceMpeg = SceMpegPointer->GetSceMpeg(PspMemory);
			var MpegStreamPackets = (int)MathUtils.RequiredBlocks(SceMpeg->StreamSize, Ringbuffer->PacketSize);
			var RemainingPackets = Math.Max(0, MpegStreamPackets - Ringbuffer->PacketsRead);

			NumPackets = Math.Min(NumPackets, RemainingPackets);

			//Ringbuffer->Data
			var Result = (int)HleInterop.ExecuteFunctionNow(
				// Functions
				Ringbuffer->Callback,
				// Arguments
				Ringbuffer->Data,
				NumPackets,
				Ringbuffer->CallbackParameter
			);

			//Ringbuffer->PacketsFree -= NumPackets;
			//Ringbuffer->PacketsWritten += NumPackets;

			return Result;
		}
Beispiel #11
0
        public int sceMpegCreate(SceMpegPointer* SceMpegPointer, void* MpegData, int MpegSize, SceMpegRingbuffer* SceMpegRingbuffer, int FrameWidth, int Mode, int DdrTop)
        {
            //return -1;

            var Mpeg = GetMpeg(SceMpegPointer);

            if (MpegSize < sceMpegQueryMemSize(0))
            {
                throw (new SceKernelException(SceKernelErrors.ERROR_MPEG_NO_MEMORY));
            }

            // Update the ring buffer struct.
            if (SceMpegRingbuffer->PacketSize == 0)
            {
                SceMpegRingbuffer->PacketsAvailable = 0;
            }
            else
            {
                SceMpegRingbuffer->PacketsAvailable = (int)((SceMpegRingbuffer->DataEnd.Address - SceMpegRingbuffer->Data.Address) / SceMpegRingbuffer->PacketSize);
            }

            SceMpegRingbuffer->SceMpeg = Memory.PointerToPspPointer(SceMpegPointer);

            SceMpeg* SceMpegData = (SceMpeg*)&((byte*)MpegData)[0x30];

            SceMpegPointer->SceMpeg = Memory.PointerToPspPointer(SceMpegData);

            PointerUtils.StoreStringOnPtr("LIBMPEG", Encoding.UTF8, SceMpegData->MagicBytes);
            PointerUtils.StoreStringOnPtr("001", Encoding.UTF8, SceMpegData->VersionBytes);
            SceMpegData->Pad = -1;
            SceMpegData->RingBufferAddress = Memory.PointerToPspPointer(SceMpegRingbuffer);
            SceMpegData->RingBufferAddressDataUpper = SceMpegRingbuffer->DataEnd;
            SceMpegData->FrameWidth = FrameWidth;
            SceMpegData->SceMpegAvcMode.Mode = -1;
            SceMpegData->SceMpegAvcMode.PixelFormat = GuPixelFormats.RGBA_8888;
            SceMpegData->VideoFrameCount = 0;
            SceMpegData->AudioFrameCount = 0;

            SceMpegRingbuffer->PacketsTotal = 0;

            Mpeg.ReadPackets = (int NumPackets) =>
            {
                return (int)HleInterop.ExecuteFunctionNow(SceMpegRingbuffer->Callback, SceMpegRingbuffer->Data, NumPackets, SceMpegRingbuffer->CallbackParameter);
            };

            Mpeg._Mpeg = SceMpegPointer;
            Mpeg.Data = SceMpegData;
            Mpeg.Create();

            return 0;
        }
Beispiel #12
0
        public int sceMpegRingbufferPut(SceMpegRingbuffer* Ringbuffer, int NumPackets, int Available)
        {
            if (NumPackets < 0) return 0;

            NumPackets = Math.Min(Available, NumPackets);

            var SceMpegPointer = (SceMpegPointer*)Ringbuffer->SceMpeg.GetPointer<SceMpegPointer>(Memory);
            var Mpeg = GetMpeg(SceMpegPointer);
            var SceMpeg = SceMpegPointer->GetSceMpeg(Memory);
            var MpegStreamPackets = (int)MathUtils.RequiredBlocks(SceMpeg->StreamSize, Ringbuffer->PacketSize);
            var RemainingPackets = Math.Max(0, MpegStreamPackets - Ringbuffer->PacketsRead);

            var PacketsAdded = Mpeg.ReadPackets(NumPackets);
            var DataLength = (int)(PacketsAdded * Ringbuffer->PacketSize);
            Mpeg.WriteData(Ringbuffer->Data.GetPointer(Memory, DataLength), DataLength);

            //
            //NumPackets = Math.Min(NumPackets, RemainingPackets);
            //
            //var PacketsAdded = (int)HleInterop.ExecuteFunctionNow(Ringbuffer->Callback, Ringbuffer->Data, NumPackets, Ringbuffer->CallbackParameter);
            //
            //if (PacketsAdded > 0)
            //{
            //	var DataLength = (int)(PacketsAdded * Ringbuffer->PacketSize);
            //	var DataPointer = Ringbuffer->Data.GetPointer(Memory, DataLength);
            //
            //	Mpeg.WriteData(DataPointer, DataLength);
            //
            //	//if (PacketsAdded > Ringbuffer->PacketsFree)
            //	//{
            //	//	PacketsAdded = Ringbuffer->PacketsFree;
            //	//}
            //
            //	//Ringbuffer->PacketsFree -= packetsAdded;
            //	//Ringbuffer->Data.Address += (uint)(Ringbuffer->PacketSize * packetsAdded);
            //
            //	//throw(new NotImplementedException());
            //	Console.Error.WriteLine("sceMpegRingbufferPut.NotImplemented");
            //}
            //
            ////Ringbuffer->PacketsFree -= NumPackets;
            ////Ringbuffer->PacketsWritten += NumPackets;

            return PacketsAdded;
        }
Beispiel #13
0
 public int sceMpegRingbufferDestruct(SceMpegRingbuffer* Ringbuffer)
 {
     Ringbuffer->PacketsAvailable = Ringbuffer->PacketsTotal;
     Ringbuffer->PacketsRead = 0;
     Ringbuffer->PacketsWritten = 0;
     return 0;
 }
Beispiel #14
0
        public int sceMpegRingbufferConstruct(SceMpegRingbuffer* Ringbuffer, int Packets, PspPointer Data, int Size, PspPointer Callback, PspPointer CallbackParam)
        {
            Ringbuffer->PacketsTotal = Packets;
            Ringbuffer->PacketsRead = 0;
            Ringbuffer->PacketsWritten = 0;
            Ringbuffer->PacketsAvailable = 0; // set later
            Ringbuffer->PacketSize = RingBufferPacketSize;
            Ringbuffer->Data = Data;
            Ringbuffer->DataEnd = (uint)(Data + Ringbuffer->PacketsTotal * Ringbuffer->PacketSize);
            Ringbuffer->Callback = Callback;
            Ringbuffer->CallbackParameter = CallbackParam;
            Ringbuffer->SemaId = -1;
            Ringbuffer->SceMpeg = 0;

            if (Ringbuffer->DataEnd > Ringbuffer->Data + Size)
            {
                throw (new InvalidOperationException());
            }

            return 0;
        }
Beispiel #15
0
 public int sceMpegRingbufferAvailableSize(SceMpegRingbuffer* Ringbuffer)
 {
     return Ringbuffer->PacketsAvailable;
 }