Example #1
0
        private void OnCopyData(object sender, EventArgs e)
        {
            var message    = (Message)sender;
            var cds        = (NativeMethods.CopyDataStruct)Marshal.PtrToStructure(message.LParam, typeof(NativeMethods.CopyDataStruct));
            var command    = cds.dwData.ToUInt32();
            var param      = Marshal.PtrToStringAuto(cds.lpData);
            var multiParam = param.Split('|');

            switch (cds.dwData.ToUInt32())
            {
            case MpcHcCommand.Connect:
                _positionTimer.Stop();
                _mpcHandle = (IntPtr)Convert.ToInt64(Marshal.PtrToStringAuto(cds.lpData));
                SendMpcMessage(MpcHcCommand.OpenFile, _videoFileName);
                _positionTimer.Start();
                break;

            case MpcHcCommand.PlayMode:
                _playMode = param;
                if (param == ModePlay && _loaded == 0)
                {
                    _loaded = 1;
                    if (!HijackMpcHc())
                    {
                        Application.DoEvents();
                        HijackMpcHc();
                    }
                }
                break;

            case MpcHcCommand.NowPlaying:
                if (_loaded == 1)
                {
                    _loaded            = 2;
                    _durationInSeconds = double.Parse(multiParam[4], CultureInfo.InvariantCulture);
                    Pause();
                    Resize(_initialWidth, _initialHeight);
                    if (OnVideoLoaded != null)
                    {
                        OnVideoLoaded.Invoke(this, new EventArgs());
                    }
                    SendMpcMessage(MpcHcCommand.SetSubtitleTrack, "-1");
                }
                break;

            case MpcHcCommand.NotifyEndOfStream:
                if (OnVideoEnded != null)
                {
                    OnVideoEnded.Invoke(this, new EventArgs());
                }
                break;

            case MpcHcCommand.CurrentPosition:
                _positionInSeconds = double.Parse(param, CultureInfo.InvariantCulture);
                break;
            }
        }
Example #2
0
 private void VideoEndTimerTick(object sender, EventArgs e)
 {
     if (_isPaused == false && _quartzFilgraphManager != null && CurrentPosition >= Duration)
     {
         _isPaused = true;
         if (OnVideoEnded != null && _quartzFilgraphManager != null)
         {
             OnVideoEnded.Invoke(_quartzFilgraphManager, new EventArgs());
         }
     }
 }
        private void VideoEndTimerTick(object sender, EventArgs e)
        {
            const int Ended = 6;
            int       state = _libvlc_media_player_get_state(_mediaPlayer);

            if (state == Ended)
            {
                // hack to make sure VLC is in ready state
                Stop();
                Play();
                Pause();
                OnVideoEnded.Invoke(_mediaPlayer, new EventArgs());
            }
        }
        private void VideoEndTimerTick(object sender, EventArgs e)
        {
            lock (DisposeLock)
            {
                if (_mediaPlayer == IntPtr.Zero)
                {
                    return;
                }

                const int ended = 6;
                int       state = _libvlc_media_player_get_state(_mediaPlayer);
                if (state != ended)
                {
                    return;
                }

                // hack to make sure VLC is in ready state
                Stop();
                Play();
                Pause();
                OnVideoEnded?.Invoke(_mediaPlayer, new EventArgs());
            }
        }
Example #5
0
        private void OnCopyData(object sender, EventArgs e)
        {
            var message    = (Message)sender;
            var cds        = (NativeMethods.CopyDataStruct)Marshal.PtrToStructure(message.LParam, typeof(NativeMethods.CopyDataStruct));
            var command    = cds.dwData.ToUInt32();
            var param      = Marshal.PtrToStringAuto(cds.lpData);
            var multiParam = new string[0];

            if (param != null)
            {
                multiParam = param.Split('|');
            }

            switch (command)
            {
            case MpcHcCommand.Connect:
                _positionTimer.Stop();
                _mpcHandle = (IntPtr)Convert.ToInt64(Marshal.PtrToStringAuto(cds.lpData));
                SendMpcMessage(MpcHcCommand.OpenFile, _videoFileName);
                _positionTimer.Start();
                break;

            case MpcHcCommand.PlayMode:
                _playMode = param;
                if (param == ModePlay && _loaded == 0)
                {
                    _loaded = 1;
                    if (!HijackMpcHc())
                    {
                        Application.DoEvents();
                        HijackMpcHc();
                    }
                }
                Application.DoEvents();
                HideMpcPlayerWindow();
                break;

            case MpcHcCommand.NowPlaying:
                if (_loaded == 1)
                {
                    _loaded = 2;

                    _durationInSeconds = 5000;
                    double d;
                    if (multiParam.Length >= 5 && double.TryParse(multiParam[4].Replace(",", ".").Trim(), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out d))
                    {
                        _durationInSeconds = d;
                    }
                    else if (multiParam.Length >= 1 && double.TryParse(multiParam[multiParam.Length - 1].Replace(",", ".").Trim(), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out d))
                    {
                        _durationInSeconds = d;
                    }

                    Pause();
                    Resize(_initialWidth, _initialHeight);
                    if (OnVideoLoaded != null)
                    {
                        OnVideoLoaded.Invoke(this, new EventArgs());
                    }
                    SendMpcMessage(MpcHcCommand.SetSubtitleTrack, "-1");

                    // be sure to hide MPC
                    _hideMpcTimerCount     = 20;
                    _hideMpcTimer.Interval = 100;
                    _hideMpcTimer.Tick    += (o, args) =>
                    {
                        _hideMpcTimer.Stop();
                        if (_hideMpcTimerCount > 0)
                        {
                            Application.DoEvents();
                            HideMpcPlayerWindow();
                            _hideMpcTimerCount--;
                            _hideMpcTimer.Start();
                        }
                    };
                    _hideMpcTimer.Start();
                }
                break;

            case MpcHcCommand.NotifyEndOfStream:
                if (OnVideoEnded != null)
                {
                    OnVideoEnded.Invoke(this, new EventArgs());
                }
                break;

            case MpcHcCommand.CurrentPosition:
                if (!string.IsNullOrWhiteSpace(param))
                {
                    double d;
                    if (double.TryParse(param.Replace(",", "."), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out d))
                    {
                        _positionInSeconds = d;
                    }
                }
                break;
            }
        }
Example #6
0
        private void MPlayerOutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            if (e.Data == null)
            {
                return;
            }

            System.Diagnostics.Debug.WriteLine("MPlayer: " + e.Data);

            if (e.Data.StartsWith("Playing "))
            {
                _loaded = true;
                return;
            }

            if (e.Data.StartsWith("Exiting..."))
            {
                _ended = true;
                if (_loaded)
                {
                    _mplayer.StandardInput.WriteLine("loadfile " + _videoFileName);
                    if (OnVideoEnded != null)
                    {
                        OnVideoEnded.Invoke(this, null);
                    }
                }
                return;
            }

            int indexOfEqual = e.Data.IndexOf('=');

            if (indexOfEqual > 0 && indexOfEqual + 1 < e.Data.Length && e.Data.StartsWith("ANS_"))
            {
                string code  = e.Data.Substring(0, indexOfEqual);
                string value = e.Data.Substring(indexOfEqual + 1);

                switch (code)
                {
                // Examples:
                //  ANS_time_pos=8.299958, ANS_width=624, ANS_height=352, ANS_fps=23.976025, ANS_video_format=1145656920, ANS_video_format=1145656920, ANS_video_codec=ffodivx,
                //  ANS_length=1351.600213, ANS_volume=100.000000
                case "ANS_time_pos":
                    _timePosition = Convert.ToDouble(value.Replace(",", "."), CultureInfo.InvariantCulture);
                    break;

                case "ANS_width":
                    Width = Convert.ToInt32(value);
                    break;

                case "ANS_height":
                    Height = Convert.ToInt32(value);
                    break;

                case "ANS_fps":
                    double d;
                    if (double.TryParse(value, out d))
                    {
                        FramesPerSecond = (float)Convert.ToDouble(value.Replace(",", "."), CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        FramesPerSecond = 25.0f;
                    }
                    break;

                case "ANS_video_format":
                    VideoFormat = value;
                    break;

                case "ANS_video_codec":
                    VideoCodec = value;
                    break;

                case "ANS_length":
                    _lengthInSeconds = TimeSpan.FromSeconds(Convert.ToDouble(value.Replace(",", "."), CultureInfo.InvariantCulture));
                    break;

                case "ANS_volume":
                    _volume = (float)Convert.ToDouble(value.Replace(",", "."), CultureInfo.InvariantCulture);
                    break;

                case "ANS_pause":
                    if (value == "yes" || value == "1")
                    {
                        _pauseCounts++;
                    }
                    else
                    {
                        _pauseCounts--;
                    }
                    if (_pauseCounts > 3)
                    {
                        _paused = true;
                    }
                    else if (_pauseCounts < -3)
                    {
                        _paused        = false;
                        _pausePosition = null;
                    }
                    else if (Math.Abs(_pauseCounts) > 10)
                    {
                        _pauseCounts = 0;
                    }
                    break;
                }
                _waitForChange = false;
            }
        }