@@ -472,8 +472,10 @@ fn get_lo_ctx(
472
472
ctx_offsets : Option < & [ [ u8 ; 5 ] ; 5 ] > ,
473
473
x : usize ,
474
474
y : usize ,
475
- stride : usize ,
475
+ stride : u8 ,
476
476
) -> usize {
477
+ let stride = stride as usize ;
478
+ let levels = & levels[ ..2 * stride + 4 + 1 ] ;
477
479
let level = |y, x| levels[ y * stride + x] as usize ;
478
480
479
481
let mut mag = level ( 0 , 1 ) + level ( 1 , 0 ) ;
@@ -730,7 +732,7 @@ fn decode_coefs<BD: BitDepth>(
730
732
[ nonsquare_tx. wrapping_add ( tx as c_uint & nonsquare_tx) as usize ] ,
731
733
) ;
732
734
scan = dav1d_scans[ tx as usize ] ;
733
- let stride = 4 * sh as usize ;
735
+ let stride = 4 * sh;
734
736
let shift: c_uint = if t_dim. lh < 4 {
735
737
t_dim. lh as c_uint + 2
736
738
} else {
@@ -740,7 +742,7 @@ fn decode_coefs<BD: BitDepth>(
740
742
let mask: c_uint = 4 * sh as c_uint - 1 ;
741
743
// Optimizes better than `.fill(0)`,
742
744
// which doesn't elide the bounds check, inline, or vectorize.
743
- for i in 0 ..stride * ( 4 * sw as usize + 2 ) {
745
+ for i in 0 ..stride as usize * ( 4 * sw as usize + 2 ) {
744
746
levels[ i] = 0 ;
745
747
}
746
748
let mut x: c_uint ;
@@ -796,7 +798,7 @@ fn decode_coefs<BD: BitDepth>(
796
798
}
797
799
}
798
800
cf. set :: < BD > ( f, t_cf, rc as usize , ( tok << 11 ) . as_ :: < BD :: Coef > ( ) ) ;
799
- levels[ x as usize * stride + y as usize ] = level_tok as u8 ;
801
+ levels[ x as usize * stride as usize + y as usize ] = level_tok as u8 ;
800
802
let mut i = eob - 1 ;
801
803
while i > 0 {
802
804
// ac
@@ -819,7 +821,7 @@ fn decode_coefs<BD: BitDepth>(
819
821
}
820
822
}
821
823
assert ! ( x < 32 && y < 32 ) ;
822
- let level = & mut levels[ x as usize * stride + y as usize ..] ;
824
+ let level = & mut levels[ x as usize * stride as usize + y as usize ..] ;
823
825
ctx = get_lo_ctx (
824
826
level,
825
827
tx_class,
@@ -907,9 +909,9 @@ fn decode_coefs<BD: BitDepth>(
907
909
}
908
910
if dc_tok == 3 {
909
911
if tx_class == TxClass :: TwoD {
910
- mag = levels[ 0 * stride + 1 ] as c_uint
911
- + levels[ 1 * stride + 0 ] as c_uint
912
- + levels[ 1 * stride + 1 ] as c_uint ;
912
+ mag = levels[ 0 * stride as usize + 1 ] as c_uint
913
+ + levels[ 1 * stride as usize + 0 ] as c_uint
914
+ + levels[ 1 * stride as usize + 1 ] as c_uint ;
913
915
}
914
916
mag &= 63 ;
915
917
ctx = if mag > 12 {
@@ -938,7 +940,7 @@ fn decode_coefs<BD: BitDepth>(
938
940
let mask: c_uint = 4 * sh as c_uint - 1 ;
939
941
// Optimizes better than `.fill(0)`,
940
942
// which doesn't elide the bounds check, inline, or vectorize.
941
- for i in 0 ..stride * ( 4 * sh as usize + 2 ) {
943
+ for i in 0 ..stride as usize * ( 4 * sh as usize + 2 ) {
942
944
levels[ i] = 0 ;
943
945
}
944
946
let mut x: c_uint ;
@@ -993,7 +995,7 @@ fn decode_coefs<BD: BitDepth>(
993
995
}
994
996
}
995
997
cf. set :: < BD > ( f, t_cf, rc as usize , ( tok << 11 ) . as_ :: < BD :: Coef > ( ) ) ;
996
- levels[ x as usize * stride + y as usize ] = level_tok as u8 ;
998
+ levels[ x as usize * stride as usize + y as usize ] = level_tok as u8 ;
997
999
let mut i = eob - 1 ;
998
1000
while i > 0 {
999
1001
let rc_i: c_uint ;
@@ -1015,7 +1017,7 @@ fn decode_coefs<BD: BitDepth>(
1015
1017
}
1016
1018
}
1017
1019
assert ! ( x < 32 && y < 32 ) ;
1018
- let level = & mut levels[ x as usize * stride + y as usize ..] ;
1020
+ let level = & mut levels[ x as usize * stride as usize + y as usize ..] ;
1019
1021
ctx = get_lo_ctx (
1020
1022
level,
1021
1023
tx_class,
@@ -1100,9 +1102,9 @@ fn decode_coefs<BD: BitDepth>(
1100
1102
}
1101
1103
if dc_tok == 3 {
1102
1104
if tx_class == TxClass :: TwoD {
1103
- mag = levels[ 0 * stride + 1 ] as c_uint
1104
- + levels[ 1 * stride + 0 ] as c_uint
1105
- + levels[ 1 * stride + 1 ] as c_uint ;
1105
+ mag = levels[ 0 * stride as usize + 1 ] as c_uint
1106
+ + levels[ 1 * stride as usize + 0 ] as c_uint
1107
+ + levels[ 1 * stride as usize + 1 ] as c_uint ;
1106
1108
}
1107
1109
mag &= 63 ;
1108
1110
ctx = if mag > 12 {
@@ -1131,7 +1133,7 @@ fn decode_coefs<BD: BitDepth>(
1131
1133
let mask: c_uint = 4 * sw as c_uint - 1 ;
1132
1134
// Optimizes better than `.fill(0)`,
1133
1135
// which doesn't elide the bounds check, inline, or vectorize.
1134
- for i in 0 ..stride * ( 4 * sw as usize + 2 ) {
1136
+ for i in 0 ..stride as usize * ( 4 * sw as usize + 2 ) {
1135
1137
levels[ i] = 0 ;
1136
1138
}
1137
1139
let mut x: c_uint ;
@@ -1186,7 +1188,7 @@ fn decode_coefs<BD: BitDepth>(
1186
1188
}
1187
1189
}
1188
1190
cf. set :: < BD > ( f, t_cf, rc as usize , ( tok << 11 ) . as_ :: < BD :: Coef > ( ) ) ;
1189
- levels[ x as usize * stride + y as usize ] = level_tok as u8 ;
1191
+ levels[ x as usize * stride as usize + y as usize ] = level_tok as u8 ;
1190
1192
let mut i = eob - 1 ;
1191
1193
while i > 0 {
1192
1194
let rc_i: c_uint ;
@@ -1208,7 +1210,7 @@ fn decode_coefs<BD: BitDepth>(
1208
1210
}
1209
1211
}
1210
1212
assert ! ( x < 32 && y < 32 ) ;
1211
- let level = & mut levels[ x as usize * stride + y as usize ..] ;
1213
+ let level = & mut levels[ x as usize * stride as usize + y as usize ..] ;
1212
1214
ctx = get_lo_ctx (
1213
1215
level,
1214
1216
tx_class,
@@ -1293,9 +1295,9 @@ fn decode_coefs<BD: BitDepth>(
1293
1295
}
1294
1296
if dc_tok == 3 {
1295
1297
if tx_class == TxClass :: TwoD {
1296
- mag = levels[ 0 * stride + 1 ] as c_uint
1297
- + levels[ 1 * stride + 0 ] as c_uint
1298
- + levels[ 1 * stride + 1 ] as c_uint ;
1298
+ mag = levels[ 0 * stride as usize + 1 ] as c_uint
1299
+ + levels[ 1 * stride as usize + 0 ] as c_uint
1300
+ + levels[ 1 * stride as usize + 1 ] as c_uint ;
1299
1301
}
1300
1302
mag &= 63 ;
1301
1303
ctx = if mag > 12 {
0 commit comments