bool DisplayManagerWin::initialize() { DISPLAY_DEVICEW displayInfo; int displayId = 0; while (getDisplayInfo(displayId, displayInfo)) { if (displayInfo.StateFlags & (DISPLAY_DEVICE_ACTIVE | DISPLAY_DEVICE_ATTACHED)) { DEVMODEW modeInfo; int modeId = 0; // add the display DMDisplayPtr display = DMDisplayPtr(new DMDisplay); display->id = displayId; display->name = QString::fromWCharArray(displayInfo.DeviceString); displays[display->id] = DMDisplayPtr(display); m_displayAdapters[display->id] = QString::fromWCharArray(displayInfo.DeviceName); while (getModeInfo(displayId, modeId, modeInfo)) { // add the videomode to the display DMVideoModePtr videoMode = DMVideoModePtr(new DMVideoMode); videoMode->id = modeId; display->videoModes[videoMode->id] = videoMode; // setup mode information videoMode->height = modeInfo.dmPelsHeight; videoMode->width = modeInfo.dmPelsWidth; videoMode->refreshRate = modeInfo.dmDisplayFrequency; videoMode->bitsPerPixel = modeInfo.dmBitsPerPel; videoMode->interlaced = (modeInfo.dmDisplayFlags & DM_INTERLACED) ? true : false; // Windows just returns interger refresh rate so // let's fudge it if (videoMode->refreshRate == 59 || videoMode->refreshRate == 29 || videoMode->refreshRate == 23) videoMode->refreshRate = (float)(videoMode->refreshRate + 1) / 1.001f; modeId++; } } displayId++; } if (displays.size() == 0) { QLOG_DEBUG() << "No display found."; return false; } else return DisplayManager::initialize(); }
bool DisplayManagerRPI::initialize() { bcm_host_init(); m_displays.clear(); // create the main display DMDisplayPtr display = DMDisplayPtr(new DMDisplay); display->m_id = 0; display->m_name = "Display"; m_displays[display->m_id] = display; // fills mode array with both CEA and DMT m_modes.resize(0); get_modes(m_modes, HDMI_RES_GROUP_CEA); // TV get_modes(m_modes, HDMI_RES_GROUP_DMT); // PC for (size_t n = 0; n < m_modes.size(); n++) { TV_SUPPORTED_MODE_NEW_T* tvmode = &m_modes[n]; DMVideoModePtr mode = DMVideoModePtr(new DMVideoMode); mode->m_id = n * 2 + 0; display->m_videoModes[mode->m_id] = mode; mode->m_height = tvmode->height; mode->m_width = tvmode->width; mode->m_refreshRate = tvmode->frame_rate; mode->m_interlaced = (tvmode->scan_mode == 1); mode->m_bitsPerPixel = 32; mode = DMVideoModePtr(new DMVideoMode(*mode)); mode->m_id = n * 2 + 1; display->m_videoModes[mode->m_id] = mode; mode->m_refreshRate /= 1.001; } if (m_modes.size() == 0) return false; else return DisplayManager::initialize(); }
bool DisplayManagerWin::initialize() { DISPLAY_DEVICEW displayInfo; int displayId = 0; m_displayAdapters.clear(); displays.clear(); while (getDisplayInfo(displayId, displayInfo)) { if (displayInfo.StateFlags & (DISPLAY_DEVICE_ACTIVE | DISPLAY_DEVICE_ATTACHED)) { DEVMODEW modeInfo; int modeId = 0; // add the display DMDisplayPtr display = DMDisplayPtr(new DMDisplay); display->id = displayId; display->name = QString::fromWCharArray(displayInfo.DeviceString); displays[display->id] = DMDisplayPtr(display); m_displayAdapters[display->id] = QString::fromWCharArray(displayInfo.DeviceName); while (getModeInfo(displayId, modeId, modeInfo)) { // add the videomode to the display DMVideoModePtr videoMode = DMVideoModePtr(new DMVideoMode); *videoMode = convertDevMode(modeInfo); videoMode->id = modeId; display->videoModes[videoMode->id] = videoMode; modeId++; } } displayId++; } if (displays.size() == 0) { QLOG_DEBUG() << "No display found."; return false; } else return DisplayManager::initialize(); }
bool DisplayManagerOSX::initialize() { int totalModes = 0; m_displays.clear(); for (int i = 0; i < m_osxDisplayModes.size(); i++) { if (m_osxDisplayModes[i]) CFRelease(m_osxDisplayModes[i]); } m_osxDisplayModes.clear(); CGError err = CGGetActiveDisplayList(MAX_DISPLAYS, m_osxDisplays, &m_osxnumDisplays); if (err) { m_osxnumDisplays = 0; QLOG_ERROR() << "CGGetActiveDisplayList returned failure:" << err; return false; } for (int displayid = 0; displayid < m_osxnumDisplays; displayid++) { // add the display to the list DMDisplayPtr display = DMDisplayPtr(new DMDisplay); display->m_id = displayid; display->m_name = QString("Display %1").arg(displayid); m_displays[display->m_id] = display; m_osxDisplayModes[displayid] = CGDisplayCopyAllDisplayModes(m_osxDisplays[displayid], nullptr); if (!m_osxDisplayModes[displayid]) continue; int numModes = (int)CFArrayGetCount(m_osxDisplayModes[displayid]); for (int modeid = 0; modeid < numModes; modeid++) { totalModes++; // add the videomode to the display DMVideoModePtr mode = DMVideoModePtr(new DMVideoMode); mode->m_id = modeid; display->m_videoModes[modeid] = mode; // grab videomode info CGDisplayModeRef displayMode = (CGDisplayModeRef)CFArrayGetValueAtIndex(m_osxDisplayModes[displayid], modeid); mode->m_height = CGDisplayModeGetHeight(displayMode); mode->m_width = CGDisplayModeGetWidth(displayMode); mode->m_refreshRate = CGDisplayModeGetRefreshRate(displayMode); CFStringRef pixEnc = CGDisplayModeCopyPixelEncoding(displayMode); if (CFStringCompare(pixEnc, CFSTR(IO32BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) mode->m_bitsPerPixel = 32; else if (CFStringCompare(pixEnc, CFSTR(IO16BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) mode->m_bitsPerPixel = 16; else if (CFStringCompare(pixEnc, CFSTR(IO8BitIndexedPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) mode->m_bitsPerPixel = 8; CFRelease(pixEnc); mode->m_interlaced = (CGDisplayModeGetIOFlags(displayMode) & kDisplayModeInterlacedFlag) > 0; if (mode->m_refreshRate == 0) mode->m_refreshRate = 60; } } if (totalModes == 0) return false; else return DisplayManager::initialize(); }