private void TryEvent(EventParams ep) { int hr; int i = 0; IntPtr ip = IntPtr.Zero; if (!m_bWorked) { DVRStreamDesc sd = new DVRStreamDesc(); ip = IntPtr.Zero; i = 0; try { hr = m_se.GetEvent(ep.EventID, ep.Param3, ref i, ip); Debug.WriteLine(string.Format("{0} {1}", hr, i)); if (hr >= 0) { ip = Marshal.AllocCoTaskMem(i); hr = m_se.GetEvent(ep.EventID, ep.Param3, ref i, ip); Marshal.PtrToStructure(ip, sd); m_bWorked = hr >= 0 && sd.guidFormatType == sd.MediaType.formatType && sd.guidFormatType != Guid.Empty; } } finally { Marshal.FreeCoTaskMem(ip); } } }
private void ProcEvents() { bool bDone = false; int hr; bool sp; int i = 0; IntPtr ip = IntPtr.Zero; while (!bDone) { while (m_Q.Count == 0) { Thread.Sleep(1); } EventParams ep = (EventParams)m_Q.Dequeue(); switch (ep.ec) { case EventCmd.Init: Config2(); break; case EventCmd.Run: m_mc.Run(); break; case EventCmd.Event: Debug.WriteLine(ep.EventID); if (ep.EventID == SBEEvent.StreamDescEvent) { if (!m_bWorked) { DVRStreamDesc sd = new DVRStreamDesc(); ip = IntPtr.Zero; sp = false; i = 0; hr = m_ge.GetEvent(ep.EventID, ep.Param1, ep.Param2, ep.Param3, ep.Param4, out sp, ref i, ip); Thread.Sleep(1); ip = Marshal.AllocCoTaskMem(i); try { sp = false; hr = m_ge.GetEvent(ep.EventID, ep.Param1, ep.Param2, ep.Param3, ep.Param4, out sp, ref i, ip); Marshal.PtrToStructure(ip, sd); m_bWorked = hr == 0 && sd.guidFormatType == sd.MediaType.formatType && sd.guidFormatType != Guid.Empty; } finally { Marshal.FreeCoTaskMem(ip); } } break; } break; case EventCmd.Exit: bDone = true; break; } m_re.Set(); } }