From 1e768033a1432ef4398416b1a36199a63406eda8 Mon Sep 17 00:00:00 2001 From: Sami Samhuri Date: Fri, 4 Apr 2025 10:26:09 -0700 Subject: [PATCH] Fix a crash when cancelled while writing samples Now we never force-unwrap videoInput or videoOutput. Or anything else for that matter. --- Sources/SJSAssetExportSession/SampleWriter.swift | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Sources/SJSAssetExportSession/SampleWriter.swift b/Sources/SJSAssetExportSession/SampleWriter.swift index 2336d6b..e8bf86d 100644 --- a/Sources/SJSAssetExportSession/SampleWriter.swift +++ b/Sources/SJSAssetExportSession/SampleWriter.swift @@ -229,7 +229,7 @@ actor SampleWriter { } private func startEncodingVideoTracks() { - videoInput!.requestMediaDataWhenReady(on: queue) { + videoInput?.requestMediaDataWhenReady(on: queue) { // NOTE: assumeIsolated crashes on macOS with Swift 6.0, fixed in 6.1 self.assumeIsolated { _self in _self.writeAllReadySamples() @@ -243,8 +243,10 @@ actor SampleWriter { if !hasMoreAudio { log.debug("Finished encoding audio") } } - let hasMoreVideo = writeReadySamples(output: videoOutput!, input: videoInput!) - if !hasMoreVideo { log.debug("Finished encoding video") } + if let videoInput, let videoOutput { + let hasMoreVideo = writeReadySamples(output: videoOutput, input: videoInput) + if !hasMoreVideo { log.debug("Finished encoding video") } + } } private func writeReadySamples(output: AVAssetReaderOutput, input: AVAssetWriterInput) -> Bool {