@@ -49,31 +49,32 @@ struct VideoFrameExtractor {
4949 CMTime ( seconds: $0, preferredTimescale: 600 )
5050 }
5151
52- let seq = VideoFrameSequence ( stream: AsyncThrowingStream< VideoFrame, Error> { continuation in
53- Task {
54- let asset = AVURLAsset ( url: url)
55- let generator = AVAssetImageGenerator ( asset: asset)
56- generator. appliesPreferredTrackTransform = true
57- generator. requestedTimeToleranceBefore = CMTime ( seconds: 0.1 , preferredTimescale: 600 )
58- generator. requestedTimeToleranceAfter = CMTime ( seconds: 0.1 , preferredTimescale: 600 )
52+ let seq = VideoFrameSequence (
53+ stream: AsyncThrowingStream< VideoFrame, Error> { continuation in
54+ Task {
55+ let asset = AVURLAsset ( url: url)
56+ let generator = AVAssetImageGenerator ( asset: asset)
57+ generator. appliesPreferredTrackTransform = true
58+ generator. requestedTimeToleranceBefore = CMTime ( seconds: 0.1 , preferredTimescale: 600 )
59+ generator. requestedTimeToleranceAfter = CMTime ( seconds: 0.1 , preferredTimescale: 600 )
5960
60- for await result in generator. images ( for: cmTimes) {
61- do {
62- let image = try result. image
63- let actualSeconds = CMTimeGetSeconds ( try result. actualTime)
64- continuation. yield ( VideoFrame ( image: image, timestamp: actualSeconds) )
65- } catch {
66- if skipErrors {
67- continue
61+ for await result in generator. images ( for: cmTimes) {
62+ do {
63+ let image = try result. image
64+ let actualSeconds = CMTimeGetSeconds ( try result. actualTime)
65+ continuation. yield ( VideoFrame ( image: image, timestamp: actualSeconds) )
66+ } catch {
67+ if skipErrors {
68+ continue
69+ }
70+ continuation. finish (
71+ throwing: VideoInputError . frameExtractionFailed ( underlying: error) )
72+ return
6873 }
69- continuation. finish (
70- throwing: VideoInputError . frameExtractionFailed ( underlying: error) )
71- return
7274 }
75+ continuation. finish ( )
7376 }
74- continuation. finish ( )
75- }
76- } )
77+ } )
7778
7879 return ( count: count, duration: duration, frames: seq)
7980 }
0 commit comments