@@ -95,7 +95,6 @@ use crate::src::levels::InterIntraPredMode;
95
95
use crate :: src:: levels:: InterIntraType ;
96
96
use crate :: src:: levels:: MVJoint ;
97
97
use crate :: src:: levels:: MotionMode ;
98
- use crate :: src:: levels:: RectTxfmSize ;
99
98
use crate :: src:: levels:: SegmentId ;
100
99
use crate :: src:: levels:: TxfmSize ;
101
100
use crate :: src:: levels:: CFL_PRED ;
@@ -110,11 +109,7 @@ use crate::src::levels::NEWMV;
110
109
use crate :: src:: levels:: NEWMV_NEWMV ;
111
110
use crate :: src:: levels:: N_COMP_INTER_PRED_MODES ;
112
111
use crate :: src:: levels:: N_INTRA_PRED_MODES ;
113
- use crate :: src:: levels:: N_RECT_TX_SIZES ;
114
112
use crate :: src:: levels:: N_UV_INTRA_PRED_MODES ;
115
- use crate :: src:: levels:: TX_4X4 ;
116
- use crate :: src:: levels:: TX_64X64 ;
117
- use crate :: src:: levels:: TX_8X8 ;
118
113
use crate :: src:: levels:: VERT_LEFT_PRED ;
119
114
use crate :: src:: levels:: VERT_PRED ;
120
115
use crate :: src:: lf_mask:: rav1d_calc_eih;
@@ -149,7 +144,6 @@ use crate::src::refmvs::RefMvsFrame;
149
144
use crate :: src:: relaxed_atomic:: RelaxedAtomic ;
150
145
use crate :: src:: tables:: cfl_allowed_mask;
151
146
use crate :: src:: tables:: dav1d_al_part_ctx;
152
- use crate :: src:: tables:: dav1d_block_dimensions;
153
147
use crate :: src:: tables:: dav1d_block_sizes;
154
148
use crate :: src:: tables:: dav1d_comp_inter_pred_modes;
155
149
use crate :: src:: tables:: dav1d_filter_2d;
@@ -285,7 +279,7 @@ fn read_tx_tree(
285
279
t : & mut Rav1dTaskContext ,
286
280
f : & Rav1dFrameData ,
287
281
ts_c : & mut Rav1dTileStateContext ,
288
- from : RectTxfmSize ,
282
+ from : TxfmSize ,
289
283
depth : c_int ,
290
284
masks : & mut [ u16 ; 2 ] ,
291
285
x_off : usize ,
@@ -298,10 +292,10 @@ fn read_tx_tree(
298
292
let txh = t_dim. lh ;
299
293
let is_split;
300
294
301
- if depth < 2 && from > TX_4X4 {
302
- let cat = 2 * ( TX_64X64 as c_int - t_dim. max as c_int ) - depth;
303
- let a = ( * f. a [ t. a ] . tx . index ( bx4 as usize ) < txw) as c_int ;
304
- let l = ( * t. l . tx . index ( by4 as usize ) < txh) as c_int ;
295
+ if depth < 2 && from > TxfmSize :: S4x4 {
296
+ let cat = 2 * ( TxfmSize :: S64x64 as c_int - t_dim. max as c_int ) - depth;
297
+ let a = ( ( * f. a [ t. a ] . tx . index ( bx4 as usize ) as u8 ) < txw) as c_int ;
298
+ let l = ( ( * t. l . tx . index ( by4 as usize ) as u8 ) < txh) as c_int ;
305
299
306
300
is_split = rav1d_msac_decode_bool_adapt (
307
301
& mut ts_c. msac ,
@@ -313,9 +307,9 @@ fn read_tx_tree(
313
307
} else {
314
308
is_split = false ;
315
309
}
316
- if is_split && t_dim. max as TxfmSize > TX_8X8 {
317
- let sub = t_dim. sub as RectTxfmSize ;
318
- let sub_t_dim = & dav1d_txfm_dimensions[ usize :: from ( sub) ] ; // `from` used instead of `into` for rust-analyzer type inference
310
+ if is_split && t_dim. max > TxfmSize :: S8x8 as _ {
311
+ let sub = t_dim. sub ;
312
+ let sub_t_dim = & dav1d_txfm_dimensions[ sub as usize ] ;
319
313
let txsw = sub_t_dim. w as c_int ;
320
314
let txsh = sub_t_dim. h as c_int ;
321
315
@@ -377,7 +371,13 @@ fn read_tx_tree(
377
371
[ t_dim. h as usize , t_dim. w as usize ] ,
378
372
[ by4 as usize , bx4 as usize ] ,
379
373
|case, ( dir, val) | {
380
- case. set_disjoint ( & dir. tx , if is_split { TX_4X4 } else { val } ) ;
374
+ let tx = if is_split {
375
+ TxfmSize :: S4x4
376
+ } else {
377
+ // TODO check unwrap is optimized out
378
+ TxfmSize :: from_repr ( val as _ ) . unwrap ( )
379
+ } ;
380
+ case. set_disjoint ( & dir. tx , tx) ;
381
381
} ,
382
382
) ;
383
383
} ;
@@ -436,7 +436,7 @@ fn find_matching_ref(
436
436
&& t. b . x + bw4 < ts. tiling . col_end
437
437
&& intra_edge_flags. contains ( EdgeFlags :: I444_TOP_HAS_RIGHT ) ;
438
438
439
- let bs = |rp : refmvs_block | dav1d_block_dimensions [ rp. bs as usize ] ;
439
+ let bs = |rp : refmvs_block | rp. bs . dimensions ( ) ;
440
440
let matches = |rp : refmvs_block | rp. r#ref . r#ref [ 0 ] == r#ref + 1 && rp. r#ref . r#ref [ 1 ] == -1 ;
441
441
442
442
if have_top {
@@ -541,7 +541,7 @@ fn derive_warpmv(
541
541
* r. index ( t. rt . r [ ( offset as isize + i as isize ) as usize ] + j as usize )
542
542
} ;
543
543
544
- let bs = |rp : refmvs_block | dav1d_block_dimensions [ rp. bs as usize ] ;
544
+ let bs = |rp : refmvs_block | rp. bs . dimensions ( ) ;
545
545
546
546
let mut add_sample = |np : usize , dx : i32 , dy : i32 , sx : i32 , sy : i32 , rp : refmvs_block | {
547
547
pts[ np] [ 0 ] [ 0 ] = 16 * ( 2 * dx + sx * bs ( rp) [ 0 ] as i32 ) - 8 ;
@@ -789,7 +789,7 @@ fn read_vartx_tree(
789
789
bx4 : c_int ,
790
790
by4 : c_int ,
791
791
) -> VarTx {
792
- let b_dim = & dav1d_block_dimensions [ bs as usize ] ;
792
+ let b_dim = bs . dimensions ( ) ;
793
793
let bw4 = b_dim[ 0 ] as usize ;
794
794
let bh4 = b_dim[ 1 ] as usize ;
795
795
@@ -799,16 +799,17 @@ fn read_vartx_tree(
799
799
let frame_hdr = & * * * f. frame_hdr . as_ref ( ) . unwrap ( ) ;
800
800
let txfm_mode = frame_hdr. txfm_mode ;
801
801
let uvtx;
802
- if b. skip == 0 && ( frame_hdr. segmentation . lossless [ b. seg_id . get ( ) ] || max_ytx == TX_4X4 ) {
803
- uvtx = TX_4X4 ;
802
+ if b. skip == 0 && ( frame_hdr. segmentation . lossless [ b. seg_id . get ( ) ] || max_ytx == TxfmSize :: S4x4 )
803
+ {
804
+ uvtx = TxfmSize :: S4x4 ;
804
805
max_ytx = uvtx;
805
806
if txfm_mode == Rav1dTxfmMode :: Switchable {
806
807
CaseSet :: < 32 , false > :: many (
807
808
[ & t. l , & f. a [ t. a ] ] ,
808
809
[ bh4 as usize , bw4 as usize ] ,
809
810
[ by4 as usize , bx4 as usize ] ,
810
811
|case, dir| {
811
- case. set_disjoint ( & dir. tx , TX_4X4 ) ;
812
+ case. set_disjoint ( & dir. tx , TxfmSize :: S4x4 ) ;
812
813
} ,
813
814
) ;
814
815
}
@@ -819,13 +820,15 @@ fn read_vartx_tree(
819
820
[ bh4 as usize , bw4 as usize ] ,
820
821
[ by4 as usize , bx4 as usize ] ,
821
822
|case, ( dir, dir_index) | {
822
- case. set_disjoint ( & dir. tx , b_dim[ 2 + dir_index] ) ;
823
+ // TODO check unwrap is optimized out
824
+ let tx = TxfmSize :: from_repr ( b_dim[ 2 + dir_index] as _ ) . unwrap ( ) ;
825
+ case. set_disjoint ( & dir. tx , tx) ;
823
826
} ,
824
827
) ;
825
828
}
826
829
uvtx = dav1d_max_txfm_size_for_bs[ bs as usize ] [ f. cur . p . layout as usize ] ;
827
830
} else {
828
- assert ! ( bw4 <= 16 || bh4 <= 16 || max_ytx == TX_64X64 ) ;
831
+ assert ! ( bw4 <= 16 || bh4 <= 16 || max_ytx == TxfmSize :: S64x64 ) ;
829
832
let ytx = & dav1d_txfm_dimensions[ max_ytx as usize ] ;
830
833
let h = ytx. h as usize ;
831
834
let w = ytx. w as usize ;
@@ -1092,7 +1095,7 @@ fn obmc_lowest_px(
1092
1095
let mut x = 0 ;
1093
1096
while x < w4 && i < cmp:: min ( b_dim[ 2 ] as c_int , 4 ) {
1094
1097
let a_r = * r. index ( ri[ 0 ] + t. b . x as usize + x as usize + 1 ) ;
1095
- let a_b_dim = & dav1d_block_dimensions [ a_r. bs as usize ] ;
1098
+ let a_b_dim = a_r. bs . dimensions ( ) ;
1096
1099
if a_r. r#ref . r#ref [ 0 ] as c_int > 0 {
1097
1100
let oh4 = cmp:: min ( b_dim[ 1 ] as c_int , 16 ) >> 1 ;
1098
1101
mc_lowest_px (
@@ -1113,7 +1116,7 @@ fn obmc_lowest_px(
1113
1116
let mut y = 0 ;
1114
1117
while y < h4 && i < cmp:: min ( b_dim[ 3 ] as c_int , 4 ) {
1115
1118
let l_r = * r. index ( ri[ y as usize + 1 + 1 ] + t. b . x as usize - 1 ) ;
1116
- let l_b_dim = & dav1d_block_dimensions [ l_r. bs as usize ] ;
1119
+ let l_b_dim = l_r. bs . dimensions ( ) ;
1117
1120
if l_r. r#ref . r#ref [ 0 ] as c_int > 0 {
1118
1121
let oh4 = iclip ( l_b_dim[ 1 ] as c_int , 2 , b_dim[ 1 ] as c_int ) ;
1119
1122
mc_lowest_px (
@@ -1164,7 +1167,7 @@ fn decode_b(
1164
1167
1165
1168
let ts = & f. ts [ t. ts ] ;
1166
1169
let bd_fn = f. bd_fn ( ) ;
1167
- let b_dim = & dav1d_block_dimensions [ bs as usize ] ;
1170
+ let b_dim = bs . dimensions ( ) ;
1168
1171
let bx4 = t. b . x & 31 ;
1169
1172
let by4 = t. b . y & 31 ;
1170
1173
let ss_ver = ( f. cur . p . layout == Rav1dPixelLayout :: I420 ) as c_int ;
@@ -1871,13 +1874,13 @@ fn decode_b(
1871
1874
let frame_hdr = f. frame_hdr ( ) ;
1872
1875
1873
1876
let tx = if frame_hdr. segmentation . lossless [ b. seg_id . get ( ) ] {
1874
- b. uvtx = TX_4X4 ;
1877
+ b. uvtx = TxfmSize :: S4x4 ;
1875
1878
b. uvtx
1876
1879
} else {
1877
1880
let mut tx = dav1d_max_txfm_size_for_bs[ bs as usize ] [ 0 ] ;
1878
1881
b. uvtx = dav1d_max_txfm_size_for_bs[ bs as usize ] [ f. cur . p . layout as usize ] ;
1879
1882
let mut t_dim = & dav1d_txfm_dimensions[ tx as usize ] ;
1880
- if frame_hdr. txfm_mode == Rav1dTxfmMode :: Switchable && t_dim. max > TX_4X4 as u8 {
1883
+ if frame_hdr. txfm_mode == Rav1dTxfmMode :: Switchable && t_dim. max > TxfmSize :: S4x4 as _ {
1881
1884
let tctx = get_tx_ctx ( & f. a [ t. a ] , & t. l , t_dim, by4, bx4) ;
1882
1885
let tx_cdf = & mut ts_c. cdf . m . txsz [ ( t_dim. max - 1 ) as usize ] [ tctx as usize ] ;
1883
1886
let depth =
@@ -1890,7 +1893,7 @@ fn decode_b(
1890
1893
}
1891
1894
}
1892
1895
if debug_block_info ! ( f, t. b) {
1893
- println ! ( "Post-tx[{}]: r={}" , tx, ts_c. msac. rng) ;
1896
+ println ! ( "Post-tx[{:? }]: r={}" , tx, ts_c. msac. rng) ;
1894
1897
}
1895
1898
tx
1896
1899
} ;
@@ -1962,7 +1965,8 @@ fn decode_b(
1962
1965
[ by4 as usize , bx4 as usize ] ,
1963
1966
|case, ( dir, lw_lh, dir_index) | {
1964
1967
case. set_disjoint ( & dir. tx_intra , lw_lh as i8 ) ;
1965
- case. set_disjoint ( & dir. tx , lw_lh) ;
1968
+ // TODO check unwrap is optimized out
1969
+ case. set_disjoint ( & dir. tx , TxfmSize :: from_repr ( lw_lh as _ ) . unwrap ( ) ) ;
1966
1970
case. set_disjoint ( & dir. mode , y_mode_nofilt) ;
1967
1971
case. set_disjoint ( & dir. pal_sz , pal_sz[ 0 ] ) ;
1968
1972
case. set_disjoint ( & dir. seg_pred , seg_pred. into ( ) ) ;
@@ -3064,8 +3068,8 @@ fn decode_b(
3064
3068
let mut ytx = max_ytx;
3065
3069
let mut uvtx = b. uvtx ;
3066
3070
if frame_hdr. segmentation . lossless [ b. seg_id . get ( ) ] {
3067
- ytx = TX_4X4 ;
3068
- uvtx = TX_4X4 ;
3071
+ ytx = TxfmSize :: S4x4 ;
3072
+ uvtx = TxfmSize :: S4x4 ;
3069
3073
}
3070
3074
let lflvl = match ts. lflvl . get ( ) {
3071
3075
TileStateRef :: Frame => & f. lf . lvl ,
@@ -3790,7 +3794,7 @@ fn reset_context(ctx: &mut BlockContext, keyframe: bool, pass: c_int) {
3790
3794
ctx. tx_lpf_y . get_mut ( ) . 0 . fill ( 2 ) ;
3791
3795
ctx. tx_lpf_uv . get_mut ( ) . 0 . fill ( 1 ) ;
3792
3796
ctx. tx_intra . get_mut ( ) . 0 . fill ( -1 ) ;
3793
- ctx. tx . get_mut ( ) . 0 . fill ( TX_64X64 ) ;
3797
+ ctx. tx . get_mut ( ) . 0 . fill ( TxfmSize :: S64x64 ) ;
3794
3798
if !keyframe {
3795
3799
for r#ref in & mut ctx. r#ref {
3796
3800
r#ref. get_mut ( ) . 0 . fill ( -1 ) ;
@@ -4531,7 +4535,7 @@ pub(crate) fn rav1d_decode_frame_init(c: &Rav1dContext, fc: &Rav1dFrameContext)
4531
4535
// setup dequant tables
4532
4536
init_quant_tables ( & seq_hdr, & frame_hdr, frame_hdr. quant . yac , & f. dq ) ;
4533
4537
if frame_hdr. quant . qm != 0 {
4534
- for i in 0 ..N_RECT_TX_SIZES {
4538
+ for i in 0 ..TxfmSize :: COUNT {
4535
4539
f. qm [ i] [ 0 ] = dav1d_qm_tbl[ frame_hdr. quant . qm_y as usize ] [ 0 ] [ i] ;
4536
4540
f. qm [ i] [ 1 ] = dav1d_qm_tbl[ frame_hdr. quant . qm_u as usize ] [ 1 ] [ i] ;
4537
4541
f. qm [ i] [ 2 ] = dav1d_qm_tbl[ frame_hdr. quant . qm_v as usize ] [ 1 ] [ i] ;
0 commit comments