void CXBMCApp::SetDisplayMode(int mode, float rate) { if (mode < 1.0) return; CJNIWindow window = getWindow(); if (window) { CJNIWindowManagerLayoutParams params = window.getAttributes(); CLog::Log(LOGDEBUG, "XXX %d %d", params.getpreferredDisplayModeId(), mode); if (params.getpreferredDisplayModeId() == mode) return; } m_displayChangeEvent.Reset(); std::map<std::string, CVariant> vmap; vmap["mode"] = mode; vmap["rate"] = rate; m_refreshRate = rate; CVariant *variant = new CVariant(vmap); runNativeOnUiThread(SetDisplayModeCallback, variant); if (g_application.IsInitialized()) m_displayChangeEvent.WaitMSec(5000); }
void CXBMCApp::SetDisplayModeCallback(CVariant* variant) { int mode = (*variant)["mode"].asInteger(); float rate = (*variant)["rate"].asFloat(); delete variant; CJNIWindow window = getWindow(); if (window) { CJNIWindowManagerLayoutParams params = window.getAttributes(); if (params.getpreferredDisplayModeId() != mode) { if (g_application.GetAppPlayer().IsPlaying()) { dynamic_cast<CWinSystemAndroid*>(CServiceBroker::GetWinSystem())->SetHDMIState(false); m_hdmiReportedState = false; } params.setpreferredDisplayModeId(mode); params.setpreferredRefreshRate(rate); window.setAttributes(params); return; } } m_displayChangeEvent.Set(); }
static float currentRefreshRate() { if (s_hasModeApi) return s_res_cur_displayMode.fRefreshRate; CJNIWindow window = CXBMCApp::getWindow(); if (window) { float preferredRate = window.getAttributes().getpreferredRefreshRate(); if (preferredRate > 20.0 && preferredRate < 70.0) { CLog::Log(LOGINFO, "CEGLNativeTypeAndroid: Preferred refresh rate: %f", preferredRate); return preferredRate; } CJNIView view(window.getDecorView()); if (view) { CJNIDisplay display(view.getDisplay()); if (display) { float reportedRate = display.getRefreshRate(); if (reportedRate > 20.0 && reportedRate < 70.0) { CLog::Log(LOGINFO, "CEGLNativeTypeAndroid: Current display refresh rate: %f", reportedRate); return reportedRate; } } } } CLog::Log(LOGDEBUG, "found no refresh rate"); return 60.0; }
void CXBMCApp::SetRefreshRateCallback(CVariant* rateVariant) { float rate = rateVariant->asFloat(); delete rateVariant; CJNIWindow window = getWindow(); if (window) { CJNIWindowManagerLayoutParams params = window.getAttributes(); if (fabs(params.getpreferredRefreshRate() - rate) > 0.001) { if (g_application.GetAppPlayer().IsPlaying()) { dynamic_cast<CWinSystemAndroid*>(CServiceBroker::GetWinSystem())->SetHDMIState(false, 1000); m_hdmiReportedState = false; } params.setpreferredRefreshRate(rate); if (params.getpreferredRefreshRate() > 0.0) { window.setAttributes(params); return; } } } m_displayChangeEvent.Set(); }
bool CEGLNativeTypeAndroid::ProbeResolutions(std::vector<RESOLUTION_INFO> &resolutions) { if (s_hasModeApi) { resolutions.insert(resolutions.end(), s_res_displayModes.begin(), s_res_displayModes.end()); return true; } RESOLUTION_INFO res; bool ret = GetNativeResolution(&res); if (ret && res.iWidth > 1 && res.iHeight > 1) { std::vector<float> refreshRates; CJNIWindow window = CXBMCApp::getWindow(); if (window) { CJNIView view = window.getDecorView(); if (view) { CJNIDisplay display = view.getDisplay(); if (display) { refreshRates = display.getSupportedRefreshRates(); } } if (!refreshRates.empty()) { for (unsigned int i = 0; i < refreshRates.size(); i++) { if (refreshRates[i] < 20.0 || refreshRates[i] > 70.0) continue; res.fRefreshRate = refreshRates[i]; res.strMode = StringUtils::Format("%dx%d @ %.6f%s - Full Screen", res.iScreenWidth, res.iScreenHeight, res.fRefreshRate, res.dwFlags & D3DPRESENTFLAG_INTERLACED ? "i" : ""); resolutions.push_back(res); } } } if (resolutions.empty()) { /* No valid refresh rates available, just provide the current one */ resolutions.push_back(res); } return true; } return false; }
void CXBMCApp::SetDisplayModeCallback(CVariant* modeVariant) { int mode = modeVariant->asFloat(); delete modeVariant; CJNIWindow window = getWindow(); if (window) { CJNIWindowManagerLayoutParams params = window.getAttributes(); if (params.getpreferredDisplayModeId() != mode) { params.setpreferredDisplayModeId(mode); window.setAttributes(params); } } }
void CXBMCApp::SetRefreshRateCallback(CVariant* rateVariant) { float rate = rateVariant->asFloat(); delete rateVariant; CJNIWindow window = getWindow(); if (window) { CJNIWindowManagerLayoutParams params = window.getAttributes(); if (params.getpreferredRefreshRate() != rate) { params.setpreferredRefreshRate(rate); if (params.getpreferredRefreshRate() > 0.0) window.setAttributes(params); } } }
void CXBMCApp::SetRefreshRate(float rate) { if (rate < 1.0) return; CJNIWindow window = getWindow(); if (window) { CJNIWindowManagerLayoutParams params = window.getAttributes(); if (fabs(params.getpreferredRefreshRate() - rate) <= 0.001) return; } m_refreshRate = rate; m_displayChangeEvent.Reset(); CVariant *variant = new CVariant(rate); runNativeOnUiThread(SetRefreshRateCallback, variant); if (g_application.IsInitialized()) m_displayChangeEvent.WaitMSec(5000); }
bool CEGLNativeTypeAndroid::ProbeResolutions(std::vector<RESOLUTION_INFO> &resolutions) { RESOLUTION_INFO res; bool ret = GetNativeResolution(&res); if (ret && res.iWidth > 1 && res.iHeight > 1) { std::vector<float> refreshRates; CJNIWindow window = CXBMCApp::getWindow(); if (window) { CJNIView view = window.getDecorView(); if (view) { CJNIDisplay display = view.getDisplay(); if (display) { refreshRates = display.getSupportedRefreshRates(); } } } if (refreshRates.size()) { for (unsigned int i = 0; i < refreshRates.size(); i++) { res.fRefreshRate = refreshRates[i]; resolutions.push_back(res); } } else { /* No refresh rate list available, just provide the current one */ resolutions.push_back(res); } return true; } return false; }
static float currentRefreshRate() { CJNIWindow window = CXBMCApp::getWindow(); if (window) { float preferredRate = window.getAttributes().getpreferredRefreshRate(); if (preferredRate > 1.0) { return preferredRate; } CJNIView view(window.getDecorView()); if (view) { CJNIDisplay display(view.getDisplay()); if (display) { float reportedRate = display.getRefreshRate(); return reportedRate; } } } CLog::Log(LOGDEBUG, "found no refresh rate"); return 60.0; }