From b4d61b6584047de2216a8f7714a80904e3edb493 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 24 Aug 2023 10:42:20 -0700 Subject: [PATCH 01/10] `fn dav1d_init_mode_tree`: Deduplicate declarations into `use` imports. --- src/intra_edge.rs | 4 ++-- src/lib.rs | 5 +---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/intra_edge.rs b/src/intra_edge.rs index f6e169340..c36612fee 100644 --- a/src/intra_edge.rs +++ b/src/intra_edge.rs @@ -196,8 +196,8 @@ unsafe fn init_mode_node( } }; } -#[no_mangle] -pub unsafe extern "C" fn dav1d_init_mode_tree( + +pub unsafe fn dav1d_init_mode_tree( root_node: *mut EdgeNode, nt: *mut EdgeTip, allow_sb128: libc::c_int, diff --git a/src/lib.rs b/src/lib.rs index 7d8c62eda..4b6931a83 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,6 @@ use crate::include::stddef::*; use crate::include::stdint::*; - +use crate::src::intra_edge::dav1d_init_mode_tree; use crate::stderr; use ::libc; use cfg_if::cfg_if; @@ -73,7 +73,6 @@ extern "C" { __arg: *mut libc::c_void, ) -> libc::c_int; fn dav1d_refmvs_dsp_init(dsp: *mut Dav1dRefmvsDSPContext); - fn dav1d_init_mode_tree(root: *mut EdgeNode, nt: *mut EdgeTip, allow_sb128: libc::c_int); fn pthread_join(__th: pthread_t, __thread_return: *mut *mut libc::c_void) -> libc::c_int; fn dav1d_refmvs_clear(rf: *mut refmvs_frame); fn dav1d_cdf_thread_unref(cdf: *mut CdfThreadContext); @@ -217,8 +216,6 @@ use crate::src::picture::PICTURE_FLAG_NEW_TEMPORAL_UNIT; use crate::include::dav1d::dav1d::DAV1D_INLOOPFILTER_NONE; use crate::src::internal::Dav1dContext_intra_edge; use crate::src::intra_edge::EdgeFlags; -use crate::src::intra_edge::EdgeNode; -use crate::src::intra_edge::EdgeTip; use crate::src::refmvs::Dav1dRefmvsDSPContext; #[derive(Copy, Clone)] From d6719c01898804dad759d8f3a7d9763d3f6189f1 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 24 Aug 2023 10:46:44 -0700 Subject: [PATCH 02/10] `fn dav1d_init_mode_tree`: Remove redundant `as` casts. --- src/intra_edge.rs | 39 +++++++++++++-------------------------- 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/src/intra_edge.rs b/src/intra_edge.rs index c36612fee..c625e6ca8 100644 --- a/src/intra_edge.rs +++ b/src/intra_edge.rs @@ -209,47 +209,34 @@ pub unsafe fn dav1d_init_mode_tree( }; mem.nt = nt; if allow_sb128 != 0 { - mem.nwc[BL_128X128 as libc::c_int as usize] = &mut *root.offset(1) as *mut EdgeBranch; - mem.nwc[BL_64X64 as libc::c_int as usize] = - &mut *root.offset((1 + 4) as isize) as *mut EdgeBranch; - mem.nwc[BL_32X32 as libc::c_int as usize] = - &mut *root.offset((1 + 4 + 16) as isize) as *mut EdgeBranch; + mem.nwc[BL_128X128 as usize] = root.offset(1); + mem.nwc[BL_64X64 as usize] = root.offset(1 + 4); + mem.nwc[BL_32X32 as usize] = root.offset(1 + 4 + 16); init_mode_node(&mut *root, BL_128X128, &mut mem, true, false); - if !(mem.nwc[BL_128X128 as libc::c_int as usize] - == &mut *root.offset((1 + 4) as isize) as *mut EdgeBranch) - { + if !(mem.nwc[BL_128X128 as usize] == root.offset(1 + 4)) { unreachable!(); } - if !(mem.nwc[BL_64X64 as libc::c_int as usize] - == &mut *root.offset((1 + 4 + 16) as isize) as *mut EdgeBranch) - { + if !(mem.nwc[BL_64X64 as usize] == root.offset(1 + 4 + 16)) { unreachable!(); } - if !(mem.nwc[BL_32X32 as libc::c_int as usize] - == &mut *root.offset((1 + 4 + 16 + 64) as isize) as *mut EdgeBranch) - { + if !(mem.nwc[BL_32X32 as usize] == root.offset(1 + 4 + 16 + 64)) { unreachable!(); } - if !(mem.nt == &mut *nt.offset(256) as *mut EdgeTip) { + if !(mem.nt == nt.offset(256)) { unreachable!(); } } else { - mem.nwc[BL_128X128 as libc::c_int as usize] = 0 as *mut EdgeBranch; - mem.nwc[BL_64X64 as libc::c_int as usize] = &mut *root.offset(1) as *mut EdgeBranch; - mem.nwc[BL_32X32 as libc::c_int as usize] = - &mut *root.offset((1 + 4) as isize) as *mut EdgeBranch; + mem.nwc[BL_128X128 as usize] = 0 as *mut EdgeBranch; + mem.nwc[BL_64X64 as usize] = root.offset(1); + mem.nwc[BL_32X32 as usize] = root.offset(1 + 4); init_mode_node(&mut *root, BL_64X64, &mut mem, true, false); - if !(mem.nwc[BL_64X64 as libc::c_int as usize] - == &mut *root.offset((1 + 4) as isize) as *mut EdgeBranch) - { + if !(mem.nwc[BL_64X64 as usize] == root.offset(1 + 4)) { unreachable!(); } - if !(mem.nwc[BL_32X32 as libc::c_int as usize] - == &mut *root.offset((1 + 4 + 16) as isize) as *mut EdgeBranch) - { + if !(mem.nwc[BL_32X32 as usize] == root.offset(1 + 4 + 16)) { unreachable!(); } - if !(mem.nt == &mut *nt.offset(64) as *mut EdgeTip) { + if !(mem.nt == nt.offset(64)) { unreachable!(); } }; From 9a7cae07ee46a4fd8075cf026e82628262814cb4 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 24 Aug 2023 10:48:56 -0700 Subject: [PATCH 03/10] `fn dav1d_init_mode_tree`: Make `allow_s128` arg a `bool`. --- src/intra_edge.rs | 9 ++------- src/lib.rs | 4 ++-- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/intra_edge.rs b/src/intra_edge.rs index c625e6ca8..26a7a38c7 100644 --- a/src/intra_edge.rs +++ b/src/intra_edge.rs @@ -2,7 +2,6 @@ use std::iter; use std::slice; use crate::include::stdint::uint8_t; -use ::libc; pub type EdgeFlags = uint8_t; pub const EDGE_I420_LEFT_HAS_BOTTOM: EdgeFlags = 32; pub const EDGE_I422_LEFT_HAS_BOTTOM: EdgeFlags = 16; @@ -197,18 +196,14 @@ unsafe fn init_mode_node( }; } -pub unsafe fn dav1d_init_mode_tree( - root_node: *mut EdgeNode, - nt: *mut EdgeTip, - allow_sb128: libc::c_int, -) { +pub unsafe fn dav1d_init_mode_tree(root_node: *mut EdgeNode, nt: *mut EdgeTip, allow_sb128: bool) { let root: *mut EdgeBranch = root_node as *mut EdgeBranch; let mut mem: ModeSelMem = ModeSelMem { nwc: [0 as *mut EdgeBranch; 3], nt: 0 as *mut EdgeTip, }; mem.nt = nt; - if allow_sb128 != 0 { + if allow_sb128 { mem.nwc[BL_128X128 as usize] = root.offset(1); mem.nwc[BL_64X64 as usize] = root.offset(1 + 4); mem.nwc[BL_32X32 as usize] = root.offset(1 + 4 + 16); diff --git a/src/lib.rs b/src/lib.rs index 4b6931a83..aa6ef8c45 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1284,7 +1284,7 @@ pub unsafe extern "C" fn dav1d_open( as usize], ((*c).intra_edge.tip_sb128) .as_mut_ptr(), - 1 as libc::c_int, + true, ); (*c).intra_edge.root[BL_64X64 as libc::c_int @@ -1300,7 +1300,7 @@ pub unsafe extern "C" fn dav1d_open( as usize], ((*c).intra_edge.tip_sb64) .as_mut_ptr(), - 0 as libc::c_int, + false, ); pthread_attr_destroy(&mut thread_attr); return 0 as libc::c_int; From 8ab94f034c0f6044ffe92d9fc8483a25933a5986 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 24 Aug 2023 10:50:31 -0700 Subject: [PATCH 04/10] `fn dav1d_init_mode_tree`: Translate `assert!`s. --- src/intra_edge.rs | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/src/intra_edge.rs b/src/intra_edge.rs index 26a7a38c7..72e71cd38 100644 --- a/src/intra_edge.rs +++ b/src/intra_edge.rs @@ -208,31 +208,17 @@ pub unsafe fn dav1d_init_mode_tree(root_node: *mut EdgeNode, nt: *mut EdgeTip, a mem.nwc[BL_64X64 as usize] = root.offset(1 + 4); mem.nwc[BL_32X32 as usize] = root.offset(1 + 4 + 16); init_mode_node(&mut *root, BL_128X128, &mut mem, true, false); - if !(mem.nwc[BL_128X128 as usize] == root.offset(1 + 4)) { - unreachable!(); - } - if !(mem.nwc[BL_64X64 as usize] == root.offset(1 + 4 + 16)) { - unreachable!(); - } - if !(mem.nwc[BL_32X32 as usize] == root.offset(1 + 4 + 16 + 64)) { - unreachable!(); - } - if !(mem.nt == nt.offset(256)) { - unreachable!(); - } + assert!(mem.nwc[BL_128X128 as usize] == root.offset(1 + 4)); + assert!(mem.nwc[BL_64X64 as usize] == root.offset(1 + 4 + 16)); + assert!(mem.nwc[BL_32X32 as usize] == root.offset(1 + 4 + 16 + 64)); + assert!(mem.nt == nt.offset(256)); } else { mem.nwc[BL_128X128 as usize] = 0 as *mut EdgeBranch; mem.nwc[BL_64X64 as usize] = root.offset(1); mem.nwc[BL_32X32 as usize] = root.offset(1 + 4); init_mode_node(&mut *root, BL_64X64, &mut mem, true, false); - if !(mem.nwc[BL_64X64 as usize] == root.offset(1 + 4)) { - unreachable!(); - } - if !(mem.nwc[BL_32X32 as usize] == root.offset(1 + 4 + 16)) { - unreachable!(); - } - if !(mem.nt == nt.offset(64)) { - unreachable!(); - } + assert!(mem.nwc[BL_64X64 as usize] == root.offset(1 + 4)); + assert!(mem.nwc[BL_32X32 as usize] == root.offset(1 + 4 + 16)); + assert!(mem.nt == nt.offset(64)); }; } From 6be2a9704fea688239603c96041e0fb882b03fa6 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 24 Aug 2023 10:51:30 -0700 Subject: [PATCH 05/10] `fn dav1d_init_mode_tree`: Prefer `assert_eq!(a, b)` over `assert!(a == b)`. --- src/intra_edge.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/intra_edge.rs b/src/intra_edge.rs index 72e71cd38..0c8b165d7 100644 --- a/src/intra_edge.rs +++ b/src/intra_edge.rs @@ -208,17 +208,17 @@ pub unsafe fn dav1d_init_mode_tree(root_node: *mut EdgeNode, nt: *mut EdgeTip, a mem.nwc[BL_64X64 as usize] = root.offset(1 + 4); mem.nwc[BL_32X32 as usize] = root.offset(1 + 4 + 16); init_mode_node(&mut *root, BL_128X128, &mut mem, true, false); - assert!(mem.nwc[BL_128X128 as usize] == root.offset(1 + 4)); - assert!(mem.nwc[BL_64X64 as usize] == root.offset(1 + 4 + 16)); - assert!(mem.nwc[BL_32X32 as usize] == root.offset(1 + 4 + 16 + 64)); - assert!(mem.nt == nt.offset(256)); + assert_eq!(mem.nwc[BL_128X128 as usize], root.offset(1 + 4)); + assert_eq!(mem.nwc[BL_64X64 as usize], root.offset(1 + 4 + 16)); + assert_eq!(mem.nwc[BL_32X32 as usize], root.offset(1 + 4 + 16 + 64)); + assert_eq!(mem.nt, nt.offset(256)); } else { mem.nwc[BL_128X128 as usize] = 0 as *mut EdgeBranch; mem.nwc[BL_64X64 as usize] = root.offset(1); mem.nwc[BL_32X32 as usize] = root.offset(1 + 4); init_mode_node(&mut *root, BL_64X64, &mut mem, true, false); - assert!(mem.nwc[BL_64X64 as usize] == root.offset(1 + 4)); - assert!(mem.nwc[BL_32X32 as usize] == root.offset(1 + 4 + 16)); - assert!(mem.nt == nt.offset(64)); + assert_eq!(mem.nwc[BL_64X64 as usize], root.offset(1 + 4)); + assert_eq!(mem.nwc[BL_32X32 as usize], root.offset(1 + 4 + 16)); + assert_eq!(mem.nt, nt.offset(64)); }; } From 18d0303e64c95ecde709b9ddd99eb697e1ecaed2 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 24 Aug 2023 10:52:40 -0700 Subject: [PATCH 06/10] `fn dav1d_init_mode_tree`: Replace `0`s with `ptr::null_mut()`. --- src/intra_edge.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/intra_edge.rs b/src/intra_edge.rs index 0c8b165d7..4ad75bdd7 100644 --- a/src/intra_edge.rs +++ b/src/intra_edge.rs @@ -1,4 +1,5 @@ use std::iter; +use std::ptr; use std::slice; use crate::include::stdint::uint8_t; @@ -199,8 +200,8 @@ unsafe fn init_mode_node( pub unsafe fn dav1d_init_mode_tree(root_node: *mut EdgeNode, nt: *mut EdgeTip, allow_sb128: bool) { let root: *mut EdgeBranch = root_node as *mut EdgeBranch; let mut mem: ModeSelMem = ModeSelMem { - nwc: [0 as *mut EdgeBranch; 3], - nt: 0 as *mut EdgeTip, + nwc: [ptr::null_mut(); 3], + nt: ptr::null_mut(), }; mem.nt = nt; if allow_sb128 { @@ -213,7 +214,7 @@ pub unsafe fn dav1d_init_mode_tree(root_node: *mut EdgeNode, nt: *mut EdgeTip, a assert_eq!(mem.nwc[BL_32X32 as usize], root.offset(1 + 4 + 16 + 64)); assert_eq!(mem.nt, nt.offset(256)); } else { - mem.nwc[BL_128X128 as usize] = 0 as *mut EdgeBranch; + mem.nwc[BL_128X128 as usize] = ptr::null_mut(); mem.nwc[BL_64X64 as usize] = root.offset(1); mem.nwc[BL_32X32 as usize] = root.offset(1 + 4); init_mode_node(&mut *root, BL_64X64, &mut mem, true, false); From af9dbdc32a9a2bf42236e2c49bce779a156aaa58 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 24 Aug 2023 11:26:46 -0700 Subject: [PATCH 07/10] `fn dav1d_init_mode_tree`: Remove redundant type annotations. --- src/intra_edge.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/intra_edge.rs b/src/intra_edge.rs index 4ad75bdd7..0e6720471 100644 --- a/src/intra_edge.rs +++ b/src/intra_edge.rs @@ -198,8 +198,8 @@ unsafe fn init_mode_node( } pub unsafe fn dav1d_init_mode_tree(root_node: *mut EdgeNode, nt: *mut EdgeTip, allow_sb128: bool) { - let root: *mut EdgeBranch = root_node as *mut EdgeBranch; - let mut mem: ModeSelMem = ModeSelMem { + let root = root_node as *mut EdgeBranch; + let mut mem = ModeSelMem { nwc: [ptr::null_mut(); 3], nt: ptr::null_mut(), }; From 0ea92a864f32ced0c24728246ad65ba8c1a288ad Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 24 Aug 2023 11:35:41 -0700 Subject: [PATCH 08/10] `fn dav1d_init_mode_tree`: Make `nt` arg a slice. --- src/intra_edge.rs | 12 ++++++++---- src/lib.rs | 6 ++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/intra_edge.rs b/src/intra_edge.rs index 0e6720471..d63959d7d 100644 --- a/src/intra_edge.rs +++ b/src/intra_edge.rs @@ -197,13 +197,17 @@ unsafe fn init_mode_node( }; } -pub unsafe fn dav1d_init_mode_tree(root_node: *mut EdgeNode, nt: *mut EdgeTip, allow_sb128: bool) { +pub unsafe fn dav1d_init_mode_tree( + root_node: *mut EdgeNode, + nt: &mut [EdgeTip], + allow_sb128: bool, +) { let root = root_node as *mut EdgeBranch; let mut mem = ModeSelMem { nwc: [ptr::null_mut(); 3], nt: ptr::null_mut(), }; - mem.nt = nt; + mem.nt = nt.as_mut_ptr(); if allow_sb128 { mem.nwc[BL_128X128 as usize] = root.offset(1); mem.nwc[BL_64X64 as usize] = root.offset(1 + 4); @@ -212,7 +216,7 @@ pub unsafe fn dav1d_init_mode_tree(root_node: *mut EdgeNode, nt: *mut EdgeTip, a assert_eq!(mem.nwc[BL_128X128 as usize], root.offset(1 + 4)); assert_eq!(mem.nwc[BL_64X64 as usize], root.offset(1 + 4 + 16)); assert_eq!(mem.nwc[BL_32X32 as usize], root.offset(1 + 4 + 16 + 64)); - assert_eq!(mem.nt, nt.offset(256)); + assert_eq!(mem.nt, nt[256..].as_mut_ptr()); } else { mem.nwc[BL_128X128 as usize] = ptr::null_mut(); mem.nwc[BL_64X64 as usize] = root.offset(1); @@ -220,6 +224,6 @@ pub unsafe fn dav1d_init_mode_tree(root_node: *mut EdgeNode, nt: *mut EdgeTip, a init_mode_node(&mut *root, BL_64X64, &mut mem, true, false); assert_eq!(mem.nwc[BL_64X64 as usize], root.offset(1 + 4)); assert_eq!(mem.nwc[BL_32X32 as usize], root.offset(1 + 4 + 16)); - assert_eq!(mem.nt, nt.offset(64)); + assert_eq!(mem.nt, nt[64..].as_mut_ptr()); }; } diff --git a/src/lib.rs b/src/lib.rs index aa6ef8c45..4639d42af 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1282,8 +1282,7 @@ pub unsafe extern "C" fn dav1d_open( (*c).intra_edge.root[BL_128X128 as libc::c_int as usize], - ((*c).intra_edge.tip_sb128) - .as_mut_ptr(), + &mut (*c).intra_edge.tip_sb128, true, ); (*c).intra_edge.root[BL_64X64 @@ -1298,8 +1297,7 @@ pub unsafe extern "C" fn dav1d_open( (*c).intra_edge.root[BL_64X64 as libc::c_int as usize], - ((*c).intra_edge.tip_sb64) - .as_mut_ptr(), + &mut (*c).intra_edge.tip_sb64, false, ); pthread_attr_destroy(&mut thread_attr); From 17c1e4b097cfc503f03ff377d3858e4aacb1395e Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 24 Aug 2023 11:37:18 -0700 Subject: [PATCH 09/10] `fn dav1d_init_mode_tree`: Move the `mem.nt` initialization to the initializer. --- src/intra_edge.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/intra_edge.rs b/src/intra_edge.rs index d63959d7d..6fa1f6ae2 100644 --- a/src/intra_edge.rs +++ b/src/intra_edge.rs @@ -205,9 +205,8 @@ pub unsafe fn dav1d_init_mode_tree( let root = root_node as *mut EdgeBranch; let mut mem = ModeSelMem { nwc: [ptr::null_mut(); 3], - nt: ptr::null_mut(), + nt: nt.as_mut_ptr(), }; - mem.nt = nt.as_mut_ptr(); if allow_sb128 { mem.nwc[BL_128X128 as usize] = root.offset(1); mem.nwc[BL_64X64 as usize] = root.offset(1 + 4); From de3b5c581cd8d8a4cb135495bd66745aa7b81973 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 24 Aug 2023 13:38:29 -0700 Subject: [PATCH 10/10] `fn dav1d_init_mode_tree`: Un-hardcode the `nt` slice length. --- src/intra_edge.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/intra_edge.rs b/src/intra_edge.rs index 6fa1f6ae2..262714f03 100644 --- a/src/intra_edge.rs +++ b/src/intra_edge.rs @@ -215,7 +215,6 @@ pub unsafe fn dav1d_init_mode_tree( assert_eq!(mem.nwc[BL_128X128 as usize], root.offset(1 + 4)); assert_eq!(mem.nwc[BL_64X64 as usize], root.offset(1 + 4 + 16)); assert_eq!(mem.nwc[BL_32X32 as usize], root.offset(1 + 4 + 16 + 64)); - assert_eq!(mem.nt, nt[256..].as_mut_ptr()); } else { mem.nwc[BL_128X128 as usize] = ptr::null_mut(); mem.nwc[BL_64X64 as usize] = root.offset(1); @@ -223,6 +222,6 @@ pub unsafe fn dav1d_init_mode_tree( init_mode_node(&mut *root, BL_64X64, &mut mem, true, false); assert_eq!(mem.nwc[BL_64X64 as usize], root.offset(1 + 4)); assert_eq!(mem.nwc[BL_32X32 as usize], root.offset(1 + 4 + 16)); - assert_eq!(mem.nt, nt[64..].as_mut_ptr()); }; + assert_eq!(mem.nt, nt.as_mut_ptr_range().end); }