fix the AOM tile-control argument type

This commit is contained in:
rustdesk
2026-07-01 11:47:08 +08:00
parent b3bd18845d
commit 9d1ab3fba3

View File

@@ -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 { fn get_super_block_size(width: u32, height: u32, threads: u32) -> aom_superblock_size_t {
use aom_superblock_size::*; use aom_superblock_size::*;
let resolution = width * height; let resolution = width * height;
@@ -160,8 +164,7 @@ mod webrtc {
} else { } else {
AV1E_SET_TILE_COLUMNS AV1E_SET_TILE_COLUMNS
}; };
// Failed on android call_ctl!(ctx, tile_set, tile_log2(cfg.g_threads));
call_ctl!(ctx, tile_set, (cfg.g_threads as f64 * 1.0f64).log2().ceil());
call_ctl!(ctx, AV1E_SET_ROW_MT, 1); call_ctl!(ctx, AV1E_SET_ROW_MT, 1);
call_ctl!(ctx, AV1E_SET_ENABLE_OBMC, 0); call_ctl!(ctx, AV1E_SET_ENABLE_OBMC, 0);
call_ctl!(ctx, AV1E_SET_NOISE_SENSITIVITY, 0); call_ctl!(ctx, AV1E_SET_NOISE_SENSITIVITY, 0);
@@ -197,6 +200,23 @@ mod webrtc {
Ok(()) 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 { impl EncoderApi for AomEncoder {