diff options
author | der richter <der.richter@gmx.de> | 2024-02-08 01:05:25 +0100 |
---|---|---|
committer | der richter <der.richter@gmx.de> | 2024-02-15 00:11:55 +0100 |
commit | 0a343369bad108e7a2267345adb71aa8687a4ddb (patch) | |
tree | 6ee44dafd30c2e22d588e74a11e3257b34b61098 /osdep | |
parent | e23e158481f98a8f0897fa4a9acdca31bc2d3a6e (diff) | |
download | mpv-0a343369bad108e7a2267345adb71aa8687a4ddb.tar.bz2 mpv-0a343369bad108e7a2267345adb71aa8687a4ddb.tar.xz |
mac/remote: add playback rate info
also rate limit the position to update at max once per second.
Diffstat (limited to 'osdep')
-rw-r--r-- | osdep/macos/remote_command_center.swift | 7 | ||||
-rw-r--r-- | osdep/macosx_events.m | 1 |
2 files changed, 6 insertions, 2 deletions
diff --git a/osdep/macos/remote_command_center.swift b/osdep/macos/remote_command_center.swift index e3060516ed..4eb112d936 100644 --- a/osdep/macos/remote_command_center.swift +++ b/osdep/macos/remote_command_center.swift @@ -46,6 +46,7 @@ class RemoteCommandCenter: NSObject { var isPaused: Bool = false { didSet { updateInfoCenter() } } var duration: Double = 0 { didSet { updateInfoCenter() } } var position: Double = 0 { didSet { updateInfoCenter() } } + var rate: Double = 0 { didSet { updateInfoCenter() } } var infoCenter: MPNowPlayingInfoCenter { get { return MPNowPlayingInfoCenter.default() } } var commandCenter: MPRemoteCommandCenter { get { return MPRemoteCommandCenter.shared() } } @@ -139,7 +140,7 @@ class RemoteCommandCenter: NSObject { func updateInfoCenter() { nowPlayingInfo.merge([ - MPNowPlayingInfoPropertyPlaybackRate: NSNumber(value: !isPaused), + MPNowPlayingInfoPropertyPlaybackRate: NSNumber(value: isPaused ? 0 : rate), MPNowPlayingInfoPropertyElapsedPlaybackTime: NSNumber(value: position), MPMediaItemPropertyPlaybackDuration: NSNumber(value: duration), ]) { (_, new) in new } @@ -184,11 +185,13 @@ class RemoteCommandCenter: NSObject { isPaused = LibmpvHelper.mpvFlagToBool(property.data) ?? false case "time-pos" where property.format == MPV_FORMAT_DOUBLE: let newPosition = max(LibmpvHelper.mpvDoubleToDouble(property.data) ?? 0, 0) - if Int(floor(newPosition) - floor(position)) != 0 { + if Int((floor(newPosition) - floor(position)) / rate) != 0 { position = newPosition } case "duration" where property.format == MPV_FORMAT_DOUBLE: duration = LibmpvHelper.mpvDoubleToDouble(property.data) ?? 0 + case "speed" where property.format == MPV_FORMAT_DOUBLE: + rate = LibmpvHelper.mpvDoubleToDouble(property.data) ?? 1 default: break } diff --git a/osdep/macosx_events.m b/osdep/macosx_events.m index 33ea265797..6ffff3d161 100644 --- a/osdep/macosx_events.m +++ b/osdep/macosx_events.m @@ -156,6 +156,7 @@ void cocoa_set_mpv_handle(struct mpv_handle *ctx) if ([[EventsResponder sharedInstance] setMpvHandle:ctx]) { mpv_observe_property(ctx, 0, "duration", MPV_FORMAT_DOUBLE); mpv_observe_property(ctx, 0, "time-pos", MPV_FORMAT_DOUBLE); + mpv_observe_property(ctx, 0, "speed", MPV_FORMAT_DOUBLE); mpv_observe_property(ctx, 0, "pause", MPV_FORMAT_FLAG); mpv_set_wakeup_callback(ctx, wakeup, NULL); } |