@@ -342,7 +342,7 @@ pub enum VideoEvent {
342342 path : std:: path:: PathBuf ,
343343 width : u32 ,
344344 height : u32 ,
345- rgba : Vec < u8 > ,
345+ rgba : std :: sync :: Arc < Vec < u8 > > ,
346346 } ,
347347 PlaybackProgress {
348348 position : f64 ,
@@ -380,7 +380,7 @@ pub async fn run_video_worker(
380380 player. register_callback ( wakeup_tx) ;
381381 }
382382
383- let mut buffer = Vec :: new ( ) ;
383+
384384 let mut current_video_path = std:: path:: PathBuf :: new ( ) ;
385385 let mut last_position = -1.0 ;
386386 let mut last_muted = false ;
@@ -452,7 +452,7 @@ pub async fn run_video_worker(
452452 }
453453 }
454454
455- if should_render {
455+ if should_render && event_tx . capacity ( ) > 0 {
456456 let flags = unsafe {
457457 mpv_render_context_update( player. render_ctx)
458458 } ;
@@ -466,17 +466,15 @@ pub async fn run_video_worker(
466466 let render_h = ( h as f64 * scale) as i32 ;
467467
468468 let size = ( render_w * render_h * 4 ) as usize ;
469- if buffer. len( ) != size {
470- buffer. resize( size, 0 ) ;
471- }
469+ let mut frame_buffer = vec![ 0u8 ; size] ;
472470
473- if player. render_frame( render_w, render_h, & mut buffer ) . is_ok( ) {
474- let _ = event_tx. send ( VideoEvent :: FrameReady {
471+ if player. render_frame( render_w, render_h, & mut frame_buffer ) . is_ok( ) {
472+ let _ = event_tx. try_send ( VideoEvent :: FrameReady {
475473 path: current_video_path. clone( ) ,
476474 width: render_w as u32 ,
477475 height: render_h as u32 ,
478- rgba: buffer . clone ( ) ,
479- } ) . await ;
476+ rgba: std :: sync :: Arc :: new ( frame_buffer ) ,
477+ } ) ;
480478 }
481479 }
482480 }
0 commit comments