using DirectShowLib; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace Tango.Video.DirectShow { internal class SampleGrabberImpl : ISampleGrabberCB { #region delegates public delegate int BufferCallback(double SampleTime, IntPtr pBuffer, int BufferLen); public delegate int BufferCallback2(double sampleTime, IMediaSample pSample); #endregion #region Members readonly BufferCallback _callback; readonly BufferCallback2 _callback2; #endregion #region Constructor public SampleGrabberImpl(BufferCallback callback, BufferCallback2 callback2 = null) { _callback = callback; _callback2 = callback2; } #endregion #region ISampleGrabberCB Members public int BufferCB(double SampleTime, IntPtr pBuffer, int BufferLen) { if (_callback != null) { return _callback(SampleTime, pBuffer, BufferLen); } return 0; } public int SampleCB(double SampleTime, IMediaSample pSample) { if (_callback2 != null) { return _callback2(SampleTime, pSample); } Marshal.ReleaseComObject(pSample); return 0; } #endregion } }