From baf76c9b9e5349c2069f19f04ceb48ce3952fef6 Mon Sep 17 00:00:00 2001 From: Ryan Romanchuk Date: Mon, 29 May 2023 21:45:08 -0500 Subject: [PATCH 1/2] allow configurable qos --- Sources/NextLevelSessionExporter.swift | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Sources/NextLevelSessionExporter.swift b/Sources/NextLevelSessionExporter.swift index b56338f..d7525ba 100644 --- a/Sources/NextLevelSessionExporter.swift +++ b/Sources/NextLevelSessionExporter.swift @@ -90,6 +90,9 @@ open class NextLevelSessionExporter: NSObject { /// Audio output configuration dictionary, using keys defined in `` public var audioOutputConfiguration: [String : Any]? + /// Assign custom priority on global dispatch queue + public var qos: DispatchQoS.QoSClass = .default + /// Export session status state. public var status: AVAssetExportSession.Status { get { @@ -302,7 +305,7 @@ extension NextLevelSessionExporter { audioSemaphore.signal() } - DispatchQueue.global().async { + DispatchQueue.global(qos: qos).async { audioSemaphore.wait() videoSemaphore.wait() DispatchQueue.main.async { From 75cad73f3d369abd8488debe707c9a8b69f7a9b6 Mon Sep 17 00:00:00 2001 From: Ryan Romanchuk Date: Mon, 29 May 2023 22:13:00 -0500 Subject: [PATCH 2/2] try again --- Sources/NextLevelSessionExporter.swift | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/Sources/NextLevelSessionExporter.swift b/Sources/NextLevelSessionExporter.swift index d7525ba..cbf3ae5 100644 --- a/Sources/NextLevelSessionExporter.swift +++ b/Sources/NextLevelSessionExporter.swift @@ -90,8 +90,7 @@ open class NextLevelSessionExporter: NSObject { /// Audio output configuration dictionary, using keys defined in `` public var audioOutputConfiguration: [String : Any]? - /// Assign custom priority on global dispatch queue - public var qos: DispatchQoS.QoSClass = .default + /// Export session status state. public var status: AVAssetExportSession.Status { @@ -132,6 +131,8 @@ open class NextLevelSessionExporter: NSObject { fileprivate var _pixelBufferAdaptor: AVAssetWriterInputPixelBufferAdaptor? fileprivate var _inputQueue: DispatchQueue + /// Assign custom priority on global dispatch queue + fileprivate var _qos: DispatchQoS.QoSClass fileprivate var _videoOutput: AVAssetReaderVideoCompositionOutput? fileprivate var _audioOutput: AVAssetReaderAudioMixOutput? @@ -152,13 +153,21 @@ open class NextLevelSessionExporter: NSObject { /// Initializes a session with an asset to export. /// /// - Parameter asset: The asset to export. - public convenience init(withAsset asset: AVAsset) { - self.init() + public convenience init(withAsset asset: AVAsset, qos: DispatchQoS.QoSClass = .default) { + self.init(qos: qos) self.asset = asset } + public init(qos: DispatchQoS.QoSClass) { + self._qos = qos + self._inputQueue = DispatchQueue(label: InputQueueLabel, autoreleaseFrequency: .workItem, target: DispatchQueue.global(qos: _qos)) + self.timeRange = CMTimeRange(start: CMTime.zero, end: CMTime.positiveInfinity) + super.init() + } + public override init() { - self._inputQueue = DispatchQueue(label: InputQueueLabel, autoreleaseFrequency: .workItem, target: DispatchQueue.global()) + self._qos = .default + self._inputQueue = DispatchQueue(label: InputQueueLabel, autoreleaseFrequency: .workItem, target: DispatchQueue.global(qos: _qos)) self.timeRange = CMTimeRange(start: CMTime.zero, end: CMTime.positiveInfinity) super.init() } @@ -305,7 +314,7 @@ extension NextLevelSessionExporter { audioSemaphore.signal() } - DispatchQueue.global(qos: qos).async { + DispatchQueue.global(qos: _qos).async { audioSemaphore.wait() videoSemaphore.wait() DispatchQueue.main.async {