From dba50f0c0c6ee7dd03c98f049c8770bfce3663e5 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 11 May 2023 02:36:24 -0700 Subject: [PATCH 01/22] `fn read_pal_uv`: Make local `fn` non-`extern "C"`. --- src/decode.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/decode.rs b/src/decode.rs index 0b1bb4fef..a242f4574 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1735,7 +1735,7 @@ unsafe fn read_pal_plane( } } -unsafe extern "C" fn read_pal_uv( +unsafe fn read_pal_uv( t: *mut Dav1dTaskContext, b: *mut Av1Block, sz_ctx: u8, From 86ed22970e724518a769f6b7e0c58b8def01a7d2 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 11 May 2023 02:37:15 -0700 Subject: [PATCH 02/22] `fn read_pal_uv`: Make `t` arg a ref. --- src/decode.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/decode.rs b/src/decode.rs index a242f4574..916fd410d 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1736,23 +1736,23 @@ unsafe fn read_pal_plane( } unsafe fn read_pal_uv( - t: *mut Dav1dTaskContext, + t: &mut Dav1dTaskContext, b: *mut Av1Block, sz_ctx: u8, bx4: usize, by4: usize, ) { - read_pal_plane(&mut *t, &mut *b, true, sz_ctx, bx4, by4); - let ts: *mut Dav1dTileState = (*t).ts; - let f: *const Dav1dFrameContext = (*t).f; - let pal: *mut uint16_t = if (*t).frame_thread.pass != 0 { + read_pal_plane(t, &mut *b, true, sz_ctx, bx4, by4); + let ts: *mut Dav1dTileState = t.ts; + let f: *const Dav1dFrameContext = t.f; + let pal: *mut uint16_t = if t.frame_thread.pass != 0 { ((*((*f).frame_thread.pal).offset( - ((((*t).by >> 1) + ((*t).bx & 1)) as isize * ((*f).b4_stride >> 1) - + (((*t).bx >> 1) + ((*t).by & 1)) as isize) as isize, + (((t.by >> 1) + (t.bx & 1)) as isize * ((*f).b4_stride >> 1) + + ((t.bx >> 1) + (t.by & 1)) as isize) as isize, ))[2]) .as_mut_ptr() } else { - ((*t).scratch.c2rust_unnamed_0.pal[2]).as_mut_ptr() + (t.scratch.c2rust_unnamed_0.pal[2]).as_mut_ptr() }; if dav1d_msac_decode_bool_equi(&mut (*ts).msac) { let bits = (((*f).cur.p.bpc - 4) as libc::c_uint).wrapping_add(dav1d_msac_decode_bools( From b86e6e63301940760f0ca784306d3716af0739d8 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 11 May 2023 02:37:53 -0700 Subject: [PATCH 03/22] `fn read_pal_uv`: Make `b` arg a ref. --- src/decode.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/decode.rs b/src/decode.rs index 916fd410d..b80de0d25 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1737,12 +1737,12 @@ unsafe fn read_pal_plane( unsafe fn read_pal_uv( t: &mut Dav1dTaskContext, - b: *mut Av1Block, + b: &mut Av1Block, sz_ctx: u8, bx4: usize, by4: usize, ) { - read_pal_plane(t, &mut *b, true, sz_ctx, bx4, by4); + read_pal_plane(t, b, true, sz_ctx, bx4, by4); let ts: *mut Dav1dTileState = t.ts; let f: *const Dav1dFrameContext = t.f; let pal: *mut uint16_t = if t.frame_thread.pass != 0 { @@ -1765,7 +1765,7 @@ unsafe fn read_pal_uv( let mut prev = *fresh19 as libc::c_int; let max = ((1 as libc::c_int) << (*f).cur.p.bpc) - 1; let mut i = 1; - while i < (*b).c2rust_unnamed.c2rust_unnamed.pal_sz[1] as libc::c_int { + while i < b.c2rust_unnamed.c2rust_unnamed.pal_sz[1] as libc::c_int { let mut delta = dav1d_msac_decode_bools(&mut (*ts).msac, bits as libc::c_uint) as libc::c_int; if delta != 0 && dav1d_msac_decode_bool_equi(&mut (*ts).msac) { @@ -1778,7 +1778,7 @@ unsafe fn read_pal_uv( } } else { let mut i_0 = 0; - while i_0 < (*b).c2rust_unnamed.c2rust_unnamed.pal_sz[1] as libc::c_int { + while i_0 < b.c2rust_unnamed.c2rust_unnamed.pal_sz[1] as libc::c_int { *pal.offset(i_0 as isize) = dav1d_msac_decode_bools(&mut (*ts).msac, (*f).cur.p.bpc as libc::c_uint) as uint16_t; @@ -1791,7 +1791,7 @@ unsafe fn read_pal_uv( (*ts).msac.rng, ); let mut n = 0; - while n < (*b).c2rust_unnamed.c2rust_unnamed.pal_sz[1] as libc::c_int { + while n < b.c2rust_unnamed.c2rust_unnamed.pal_sz[1] as libc::c_int { printf( b"%c%02x\0" as *const u8 as *const libc::c_char, if n != 0 { ' ' as i32 } else { '[' as i32 }, From a1a596db6d81c8cd344f5ca609eee8d33fce4753 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 11 May 2023 02:38:19 -0700 Subject: [PATCH 04/22] `fn read_pal_uv`: Make `ts` var a ref. --- src/decode.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/decode.rs b/src/decode.rs index b80de0d25..3fcf5844c 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1743,7 +1743,7 @@ unsafe fn read_pal_uv( by4: usize, ) { read_pal_plane(t, b, true, sz_ctx, bx4, by4); - let ts: *mut Dav1dTileState = t.ts; + let ts = &mut *t.ts; let f: *const Dav1dFrameContext = t.f; let pal: *mut uint16_t = if t.frame_thread.pass != 0 { ((*((*f).frame_thread.pal).offset( @@ -1754,21 +1754,21 @@ unsafe fn read_pal_uv( } else { (t.scratch.c2rust_unnamed_0.pal[2]).as_mut_ptr() }; - if dav1d_msac_decode_bool_equi(&mut (*ts).msac) { + if dav1d_msac_decode_bool_equi(&mut ts.msac) { let bits = (((*f).cur.p.bpc - 4) as libc::c_uint).wrapping_add(dav1d_msac_decode_bools( - &mut (*ts).msac, + &mut ts.msac, 2 as libc::c_int as libc::c_uint, )) as libc::c_int; let ref mut fresh19 = *pal.offset(0); *fresh19 = - dav1d_msac_decode_bools(&mut (*ts).msac, (*f).cur.p.bpc as libc::c_uint) as uint16_t; + dav1d_msac_decode_bools(&mut ts.msac, (*f).cur.p.bpc as libc::c_uint) as uint16_t; let mut prev = *fresh19 as libc::c_int; let max = ((1 as libc::c_int) << (*f).cur.p.bpc) - 1; let mut i = 1; while i < b.c2rust_unnamed.c2rust_unnamed.pal_sz[1] as libc::c_int { let mut delta = - dav1d_msac_decode_bools(&mut (*ts).msac, bits as libc::c_uint) as libc::c_int; - if delta != 0 && dav1d_msac_decode_bool_equi(&mut (*ts).msac) { + dav1d_msac_decode_bools(&mut ts.msac, bits as libc::c_uint) as libc::c_int; + if delta != 0 && dav1d_msac_decode_bool_equi(&mut ts.msac) { delta = -delta; } let ref mut fresh20 = *pal.offset(i as isize); @@ -1780,7 +1780,7 @@ unsafe fn read_pal_uv( let mut i_0 = 0; while i_0 < b.c2rust_unnamed.c2rust_unnamed.pal_sz[1] as libc::c_int { *pal.offset(i_0 as isize) = - dav1d_msac_decode_bools(&mut (*ts).msac, (*f).cur.p.bpc as libc::c_uint) + dav1d_msac_decode_bools(&mut ts.msac, (*f).cur.p.bpc as libc::c_uint) as uint16_t; i_0 += 1; } @@ -1788,7 +1788,7 @@ unsafe fn read_pal_uv( if DEBUG_BLOCK_INFO(&*f, &*t) { printf( b"Post-pal[pl=2]: r=%d \0" as *const u8 as *const libc::c_char, - (*ts).msac.rng, + ts.msac.rng, ); let mut n = 0; while n < b.c2rust_unnamed.c2rust_unnamed.pal_sz[1] as libc::c_int { From b347a5d58f5a8c5fa3d6b6d792330b9d5868859a Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 11 May 2023 02:38:41 -0700 Subject: [PATCH 05/22] `fn read_pal_uv`: Make `f` var a ref. --- src/decode.rs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/decode.rs b/src/decode.rs index 3fcf5844c..a3c63bef7 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1744,10 +1744,10 @@ unsafe fn read_pal_uv( ) { read_pal_plane(t, b, true, sz_ctx, bx4, by4); let ts = &mut *t.ts; - let f: *const Dav1dFrameContext = t.f; + let f = &*t.f; let pal: *mut uint16_t = if t.frame_thread.pass != 0 { - ((*((*f).frame_thread.pal).offset( - (((t.by >> 1) + (t.bx & 1)) as isize * ((*f).b4_stride >> 1) + ((*(f.frame_thread.pal).offset( + (((t.by >> 1) + (t.bx & 1)) as isize * (f.b4_stride >> 1) + ((t.bx >> 1) + (t.by & 1)) as isize) as isize, ))[2]) .as_mut_ptr() @@ -1755,15 +1755,14 @@ unsafe fn read_pal_uv( (t.scratch.c2rust_unnamed_0.pal[2]).as_mut_ptr() }; if dav1d_msac_decode_bool_equi(&mut ts.msac) { - let bits = (((*f).cur.p.bpc - 4) as libc::c_uint).wrapping_add(dav1d_msac_decode_bools( + let bits = ((f.cur.p.bpc - 4) as libc::c_uint).wrapping_add(dav1d_msac_decode_bools( &mut ts.msac, 2 as libc::c_int as libc::c_uint, )) as libc::c_int; let ref mut fresh19 = *pal.offset(0); - *fresh19 = - dav1d_msac_decode_bools(&mut ts.msac, (*f).cur.p.bpc as libc::c_uint) as uint16_t; + *fresh19 = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as uint16_t; let mut prev = *fresh19 as libc::c_int; - let max = ((1 as libc::c_int) << (*f).cur.p.bpc) - 1; + let max = ((1 as libc::c_int) << f.cur.p.bpc) - 1; let mut i = 1; while i < b.c2rust_unnamed.c2rust_unnamed.pal_sz[1] as libc::c_int { let mut delta = @@ -1780,8 +1779,7 @@ unsafe fn read_pal_uv( let mut i_0 = 0; while i_0 < b.c2rust_unnamed.c2rust_unnamed.pal_sz[1] as libc::c_int { *pal.offset(i_0 as isize) = - dav1d_msac_decode_bools(&mut ts.msac, (*f).cur.p.bpc as libc::c_uint) - as uint16_t; + dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as uint16_t; i_0 += 1; } } From 234bb093ac97f69f7a5c27e9705c8df2a900c182 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 11 May 2023 02:42:30 -0700 Subject: [PATCH 06/22] `fn read_pal_uv`: Make `pal` var a slice (and hoist `DEBUG_BLOCK_INFO` call to fix the borrowck error). --- src/decode.rs | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/decode.rs b/src/decode.rs index a3c63bef7..e1cdcf83d 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1745,21 +1745,25 @@ unsafe fn read_pal_uv( read_pal_plane(t, b, true, sz_ctx, bx4, by4); let ts = &mut *t.ts; let f = &*t.f; - let pal: *mut uint16_t = if t.frame_thread.pass != 0 { - ((*(f.frame_thread.pal).offset( + + // Hoisted so the `&` borrow of `t` + // doesn't conflict with `pal`'s `&mut` borrow of `t`. + let dbg = DEBUG_BLOCK_INFO(&*f, &*t); + + let pal = if t.frame_thread.pass != 0 { + &mut (*(f.frame_thread.pal).offset( (((t.by >> 1) + (t.bx & 1)) as isize * (f.b4_stride >> 1) + ((t.bx >> 1) + (t.by & 1)) as isize) as isize, - ))[2]) - .as_mut_ptr() + ))[2] } else { - (t.scratch.c2rust_unnamed_0.pal[2]).as_mut_ptr() + &mut t.scratch.c2rust_unnamed_0.pal[2] }; if dav1d_msac_decode_bool_equi(&mut ts.msac) { let bits = ((f.cur.p.bpc - 4) as libc::c_uint).wrapping_add(dav1d_msac_decode_bools( &mut ts.msac, 2 as libc::c_int as libc::c_uint, )) as libc::c_int; - let ref mut fresh19 = *pal.offset(0); + let ref mut fresh19 = pal[0]; *fresh19 = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as uint16_t; let mut prev = *fresh19 as libc::c_int; let max = ((1 as libc::c_int) << f.cur.p.bpc) - 1; @@ -1770,7 +1774,7 @@ unsafe fn read_pal_uv( if delta != 0 && dav1d_msac_decode_bool_equi(&mut ts.msac) { delta = -delta; } - let ref mut fresh20 = *pal.offset(i as isize); + let ref mut fresh20 = pal[i as usize]; *fresh20 = (prev + delta & max) as uint16_t; prev = *fresh20 as libc::c_int; i += 1; @@ -1778,12 +1782,12 @@ unsafe fn read_pal_uv( } else { let mut i_0 = 0; while i_0 < b.c2rust_unnamed.c2rust_unnamed.pal_sz[1] as libc::c_int { - *pal.offset(i_0 as isize) = + pal[i_0 as usize] = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as uint16_t; i_0 += 1; } } - if DEBUG_BLOCK_INFO(&*f, &*t) { + if dbg { printf( b"Post-pal[pl=2]: r=%d \0" as *const u8 as *const libc::c_char, ts.msac.rng, @@ -1793,7 +1797,7 @@ unsafe fn read_pal_uv( printf( b"%c%02x\0" as *const u8 as *const libc::c_char, if n != 0 { ' ' as i32 } else { '[' as i32 }, - *pal.offset(n as isize) as libc::c_int, + pal[n as usize] as libc::c_int, ); n += 1; } From e8e6473465573caa3373279984d83373bce80fda Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 11 May 2023 15:38:51 -0700 Subject: [PATCH 07/22] `fn read_pal_uv`: Remove `_[0-9]+` var suffixes. --- src/decode.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/decode.rs b/src/decode.rs index e1cdcf83d..03f6d6a1f 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1780,11 +1780,11 @@ unsafe fn read_pal_uv( i += 1; } } else { - let mut i_0 = 0; - while i_0 < b.c2rust_unnamed.c2rust_unnamed.pal_sz[1] as libc::c_int { - pal[i_0 as usize] = + let mut i = 0; + while i < b.c2rust_unnamed.c2rust_unnamed.pal_sz[1] as libc::c_int { + pal[i as usize] = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as uint16_t; - i_0 += 1; + i += 1; } } if dbg { From 25c5422b841d47a955b9f2ca661efb2b2e505a24 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 11 May 2023 15:40:32 -0700 Subject: [PATCH 08/22] `fn read_pal_uv`: Translate `printf`s as `print{,ln}!`s. --- src/decode.rs | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/decode.rs b/src/decode.rs index 03f6d6a1f..927b44be8 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1788,20 +1788,17 @@ unsafe fn read_pal_uv( } } if dbg { - printf( - b"Post-pal[pl=2]: r=%d \0" as *const u8 as *const libc::c_char, - ts.msac.rng, - ); + print!("Post-pal[pl=2]: r={} ", ts.msac.rng); let mut n = 0; while n < b.c2rust_unnamed.c2rust_unnamed.pal_sz[1] as libc::c_int { - printf( - b"%c%02x\0" as *const u8 as *const libc::c_char, - if n != 0 { ' ' as i32 } else { '[' as i32 }, - pal[n as usize] as libc::c_int, + print!( + "{}{:02x}", + if n != 0 { ' ' } else { '[' }, + pal[n as usize] as libc::c_int ); n += 1; } - printf(b"]\n\0" as *const u8 as *const libc::c_char); + println!("]"); } } From a42a4de52789bf691a181f8e098227d20e6439b2 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 11 May 2023 15:41:48 -0700 Subject: [PATCH 09/22] `fn read_pal_uv`: Use accessor methods for `.pal_sz`. --- src/decode.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/decode.rs b/src/decode.rs index 927b44be8..ac08d57e2 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1768,7 +1768,7 @@ unsafe fn read_pal_uv( let mut prev = *fresh19 as libc::c_int; let max = ((1 as libc::c_int) << f.cur.p.bpc) - 1; let mut i = 1; - while i < b.c2rust_unnamed.c2rust_unnamed.pal_sz[1] as libc::c_int { + while i < b.pal_sz()[1] as libc::c_int { let mut delta = dav1d_msac_decode_bools(&mut ts.msac, bits as libc::c_uint) as libc::c_int; if delta != 0 && dav1d_msac_decode_bool_equi(&mut ts.msac) { @@ -1781,7 +1781,7 @@ unsafe fn read_pal_uv( } } else { let mut i = 0; - while i < b.c2rust_unnamed.c2rust_unnamed.pal_sz[1] as libc::c_int { + while i < b.pal_sz()[1] as libc::c_int { pal[i as usize] = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as uint16_t; i += 1; @@ -1790,7 +1790,7 @@ unsafe fn read_pal_uv( if dbg { print!("Post-pal[pl=2]: r={} ", ts.msac.rng); let mut n = 0; - while n < b.c2rust_unnamed.c2rust_unnamed.pal_sz[1] as libc::c_int { + while n < b.pal_sz()[1] as libc::c_int { print!( "{}{:02x}", if n != 0 { ' ' } else { '[' }, From 7dcf08bcc842b2597a3d812b9575ec737de418d5 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 11 May 2023 15:45:40 -0700 Subject: [PATCH 10/22] `fn read_pal_uv`: Cleanup `as` casts. --- src/decode.rs | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/decode.rs b/src/decode.rs index ac08d57e2..d05697509 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1752,21 +1752,21 @@ unsafe fn read_pal_uv( let pal = if t.frame_thread.pass != 0 { &mut (*(f.frame_thread.pal).offset( - (((t.by >> 1) + (t.bx & 1)) as isize * (f.b4_stride >> 1) - + ((t.bx >> 1) + (t.by & 1)) as isize) as isize, + ((t.by >> 1) + (t.bx & 1)) as isize * (f.b4_stride >> 1) + + ((t.bx >> 1) + (t.by & 1)) as isize, ))[2] } else { &mut t.scratch.c2rust_unnamed_0.pal[2] }; if dav1d_msac_decode_bool_equi(&mut ts.msac) { - let bits = ((f.cur.p.bpc - 4) as libc::c_uint).wrapping_add(dav1d_msac_decode_bools( + let bits = (f.cur.p.bpc as libc::c_uint - 4).wrapping_add(dav1d_msac_decode_bools( &mut ts.msac, - 2 as libc::c_int as libc::c_uint, + 2, )) as libc::c_int; let ref mut fresh19 = pal[0]; *fresh19 = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as uint16_t; let mut prev = *fresh19 as libc::c_int; - let max = ((1 as libc::c_int) << f.cur.p.bpc) - 1; + let max = (1 << f.cur.p.bpc) - 1; let mut i = 1; while i < b.pal_sz()[1] as libc::c_int { let mut delta = @@ -1791,11 +1791,7 @@ unsafe fn read_pal_uv( print!("Post-pal[pl=2]: r={} ", ts.msac.rng); let mut n = 0; while n < b.pal_sz()[1] as libc::c_int { - print!( - "{}{:02x}", - if n != 0 { ' ' } else { '[' }, - pal[n as usize] as libc::c_int - ); + print!("{}{:02x}", if n != 0 { ' ' } else { '[' }, pal[n as usize]); n += 1; } println!("]"); From cd2c76f6c1d8910c0092577b9b9ea746c098372c Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 11 May 2023 16:05:42 -0700 Subject: [PATCH 11/22] `fn read_pal_uv`: Replace `.wrapping*` calls with normal arithmetic. --- src/decode.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/decode.rs b/src/decode.rs index d05697509..c146b8452 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1759,10 +1759,7 @@ unsafe fn read_pal_uv( &mut t.scratch.c2rust_unnamed_0.pal[2] }; if dav1d_msac_decode_bool_equi(&mut ts.msac) { - let bits = (f.cur.p.bpc as libc::c_uint - 4).wrapping_add(dav1d_msac_decode_bools( - &mut ts.msac, - 2, - )) as libc::c_int; + let bits = f.cur.p.bpc - 4 + dav1d_msac_decode_bools(&mut ts.msac, 2) as libc::c_int; let ref mut fresh19 = pal[0]; *fresh19 = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as uint16_t; let mut prev = *fresh19 as libc::c_int; From 344768cf1c0ab65728c8f58b4183acb98b2b9ce6 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 11 May 2023 16:09:06 -0700 Subject: [PATCH 12/22] `fn read_pal_uv`: Translate `for` loops. --- src/decode.rs | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/decode.rs b/src/decode.rs index c146b8452..ebf012629 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1764,32 +1764,25 @@ unsafe fn read_pal_uv( *fresh19 = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as uint16_t; let mut prev = *fresh19 as libc::c_int; let max = (1 << f.cur.p.bpc) - 1; - let mut i = 1; - while i < b.pal_sz()[1] as libc::c_int { + for i in 1..b.pal_sz()[1] as usize { let mut delta = dav1d_msac_decode_bools(&mut ts.msac, bits as libc::c_uint) as libc::c_int; if delta != 0 && dav1d_msac_decode_bool_equi(&mut ts.msac) { delta = -delta; } - let ref mut fresh20 = pal[i as usize]; + let ref mut fresh20 = pal[i]; *fresh20 = (prev + delta & max) as uint16_t; prev = *fresh20 as libc::c_int; - i += 1; } } else { - let mut i = 0; - while i < b.pal_sz()[1] as libc::c_int { - pal[i as usize] = - dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as uint16_t; - i += 1; + for i in 0..b.pal_sz()[1] as usize { + pal[i] = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as uint16_t; } } if dbg { print!("Post-pal[pl=2]: r={} ", ts.msac.rng); - let mut n = 0; - while n < b.pal_sz()[1] as libc::c_int { - print!("{}{:02x}", if n != 0 { ' ' } else { '[' }, pal[n as usize]); - n += 1; + for n in 0..b.pal_sz()[1] as usize { + print!("{}{:02x}", if n != 0 { ' ' } else { '[' }, pal[n]); } println!("]"); } From 2f866dcbedaa97d2084e8d8257dfe149f03358c1 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 11 May 2023 16:10:36 -0700 Subject: [PATCH 13/22] `fn read_pal_uv`: Remove `fresh[0-9]+` vars. --- src/decode.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/decode.rs b/src/decode.rs index ebf012629..0e1f52671 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1760,9 +1760,8 @@ unsafe fn read_pal_uv( }; if dav1d_msac_decode_bool_equi(&mut ts.msac) { let bits = f.cur.p.bpc - 4 + dav1d_msac_decode_bools(&mut ts.msac, 2) as libc::c_int; - let ref mut fresh19 = pal[0]; - *fresh19 = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as uint16_t; - let mut prev = *fresh19 as libc::c_int; + pal[0] = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as uint16_t; + let mut prev = pal[0] as libc::c_int; let max = (1 << f.cur.p.bpc) - 1; for i in 1..b.pal_sz()[1] as usize { let mut delta = @@ -1770,9 +1769,8 @@ unsafe fn read_pal_uv( if delta != 0 && dav1d_msac_decode_bool_equi(&mut ts.msac) { delta = -delta; } - let ref mut fresh20 = pal[i]; - *fresh20 = (prev + delta & max) as uint16_t; - prev = *fresh20 as libc::c_int; + pal[i] = (prev + delta & max) as uint16_t; + prev = pal[i] as libc::c_int; } } else { for i in 0..b.pal_sz()[1] as usize { From 913e041006c42b8e5e52c4016c2ce6462bf87c0e Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 11 May 2023 16:32:54 -0700 Subject: [PATCH 14/22] `fn read_pal_uv`: Make `bits` var a `u32` to reduce casts. --- src/decode.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/decode.rs b/src/decode.rs index 0e1f52671..7de05cc60 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1759,13 +1759,12 @@ unsafe fn read_pal_uv( &mut t.scratch.c2rust_unnamed_0.pal[2] }; if dav1d_msac_decode_bool_equi(&mut ts.msac) { - let bits = f.cur.p.bpc - 4 + dav1d_msac_decode_bools(&mut ts.msac, 2) as libc::c_int; + let bits = f.cur.p.bpc as u32 + dav1d_msac_decode_bools(&mut ts.msac, 2) - 4; pal[0] = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as uint16_t; let mut prev = pal[0] as libc::c_int; let max = (1 << f.cur.p.bpc) - 1; for i in 1..b.pal_sz()[1] as usize { - let mut delta = - dav1d_msac_decode_bools(&mut ts.msac, bits as libc::c_uint) as libc::c_int; + let mut delta = dav1d_msac_decode_bools(&mut ts.msac, bits) as libc::c_int; if delta != 0 && dav1d_msac_decode_bool_equi(&mut ts.msac) { delta = -delta; } From a193033e9fb13ba35d900a50e85aaf4c58ff8c33 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 11 May 2023 16:37:41 -0700 Subject: [PATCH 15/22] `fn read_pal_uv`: Make parentheses around `&` clearer. --- src/decode.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/decode.rs b/src/decode.rs index 7de05cc60..2c1cca2c4 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1768,7 +1768,7 @@ unsafe fn read_pal_uv( if delta != 0 && dav1d_msac_decode_bool_equi(&mut ts.msac) { delta = -delta; } - pal[i] = (prev + delta & max) as uint16_t; + pal[i] = ((prev + delta) & max) as uint16_t; prev = pal[i] as libc::c_int; } } else { From 14564dd12bb946be3b666739a12636a485e67114 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 11 May 2023 16:51:33 -0700 Subject: [PATCH 16/22] `fn read_pal_uv`: Make `prev` a `u16` reduce casts. --- src/decode.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/decode.rs b/src/decode.rs index 2c1cca2c4..952edf3f9 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1760,20 +1760,20 @@ unsafe fn read_pal_uv( }; if dav1d_msac_decode_bool_equi(&mut ts.msac) { let bits = f.cur.p.bpc as u32 + dav1d_msac_decode_bools(&mut ts.msac, 2) - 4; - pal[0] = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as uint16_t; - let mut prev = pal[0] as libc::c_int; + pal[0] = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as u16; + let mut prev = pal[0]; let max = (1 << f.cur.p.bpc) - 1; for i in 1..b.pal_sz()[1] as usize { let mut delta = dav1d_msac_decode_bools(&mut ts.msac, bits) as libc::c_int; if delta != 0 && dav1d_msac_decode_bool_equi(&mut ts.msac) { delta = -delta; } - pal[i] = ((prev + delta) & max) as uint16_t; - prev = pal[i] as libc::c_int; + pal[i] = ((prev as libc::c_int + delta) & max) as u16; + prev = pal[i]; } } else { for i in 0..b.pal_sz()[1] as usize { - pal[i] = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as uint16_t; + pal[i] = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as u16; } } if dbg { From 8bbcb3d42377fea4da9096fe4fa2f70b439c390c Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 11 May 2023 16:52:04 -0700 Subject: [PATCH 17/22] `fn read_pal_uv`: Make `delta` an `i16`. --- src/decode.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/decode.rs b/src/decode.rs index 952edf3f9..ca3dc2708 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1764,11 +1764,11 @@ unsafe fn read_pal_uv( let mut prev = pal[0]; let max = (1 << f.cur.p.bpc) - 1; for i in 1..b.pal_sz()[1] as usize { - let mut delta = dav1d_msac_decode_bools(&mut ts.msac, bits) as libc::c_int; + let mut delta = dav1d_msac_decode_bools(&mut ts.msac, bits) as i16; if delta != 0 && dav1d_msac_decode_bool_equi(&mut ts.msac) { delta = -delta; } - pal[i] = ((prev as libc::c_int + delta) & max) as u16; + pal[i] = ((prev as i16 + delta) as u16) & max; prev = pal[i]; } } else { From 3845811850a8d944b8b0c62a3d55bc81ea9d04d9 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 11 May 2023 16:57:13 -0700 Subject: [PATCH 18/22] `fn read_pal_uv`: Slice `pal` to `b.pal_sz()[1]` len and use `pal.len()` instead of `b.pal_sz()[1]`. --- src/decode.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/decode.rs b/src/decode.rs index ca3dc2708..8c68b4963 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1758,12 +1758,13 @@ unsafe fn read_pal_uv( } else { &mut t.scratch.c2rust_unnamed_0.pal[2] }; + let pal = &mut pal[..b.pal_sz()[1] as usize]; if dav1d_msac_decode_bool_equi(&mut ts.msac) { let bits = f.cur.p.bpc as u32 + dav1d_msac_decode_bools(&mut ts.msac, 2) - 4; pal[0] = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as u16; let mut prev = pal[0]; let max = (1 << f.cur.p.bpc) - 1; - for i in 1..b.pal_sz()[1] as usize { + for i in 1..pal.len() { let mut delta = dav1d_msac_decode_bools(&mut ts.msac, bits) as i16; if delta != 0 && dav1d_msac_decode_bool_equi(&mut ts.msac) { delta = -delta; @@ -1772,13 +1773,13 @@ unsafe fn read_pal_uv( prev = pal[i]; } } else { - for i in 0..b.pal_sz()[1] as usize { + for i in 0..pal.len() { pal[i] = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as u16; } } if dbg { print!("Post-pal[pl=2]: r={} ", ts.msac.rng); - for n in 0..b.pal_sz()[1] as usize { + for n in 0..pal.len() { print!("{}{:02x}", if n != 0 { ' ' } else { '[' }, pal[n]); } println!("]"); From 879a89e445ee60e383a57204e2b49a848be19496 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 11 May 2023 16:59:59 -0700 Subject: [PATCH 19/22] `fn read_pal_uv`: Replace indexing loops with iterators and slices. --- src/decode.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/decode.rs b/src/decode.rs index 8c68b4963..939af69f3 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1764,23 +1764,23 @@ unsafe fn read_pal_uv( pal[0] = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as u16; let mut prev = pal[0]; let max = (1 << f.cur.p.bpc) - 1; - for i in 1..pal.len() { + for pal in &mut pal[1..] { let mut delta = dav1d_msac_decode_bools(&mut ts.msac, bits) as i16; if delta != 0 && dav1d_msac_decode_bool_equi(&mut ts.msac) { delta = -delta; } - pal[i] = ((prev as i16 + delta) as u16) & max; - prev = pal[i]; + *pal = ((prev as i16 + delta) as u16) & max; + prev = *pal; } } else { - for i in 0..pal.len() { - pal[i] = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as u16; + for pal in pal.iter_mut() { + *pal = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as u16; } } if dbg { print!("Post-pal[pl=2]: r={} ", ts.msac.rng); - for n in 0..pal.len() { - print!("{}{:02x}", if n != 0 { ' ' } else { '[' }, pal[n]); + for (n, pal) in pal.iter().enumerate() { + print!("{}{:02x}", if n != 0 { ' ' } else { '[' }, pal); } println!("]"); } From 507d1946f5cf3b09fd72ca40380a22f307d2009e Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 11 May 2023 17:00:55 -0700 Subject: [PATCH 20/22] `fn read_pal_uv`: Use `.fill_with` instead of a loop. --- src/decode.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/decode.rs b/src/decode.rs index 939af69f3..bcb32cd70 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1773,9 +1773,7 @@ unsafe fn read_pal_uv( prev = *pal; } } else { - for pal in pal.iter_mut() { - *pal = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as u16; - } + pal.fill_with(|| dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as u16); } if dbg { print!("Post-pal[pl=2]: r={} ", ts.msac.rng); From cbd2c0199dc3dbdbe57c9449700b1092a8a8e8a6 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 11 May 2023 17:01:58 -0700 Subject: [PATCH 21/22] `fn read_pal_uv`: Reverse the order of `pal[i]` and `prev` writes (originally were a double assign). --- src/decode.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/decode.rs b/src/decode.rs index bcb32cd70..422c744f4 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1761,16 +1761,16 @@ unsafe fn read_pal_uv( let pal = &mut pal[..b.pal_sz()[1] as usize]; if dav1d_msac_decode_bool_equi(&mut ts.msac) { let bits = f.cur.p.bpc as u32 + dav1d_msac_decode_bools(&mut ts.msac, 2) - 4; - pal[0] = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as u16; - let mut prev = pal[0]; + let mut prev = dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as u16; + pal[0] = prev; let max = (1 << f.cur.p.bpc) - 1; for pal in &mut pal[1..] { let mut delta = dav1d_msac_decode_bools(&mut ts.msac, bits) as i16; if delta != 0 && dav1d_msac_decode_bool_equi(&mut ts.msac) { delta = -delta; } - *pal = ((prev as i16 + delta) as u16) & max; - prev = *pal; + prev = ((prev as i16 + delta) as u16) & max; + *pal = prev; } } else { pal.fill_with(|| dav1d_msac_decode_bools(&mut ts.msac, f.cur.p.bpc as libc::c_uint) as u16); From d332eaae30d3c891e81771401b3fa61077c1fb92 Mon Sep 17 00:00:00 2001 From: Khyber Sen Date: Thu, 11 May 2023 17:02:36 -0700 Subject: [PATCH 22/22] `fn read_pal_uv`: Add back comments and spacing/line breaks from C. --- src/decode.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/decode.rs b/src/decode.rs index 422c744f4..7b0bd3856 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1743,6 +1743,8 @@ unsafe fn read_pal_uv( by4: usize, ) { read_pal_plane(t, b, true, sz_ctx, bx4, by4); + + // V pal coding let ts = &mut *t.ts; let f = &*t.f;