@@ -261,19 +261,34 @@ impl ModularTransform for Clut3x3 {
261261 . unwrap_or_else ( unlikely_default)
262262 } ;
263263
264- let input_clut_table_r = self . input_clut_table [ 0 ] . as_ref ( ) . unwrap ( ) ;
265- let input_clut_table_g = self . input_clut_table [ 1 ] . as_ref ( ) . unwrap ( ) ;
266- let input_clut_table_b = self . input_clut_table [ 2 ] . as_ref ( ) . unwrap ( ) ;
267- let output_clut_table_r = self . output_clut_table [ 0 ] . as_ref ( ) . unwrap ( ) ;
268- let output_clut_table_g = self . output_clut_table [ 1 ] . as_ref ( ) . unwrap ( ) ;
269- let output_clut_table_b = self . output_clut_table [ 2 ] . as_ref ( ) . unwrap ( ) ;
264+ let input_clut_table_r = self . input_clut_table [ 0 ] . as_ref ( ) . unwrap ( ) . as_slice ( ) ;
265+ let input_clut_table_g = self . input_clut_table [ 1 ] . as_ref ( ) . unwrap ( ) . as_slice ( ) ;
266+ let input_clut_table_b = self . input_clut_table [ 2 ] . as_ref ( ) . unwrap ( ) . as_slice ( ) ;
267+
268+ // num_output_table_entries is checked to be in this range
269+ assert ! (
270+ ( 2 ..4096 ) . contains( & input_clut_table_r. len( ) )
271+ && input_clut_table_r. len( ) == input_clut_table_g. len( )
272+ && input_clut_table_r. len( ) == input_clut_table_b. len( )
273+ ) ;
274+
275+ let output_clut_table_r = self . output_clut_table [ 0 ] . as_ref ( ) . unwrap ( ) . as_slice ( ) ;
276+ let output_clut_table_g = self . output_clut_table [ 1 ] . as_ref ( ) . unwrap ( ) . as_slice ( ) ;
277+ let output_clut_table_b = self . output_clut_table [ 2 ] . as_ref ( ) . unwrap ( ) . as_slice ( ) ;
278+
279+ assert ! (
280+ ( 2 ..4096 ) . contains( & output_clut_table_r. len( ) )
281+ && output_clut_table_r. len( ) == output_clut_table_g. len( )
282+ && output_clut_table_r. len( ) == output_clut_table_b. len( )
283+ ) ;
284+
270285 for ( dest, src) in dest. chunks_exact_mut ( 3 ) . zip ( src. chunks_exact ( 3 ) ) {
271286 let device_r = src[ 0 ] ;
272287 let device_g = src[ 1 ] ;
273288 let device_b = src[ 2 ] ;
274- let linear_r = lut_interp_linear_float ( device_r, & input_clut_table_r) ;
275- let linear_g = lut_interp_linear_float ( device_g, & input_clut_table_g) ;
276- let linear_b = lut_interp_linear_float ( device_b, & input_clut_table_b) ;
289+ let linear_r = lut_interp_linear_float ( device_r, input_clut_table_r) ;
290+ let linear_g = lut_interp_linear_float ( device_g, input_clut_table_g) ;
291+ let linear_b = lut_interp_linear_float ( device_b, input_clut_table_b) ;
277292 let x = ( linear_r * grid_max) . floor ( ) as u32 ;
278293 let y = ( linear_g * grid_max) . floor ( ) as u32 ;
279294 let z = ( linear_b * grid_max) . floor ( ) as u32 ;
@@ -345,18 +360,33 @@ impl ModularTransform for Clut4x3 {
345360 . unwrap_or_else ( unlikely_default)
346361 } ;
347362
348- let input_clut_table_0 = self . input_clut_table [ 0 ] . as_ref ( ) . unwrap ( ) ;
349- let input_clut_table_1 = self . input_clut_table [ 1 ] . as_ref ( ) . unwrap ( ) ;
350- let input_clut_table_2 = self . input_clut_table [ 2 ] . as_ref ( ) . unwrap ( ) ;
351- let input_clut_table_3 = self . input_clut_table [ 3 ] . as_ref ( ) . unwrap ( ) ;
352- let output_clut_table_r = & self . output_clut_table [ 0 ] . as_ref ( ) . unwrap ( ) ;
353- let output_clut_table_g = & self . output_clut_table [ 1 ] . as_ref ( ) . unwrap ( ) ;
354- let output_clut_table_b = & self . output_clut_table [ 2 ] . as_ref ( ) . unwrap ( ) ;
363+ let input_clut_table_0 = self . input_clut_table [ 0 ] . as_ref ( ) . unwrap ( ) . as_slice ( ) ;
364+ let input_clut_table_1 = self . input_clut_table [ 1 ] . as_ref ( ) . unwrap ( ) . as_slice ( ) ;
365+ let input_clut_table_2 = self . input_clut_table [ 2 ] . as_ref ( ) . unwrap ( ) . as_slice ( ) ;
366+ let input_clut_table_3 = self . input_clut_table [ 3 ] . as_ref ( ) . unwrap ( ) . as_slice ( ) ;
367+
368+ assert ! (
369+ ( 2 ..4096 ) . contains( & input_clut_table_0. len( ) )
370+ && input_clut_table_0. len( ) == input_clut_table_1. len( )
371+ && input_clut_table_0. len( ) == input_clut_table_2. len( )
372+ && input_clut_table_0. len( ) == input_clut_table_3. len( )
373+ ) ;
374+
375+ let output_clut_table_r = self . output_clut_table [ 0 ] . as_ref ( ) . unwrap ( ) . as_slice ( ) ;
376+ let output_clut_table_g = self . output_clut_table [ 1 ] . as_ref ( ) . unwrap ( ) . as_slice ( ) ;
377+ let output_clut_table_b = self . output_clut_table [ 2 ] . as_ref ( ) . unwrap ( ) . as_slice ( ) ;
378+
379+ assert ! (
380+ ( 2 ..4096 ) . contains( & output_clut_table_r. len( ) )
381+ && output_clut_table_r. len( ) == output_clut_table_g. len( )
382+ && output_clut_table_r. len( ) == output_clut_table_b. len( )
383+ ) ;
384+
355385 for ( dest, src) in dest. chunks_exact_mut ( 3 ) . zip ( src. chunks_exact ( 4 ) ) {
356- let linear_x = lut_interp_linear_float ( src[ 0 ] , & input_clut_table_0) ;
357- let linear_y = lut_interp_linear_float ( src[ 1 ] , & input_clut_table_1) ;
358- let linear_z = lut_interp_linear_float ( src[ 2 ] , & input_clut_table_2) ;
359- let linear_w = lut_interp_linear_float ( src[ 3 ] , & input_clut_table_3) ;
386+ let linear_x = lut_interp_linear_float ( src[ 0 ] , input_clut_table_0) ;
387+ let linear_y = lut_interp_linear_float ( src[ 1 ] , input_clut_table_1) ;
388+ let linear_z = lut_interp_linear_float ( src[ 2 ] , input_clut_table_2) ;
389+ let linear_w = lut_interp_linear_float ( src[ 3 ] , input_clut_table_3) ;
360390
361391 let x = ( linear_x * grid_max) . floor ( ) as u32 ;
362392 let y = ( linear_y * grid_max) . floor ( ) as u32 ;
@@ -578,9 +608,9 @@ impl ModularTransform for GammaTable {
578608 let in_r = src[ 0 ] ;
579609 let in_g = src[ 1 ] ;
580610 let in_b = src[ 2 ] ;
581- out_r = lut_interp_linear_float ( in_r, & input_clut_table_r[ .. ] ) ;
582- out_g = lut_interp_linear_float ( in_g, & input_clut_table_g[ .. ] ) ;
583- out_b = lut_interp_linear_float ( in_b, & input_clut_table_b[ .. ] ) ;
611+ out_r = lut_interp_linear_float ( in_r, input_clut_table_r) ;
612+ out_g = lut_interp_linear_float ( in_g, input_clut_table_g) ;
613+ out_b = lut_interp_linear_float ( in_b, input_clut_table_b) ;
584614
585615 dest[ 0 ] = clamp_float ( out_r) ;
586616 dest[ 1 ] = clamp_float ( out_g) ;
0 commit comments