internal static void ChangeRefreshRateToMatchedFps(double matchedFps, string file)
 {
     Log.Instance.Info("Changing RefreshRate for matching configured FPS: {0}", matchedFps);
     RefreshRateChanger.SetRefreshRateBasedOnFPS(matchedFps, file, RefreshRateChanger.MediaType.Video);
     if (RefreshRateChanger.RefreshRateChangePending)
     {
         TimeSpan ts = DateTime.Now - RefreshRateChanger.RefreshRateChangeExecutionTime;
         if (ts.TotalSeconds > RefreshRateChanger.WAIT_FOR_REFRESHRATE_RESET_MAX)
         {
             Log.Instance.Info("RefreshRateChanger.DelayedRefreshrateChanger: waited {0}s for refreshrate change, but it never took place (check your config). Proceeding with playback.", RefreshRateChanger.WAIT_FOR_REFRESHRATE_RESET_MAX);
             RefreshRateChanger.ResetRefreshRateState();
         }
         else
         {
             Log.Instance.Info("RefreshRateChanger.DelayedRefreshrateChanger: waited {0}s for refreshrate change. Proceeding with playback.", ts.TotalSeconds);
         }
     }
 }
Example #2
0
        private void OnHDPlayerExited(object obj, EventArgs e)
        {
            // Restore refresh rate if it was changed
            if (MovingPicturesCore.Settings.UseDynamicRefreshRateChangerWithExternalPlayer && RefreshRateChanger.RefreshRateChangePending)
            {
                RefreshRateChanger.AdaptRefreshRate();
            }

            // enable mediaportal input devices
            InputDevices.InputDevices.Init();

            // show mediaportal and start rendering
            GUIGraphicsContext.BlankScreen = false;
            GUIGraphicsContext.form.Show();
            GUIGraphicsContext.ResetLastActivity();
            GUIMessage msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_GETFOCUS, 0, 0, 0, 0, 0, null);

            GUIWindowManager.SendThreadMessage(msg);
            GUIGraphicsContext.CurrentState = GUIGraphicsContext.State.RUNNING;
            logger.Info("HD Playback: The external player has exited.");

            // call the logic for when an external player exits
            onExternalExit();
        }
Example #3
0
        // This method launches an external HD player controlled by Moving Pictures
        // Eventually when Mediaportal has a native solution for HD video disc formats
        // this will be not needed anymore.
        private void LaunchHDPlayer(string videoPath)
        {
            logger.Info("HD Playback: Launching external player.");

            // First check if the user supplied executable for the external player is valid
            string execPath = MovingPicturesCore.Settings.ExternalPlayerExecutable;

            if (!File.Exists(execPath))
            {
                // if it's not show a dialog explaining the error
                _gui.ShowMessage("Error", Translation.MissingExternalPlayerExe);
                logger.Info("HD Playback: The external player executable '{0}' is missing.", execPath);
                // do nothing
                resetPlayer();
                return;
            }

            // process the argument string and replace the 'filename' variable
            string arguments = MovingPicturesCore.Settings.ExternalPlayerArguements;
            string videoRoot = Utility.GetMovieBaseDirectory(new FileInfo(videoPath).Directory).FullName;
            string filename  = Utility.IsDriveRoot(videoRoot) ? videoRoot : videoPath;
            string fps       = ((int)(queuedMedia.VideoFrameRate + 0.5f)).ToString();

            arguments = arguments.Replace("%filename%", filename);
            arguments = arguments.Replace("%fps%", fps);
            arguments = arguments.Replace("%root%", videoRoot);

            logger.Debug("External Player: Video='{0}', Root={1}, FPS={2}, ExecCommandLine={3} {4}", filename, videoRoot, fps, execPath, arguments);

            // Set Refresh Rate Based On FPS if needed
            if (MovingPicturesCore.Settings.UseDynamicRefreshRateChangerWithExternalPlayer)
            {
                double framerate = double.Parse(queuedMedia.VideoFrameRate.ToString(NumberFormatInfo.InvariantInfo), NumberFormatInfo.InvariantInfo);
                logger.Info("Requesting new refresh rate: FPS={0}", framerate.ToString());
                RefreshRateChanger.SetRefreshRateBasedOnFPS(framerate, filename, RefreshRateChanger.MediaType.Video);
                if (RefreshRateChanger.RefreshRateChangePending)
                {
                    TimeSpan ts = DateTime.Now - RefreshRateChanger.RefreshRateChangeExecutionTime;
                    if (ts.TotalSeconds > RefreshRateChanger.WAIT_FOR_REFRESHRATE_RESET_MAX)
                    {
                        logger.Info("Refresh rate change failed. Please check your mediaportal log and configuration", RefreshRateChanger.WAIT_FOR_REFRESHRATE_RESET_MAX);
                        RefreshRateChanger.ResetRefreshRateState();
                    }
                }
            }

            // Setup the external player process
            ProcessStartInfo processinfo = new ProcessStartInfo();

            processinfo.FileName  = execPath;
            processinfo.Arguments = arguments;

            Process hdPlayer = new Process();

            hdPlayer.StartInfo           = processinfo;
            hdPlayer.Exited             += OnHDPlayerExited;
            hdPlayer.EnableRaisingEvents = true;

            try {
                // start external player process
                hdPlayer.Start();

                // disable mediaportal input devices
                InputDevices.InputDevices.Stop();

                // hide mediaportal and suspend rendering to save resources for the external player
                GUIGraphicsContext.BlankScreen = true;
                GUIGraphicsContext.form.Hide();
                GUIGraphicsContext.CurrentState = GUIGraphicsContext.State.SUSPENDING;

                logger.Info("HD Playback: External player started.");
                onMediaStarted(queuedMedia);
            }
            catch (Exception e) {
                logger.ErrorException("HD Playback: Could not start the external player process.", e);
                resetPlayer();
            }
        }