From af7b412d1c0b74c63d4d301f5cc5cb2cd32c2108 Mon Sep 17 00:00:00 2001 From: Akemi Date: Fri, 16 Mar 2018 13:52:15 +0100 Subject: cocoa-cb: fix shutdown when fullscreen animation is running commit 2edf00f changed the MPV_EVENT_SHUTDOWN behaviour slightly, such that it will only be sent once. cocoa-cb relied on it being sent continuously till all mpv_handles are destroyed. now it manually shuts down and destroys the mpv_handle after the animation instead of relying on this removed behaviour. --- osdep/macOS_mpv_helper.swift | 5 ++++- video/out/cocoa-cb/window.swift | 2 +- video/out/cocoa_cb_common.swift | 22 ++++++++++++++++------ 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/osdep/macOS_mpv_helper.swift b/osdep/macOS_mpv_helper.swift index db650d792c..5d80e7b5b0 100644 --- a/osdep/macOS_mpv_helper.swift +++ b/osdep/macOS_mpv_helper.swift @@ -245,7 +245,10 @@ class MPVHelper: NSObject { mpvRenderContext = nil } - func deinitMPV() { + func deinitMPV(_ destroy: Bool = false) { + if destroy { + mpv_destroy(mpvHandle) + } mpvHandle = nil mpvLog = nil inputContext = nil diff --git a/video/out/cocoa-cb/window.swift b/video/out/cocoa-cb/window.swift index 040cd47751..b296eb25c8 100644 --- a/video/out/cocoa-cb/window.swift +++ b/video/out/cocoa-cb/window.swift @@ -306,7 +306,7 @@ class Window: NSWindow, NSWindowDelegate { isAnimating = false cocoaCB.layer.neededFlips += 1 - cocoaCB.isShuttingDown = false + cocoaCB.checkShutdown() } func setToFullScreen() { diff --git a/video/out/cocoa_cb_common.swift b/video/out/cocoa_cb_common.swift index b5ba9ee0c8..e8d8bb44f4 100644 --- a/video/out/cocoa_cb_common.swift +++ b/video/out/cocoa_cb_common.swift @@ -452,6 +452,21 @@ class CocoaCB: NSObject { } } + func shutdown(_ destroy: Bool = false) { + setCursorVisiblility(true) + stopDisplaylink() + uninitLightSensor() + removeDisplayReconfigureObserver() + mpv.deinitRender() + mpv.deinitMPV(destroy) + } + + func checkShutdown() { + if isShuttingDown { + shutdown(true) + } + } + func processEvent(_ event: UnsafePointer) { switch event.pointee.event_id { case MPV_EVENT_SHUTDOWN: @@ -459,12 +474,7 @@ class CocoaCB: NSObject { isShuttingDown = true return } - setCursorVisiblility(true) - stopDisplaylink() - uninitLightSensor() - removeDisplayReconfigureObserver() - mpv.deinitRender() - mpv.deinitMPV() + shutdown() case MPV_EVENT_PROPERTY_CHANGE: if backendState == .init { handlePropertyChange(event) -- cgit v1.2.3