Typealias Error in the SampleWriter

This commit is contained in:
Sami Samhuri 2024-07-07 09:38:54 -07:00
parent a73fe1173e
commit ee61962f0c
No known key found for this signature in database

View file

@ -17,6 +17,8 @@ private extension AVAsset {
} }
actor SampleWriter { actor SampleWriter {
typealias Error = ExportSession.Error
private let queue = DispatchSerialQueue( private let queue = DispatchSerialQueue(
label: "SJSAssetExportSession.SampleWriter", label: "SJSAssetExportSession.SampleWriter",
autoreleaseFrequency: .workItem, autoreleaseFrequency: .workItem,
@ -81,7 +83,7 @@ actor SampleWriter {
let writer = try AVAssetWriter(outputURL: outputURL, fileType: fileType) let writer = try AVAssetWriter(outputURL: outputURL, fileType: fileType)
writer.shouldOptimizeForNetworkUse = optimizeForNetworkUse writer.shouldOptimizeForNetworkUse = optimizeForNetworkUse
guard writer.canApply(outputSettings: videoOutputSettings, forMediaType: .video) else { guard writer.canApply(outputSettings: videoOutputSettings, forMediaType: .video) else {
throw ExportSession.Error.setupFailure(reason: "Cannot apply video output settings") throw Error.setupFailure(reason: "Cannot apply video output settings")
} }
let audioTracks = try await asset.sendTracks(withMediaType: .audio) let audioTracks = try await asset.sendTracks(withMediaType: .audio)
@ -114,10 +116,10 @@ actor SampleWriter {
throw CancellationError() throw CancellationError()
} else if writer.status == .failed { } else if writer.status == .failed {
reader.cancelReading() reader.cancelReading()
throw ExportSession.Error.writeFailure(writer.error) throw Error.writeFailure(writer.error)
} else if reader.status == .failed { } else if reader.status == .failed {
writer.cancelWriting() writer.cancelWriting()
throw ExportSession.Error.readFailure(reader.error) throw Error.readFailure(reader.error)
} else { } else {
await withCheckedContinuation { continuation in await withCheckedContinuation { continuation in
writer.finishWriting { writer.finishWriting {
@ -134,7 +136,7 @@ actor SampleWriter {
audioOutput.alwaysCopiesSampleData = false audioOutput.alwaysCopiesSampleData = false
audioOutput.audioMix = audioMix audioOutput.audioMix = audioMix
guard reader.canAdd(audioOutput) else { guard reader.canAdd(audioOutput) else {
throw ExportSession.Error.setupFailure(reason: "Can't add audio output to reader") throw Error.setupFailure(reason: "Can't add audio output to reader")
} }
reader.add(audioOutput) reader.add(audioOutput)
self.audioOutput = audioOutput self.audioOutput = audioOutput
@ -142,7 +144,7 @@ actor SampleWriter {
let audioInput = AVAssetWriterInput(mediaType: .audio, outputSettings: audioOutputSettings) let audioInput = AVAssetWriterInput(mediaType: .audio, outputSettings: audioOutputSettings)
audioInput.expectsMediaDataInRealTime = false audioInput.expectsMediaDataInRealTime = false
guard writer.canAdd(audioInput) else { guard writer.canAdd(audioInput) else {
throw ExportSession.Error.setupFailure(reason: "Can't add audio input to writer") throw Error.setupFailure(reason: "Can't add audio input to writer")
} }
writer.add(audioInput) writer.add(audioInput)
self.audioInput = audioInput self.audioInput = audioInput
@ -150,7 +152,7 @@ actor SampleWriter {
private func setUpVideo(videoTracks: [AVAssetTrack]) throws { private func setUpVideo(videoTracks: [AVAssetTrack]) throws {
guard !videoTracks.isEmpty else { guard !videoTracks.isEmpty else {
throw ExportSession.Error.setupFailure(reason: "No video tracks") throw Error.setupFailure(reason: "No video tracks")
} }
let videoOutput = AVAssetReaderVideoCompositionOutput( let videoOutput = AVAssetReaderVideoCompositionOutput(
@ -160,7 +162,7 @@ actor SampleWriter {
videoOutput.alwaysCopiesSampleData = false videoOutput.alwaysCopiesSampleData = false
videoOutput.videoComposition = videoComposition videoOutput.videoComposition = videoComposition
guard reader.canAdd(videoOutput) else { guard reader.canAdd(videoOutput) else {
throw ExportSession.Error.setupFailure(reason: "Can't add video output to reader") throw Error.setupFailure(reason: "Can't add video output to reader")
} }
reader.add(videoOutput) reader.add(videoOutput)
self.videoOutput = videoOutput self.videoOutput = videoOutput
@ -168,7 +170,7 @@ actor SampleWriter {
let videoInput = AVAssetWriterInput(mediaType: .video, outputSettings: videoOutputSettings) let videoInput = AVAssetWriterInput(mediaType: .video, outputSettings: videoOutputSettings)
videoInput.expectsMediaDataInRealTime = false videoInput.expectsMediaDataInRealTime = false
guard writer.canAdd(videoInput) else { guard writer.canAdd(videoInput) else {
throw ExportSession.Error.setupFailure(reason: "Can't add video input to writer") throw Error.setupFailure(reason: "Can't add video input to writer")
} }
writer.add(videoInput) writer.add(videoInput)
self.videoInput = videoInput self.videoInput = videoInput