diff options
author | der richter <der.richter@gmx.de> | 2020-07-19 19:45:34 +0200 |
---|---|---|
committer | der richter <der.richter@gmx.de> | 2020-08-22 14:22:49 +0200 |
commit | 6c83e91e11556697e836895e26254b4d9bf223df (patch) | |
tree | 170154ea3cd0d4ae4d99fe206f37bae3f4176e8d | |
parent | 5fb0f36937cc38b9db88dc9b8631cba75536c5be (diff) | |
download | mpv-6c83e91e11556697e836895e26254b4d9bf223df.tar.bz2 mpv-6c83e91e11556697e836895e26254b4d9bf223df.tar.xz |
mac: add icc profile and ambient light sensor support
this is preparation for new backends. currently this is done via the
libmpv API but for future new new VOs not based on libmpv we need these
VOCTRL events.
-rw-r--r-- | video/out/mac/common.swift | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/video/out/mac/common.swift b/video/out/mac/common.swift index 28898c2840..4b5e1265c0 100644 --- a/video/out/mac/common.swift +++ b/video/out/mac/common.swift @@ -360,6 +360,12 @@ class Common: NSObject { return getScreenBy(id: Int(screenID)) } + func getCurrentScreen() -> NSScreen? { + return window != nil ? window?.screen : + getTargetScreen(forFullscreen: false) ?? + NSScreen.main + } + func getWindowGeometry(forScreen targetScreen: NSScreen, videoOut vo: UnsafeMutablePointer<vo>) -> NSRect { let r = targetScreen.convertRectToBacking(targetScreen.frame) @@ -488,9 +494,9 @@ class Common: NSObject { return VO_TRUE case VOCTRL_GET_HIDPI_SCALE: let scaleFactor = data.assumingMemoryBound(to: CDouble.self) + let screen = getCurrentScreen() let factor = window?.backingScaleFactor ?? - getTargetScreen(forFullscreen: false)?.backingScaleFactor ?? - NSScreen.main?.backingScaleFactor ?? 1.0 + screen?.backingScaleFactor ?? 1.0 scaleFactor.pointee = Double(factor) return VO_TRUE case VOCTRL_RESTORE_SCREENSAVER: @@ -506,6 +512,27 @@ class Common: NSObject { self.setCursorVisiblility(self.cursorVisibilityWanted) } return VO_TRUE + case VOCTRL_GET_ICC_PROFILE: + let screen = getCurrentScreen() + guard var iccData = screen?.colorSpace?.iccProfileData else { + log.sendWarning("No Screen available to retrieve ICC profile") + return VO_TRUE + } + + let icc = data.assumingMemoryBound(to: bstr.self) + iccData.withUnsafeMutableBytes { (ptr: UnsafeMutableRawBufferPointer) in + guard let baseAddress = ptr.baseAddress, ptr.count > 0 else { return } + let u8Ptr = baseAddress.assumingMemoryBound(to: UInt8.self) + icc.pointee = bstrdup(nil, bstr(start: u8Ptr, len: ptr.count)) + } + return VO_TRUE + case VOCTRL_GET_AMBIENT_LUX: + if lightSensor != 0 { + let lux = data.assumingMemoryBound(to: Int32.self) + lux.pointee = Int32(lmuToLux(lastLmu)) + return VO_TRUE; + } + return VO_NOTIMPL case VOCTRL_GET_UNFS_WINDOW_SIZE: let sizeData = data.assumingMemoryBound(to: Int32.self) let size = UnsafeMutableBufferPointer(start: sizeData, count: 2) @@ -532,10 +559,7 @@ class Common: NSObject { let dnames = data.assumingMemoryBound(to: UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>?.self) var array: UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>? = nil var count: Int32 = 0 - let screen = window != nil ? window?.screen : - getTargetScreen(forFullscreen: false) ?? - NSScreen.main - let displayName = screen?.displayName ?? "Unknown" + let displayName = getCurrentScreen()?.displayName ?? "Unknown" SWIFT_TARRAY_STRING_APPEND(nil, &array, &count, ta_xstrdup(nil, displayName)) SWIFT_TARRAY_STRING_APPEND(nil, &array, &count, nil) |