@@ -10,7 +10,7 @@ use image::codecs::jpeg::JpegEncoder;
1010use serde:: { Deserialize , Serialize } ;
1111use specta:: Type ;
1212use std:: {
13- path:: PathBuf ,
13+ path:: { Path , PathBuf } ,
1414 sync:: { Arc , atomic:: Ordering } ,
1515} ;
1616use tracing:: { info, instrument} ;
@@ -32,11 +32,13 @@ impl ExportSettings {
3232}
3333
3434async fn do_export (
35- project_path : & PathBuf ,
35+ project_path : & Path ,
3636 settings : & ExportSettings ,
3737 progress : & tauri:: ipc:: Channel < FramesRendered > ,
38+ force_ffmpeg : bool ,
3839) -> Result < PathBuf , String > {
39- let exporter_base = ExporterBase :: builder ( project_path. clone ( ) )
40+ let exporter_base = ExporterBase :: builder ( project_path. to_path_buf ( ) )
41+ . with_force_ffmpeg_decoder ( force_ffmpeg)
4042 . build ( )
4143 . await
4244 . map_err ( |e| e. to_string ( ) ) ?;
@@ -80,7 +82,6 @@ async fn do_export(
8082
8183fn is_frame_decode_error ( error : & str ) -> bool {
8284 error. contains ( "Failed to decode video frames" )
83- || error. contains ( "FrameDecodeFailed" )
8485 || error. contains ( "Too many consecutive frame failures" )
8586}
8687
@@ -96,13 +97,11 @@ pub async fn export_video(
9697 ExportSettings :: Mp4 ( s) => s. force_ffmpeg_decoder ,
9798 ExportSettings :: Gif ( _) => false ,
9899 } ;
99- cap_rendering:: set_force_ffmpeg_decoder ( force_ffmpeg) ;
100100
101- let result = do_export ( & project_path, & settings, & progress) . await ;
101+ let result = do_export ( & project_path, & settings, & progress, force_ffmpeg ) . await ;
102102
103103 match result {
104104 Ok ( path) => {
105- cap_rendering:: set_force_ffmpeg_decoder ( false ) ;
106105 info ! ( "Exported to {} completed" , path. display( ) ) ;
107106 Ok ( path)
108107 }
@@ -112,11 +111,7 @@ pub async fn export_video(
112111 e
113112 ) ;
114113
115- cap_rendering:: set_force_ffmpeg_decoder ( true ) ;
116-
117- let retry_result = do_export ( & project_path, & settings, & progress) . await ;
118-
119- cap_rendering:: set_force_ffmpeg_decoder ( false ) ;
114+ let retry_result = do_export ( & project_path, & settings, & progress, true ) . await ;
120115
121116 match retry_result {
122117 Ok ( path) => {
@@ -133,7 +128,6 @@ pub async fn export_video(
133128 }
134129 }
135130 Err ( e) => {
136- cap_rendering:: set_force_ffmpeg_decoder ( false ) ;
137131 sentry:: capture_message ( & e, sentry:: Level :: Error ) ;
138132 Err ( e)
139133 }
@@ -279,7 +273,7 @@ pub async fn generate_export_preview(
279273 . map_err ( |e| format ! ( "Failed to create render constants: {e}" ) ) ?,
280274 ) ;
281275
282- let segments = create_segments ( & recording_meta, studio_meta)
276+ let segments = create_segments ( & recording_meta, studio_meta, false )
283277 . await
284278 . map_err ( |e| format ! ( "Failed to create segments: {e}" ) ) ?;
285279
0 commit comments