# if SENSOR_ID == 2
# define VIGNETTE_PROFILE_8DT0MM
# define BIT_DEPTH 12
# define BLACK_LVL 64
float ox_lut_func ( int x ) {
if ( x < 512 ) {
return x * 5.94873e-8 ;
} else if ( 512 < = x & & x < 768 ) {
return 3.0458e-05 + ( x - 512 ) * 1.19913e-7 ;
} else if ( 768 < = x & & x < 1536 ) {
return 6.1154e-05 + ( x - 768 ) * 2.38493e-7 ;
} else if ( 1536 < = x & & x < 1792 ) {
return 0.0002448 + ( x - 1536 ) * 9.56930e-7 ;
} else if ( 1792 < = x & & x < 2048 ) {
return 0.00048977 + ( x - 1792 ) * 1.91441e-6 ;
} else if ( 2048 < = x & & x < 2304 ) {
return 0.00097984 + ( x - 2048 ) * 3.82937e-6 ;
} else if ( 2304 < = x & & x < 2560 ) {
return 0.0019601 + ( x - 2304 ) * 7.659055e-6 ;
} else if ( 2560 < = x & & x < 2816 ) {
return 0.0039207 + ( x - 2560 ) * 1.525e-5 ;
} else {
return 0.0078421 + ( exp ( ( x - 2816 ) / 273.0 ) - 1 ) * 0.0092421 ;
}
}
float4 normalize_pv ( int4 parsed , float vignette_factor ) {
// PWL
float4 pv = { ox_lut_func ( parsed . s0 ) , ox_lut_func ( parsed . s1 ) , ox_lut_func ( parsed . s2 ) , ox_lut_func ( parsed . s3 ) } ;
return clamp ( pv * vignette_factor * 256.0 , 0.0 , 1.0 ) ;
}
float3 color_correct ( float3 rgb ) {
float3 corrected = rgb . x * ( float3 ) ( 1.5664815 , - 0.29808738 , - 0.03973474 ) ;
corrected + = rgb . y * ( float3 ) ( - 0.48672447 , 1.41914433 , - 0.40295248 ) ;
corrected + = rgb . z * ( float3 ) ( - 0.07975703 , - 0.12105695 , 1.44268722 ) ;
return corrected ;
}
float3 apply_gamma ( float3 rgb , int expo_time ) {
return - 0.507089 * exp ( - 12.54124638 * rgb ) + 0.9655 * powr ( rgb , 0.5 ) - 0.472597 * rgb + 0.507089 ;
}
# endif