@@ -370,7 +370,7 @@ pub(crate) fn rav1d_copy_lpf<BD: BitDepth>(
370
370
fn filter_plane_cols_y < BD : BitDepth > (
371
371
f : & Rav1dFrameData ,
372
372
have_left : bool ,
373
- lvl : WithOffset < & [ [ u8 ; 4 ] ] > ,
373
+ lvl : WithOffset < & DisjointMut < Vec < u8 > > > ,
374
374
mask : & [ [ [ RelaxedAtomic < u16 > ; 2 ] ; 3 ] ; 32 ] ,
375
375
y_dst : Rav1dPictureDataComponentOffset ,
376
376
w : usize ,
@@ -398,16 +398,16 @@ fn filter_plane_cols_y<BD: BitDepth>(
398
398
} else {
399
399
mask. each_ref ( ) . map ( |[ _, b] | b. get ( ) as u32 )
400
400
} ;
401
- let lvl = lvl + x ;
402
- lf_sb. y . h . call :: < BD > ( f, y_dst ( x) , & hmask, lvl, 0 , len) ;
401
+ let lvl = |y| lvl + ( 4 * x + y ) ;
402
+ lf_sb. y . h . call :: < BD > ( f, y_dst ( x) , & hmask, lvl ( 0 ) , len) ;
403
403
}
404
404
}
405
405
406
406
#[ inline]
407
407
fn filter_plane_rows_y < BD : BitDepth > (
408
408
f : & Rav1dFrameData ,
409
409
have_top : bool ,
410
- lvl : WithOffset < & [ [ u8 ; 4 ] ] > ,
410
+ lvl : WithOffset < & DisjointMut < Vec < u8 > > > ,
411
411
b4_stride : usize ,
412
412
mask : & [ [ [ RelaxedAtomic < u16 > ; 2 ] ; 3 ] ; 32 ] ,
413
413
y_dst : Rav1dPictureDataComponentOffset ,
@@ -430,16 +430,16 @@ fn filter_plane_rows_y<BD: BitDepth>(
430
430
let vmask = mask[ y % mask. len ( ) ] // To elide the bounds check.
431
431
. each_ref ( )
432
432
. map ( |[ a, b] | a. get ( ) as u32 | ( ( b. get ( ) as u32 ) << 16 ) ) ;
433
- let lvl = lvl + i * b4_stride;
434
- lf_sb. y . v . call :: < BD > ( f, y_dst ( i) , & vmask, lvl, 1 , w) ;
433
+ let lvl = |y| lvl + ( 4 * i * b4_stride + y ) ;
434
+ lf_sb. y . v . call :: < BD > ( f, y_dst ( i) , & vmask, lvl ( 1 ) , w) ;
435
435
}
436
436
}
437
437
438
438
#[ inline]
439
439
fn filter_plane_cols_uv < BD : BitDepth > (
440
440
f : & Rav1dFrameData ,
441
441
have_left : bool ,
442
- lvl : WithOffset < & [ [ u8 ; 4 ] ] > ,
442
+ lvl : WithOffset < & DisjointMut < Vec < u8 > > > ,
443
443
mask : & [ [ [ RelaxedAtomic < u16 > ; 2 ] ; 2 ] ; 32 ] ,
444
444
u_dst : Rav1dPictureDataComponentOffset ,
445
445
v_dst : Rav1dPictureDataComponentOffset ,
@@ -472,17 +472,17 @@ fn filter_plane_cols_uv<BD: BitDepth>(
472
472
mask. each_ref ( ) . map ( |[ _, b] | b. get ( ) as u32 )
473
473
} ;
474
474
let hmask = [ hmask[ 0 ] , hmask[ 1 ] , 0 ] ;
475
- let lvl = lvl + x ;
476
- lf_sb. uv . h . call :: < BD > ( f, u_dst ( x) , & hmask, lvl, 2 , len) ;
477
- lf_sb. uv . h . call :: < BD > ( f, v_dst ( x) , & hmask, lvl, 3 , len) ;
475
+ let lvl = |y| lvl + ( 4 * x + y ) ;
476
+ lf_sb. uv . h . call :: < BD > ( f, u_dst ( x) , & hmask, lvl ( 2 ) , len) ;
477
+ lf_sb. uv . h . call :: < BD > ( f, v_dst ( x) , & hmask, lvl ( 3 ) , len) ;
478
478
}
479
479
}
480
480
481
481
#[ inline]
482
482
fn filter_plane_rows_uv < BD : BitDepth > (
483
483
f : & Rav1dFrameData ,
484
484
have_top : bool ,
485
- lvl : WithOffset < & [ [ u8 ; 4 ] ] > ,
485
+ lvl : WithOffset < & DisjointMut < Vec < u8 > > > ,
486
486
b4_stride : usize ,
487
487
mask : & [ [ [ RelaxedAtomic < u16 > ; 2 ] ; 2 ] ; 32 ] ,
488
488
u_dst : Rav1dPictureDataComponentOffset ,
@@ -510,9 +510,9 @@ fn filter_plane_rows_uv<BD: BitDepth>(
510
510
. each_ref ( )
511
511
. map ( |[ a, b] | a. get ( ) as u32 | ( ( b. get ( ) as u32 ) << ( 16 >> ss_hor) ) ) ;
512
512
let vmask = [ vmask[ 0 ] , vmask[ 1 ] , 0 ] ;
513
- let lvl = lvl + i * b4_stride;
514
- lf_sb. uv . v . call :: < BD > ( f, u_dst ( i) , & vmask, lvl, 2 , w) ;
515
- lf_sb. uv . v . call :: < BD > ( f, v_dst ( i) , & vmask, lvl, 3 , w) ;
513
+ let lvl = |y| lvl + ( 4 * i * b4_stride + y ) ;
514
+ lf_sb. uv . v . call :: < BD > ( f, u_dst ( i) , & vmask, lvl ( 2 ) , w) ;
515
+ lf_sb. uv . v . call :: < BD > ( f, v_dst ( i) , & vmask, lvl ( 3 ) , w) ;
516
516
}
517
517
}
518
518
@@ -624,20 +624,16 @@ pub(crate) fn rav1d_loopfilter_sbrow_cols<BD: BitDepth>(
624
624
}
625
625
}
626
626
let lflvl = & f. lf . mask [ lflvl_offset..] ;
627
- let lvl = & * f
628
- . lf
629
- . level
630
- . index ( ( f. b4_stride * sby as isize * sbsz as isize ) as usize ..) ;
631
627
let lvl = WithOffset {
632
- data : lvl ,
633
- offset : 0 ,
628
+ data : & f . lf . level ,
629
+ offset : 4 * f . b4_stride as usize * ( sby * sbsz ) as usize ,
634
630
} ;
635
631
have_left = false ;
636
632
for x in 0 ..f. sb128w as usize {
637
633
filter_plane_cols_y :: < BD > (
638
634
f,
639
635
have_left,
640
- lvl + x * 32 ,
636
+ lvl + 4 * x * 32 ,
641
637
& lflvl[ x] . filter_y [ 0 ] ,
642
638
py + x * 128 ,
643
639
cmp:: min ( 32 , f. w4 - x as c_int * 32 ) as usize ,
@@ -649,20 +645,16 @@ pub(crate) fn rav1d_loopfilter_sbrow_cols<BD: BitDepth>(
649
645
if frame_hdr. loopfilter . level_u == 0 && frame_hdr. loopfilter . level_v == 0 {
650
646
return ;
651
647
}
652
- let lvl = & * f
653
- . lf
654
- . level
655
- . index ( ( f. b4_stride * ( sby * sbsz >> ss_ver) as isize ) as usize ..) ;
656
648
let lvl = WithOffset {
657
- data : lvl ,
658
- offset : 0 ,
649
+ data : & f . lf . level ,
650
+ offset : 4 * f . b4_stride as usize * ( sby * sbsz >> ss_ver ) as usize ,
659
651
} ;
660
652
have_left = false ;
661
653
for x in 0 ..f. sb128w as usize {
662
654
filter_plane_cols_uv :: < BD > (
663
655
f,
664
656
have_left,
665
- lvl + x * ( 32 >> ss_hor) ,
657
+ lvl + 4 * x * ( 32 >> ss_hor) ,
666
658
& lflvl[ x] . filter_uv [ 0 ] ,
667
659
pu + x * ( 128 >> ss_hor) ,
668
660
pv + x * ( 128 >> ss_hor) ,
@@ -694,19 +686,15 @@ pub(crate) fn rav1d_loopfilter_sbrow_rows<BD: BitDepth>(
694
686
let endy4: c_uint = ( starty4 + cmp:: min ( f. h4 - sby * sbsz, sbsz) ) as c_uint ;
695
687
let uv_endy4: c_uint = endy4. wrapping_add ( ss_ver as c_uint ) >> ss_ver;
696
688
697
- let lvl = & * f
698
- . lf
699
- . level
700
- . index ( ( f. b4_stride * sby as isize * sbsz as isize ) as usize ..) ;
701
689
let lvl = WithOffset {
702
- data : lvl ,
703
- offset : 0 ,
690
+ data : & f . lf . level ,
691
+ offset : 4 * f . b4_stride as usize * ( sby * sbsz ) as usize ,
704
692
} ;
705
693
for x in 0 ..f. sb128w as usize {
706
694
filter_plane_rows_y :: < BD > (
707
695
f,
708
696
have_top,
709
- lvl + x * 32 ,
697
+ lvl + 4 * x * 32 ,
710
698
f. b4_stride as usize ,
711
699
& lflvl[ x] . filter_y [ 1 ] ,
712
700
p[ 0 ] + 128 * x,
@@ -721,20 +709,16 @@ pub(crate) fn rav1d_loopfilter_sbrow_rows<BD: BitDepth>(
721
709
return ;
722
710
}
723
711
724
- let lvl = & * f
725
- . lf
726
- . level
727
- . index ( ( f. b4_stride * ( sby * sbsz >> ss_ver) as isize ) as usize ..) ;
728
712
let lvl = WithOffset {
729
- data : lvl ,
730
- offset : 0 ,
713
+ data : & f . lf . level ,
714
+ offset : 4 * f . b4_stride as usize * ( sby * sbsz >> ss_ver ) as usize ,
731
715
} ;
732
716
let [ _, pu, pv] = p;
733
717
for x in 0 ..f. sb128w as usize {
734
718
filter_plane_rows_uv :: < BD > (
735
719
f,
736
720
have_top,
737
- lvl + x * ( 32 >> ss_hor) ,
721
+ lvl + 4 * x * ( 32 >> ss_hor) ,
738
722
f. b4_stride as usize ,
739
723
& lflvl[ x] . filter_uv [ 1 ] ,
740
724
pu + ( x * 128 >> ss_hor) ,
0 commit comments