unsafe void OnpDisplay(void *opaque, void *picture) { lock (m_lock) { try { PixelData *px = (PixelData *)opaque; MemoryHeap.CopyMemory(m_pBuffer, px->pPixelData, px->size); m_frameRate++; if (m_callback != null) { using (Bitmap frame = GetBitmap()) { m_callback(frame); } } } catch (Exception ex) { if (m_excHandler != null) { m_excHandler(ex); } else { throw ex; } } } }
private FrameData DeepClone(IntPtr data, int size) { FrameData clone = new FrameData(); clone.Data = new IntPtr(MemoryHeap.Alloc(size)); MemoryHeap.CopyMemory(clone.Data.ToPointer(), data.ToPointer(), size); clone.DataSize = size; return(clone); }
unsafe void OnpDisplay(void *opaque, void *picture) { lock (m_lock) { PixelData *px = (PixelData *)opaque; MemoryHeap.CopyMemory(m_pBuffer, px->pPixelData, px->size); m_frameRate++; if (m_callback != null) { using (Bitmap frame = GetBitmap()) { m_callback(frame); } } } }
public void AddFrame(Bitmap frame) { Monitor.Enter(m_lock); try { Rectangle rect = new Rectangle(0, 0, frame.Width, frame.Height); BitmapData bmpData = frame.LockBits(rect, ImageLockMode.ReadOnly, frame.PixelFormat); void *pData = bmpData.Scan0.ToPointer(); MemoryHeap.CopyMemory(m_data.pPixelData, pData, m_data.size); frame.UnlockBits(bmpData); } finally { Monitor.Exit(m_lock); } }