@@ -10,8 +10,15 @@ use cpal::{
1010 traits:: { DeviceTrait , HostTrait , StreamTrait } ,
1111} ;
1212use futures:: stream:: { FuturesUnordered , StreamExt } ;
13- use std:: { collections:: { HashSet , VecDeque } , sync:: Arc , time:: Duration } ;
14- use tokio:: { sync:: { mpsc as tokio_mpsc, watch} , time:: Instant } ;
13+ use std:: {
14+ collections:: { HashSet , VecDeque } ,
15+ sync:: Arc ,
16+ time:: Duration ,
17+ } ;
18+ use tokio:: {
19+ sync:: { mpsc as tokio_mpsc, watch} ,
20+ time:: Instant ,
21+ } ;
1522use tracing:: { error, info, trace, warn} ;
1623
1724use crate :: {
@@ -80,7 +87,8 @@ impl Playback {
8087 event_rx,
8188 } ;
8289
83- let ( prefetch_tx, mut prefetch_rx) = tokio_mpsc:: channel :: < PrefetchedFrame > ( PREFETCH_BUFFER_SIZE * 2 ) ;
90+ let ( prefetch_tx, mut prefetch_rx) =
91+ tokio_mpsc:: channel :: < PrefetchedFrame > ( PREFETCH_BUFFER_SIZE * 2 ) ;
8492 let ( frame_request_tx, mut frame_request_rx) = watch:: channel ( self . start_frame_number ) ;
8593
8694 let prefetch_stop_rx = stop_rx. clone ( ) ;
@@ -113,20 +121,22 @@ impl Playback {
113121 while in_flight. len ( ) < PARALLEL_DECODE_TASKS {
114122 let frame_num = next_prefetch_frame;
115123 let prefetch_time = frame_num as f64 / fps_f64;
116-
124+
117125 if prefetch_time >= prefetch_duration {
118126 break ;
119127 }
120-
128+
121129 if in_flight_frames. contains ( & frame_num) {
122130 next_prefetch_frame += 1 ;
123131 continue ;
124132 }
125133
126134 let project = prefetch_project. borrow ( ) . clone ( ) ;
127-
135+
128136 if let Some ( ( segment_time, segment) ) = project. get_segment_time ( prefetch_time) {
129- if let Some ( segment_media) = prefetch_segment_medias. get ( segment. recording_clip as usize ) {
137+ if let Some ( segment_media) =
138+ prefetch_segment_medias. get ( segment. recording_clip as usize )
139+ {
130140 let clip_offsets = project
131141 . clips
132142 . iter ( )
@@ -137,9 +147,9 @@ impl Playback {
137147 let decoders = segment_media. decoders . clone ( ) ;
138148 let hide_camera = project. camera . hide ;
139149 let segment_index = segment. recording_clip ;
140-
150+
141151 in_flight_frames. insert ( frame_num) ;
142-
152+
143153 in_flight. push ( async move {
144154 let result = decoders
145155 . get_frames ( segment_time as f32 , !hide_camera, clip_offsets)
@@ -148,13 +158,13 @@ impl Playback {
148158 } ) ;
149159 }
150160 }
151-
161+
152162 next_prefetch_frame += 1 ;
153163 }
154164
155165 tokio:: select! {
156166 biased;
157-
167+
158168 Some ( ( frame_num, segment_index, result) ) = in_flight. next( ) => {
159169 in_flight_frames. remove( & frame_num) ;
160170 if let Some ( segment_frames) = result {
@@ -165,7 +175,7 @@ impl Playback {
165175 } ) . await ;
166176 }
167177 }
168-
178+
169179 _ = tokio:: time:: sleep( Duration :: from_millis( 1 ) ) , if in_flight. is_empty( ) => { }
170180 }
171181 }
@@ -191,7 +201,8 @@ impl Playback {
191201
192202 let frame_duration = Duration :: from_secs_f64 ( 1.0 / fps_f64) ;
193203 let mut frame_number = self . start_frame_number ;
194- let mut prefetch_buffer: VecDeque < PrefetchedFrame > = VecDeque :: with_capacity ( PREFETCH_BUFFER_SIZE ) ;
204+ let mut prefetch_buffer: VecDeque < PrefetchedFrame > =
205+ VecDeque :: with_capacity ( PREFETCH_BUFFER_SIZE ) ;
195206 let max_frame_skip = 3u32 ;
196207
197208 ' playback: loop {
@@ -223,17 +234,22 @@ impl Playback {
223234
224235 let project = self . project . borrow ( ) . clone ( ) ;
225236
226- let prefetched_idx = prefetch_buffer. iter ( ) . position ( |p| p. frame_number == frame_number) ;
227-
237+ let prefetched_idx = prefetch_buffer
238+ . iter ( )
239+ . position ( |p| p. frame_number == frame_number) ;
240+
228241 let segment_frames_opt = if let Some ( idx) = prefetched_idx {
229242 let prefetched = prefetch_buffer. remove ( idx) . unwrap ( ) ;
230243 Some ( ( prefetched. segment_frames , prefetched. segment_index ) )
231244 } else {
232- let Some ( ( segment_time, segment) ) = project. get_segment_time ( playback_time) else {
245+ let Some ( ( segment_time, segment) ) = project. get_segment_time ( playback_time)
246+ else {
233247 break ;
234248 } ;
235249
236- let Some ( segment_media) = self . segment_medias . get ( segment. recording_clip as usize ) else {
250+ let Some ( segment_media) =
251+ self . segment_medias . get ( segment. recording_clip as usize )
252+ else {
237253 frame_number = frame_number. saturating_add ( 1 ) ;
238254 continue ;
239255 } ;
@@ -256,7 +272,8 @@ impl Playback {
256272 } ;
257273
258274 if let Some ( ( segment_frames, segment_index) ) = segment_frames_opt {
259- let Some ( segment_media) = self . segment_medias . get ( segment_index as usize ) else {
275+ let Some ( segment_media) = self . segment_medias . get ( segment_index as usize )
276+ else {
260277 frame_number = frame_number. saturating_add ( 1 ) ;
261278 continue ;
262279 } ;
@@ -290,7 +307,10 @@ impl Playback {
290307 trace ! ( "Skipping {} frames to catch up" , frames_behind) ;
291308 } else {
292309 frame_number = frame_number + max_frame_skip;
293- trace ! ( "Limiting frame skip to {} (was {} behind)" , max_frame_skip, frames_behind) ;
310+ trace ! (
311+ "Limiting frame skip to {} (was {} behind)" ,
312+ max_frame_skip, frames_behind
313+ ) ;
294314 }
295315
296316 prefetch_buffer. retain ( |p| p. frame_number >= frame_number) ;
0 commit comments