@@ -573,8 +573,12 @@ fn run_camera_preview_worker(config: CameraPreviewWorkerConfig) {
573573 // alone may be shrunk to the bubble.
574574 #[ cfg( target_os = "linux" ) ]
575575 let preview_target = preview_target. filter ( |_| recording. is_none ( ) ) ;
576- let max_dims = match blur_mode {
577- Some ( _) => Some ( crate :: camera_blur_portable:: MAX_DIMS ) ,
576+ let output = match blur_mode {
577+ Some ( _) => crate :: camera_blur_portable:: fitted_dimensions (
578+ frame. inner . width ( ) ,
579+ frame. inner . height ( ) ,
580+ crate :: camera_blur_portable:: MAX_DIMS ,
581+ ) ,
578582 None => preview_target. map ( |visible| {
579583 let ( width, height) =
580584 cap_gpui_kernels:: camera_preview:: cover_dimensions ( source_dims, visible) ;
@@ -583,7 +587,7 @@ fn run_camera_preview_worker(config: CameraPreviewWorkerConfig) {
583587 } ;
584588 let layout_dims = blur_mode. is_none ( ) . then_some ( source_dims) ;
585589 let Some ( ( mut image, dims) ) =
586- camera_preview_image ( & frame. inner , & mut scaler, requested_mirror, max_dims )
590+ camera_preview_image_at ( & frame. inner , & mut scaler, requested_mirror, output )
587591 else {
588592 #[ cfg( target_os = "linux" ) ]
589593 if let Some ( recording) = & recording {
@@ -1438,19 +1442,35 @@ impl Feeds {
14381442 }
14391443}
14401444
1441- #[ cfg( any ( not ( target_os = "macos" ) , test) ) ]
1445+ #[ cfg( test) ]
14421446pub ( crate ) fn camera_preview_image (
14431447 frame : & ffmpeg:: frame:: Video ,
14441448 scaler : & mut Option < ffmpeg:: software:: scaling:: Context > ,
14451449 mirrored : bool ,
14461450 max_dims : Option < ( u32 , u32 ) > ,
1451+ ) -> Option < ( Arc < gpui:: RenderImage > , ( usize , usize ) ) > {
1452+ let output = match max_dims {
1453+ Some ( max) => Some ( crate :: camera_blur_portable:: fitted_dimensions (
1454+ frame. width ( ) ,
1455+ frame. height ( ) ,
1456+ max,
1457+ ) ?) ,
1458+ None => None ,
1459+ } ;
1460+ camera_preview_image_at ( frame, scaler, mirrored, output)
1461+ }
1462+
1463+ #[ cfg( any( not( target_os = "macos" ) , test) ) ]
1464+ pub ( crate ) fn camera_preview_image_at (
1465+ frame : & ffmpeg:: frame:: Video ,
1466+ scaler : & mut Option < ffmpeg:: software:: scaling:: Context > ,
1467+ mirrored : bool ,
1468+ output : Option < ( u32 , u32 ) > ,
14471469) -> Option < ( Arc < gpui:: RenderImage > , ( usize , usize ) ) > {
14481470 let source_width = frame. width ( ) ;
14491471 let source_height = frame. height ( ) ;
1450- let ( width, height) = match max_dims {
1451- Some ( max) => {
1452- crate :: camera_blur_portable:: fitted_dimensions ( source_width, source_height, max) ?
1453- }
1472+ let ( width, height) = match output {
1473+ Some ( output) => output,
14541474 None if source_width > 0 && source_height > 0 => ( source_width, source_height) ,
14551475 None => return None ,
14561476 } ;
@@ -2259,7 +2279,7 @@ mod tests {
22592279 let mut dims = ( 0 , 0 ) ;
22602280 for iteration in 0 ..WARMUP + ITERATIONS {
22612281 let started = Instant :: now ( ) ;
2262- let ( image, output) = camera_preview_image (
2282+ let ( image, output) = camera_preview_image_at (
22632283 & frames[ iteration % frames. len ( ) ] ,
22642284 & mut scaler,
22652285 mirrored,
0 commit comments