9#define LOC QString("DisplayOSX: ")
41 CGDisplayModeRef mode = CGDisplayCopyDisplayMode(disp);
50 m_resolution = QSize(
static_cast<int>(CGDisplayModeGetWidth(mode)),
51 static_cast<int>(CGDisplayModeGetHeight(mode)));
55 CGDisplayModeRelease(mode);
56 CGSize sizemm = CGDisplayScreenSize(disp);
57 m_physicalSize = QSize(
static_cast<int>(sizemm.width),
static_cast<int>(sizemm.height));
78 CFArrayRef modes = CGDisplayCopyAllDisplayModes(disp,
nullptr);
83 CGSize sizemm = CGDisplayScreenSize(disp);
85 for (
int i = 0; i < CFArrayGetCount(modes); ++i)
87 auto *mode = (CGDisplayModeRef)CFArrayGetValueAtIndex(modes, i);
88 double rate = CGDisplayModeGetRefreshRate(mode);
89 bool interlaced = CGDisplayModeGetIOFlags(mode) & kDisplayModeInterlacedFlag;
90 int width =
static_cast<int>(CGDisplayModeGetWidth(mode));
91 int height =
static_cast<int>(CGDisplayModeGetHeight(mode));
96 LOG(VB_PLAYBACK, LOG_INFO,
LOC + QString(
"Ignoring interlaced mode %1x%2 %3i")
97 .arg(width).arg(height).arg(rate, 2,
'f', 2,
'0'));
101 QSize resolution(width, height);
103 if (screen_map.find(key) == screen_map.end())
104 screen_map[key] =
MythDisplayMode(resolution, QSize(sizemm.width, sizemm.height),
107 screen_map[key].AddRefreshRate(rate);
113 for (
auto & screen : screen_map)
128 auto rate =
static_cast<double>(NAN);
133 LOG(VB_GENERAL, LOG_ERR,
LOC +
"Desired resolution and frame rate not found.");
140 LOG(VB_GENERAL, LOG_ERR,
LOC +
"Failed to find mode");
145 CGDisplayCapture(disp);
146 CGDisplayConfigRef cfg =
nullptr;
147 CGBeginDisplayConfiguration(&cfg);
148 CGConfigureDisplayFadeEffect(cfg, 0.3F, 0.5F, 0, 0, 0);
149 CGDisplaySetDisplayMode(disp,
m_modeMap.value(mode),
nullptr);
150 CGError err = CGCompleteDisplayConfiguration(cfg, kCGConfigureForAppOnly);
151 CGDisplayRelease(disp);
152 return err == kCGErrorSuccess;
158 CGDisplayModeRelease(it.value());
bool GetBoolSetting(const QString &key, bool defaultval=false)
static int FindBestMatch(const MythDisplayModes &Modes, const MythDisplayMode &Mode, double &TargetRate)
static uint64_t CalcKey(QSize Size, double Rate)
~MythDisplayOSX() override
QMap< uint64_t, CGDisplayModeRef > m_modeMap
const MythDisplayModes & GetVideoModes(void) override
bool UsingVideoModes(void) override
void UpdateCurrentMode(void) override
Retrieve screen details.
bool SwitchToVideoMode(QSize Size, double DesiredRate) override
virtual void UpdateCurrentMode()
Retrieve screen details.
MythDisplayModes m_videoModes
static MythMainWindow * getMainWindow(bool UseDB=true)
Return the existing main window, or create one.
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
std::map< uint64_t, MythDisplayMode > DisplayModeMap
std::vector< MythDisplayMode > MythDisplayModes
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
bool HasMythMainWindow(void)
CGDirectDisplayID GetOSXDisplay(WId win)
QByteArray GetOSXEDID(CGDirectDisplayID Display)