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; }
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; }