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; }
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; }
public int sceMpegRingbufferPut(SceMpegRingbuffer* Ringbuffer, int iNumPackets, int iAvailable) { //throw(new NotImplementedException()); return 0; }
public void sceMpegRingbufferDestruct(SceMpegRingbuffer* Ringbuffer) { //throw(new NotImplementedException()); }
public int sceMpegRingbufferConstruct(SceMpegRingbuffer* Ringbuffer, int iPackets, void* pData, int iSize, int/*sceMpegRingbufferCB*/ Callback, void* pCBparam) { //throw(new NotImplementedException()); return 0; }
public int sceMpegRingbufferAvailableSize(SceMpegRingbuffer* Ringbuffer) { //throw(new NotImplementedException()); //return -1; return 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; }
public int sceMpegRingbufferAvailableSize(SceMpegRingbuffer* Ringbuffer) { if (Ringbuffer->PacketsFree > 0) Ringbuffer->PacketsFree--; //if (Ringbuffer->avai > 0) Ringbuffer->PacketsFree--; return Ringbuffer->PacketsFree; }
public int sceMpegRingbufferDestruct(SceMpegRingbuffer* Ringbuffer) { //throw(new NotImplementedException()); return 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; }
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; }
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; }
public int sceMpegRingbufferDestruct(SceMpegRingbuffer* Ringbuffer) { Ringbuffer->PacketsAvailable = Ringbuffer->PacketsTotal; Ringbuffer->PacketsRead = 0; Ringbuffer->PacketsWritten = 0; return 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; }
public int sceMpegRingbufferAvailableSize(SceMpegRingbuffer* Ringbuffer) { return Ringbuffer->PacketsAvailable; }