diff --git a/modules/mpv-player/ios/MPVSoftwareRenderer.swift b/modules/mpv-player/ios/MPVLayerRenderer.swift similarity index 97% rename from modules/mpv-player/ios/MPVSoftwareRenderer.swift rename to modules/mpv-player/ios/MPVLayerRenderer.swift index 6fb8619b..8c4153ec 100644 --- a/modules/mpv-player/ios/MPVSoftwareRenderer.swift +++ b/modules/mpv-player/ios/MPVLayerRenderer.swift @@ -4,17 +4,17 @@ import CoreMedia import CoreVideo import AVFoundation -protocol MPVSoftwareRendererDelegate: AnyObject { - func renderer(_ renderer: MPVSoftwareRenderer, didUpdatePosition position: Double, duration: Double) - func renderer(_ renderer: MPVSoftwareRenderer, didChangePause isPaused: Bool) - func renderer(_ renderer: MPVSoftwareRenderer, didChangeLoading isLoading: Bool) - func renderer(_ renderer: MPVSoftwareRenderer, didBecomeReadyToSeek: Bool) - func renderer(_ renderer: MPVSoftwareRenderer, didBecomeTracksReady: Bool) +protocol MPVLayerRendererDelegate: AnyObject { + func renderer(_ renderer: MPVLayerRenderer, didUpdatePosition position: Double, duration: Double) + func renderer(_ renderer: MPVLayerRenderer, didChangePause isPaused: Bool) + func renderer(_ renderer: MPVLayerRenderer, didChangeLoading isLoading: Bool) + func renderer(_ renderer: MPVLayerRenderer, didBecomeReadyToSeek: Bool) + func renderer(_ renderer: MPVLayerRenderer, didBecomeTracksReady: Bool) } /// MPV player using vo_avfoundation for video output. /// This renders video directly to AVSampleBufferDisplayLayer for PiP support. -final class MPVSoftwareRenderer { +final class MPVLayerRenderer { enum RendererError: Error { case mpvCreationFailed case mpvInitialization(Int32) @@ -36,7 +36,7 @@ final class MPVSoftwareRenderer { private var isRunning = false private var isStopping = false - weak var delegate: MPVSoftwareRendererDelegate? + weak var delegate: MPVLayerRendererDelegate? // Thread-safe state for playback private var _cachedDuration: Double = 0 @@ -132,7 +132,7 @@ final class MPVSoftwareRenderer { // Setup wakeup callback mpv_set_wakeup_callback(handle, { ctx in guard let ctx = ctx else { return } - let instance = Unmanaged.fromOpaque(ctx).takeUnretainedValue() + let instance = Unmanaged.fromOpaque(ctx).takeUnretainedValue() instance.processEvents() }, Unmanaged.passUnretained(self).toOpaque()) diff --git a/modules/mpv-player/ios/MpvPlayerView.swift b/modules/mpv-player/ios/MpvPlayerView.swift index 1f6fd456..03844238 100644 --- a/modules/mpv-player/ios/MpvPlayerView.swift +++ b/modules/mpv-player/ios/MpvPlayerView.swift @@ -38,7 +38,7 @@ struct VideoLoadConfig { // to apply the proper styling (e.g. border radius and shadows). class MpvPlayerView: ExpoView { private let displayLayer = AVSampleBufferDisplayLayer() - private var renderer: MPVSoftwareRenderer? + private var renderer: MPVLayerRenderer? private var videoContainer: UIView! private var pipController: PiPController? @@ -83,7 +83,7 @@ class MpvPlayerView: ExpoView { videoContainer.bottomAnchor.constraint(equalTo: bottomAnchor) ]) - renderer = MPVSoftwareRenderer(displayLayer: displayLayer) + renderer = MPVLayerRenderer(displayLayer: displayLayer) renderer?.delegate = self // Setup PiP @@ -276,10 +276,10 @@ class MpvPlayerView: ExpoView { } } -// MARK: - MPVSoftwareRendererDelegate +// MARK: - MPVLayerRendererDelegate -extension MpvPlayerView: MPVSoftwareRendererDelegate { - func renderer(_: MPVSoftwareRenderer, didUpdatePosition position: Double, duration: Double) { +extension MpvPlayerView: MPVLayerRendererDelegate { + func renderer(_: MPVLayerRenderer, didUpdatePosition position: Double, duration: Double) { cachedPosition = position cachedDuration = duration @@ -298,7 +298,7 @@ extension MpvPlayerView: MPVSoftwareRendererDelegate { } } - func renderer(_: MPVSoftwareRenderer, didChangePause isPaused: Bool) { + func renderer(_: MPVLayerRenderer, didChangePause isPaused: Bool) { DispatchQueue.main.async { [weak self] in guard let self else { return } // Don't update intendedPlayState here - it's only set by user actions (play/pause) @@ -314,7 +314,7 @@ extension MpvPlayerView: MPVSoftwareRendererDelegate { } } - func renderer(_: MPVSoftwareRenderer, didChangeLoading isLoading: Bool) { + func renderer(_: MPVLayerRenderer, didChangeLoading isLoading: Bool) { DispatchQueue.main.async { [weak self] in guard let self else { return } self.onPlaybackStateChange([ @@ -323,7 +323,7 @@ extension MpvPlayerView: MPVSoftwareRendererDelegate { } } - func renderer(_: MPVSoftwareRenderer, didBecomeReadyToSeek: Bool) { + func renderer(_: MPVLayerRenderer, didBecomeReadyToSeek: Bool) { DispatchQueue.main.async { [weak self] in guard let self else { return } self.onPlaybackStateChange([ @@ -332,7 +332,7 @@ extension MpvPlayerView: MPVSoftwareRendererDelegate { } } - func renderer(_: MPVSoftwareRenderer, didBecomeTracksReady: Bool) { + func renderer(_: MPVLayerRenderer, didBecomeTracksReady: Bool) { DispatchQueue.main.async { [weak self] in guard let self else { return } self.onTracksReady([:])