@@ -352,7 +352,7 @@ impl Playback {
352352 let ( audio_playhead_tx, audio_playhead_rx) =
353353 watch:: channel ( self . start_frame_number as f64 / fps as f64 ) ;
354354
355- AudioPlayback {
355+ let has_audio = AudioPlayback {
356356 segments : get_audio_segments ( & self . segment_medias ) ,
357357 stop_rx : stop_rx. clone ( ) ,
358358 start_frame_number : self . start_frame_number ,
@@ -661,9 +661,10 @@ impl Playback {
661661
662662 frame_number = frame_number. saturating_add ( 1 ) ;
663663 let _ = playback_position_tx. send ( frame_number) ;
664- if audio_playhead_tx
665- . send ( frame_number as f64 / fps_f64)
666- . is_err ( )
664+ if has_audio
665+ && audio_playhead_tx
666+ . send ( frame_number as f64 / fps_f64)
667+ . is_err ( )
667668 {
668669 break ' playback;
669670 }
@@ -686,9 +687,10 @@ impl Playback {
686687 prefetch_buffer. retain ( |p| p. frame_number >= frame_number) ;
687688 let _ = frame_request_tx. send ( frame_number) ;
688689 let _ = playback_position_tx. send ( frame_number) ;
689- if audio_playhead_tx
690- . send ( frame_number as f64 / fps_f64)
691- . is_err ( )
690+ if has_audio
691+ && audio_playhead_tx
692+ . send ( frame_number as f64 / fps_f64)
693+ . is_err ( )
692694 {
693695 break ' playback;
694696 }
@@ -727,12 +729,12 @@ struct AudioPlayback {
727729}
728730
729731impl AudioPlayback {
730- fn spawn ( self ) {
732+ fn spawn ( self ) -> bool {
731733 let handle = tokio:: runtime:: Handle :: current ( ) ;
732734
733735 if self . segments . is_empty ( ) || self . segments [ 0 ] . tracks . is_empty ( ) {
734736 info ! ( "No audio segments found, skipping audio playback thread." ) ;
735- return ;
737+ return false ;
736738 }
737739
738740 std:: thread:: spawn ( move || {
@@ -807,6 +809,8 @@ impl AudioPlayback {
807809 let _ = handle. block_on ( stop_rx. changed ( ) ) ;
808810 info ! ( "Audio playback thread finished." ) ;
809811 } ) ;
812+
813+ true
810814 }
811815
812816 #[ cfg( not( target_os = "windows" ) ) ]
0 commit comments