From 9d1ab3fba386b4e5eeeb331eb9d9db4456789824 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 1 Jul 2026 11:47:08 +0800 Subject: [PATCH] fix the AOM tile-control argument type --- libs/scrap/src/common/aom.rs | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/libs/scrap/src/common/aom.rs b/libs/scrap/src/common/aom.rs index e5093e54b..1ecd6059b 100644 --- a/libs/scrap/src/common/aom.rs +++ b/libs/scrap/src/common/aom.rs @@ -79,6 +79,10 @@ mod webrtc { } } + fn tile_log2(threads: u32) -> std::os::raw::c_uint { + (threads as f64).log2().ceil() as _ + } + fn get_super_block_size(width: u32, height: u32, threads: u32) -> aom_superblock_size_t { use aom_superblock_size::*; let resolution = width * height; @@ -160,8 +164,7 @@ mod webrtc { } else { AV1E_SET_TILE_COLUMNS }; - // Failed on android - call_ctl!(ctx, tile_set, (cfg.g_threads as f64 * 1.0f64).log2().ceil()); + call_ctl!(ctx, tile_set, tile_log2(cfg.g_threads)); call_ctl!(ctx, AV1E_SET_ROW_MT, 1); call_ctl!(ctx, AV1E_SET_ENABLE_OBMC, 0); call_ctl!(ctx, AV1E_SET_NOISE_SENSITIVITY, 0); @@ -197,6 +200,23 @@ mod webrtc { Ok(()) } + + #[cfg(test)] + mod tests { + use super::*; + use std::os::raw::c_uint; + + #[test] + fn tile_log2_uses_c_uint_and_rounds_up() { + let one_thread: c_uint = tile_log2(1); + let three_threads: c_uint = tile_log2(3); + let max_threads: c_uint = tile_log2(64); + + assert_eq!(one_thread, 0); + assert_eq!(three_threads, 2); + assert_eq!(max_threads, 6); + } + } } impl EncoderApi for AomEncoder {