From 6f6a5f00e0c75f229e276ec91ffb9dfa075e95ea Mon Sep 17 00:00:00 2001 From: Sami Samhuri Date: Sat, 19 Oct 2024 12:36:04 -0700 Subject: [PATCH] Fix release builds by using makeStream for SampleWriter's progress --- .../SJSAssetExportSession/ExportSession.swift | 4 ++-- .../SJSAssetExportSession/SampleWriter.swift | 19 ++++++++++--------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/Sources/SJSAssetExportSession/ExportSession.swift b/Sources/SJSAssetExportSession/ExportSession.swift index d5177d7..df9d4c5 100644 --- a/Sources/SJSAssetExportSession/ExportSession.swift +++ b/Sources/SJSAssetExportSession/ExportSession.swift @@ -67,7 +67,7 @@ public final class ExportSession: Sendable { fileType: fileType ) Task { [progressContinuation] in - for await progress in await sampleWriter.progressStream { + for await progress in sampleWriter.progressStream { progressContinuation.yield(progress) } } @@ -149,7 +149,7 @@ public final class ExportSession: Sendable { fileType: fileType ) Task { [progressContinuation] in - for await progress in await sampleWriter.progressStream { + for await progress in sampleWriter.progressStream { progressContinuation.yield(progress) } } diff --git a/Sources/SJSAssetExportSession/SampleWriter.swift b/Sources/SJSAssetExportSession/SampleWriter.swift index 72de3e3..e538e75 100644 --- a/Sources/SJSAssetExportSession/SampleWriter.swift +++ b/Sources/SJSAssetExportSession/SampleWriter.swift @@ -27,10 +27,9 @@ actor SampleWriter { queue.asUnownedSerialExecutor() } - lazy var progressStream: AsyncStream = AsyncStream { continuation in - progressContinuation = continuation - } - private var progressContinuation: AsyncStream.Continuation? + let progressStream: AsyncStream + + private let progressContinuation: AsyncStream.Continuation // MARK: Inputs @@ -65,6 +64,8 @@ actor SampleWriter { ) async throws { precondition(!videoOutputSettings.isEmpty) + (progressStream, progressContinuation) = AsyncStream.makeStream() + let duration = if let timeRange { timeRange.duration } else { @@ -111,7 +112,7 @@ actor SampleWriter { func writeSamples() async throws { try Task.checkCancellation() - progressContinuation?.yield(0.0) + progressContinuation.yield(0.0) writer.startWriting() writer.startSession(atSourceTime: timeRange.start) @@ -142,14 +143,14 @@ actor SampleWriter { } } - progressContinuation?.yield(1.0) + progressContinuation.yield(1.0) // Make sure the last progress value is yielded before returning. await withCheckedContinuation { continuation in - progressContinuation?.onTermination = { _ in + progressContinuation.onTermination = { _ in continuation.resume(returning: ()) } - progressContinuation?.finish() + progressContinuation.finish() } } @@ -288,7 +289,7 @@ actor SampleWriter { if output == videoOutput { let samplePresentationTime = CMSampleBufferGetPresentationTimeStamp(sampleBuffer) - timeRange.start let progress = Float(samplePresentationTime.seconds / duration.seconds) - progressContinuation?.yield(progress) + progressContinuation.yield(progress) } guard input.append(sampleBuffer) else {