CycleRefreshRate() public static method

public static CycleRefreshRate ( uint monitorIndex, double refreshRate ) : void
monitorIndex uint
refreshRate double
return void
コード例 #1
0
        public static void SetRefreshRateBasedOnFpsThread()
        {
            try
            {
                if (GUIGraphicsContext.VideoRenderer == GUIGraphicsContext.VideoRendererType.madVR &&
                    !GUIGraphicsContext.ForcedRefreshRate3D)
                {
                    using (Settings xmlreader = new MPSettings())
                    {
                        if (!xmlreader.GetValueAsBool("general", "useInternalDRC", false))
                        {
                            return;
                        }
                    }
                }

                double    fps       = _workerFps;
                string    strFile   = _workerStrFile;
                MediaType type      = _workerType;
                double    currentRR = 0;
                if (GUIGraphicsContext.DX9Device != null && !GUIGraphicsContext.DX9Device.Disposed)
                {
                    if ((GUIGraphicsContext.DX9Device.DeviceCaps.AdapterOrdinal == -1) ||
                        (Manager.Adapters.Count <= GUIGraphicsContext.DX9Device.DeviceCaps.AdapterOrdinal) ||
                        (Manager.Adapters.Count > Screen.AllScreens.Length))
                    {
                        Log.Info("RefreshRateChanger.SetRefreshRateBasedOnFPS: adapter number out of bounds");
                    }
                    else
                    {
                        currentRR =
                            Manager.Adapters[GUIGraphicsContext.DX9Device.DeviceCaps.AdapterOrdinal].CurrentDisplayMode.RefreshRate;
                    }
                    _refreshrateChangeCurrentRR = currentRR;

                    bool deviceReset;
                    bool forceRefreshRate;
                    using (Settings xmlreader = new MPSettings())
                    {
                        if (!xmlreader.GetValueAsBool("general", "autochangerefreshrate", false))
                        {
                            if (GUIGraphicsContext.VideoRenderer != GUIGraphicsContext.VideoRendererType.madVR ||
                                !GUIGraphicsContext.ForcedRefreshRate3D)
                            {
                                Log.Info("RefreshRateChanger.SetRefreshRateBasedOnFPS: 'auto refreshrate changer' disabled");
                                return;
                            }
                        }
                        forceRefreshRate = xmlreader.GetValueAsBool("general", "force_refresh_rate", false);
                        deviceReset      = xmlreader.GetValueAsBool("general", "devicereset", false);
                    }

                    double newRR;
                    string newExtCmd;
                    string newRRDescription;
                    FindExtCmdfromSettings(fps, currentRR, deviceReset, out newRR, out newExtCmd, out newRRDescription);

                    if (newRR > 0 && (currentRR != newRR || forceRefreshRate) ||
                        (GUIGraphicsContext.ForcedRefreshRate3D && !GUIGraphicsContext.ForcedRefreshRate3DDone))
                    {
                        Log.Info("RefreshRateChanger.SetRefreshRateBasedOnFPS: current refreshrate is {0}hz - changing it to {1}hz",
                                 currentRR, newRR);

                        // Add a delay for HDR
                        if (!g_Player.Playing && GUIGraphicsContext.VideoRenderer == GUIGraphicsContext.VideoRendererType.madVR)
                        {
                            Log.Debug("RefreshRateChanger.SetRefreshRateBasedOnFPS delayed start when using madVR");
                            Thread.Sleep(10000);
                        }

                        if (newExtCmd?.Length == 0)
                        {
                            Log.Info(
                                "RefreshRateChanger.SetRefreshRateBasedOnFPS: using internal win32 method for changing refreshrate. current is {0}hz, desired is {1}",
                                currentRR, newRR);
                            Log.Info("RefreshRateChanger AdapterOrdinal value is {0}",
                                     (uint)GUIGraphicsContext.DX9Device.DeviceCaps.AdapterOrdinal);
                            Win32.CycleRefreshRate((uint)GUIGraphicsContext.DX9Device.DeviceCaps.AdapterOrdinal, newRR);
                            NotifyRefreshRateChanged(newRRDescription, false);
                        }
                        else if (RunExternalJob(newExtCmd, strFile, type, deviceReset) && newRR != currentRR)
                        {
                            Win32.FixDwm();
                            NotifyRefreshRateChanged(newRRDescription, false);
                        }

                        if (GUIGraphicsContext.Vmr9Active &&
                            GUIGraphicsContext.VideoRenderer == GUIGraphicsContext.VideoRendererType.EVR)
                        {
                            Log.Info(
                                "RefreshRateChanger.SetRefreshRateBasedOnFPS: dynamic refresh rate change - notify video renderer");
                            VMR9Util.g_vmr9.UpdateEVRDisplayFPS();
                        }
                    }
                    else
                    {
                        if (newRR == 0)
                        {
                            Log.Info(
                                "RefreshRateChanger.SetRefreshRateBasedOnFPS: could not find a matching refreshrate based on {0} fps (check config)",
                                fps);
                        }
                        else
                        {
                            Log.Info(
                                "RefreshRateChanger.SetRefreshRateBasedOnFPS: no refreshrate change required. current is {0}hz, desired is {1}",
                                currentRR, newRR);
                        }
                    }
                    Log.Info("RefreshRateChanger.SwitchFocus");
                    Util.Utils.SwitchFocus();

                    // stop the workerthread
                    if (_workerThread != null && _workerThread.IsAlive)
                    {
                        _workerThread.Abort();
                        _workerThread = null;
                    }
                }
            }
            catch (Exception)
            {
                // RefreshRate failed
            }
        }
コード例 #2
0
    public static void SetRefreshRateBasedOnFPS(double fps, string strFile, MediaType type)
    {
      double currentRR = 0;
      if ((GUIGraphicsContext.DX9Device.DeviceCaps.AdapterOrdinal == -1) || (Manager.Adapters.Count <= GUIGraphicsContext.DX9Device.DeviceCaps.AdapterOrdinal))
      {
        Log.Info("RefreshRateChanger.SetRefreshRateBasedOnFPS: adapter number out of bounds");
      }
      else
      {
        currentRR = Manager.Adapters[GUIGraphicsContext.DX9Device.DeviceCaps.AdapterOrdinal].CurrentDisplayMode.RefreshRate;
      }
      _refreshrateChangeCurrentRR = currentRR;

      bool deviceReset;
      bool forceRefreshRate;
      using (Settings xmlreader = new MPSettings())
      {
        if (!xmlreader.GetValueAsBool("general", "autochangerefreshrate", false))
        {
          Log.Info("RefreshRateChanger.SetRefreshRateBasedOnFPS: 'auto refreshrate changer' disabled");
          return;
        }
        forceRefreshRate = xmlreader.GetValueAsBool("general", "force_refresh_rate", false);
        deviceReset = xmlreader.GetValueAsBool("general", "devicereset", false);
      }

      double newRR;
      string newExtCmd;
      string newRRDescription;
      FindExtCmdfromSettings(fps, currentRR, deviceReset, out newRR, out newExtCmd, out newRRDescription);

      if (newRR > 0 && (currentRR != newRR || forceRefreshRate))
      {
        Log.Info("RefreshRateChanger.SetRefreshRateBasedOnFPS: current refreshrate is {0}hz - changing it to {1}hz", currentRR, newRR);

        if (newExtCmd.Length == 0)
        {
          Log.Info("RefreshRateChanger.SetRefreshRateBasedOnFPS: using internal win32 method for changing refreshrate. current is {0}hz, desired is {1}", currentRR, newRR);
          Win32.CycleRefreshRate((uint)GUIGraphicsContext.DX9Device.DeviceCaps.AdapterOrdinal, newRR);
          NotifyRefreshRateChanged(newRRDescription, (strFile.Length > 0));
        }
        else if (RunExternalJob(newExtCmd, strFile, type, deviceReset) && newRR != currentRR)
        {
          Win32.FixDwm();
          NotifyRefreshRateChanged(newRRDescription, (strFile.Length > 0));
        }

        if (GUIGraphicsContext.Vmr9Active && GUIGraphicsContext.IsEvr)
        {
          Log.Info("RefreshRateChanger.SetRefreshRateBasedOnFPS: dynamic refresh rate change - notify video renderer");
          VMR9Util.g_vmr9.UpdateEVRDisplayFPS();
        }
      }
      else
      {
        if (newRR == 0)
        {
          Log.Info("RefreshRateChanger.SetRefreshRateBasedOnFPS: could not find a matching refreshrate based on {0} fps (check config)", fps);
        }
        else
        {
          Log.Info("RefreshRateChanger.SetRefreshRateBasedOnFPS: no refreshrate change required. current is {0}hz, desired is {1}", currentRR, newRR);
        }
      }
    }
コード例 #3
0
        public static void SetRefreshRateBasedOnFPS(double fps, string strFile, MediaType type)
        {
            int    currentScreenNr = GUIGraphicsContext.currentScreenNumber;
            double currentRR       = 0;

            if ((currentScreenNr == -1) || (Manager.Adapters.Count <= currentScreenNr))
            {
                Log.Info(
                    "RefreshRateChanger.SetRefreshRateBasedOnFPS: could not aquire current screen number, or current screen number bigger than number of adapters available.");
            }
            else
            {
                currentRR = Manager.Adapters[currentScreenNr].CurrentDisplayMode.RefreshRate;
            }

            _refreshrateChangeCurrentRR = currentRR;

            bool enabled            = false;
            bool deviceReset        = false;
            bool force_refresh_rate = false;

            using (Settings xmlreader = new MPSettings())
            {
                enabled = xmlreader.GetValueAsBool("general", "autochangerefreshrate", false);

                if (!enabled)
                {
                    Log.Info("RefreshRateChanger.SetRefreshRateBasedOnFPS: 'auto refreshrate changer' disabled");
                    return;
                }
                force_refresh_rate = xmlreader.GetValueAsBool("general", "force_refresh_rate", false);
                deviceReset        = xmlreader.GetValueAsBool("general", "devicereset", false);
            }

            double newRR            = 0;
            string newExtCmd        = "";
            string newRRDescription = "";

            FindExtCmdfromSettings(fps, currentRR, deviceReset, out newRR, out newExtCmd, out newRRDescription);

            if (newRR > 0 && (currentRR != newRR || force_refresh_rate))
            //run external command in order to change refresh rate.
            {
                Log.Info("RefreshRateChanger.SetRefreshRateBasedOnFPS: current refreshrate is {0}hz - changing it to {1}hz",
                         currentRR, newRR);

                if (newExtCmd.Length == 0)
                {
                    Log.Info(
                        "RefreshRateChanger.SetRefreshRateBasedOnFPS: using internal win32 method for changing refreshrate. current is {0}hz, desired is {1}",
                        currentRR, newRR);
                    Win32.CycleRefreshRate((uint)currentScreenNr, newRR);
                    NotifyRefreshRateChanged(newRRDescription, (strFile.Length > 0));
                }
                else if (RunExternalJob(newExtCmd, strFile, type, deviceReset) && newRR != currentRR)
                {
                    Win32.FixDwm();
                    NotifyRefreshRateChanged(newRRDescription, (strFile.Length > 0));
                }
            }
            else
            {
                if (newRR == 0)
                {
                    Log.Info(
                        "RefreshRateChanger.SetRefreshRateBasedOnFPS: could not find a matching refreshrate based on {0} fps (check config)",
                        fps);
                }
                else
                {
                    Log.Info(
                        "RefreshRateChanger.SetRefreshRateBasedOnFPS: no refreshrate change required. current is {0}hz, desired is {1}",
                        currentRR, newRR);
                }
            }
        }