bool CEGLNativeTypeIMX::ProbeResolutions(std::vector<RESOLUTION_INFO> &resolutions)
{
  if (m_readonly)
    return false;

  std::string valstr;
  SysfsUtils::GetString("/sys/class/graphics/fb0/modes", valstr);
  std::vector<std::string> probe_str = StringUtils::Split(valstr, "\n");

  // lexical order puts the modes list into our preferred
  // order and by later filtering through FindMatchingResolution()
  // we make sure we read _all_ S modes, following U and V modes
  // while list will hold unique resolutions only
  std::sort(probe_str.begin(), probe_str.end());

  resolutions.clear();
  RESOLUTION_INFO res;
  for (size_t i = 0; i < probe_str.size(); i++)
  {
    if(!StringUtils::StartsWith(probe_str[i], "S:") && !StringUtils::StartsWith(probe_str[i], "U:") &&
       !StringUtils::StartsWith(probe_str[i], "V:") && !StringUtils::StartsWith(probe_str[i], "D:"))
      continue;

    if(ModeToResolution(probe_str[i], &res))
      if(!FindMatchingResolution(res, resolutions))
        resolutions.push_back(res);
  }
  return resolutions.size() > 0;
}
int CEGLNativeTypeRaspberryPI::AddUniqueResolution(const RESOLUTION_INFO &res, std::vector<RESOLUTION_INFO> &resolutions)
{
  int i = FindMatchingResolution(res, resolutions);
  if (i>=0)
  {  // don't replace a progressive resolution with an interlaced one of same resolution
     if (!(res.dwFlags & D3DPRESENTFLAG_INTERLACED))
       resolutions[i] = res;
  }
  else
  {
     resolutions.push_back(res);
  }
  return i;
}
Example #3
0
int CRPIUtils::AddUniqueResolution(RESOLUTION_INFO &res, std::vector<RESOLUTION_INFO> &resolutions, bool desktop /* = false */)
{
  SetResolutionString(res);
  int i = FindMatchingResolution(res, resolutions, desktop);
  if (i>=0)
  {  // don't replace a progressive resolution with an interlaced one of same resolution
    if (!(res.dwFlags & D3DPRESENTFLAG_INTERLACED))
      resolutions[i] = res;
  }
  else
  {
     resolutions.push_back(res);
  }
  return i;
}