private void _eventTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { try { _eventTimer.Enabled = false; IMediaEventEx mediaEvent = _graphBuilder as IMediaEventEx; if (mediaEvent == null) { AppLogger.Message("couldn't get IMediaEventEx from graph builder!"); return; } EventCode eventCode; IntPtr lparam1, lparam2; while (mediaEvent.GetEvent(out eventCode, out lparam1, out lparam2, 10) == 0) { AppLogger.Message("ASFNetSink -- Got Media Event: " + eventCode.ToString() + " 0x" + lparam1.ToString("X") + " 0x" + lparam2.ToString("X")); OnDirectShowEvent(eventCode, lparam1, lparam2); mediaEvent.FreeEventParams(eventCode, lparam1, lparam2); } _eventTimer.Enabled = true; } catch (Exception ex) { AppLogger.Message("ASFNetSink -- Can't get Media Event due to an error"); AppLogger.Dump(ex); } }
// Filter graph events public void HandleGraphEvent(GraphEventCallback pCB) { if (pCB == null) { throw new COMException("No callback set", E_Pointer); } if (m_pEvent == null) { throw new COMException("No event pointer", E_Unexpected); } EventCode evCode = 0; IntPtr param1, param2; // Get the events from the queue. while (Succeeded(m_pEvent.GetEvent(out evCode, out param1, out param2, 0))) { // Invoke the callback. pCB.OnGraphEvent(evCode, param1, param2); // Free the event data. int hr = m_pEvent.FreeEventParams(evCode, param1, param2); DsError.ThrowExceptionForHR(hr); } }
public override void OnVideoEvent(int cookies) { if (this.graphBuilder == null || this.graphBuilder2 == null) { return; } try { if (cookies == cookiesSink) { IMediaEventEx mediaEvent = this.graphBuilder as IMediaEventEx; EventCode eventCode; IntPtr param1, param2; while (mediaEvent.GetEvent(out eventCode, out param1, out param2, 0) >= 0) { Trace.WriteLineIf(trace.TraceVerbose, "OnVideoEvent(Sink) -> " + eventCode.ToString()); if (eventCode == EventCode.VMRRenderDeviceSet) { VideoRefresh(); } //switch (eventCode) //{ // // Call application-defined functions for each // // type of event that you want to handle. //} int hr = mediaEvent.FreeEventParams(eventCode, param1, param2); } } else if (cookies == cookiesSource) { IMediaEventEx mediaEvent = this.graphBuilder2 as IMediaEventEx; EventCode eventCode; IntPtr param1, param2; while (mediaEvent.GetEvent(out eventCode, out param1, out param2, 0) >= 0) { Trace.WriteLineIf(trace.TraceVerbose, "OnVideoEvent(Source) -> " + eventCode.ToString()); if (eventCode == EventCode.VMRRenderDeviceSet) { VideoRefresh(); } //switch (eventCode) //{ // // Call application-defined functions for each // // type of event that you want to handle. //} int hr = mediaEvent.FreeEventParams(eventCode, param1, param2); } } } catch (Exception ex) { Trace.WriteLineIf(trace.TraceError, ex.ToString()); } }