CSPspEmu.Hle.Modules.mpeg.sceMpeg.sceMpegCreate C# (CSharp) Метод

sceMpegCreate() приватный Метод

private sceMpegCreate ( SceMpegPointer SceMpegPointer, void MpegData, int MpegSize, SceMpegRingbuffer SceMpegRingbuffer, int FrameWidth, int Mode, int DdrTop ) : int
SceMpegPointer SceMpegPointer
MpegData void
MpegSize int
SceMpegRingbuffer SceMpegRingbuffer
FrameWidth int
Mode int
DdrTop int
Результат int
        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;
        }