int DisplayManagerWin::getCurrentDisplayMode(int display)
{
  if (!isValidDisplay(display))
    return -1;

  // grab current mode
  DEVMODEW modeInfo;
  ZeroMemory(&modeInfo, sizeof(modeInfo));
  modeInfo.dmSize = sizeof(modeInfo);

  // grab current mode info
  if (!EnumDisplaySettingsW((LPCWSTR)m_displayAdapters[display].utf16(), ENUM_CURRENT_SETTINGS,
                            &modeInfo))
  {
    QLOG_ERROR() << "Failed to retrieve current mode";
    return -1;
  }

  // check if current mode info matches on of our modes
  for (int modeId = 0; modeId < displays[display]->videoModes.size(); modeId++)
  {
    if (isModeMatching(modeInfo, displays[display]->videoModes[modeId]))
      return modeId;
  }

  return -1;
}
int DisplayManagerRPI::getCurrentDisplayMode(int display)
{
  if (!isValidDisplay(display))
    return -1;

  TV_GET_STATE_RESP_T tvstate;
  if (vc_tv_get_state(&tvstate))
    return -1;

  for (int mode = 0; mode < m_displays[display]->m_videoModes.size(); mode++)
  {
    TV_SUPPORTED_MODE_NEW_T* tvmode = &m_modes[mode];
    if (tvmode->width == tvstate.width &&
        tvmode->height == tvstate.height &&
        tvmode->frame_rate == tvstate.frame_rate &&
        tvmode->scan_mode == tvstate.scan_mode)
    {
      bool ntsc = false;
      HDMI_PROPERTY_PARAM_T property;
      property.property = HDMI_PROPERTY_PIXEL_CLOCK_TYPE;
      property.param1 = 0;
      property.param2 = 0;
      if (!vc_tv_hdmi_get_property(&property))
        ntsc = property.param1 == HDMI_PIXEL_CLOCK_TYPE_NTSC;
      return mode * 2 + (ntsc ? 1 : 0);
    }
  }

  return -1;
}
bool DisplayManager::isValidDisplayMode(int display, int mode)
{
  if (isValidDisplay(display))
    if (mode >= 0 && mode < displays[display]->videoModes.size())
      return true;

  return false;
}
int DisplayManagerOSX::getCurrentDisplayMode(int display)
{
  if (!isValidDisplay(display) || !m_osxDisplayModes[display])
    return -1;
  
  CGDisplayModeRef currentMode = CGDisplayCopyDisplayMode(m_osxDisplays[display]);

  for (int mode = 0; mode < CFArrayGetCount(m_osxDisplayModes[display]); mode++)
  {
    if (currentMode == (CGDisplayModeRef)CFArrayGetValueAtIndex(m_osxDisplayModes[display], mode))
    {
      CFRelease(currentMode);
      return mode;
    }
  }
  CFRelease(currentMode);

  return -1;
};