summaryrefslogtreecommitdiffstats
path: root/video
diff options
context:
space:
mode:
authorder richter <der.richter@gmx.de>2020-07-19 19:45:34 +0200
committerder richter <der.richter@gmx.de>2020-08-22 14:22:49 +0200
commit6c83e91e11556697e836895e26254b4d9bf223df (patch)
tree170154ea3cd0d4ae4d99fe206f37bae3f4176e8d /video
parent5fb0f36937cc38b9db88dc9b8631cba75536c5be (diff)
downloadmpv-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.
Diffstat (limited to 'video')
-rw-r--r--video/out/mac/common.swift36
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)