private void HoldLastBlock(IntPtr pBlockHandle, LibVLCAccess.block_t block, int offset) { if (IntPtr.Zero != pBlockHandle) { if (offset < block.i_buffer) { _LastBlockHandle = pBlockHandle; _LastBlock = block; _LastBlockOffset = offset; } else { ReleaseBlock(pBlockHandle, block); } } }
private void Init(byte[] data, int length) { _ptrBlock = Marshal.AllocHGlobal(BlockStructSize); _handle = GCHandle.Alloc(data, GCHandleType.Pinned); IntPtr ptrBuffer = _handle.AddrOfPinnedObject(); //Marshal.WriteInt32(ptr + 5 * 8, Length); //Marshal.WriteIntPtr(ptr + 5 * 8 + 4, ptrBuffer); LibVLCAccess.block_t vlcblock = new LibVLCAccess.block_t(); vlcblock.i_buffer = data.Length; vlcblock.p_buffer = ptrBuffer; Marshal.StructureToPtr(vlcblock, _ptrBlock, false); //Marshal.WriteInt32(ptr + 6 * 8 + 4, GetAllocSize()); }
protected IntPtr ReadBlock(out LibVLCAccess.block_t block) { if (IntPtr.Zero == _AccessVLCObject) { throw new ObjectDisposedException("AccessVLCObject"); } IntPtr pBlock = InvokeImport.InvokeFunc(_funcReadBlock, _AccessVLCObject); if (IntPtr.Zero != pBlock) { block = (LibVLCAccess.block_t)Marshal.PtrToStructure(pBlock, typeof(LibVLCAccess.block_t)); } else { block = new LibVLCAccess.block_t(); } return pBlock; }
private void ReleaseLastBuffer(bool disposing) { if (IntPtr.Zero != _LastBlockHandle) { ReleaseBlock(_LastBlockHandle, _LastBlock); _LastBlockHandle = IntPtr.Zero; if (disposing) { _LastBlock = new LibVLCAccess.block_t(); } _LastBlockOffset = 0; } }