예제 #1
0
        /// <summary>
        /// Waits for the specified event.
        /// </summary>
        /// <param name="desiredEventCode">event code to wait for</param>
        /// <param name="msTimeout">timeout</param>
        /// <param name="actuallyReceivedEventCode">The event actually received, or "0" if no event was received</param>
        /// <param name="param">1st parameter associated with event</param>
        /// <returns>True if the desired event was received. False if timed out, or different event received</returns>
        public bool WaitForEvent(EventCode desiredEventCode, int msTimeout, out EventCode actuallyReceivedEventCode, out int param)
        {
            bool restartTimer = false;

            if (_mediaSeekTimer.Enabled)
            {
                _mediaSeekTimer.Stop();
                restartTimer = true;
            }

            int    hr = 0;
            IntPtr lparam1, lparam2;

            hr = _mediaEvent.GetEvent(out actuallyReceivedEventCode, out lparam1, out lparam2, msTimeout);
            if (DsError.Succeeded(hr))
            {
                Debug.WriteLine("WaitForEvent got " + actuallyReceivedEventCode.ToString() + " 0x" + lparam1.ToString("X") + " 0x" + lparam2.ToString("X"));
                param = lparam1.ToInt32();
                _mediaEvent.FreeEventParams(actuallyReceivedEventCode, lparam1, lparam2);
            }
            else
            {
                actuallyReceivedEventCode = 0;
                param = 0;
            }

            if (restartTimer)
            {
                _mediaSeekTimer.Start();
            }

            return(DsError.Succeeded(hr) && (actuallyReceivedEventCode == desiredEventCode));
        }
예제 #2
0
        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
            case WM_PAINT:
            {
                UpdateEnvironment();
                RenderEnvironment();
                NativeMethods.InvalidateRect(this.Handle, IntPtr.Zero, 0);
                return;
            }

            case WM_GRAPHNOTIFY:
            {
                IMediaEventEx eventEx = (IMediaEventEx)graphBuilder;

                EventCode evCode;
                IntPtr    param1, param2;

                while (eventEx.GetEvent(out evCode, out param1, out param2, 0) == 0)
                {
                    eventEx.FreeEventParams(evCode, param1, param2);

                    Debug.WriteLine(string.Format("### Event : {0} Param1 : {1} Param2 {2}", evCode.ToString(), param1.ToString(), param2.ToString()));
                }

                break;
            }
            }

            base.WndProc(ref m);
        }
예제 #3
0
        // 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);
            }
        }
예제 #4
0
파일: DSGraph.cs 프로젝트: ewin66/media
        /// <summary>
        /// Called by the owning HWND when an event the graph cares about occurs
        /// </summary>
        public void NotifyMediaEvent()
        {
            IMediaEventEx mediaEvent = (IMediaEventEx)_graphBuilder;

            if (mediaEvent != null)
            {
                bool      fireComplete = false;
                EventCode eventCode;
                IntPtr    param1;
                IntPtr    param2;
                int       hr = mediaEvent.GetEvent(out eventCode, out param1, out param2, -1);
                if (hr == 0)
                {
                    if (eventCode == EventCode.Complete)
                    {
                        fireComplete = true;
                    }
                    mediaEvent.FreeEventParams(eventCode, param1, param2);
                }
                Debug.WriteLine("GetEvent got " + eventCode.ToString());
                if (fireComplete && Complete != null)
                {
                    Complete(this, new EventArgs());
                }
            }
        }
예제 #5
0
        public bool IsFinished()
        {
            if (mediaControl == null)
            {
                return(true);
            }
            FilterState state;

            mediaControl.GetState(200, out state);
            if (state == FilterState.Stopped)
            {
                Cleanup();
                return(true);
            }
            int       p1, p2, hr = 0;
            EventCode code;

            hr = mediaEvt.GetEvent(out code, out p1, out p2, 0);
            hr = mediaEvt.FreeEventParams(code, p1, p2);
            if (code == EventCode.Complete || code == EventCode.ErrorAbort)
            {
                Cleanup();
                return(true);
            }
            return(false);
        }
 protected override void WndProc(ref Message m)
 {
     if (m.Msg == WM_GRAPHNOTIFY)
     {
         timerThread.Enabled = true;
         timerThread.Start();
         int       p1, p2;
         EventCode code;
         if (me == null)
         {
             return;
         }
         while (me.GetEvent(out code, out p1, out p2, 0) == 0)
         {
             if (code == EventCode.Complete)
             {
                 timerThread.Stop();
                 timerThread.Enabled = false;
                 while (topProgressBar.Maximum != topProgressBar.Value)
                 {
                     topProgressBar.PerformStep();
                     topProgressBar.Refresh();
                 }
                 progressText.Text = "Dönüþtürme iþlemi tamamlandý";
                 start.Enabled     = true;
                 convert.Enabled   = true;
                 mc.Stop();
             }
             me.FreeEventParams(code, p1, p2);
         }
         return;
     }
     base.WndProc(ref m);
 }
        private void OnFilterGraphMessage()
        {
            int       p1, p2;
            EventCode code = EventCode.None;

            if (mediaEvent == null)
            {
                return;
            }

            while (mediaEvent.GetEvent(out code, out p1, out p2, 0) == 0)
            {
                try
                {
                    int hr = mediaEvent.FreeEventParams(code, p1, p2);
                    DsError.ThrowExceptionForHR(hr);

                    Logger.LogTrace("HandleGraphEvent: code={0} p1={1} p2={2}", code, p1, p2);
                    HandleGraphEvent(code, p1, p2);
                }
                catch (COMException ex)
                {
                    Logger.LogTrace("Filter graph message loop broken because: {0}",
                                    ErrorDispatcher.GetErrorMessageForException(ex, false));
                    break;
                }
                catch (Exception ex)
                {
                    Logger.LogException(ex);
                    break;
                }
            }
        }
예제 #8
0
        /// <summary>
        /// Called by the owning HWND when an event the graph cares about occurs
        /// </summary>
        public void NotifyMediaEvent()
        {
            IMediaEventEx mediaEvent = (IMediaEventEx)_graphBuilder;

            if (mediaEvent != null)
            {
                bool      fireComplete = false;
                EventCode eventCode;
                IntPtr    param1;
                IntPtr    param2;
                while (mediaEvent.GetEvent(out eventCode, out param1, out param2, 0) >= 0)
                {
                    if (eventCode == EventCode.Complete)
                    {
                        fireComplete = true;
                    }
                    Log(String.Format("IMediaEventEx.GetEvent got {0}", eventCode.ToString()));
                    mediaEvent.FreeEventParams(eventCode, param1, param2);
                    if (fireComplete && Complete != null)
                    {
                        Complete(this, new EventArgs());
                        break;
                    }
                }
            }
        }
예제 #9
0
        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_GRAPHNOTIFY)
            {
                int lEventCode;
                int lParam1, lParam2;

                while (true)
                {
                    try
                    {
                        mediaEventEx.GetEvent(out lEventCode,
                                              out lParam1,
                                              out lParam2,
                                              0);

                        mediaEventEx.FreeEventParams(lEventCode, lParam1, lParam2);

                        if (lEventCode == EC_COMPLETE)
                        {
                            this.Stop();
                            mediaPosition.CurrentPosition = 0;
                            this.State = MediaStatus.Stopped;
                        }
                    }
                    catch (Exception)
                    {
                        break;
                    }
                }
            }

            base.WndProc(ref m);
        }
예제 #10
0
        /// <summary>
        /// Callback that handles events sent from the IFilterGraph
        /// </summary>
        private void HandleGraphEvent()
        {
            int       hr = 0;
            EventCode evCode;
            IntPtr    evParam1, evParam2;

            // Make sure that we don't access the media event interface
            // after it has already been released.
            if (_mediaEventEx == null)
            {
                return;
            }

            // Process all queued events
            while (_mediaEventEx.GetEvent(out evCode, out evParam1, out evParam2, 0) == 0)
            {
                // Free memory associated with callback, since we're not using it
                hr = _mediaEventEx.FreeEventParams(evCode, evParam1, evParam2);

                // If this is the end of the clip, reset to beginning
                if (evCode == EventCode.Complete)
                {
                    Stop();
                    // Rewind to first frame of movie
                    hr = _mediaSeeking.SetPositions((long)_timeSliderControl.Min * 10000, AMSeekingSeekingFlags.AbsolutePositioning,
                                                    null, AMSeekingSeekingFlags.NoPositioning);
                    _timeSliderControl.Pos = _timeSliderControl.Min;
                }
            }
        }
예제 #11
0
 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);
     }
 }
예제 #12
0
        protected virtual bool ProcessGraphMessage()
        {
            if (m_MediaEventEx != null)
            {
                int hr = 0;
                while (hr == 0)
                {
                    hr = m_MediaEventEx.GetEvent(out DsEvCode _code, out int _param1, out int _param2, 20);
                    if (hr == 0)
                    {
                        hr = m_MediaEventEx.FreeEventParams(_code, _param1, _param2);

                        if (_code == DsEvCode.Complete)
                        {
                            return(true);
                        }
                        if (_code == DsEvCode.DeviceLost)
                        {
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
예제 #13
0
        // Media events are sent to use as windows messages.  Used to test GetCmdFromEvent
        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
            // If this is a windows media message
            case WM_GRAPHNOTIFY:
                EventCode eventCode;
                IntPtr    p1, p2;
                int       hr;

                hr = m_mediaEvent.GetEvent(out eventCode, out p1, out p2, 0);
                while (hr == 0)
                {
                    switch (eventCode)
                    {
                    case EventCode.DvdCmdEnd:
                    {
                        IDvdCmd pCmdObj = null;

                        hr = this.m_idi2.GetCmdFromEvent(p1, out pCmdObj);
                        Debug.WriteLine(String.Format("{0} status1", hr));
                        // Handle the event.
                        Debug.WriteLine(eventCode);
                        break;
                    }

                    case EventCode.DvdCmdStart:
                    {
                        IDvdCmd pCmdObj = null;

                        hr = this.m_idi2.GetCmdFromEvent(p1, out pCmdObj);
                        Debug.WriteLine(String.Format("{0} status2", hr));
                        // Handle the event.
                        Debug.WriteLine(eventCode);
                        break;
                    }

                    default:
                    {
                        Debug.WriteLine(eventCode);
                        break;
                    }
                    }

                    // Release parms
                    m_mediaEvent.FreeEventParams(eventCode, p1, p2);

                    // check for additional events
                    hr = m_mediaEvent.GetEvent(out eventCode, out p1, out p2, 0);
                }
                break;

            // All other messages
            default:
                // unhandled window message
                base.WndProc(ref m);
                break;
            }
        }
        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());
            }
        }
예제 #15
0
        void HandleGraphEvent()
        {
            if (mediaEventEx == null)
            {
                return;
            }

            while (mediaEventEx.GetEvent(out var eventCode, out var param1, out var param2, 0) == 0)
            {
                var hr = mediaEventEx.FreeEventParams(eventCode, param1, param2);
                DsError.ThrowExceptionForHR(hr);
            }
        }
예제 #16
0
        private void TimerElapsed(object sender, ElapsedEventArgs e)
        {
            if (_mediaEvent != null)
            {
                IntPtr    param1;
                IntPtr    param2;
                EventCode code;

                while (_mediaEvent.GetEvent(out code, out param1, out param2, 0) == 0)
                {
                    _mediaEvent.FreeEventParams(code, param1, param2);
                }
            }
        }
예제 #17
0
        /// <summary> graph event (WM_GRAPHNOTIFY) handler. </summary>
        void OnGraphNotify()
        {
            DsEvCode code;
            int      p1, p2, hr = 0;

            do
            {
                hr = mediaEvt.GetEvent(out code, out p1, out p2, 0);
                if (hr < 0)
                {
                    break;
                }
                hr = mediaEvt.FreeEventParams(code, p1, p2);
            }while (hr == 0);
        }
예제 #18
0
        public void HandleGraphEvent()
        {
            int       hr = 0;
            EventCode evCode;
            IntPtr    evParam1, evParam2;

            // Make sure that we don't access the media event interface
            // after it has already been released.
            if (mediaEventEx == null)
            {
                return;
            }

            // Process all queued events
            while (mediaEventEx.GetEvent(out evCode, out evParam1, out evParam2, 0) == 0)
            {
                // Free memory associated with callback, since we're not using it
                hr = mediaEventEx.FreeEventParams(evCode, evParam1, evParam2);

                // If this is the end of the clip, reset to beginning
                if (evCode == EventCode.Complete)
                {
                    if (!usePlayList)
                    {
                        DsLong pos = new DsLong(0);
                        // Reset to first frame of movie
                        hr = mediaSeeking.SetPositions(pos, AMSeekingSeekingFlags.AbsolutePositioning,
                                                       null, AMSeekingSeekingFlags.NoPositioning);
                        if (hr < 0)
                        {
                            // Some custom filters (like the Windows CE MIDI filter)
                            // may not implement seeking interfaces (IMediaSeeking)
                            // to allow seeking to the start.  In that case, just stop
                            // and restart for the same effect.  This should not be
                            // necessary in most cases.
                            hr = mediaControl.Stop();
                            hr = mediaControl.Run();
                        }
                    }
                    else if (usePlayList)
                    {
                        CloseClip();
                        StartFromPlayList();
                        break;
                    }
                }
            }
        }
예제 #19
0
        public void HandleGraphEvent()
        {
            if (_mediaEventEx == null)
            {
                return;
            }

            int evCode, lParam1, lParam2;

            while (DsHlp.SUCCEEDED(_mediaEventEx.GetEvent(out evCode, out lParam1, out lParam2, 0)))
            {
                HandleGraphEvent(evCode, lParam1, lParam2);

                _mediaEventEx.FreeEventParams(evCode, lParam1, lParam2);
            }
        }
예제 #20
0
        void ProcessGraphEvents()
        {
            if (_mediaEvent != null)
            {
                IMediaEventEx me = _mediaEvent;

                /* Get all the queued events from the interface */
                while (me.GetEvent(out EventCode code, out IntPtr param1, out IntPtr param2, 0) == 0)
                {
                    /* Handle anything for this event code */
                    OnMediaEvent(code, param1, param2);

                    /* Free everything..we only need the code */
                    me.FreeEventParams(code, param1, param2);
                }
            }
        }
예제 #21
0
        //
        //call to process WM_GRAPHNOTIFY message
        //get out of the loop when GetEvent returns not 0
        //
        private void OnGraphNotify()
        {
            IntPtr    p1, p2;
            EventCode code;

            if (mediaEvt == null)
            {
                return;
            }
            while (mediaEvt.GetEvent(out code, out p1, out p2, 0) == 0)
            {
                mediaEvt.FreeEventParams(code, p1, p2);
                if (code == EventCode.Complete)
                {
                    OnClipCompleted();
                }
            }
        }
예제 #22
0
파일: MainForm.cs 프로젝트: d3x0r/xperdex
        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_GRAPHNOTIFY)
            {
                IMediaEventEx eventEx = (IMediaEventEx)graphBuilder;

                EventCode evCode;
                int       param1, param2;

                while (eventEx.GetEvent(out evCode, out param1, out param2, 0) == 0)
                {
                    eventEx.FreeEventParams(evCode, param1, param2);

                    Debug.WriteLine("### Event : " + evCode.ToString());
                }
            }

            base.WndProc(ref m);
        }
예제 #23
0
        protected virtual void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message)
        {
            if (message.ChannelName == WindowsMessaging.CHANNEL)
            {
                Message m = (Message)message.MessageData[WindowsMessaging.MESSAGE];
                if (m.LParam.Equals(_instancePtr))
                {
                    if (m.Msg == WM_GRAPHNOTIFY)
                    {
                        IMediaEventEx eventEx = (IMediaEventEx)_graphBuilder;

                        EventCode evCode;
                        int       param1, param2;

                        while (eventEx.GetEvent(out evCode, out param1, out param2, 0) == 0)
                        {
                            eventEx.FreeEventParams(evCode, param1, param2);
                            if (evCode == EventCode.Complete)
                            {
                                bool hasNextPart = _mediaItem != null && _mediaItem.ActiveResourceLocatorIndex < _mediaItem.MaximumResourceLocatorIndex;
                                if (hasNextPart)
                                {
                                    // Request next item
                                    FireNextItemRequest();
                                }
                                else if (_autoRepeat)
                                {
                                    CurrentTime = TimeSpan.Zero;
                                }
                                else
                                {
                                    _state = PlayerState.Ended;
                                    ServiceRegistration.Get <ILogger>().Debug("{0}: Playback ended", PlayerTitle);
                                    // TODO: RemoveResumeData();
                                    FireEnded();
                                }
                                return;
                            }
                        }
                    }
                }
            }
        }
        private void OnGraphNotify()
        {
            int       p1, p2, hr = 0;
            EventCode code;

            do
            {
                hr = mediaEvt.GetEvent(out code, out p1, out p2, 0);
                if (hr < 0)
                {
                    break;
                }
                hr = mediaEvt.FreeEventParams(code, p1, p2);
                if (code == EventCode.Complete || code == EventCode.ErrorAbort)
                {
                    MovieEnded(false);
                }
            } while (hr == 0);
        }
예제 #25
0
        private void OnGraphNotify()
        {
            int p1, p2;
            int code;

            try
            {
                do
                {
                    if (ime == null)
                    {
                        return;
                    }
                    ime.GetEvent(out code, out p1, out p2, 0);
                    ime.FreeEventParams(code, p1, p2);
                }while (true);
            }
            catch (Exception) { }
        }
예제 #26
0
        //デバッグ用イベント情報
        private void HandleGraphEvent()
        {
            int       hr       = 0;
            EventCode evCode   = 0;
            IntPtr    evParam1 = IntPtr.Zero;
            IntPtr    evParam2 = IntPtr.Zero;

            while (mediaEventEx != null && mediaEventEx.GetEvent(out evCode, out evParam1, out evParam2, 0) == 0)
            {
                // Free event parameters to prevent memory leaks associated with
                // event parameter data.  While this application is not interested
                // in the received events, applications should always process them.
                hr = mediaEventEx.FreeEventParams(evCode, evParam1, evParam2);
                DsError.ThrowExceptionForHR(hr);

                Console.WriteLine(evCode + " -evCode " + evParam1 + " " + evParam2);
                // Insert event processing code here, if desired (see http://msdn2.microsoft.com/en-us/library/ms783649.aspx)
            }
        }
예제 #27
0
        public void HandleGraphEvent()
        {
            EventCode evCode;
            IntPtr    evParam1, evParam2;

            if (_mediaEventEx == null)
            {
                return;
            }

            while (_mediaEventEx.GetEvent(out evCode, out evParam1, out evParam2, 0) == 0)
            {
                // Free event parameters to prevent memory leaks associated with
                // event parameter data.  While this application is not interested
                // in the received events, applications should always process them.
                var hr = _mediaEventEx.FreeEventParams(evCode, evParam1, evParam2);
                DsError.ThrowExceptionForHR(hr);

                // Insert event processing code here, if desired
            }
        }
예제 #28
0
파일: DxText.cs 프로젝트: d3x0r/xperdex
        private void GraphNotifyEvent(ref Message m)
        {
            EventCode eventCode;
            IntPtr    p1, p2;
            int       hr;

            //bool closeCam = false;

            hr = mediaEvent.GetEvent(out eventCode, out p1, out p2, 0);
            while (hr == 0)
            {
                // handle the event

                if ((eventCode == EventCode.ErrorAbort) ||
                    (eventCode == EventCode.Complete))
                {
                    Cursor.Current  = Cursors.Default;
                    button1.Enabled = true;

                    //closeCam = true;
                }

                // Release parms
                mediaEvent.FreeEventParams(eventCode, p1, p2);

                // check for additional events
                hr = mediaEvent.GetEvent(out eventCode, out p1, out p2, 0);
            }

            // you can dispose of the cam object here, but when you do, the display
            // will disappear.  if you attempt to dispose of the cam object in the
            // loop above, you will cause an exception when a method in mediaEvent
            // is invoked.
            //
            //if (closeCam)
            //{
            //	cam.Dispose();
            //	cam = null;
            //}
        }
        private void OnGraphNotify()
        {
            int       p1, p2, hr = 0;
            EventCode code;

            do
            {
                hr = mediaEvt.GetEvent(out code, out p1, out p2, 0);
                if (hr < 0)
                {
                    break;
                }
                hr = mediaEvt.FreeEventParams(code, p1, p2);
                if (code == EventCode.Complete || code == EventCode.ErrorAbort)
                {
                    if (GUIGraphicsContext.VideoRenderer == GUIGraphicsContext.VideoRendererType.madVR)
                    {
                        try
                        {
                            Log.Debug("AudioPlayerVMR: EventCode.Complete: {0}", Enum.GetName(typeof(EventCode), code));
                            Log.Debug("AudioPlayerVMR: VMR9Util.g_vmr9.playbackTimer {0}", VMR9Util.g_vmr9.playbackTimer);
                            if (VMR9Util.g_vmr9.playbackTimer.Second != 0)
                            {
                                MovieEnded(false);
                            }
                        }
                        catch (Exception ex)
                        {
                            Log.Error("AudioPlayerVMR: OnGraphNotify exception: {0}", ex);
                        }
                    }

                    if (GUIGraphicsContext.VideoRenderer != GUIGraphicsContext.VideoRendererType.madVR)
                    {
                        Log.Debug("AudioPlayerVMR EventCode.Complete: {0}", Enum.GetName(typeof(EventCode), code));
                        MovieEnded(false);
                    }
                }
            } while (hr == 0);
        }
예제 #30
0
        private void ProcessGraphEvents()
        {
            Dispatcher.BeginInvoke((Action) delegate
            {
                if (m_mediaEvent != null)
                {
                    IntPtr param1;
                    IntPtr param2;
                    EventCode code;

                    /* Get all the queued events from the interface */
                    while (m_mediaEvent.GetEvent(out code, out param1, out param2, 0) == 0)
                    {
                        /* Handle anything for this event code */
                        OnMediaEvent(code, param1, param2);

                        /* Free everything..we only need the code */
                        m_mediaEvent.FreeEventParams(code, param1, param2);
                    }
                }
            });
        }