@@ -6607,6 +6607,7 @@ struct RGB2Luv_f
6607
6607
for ( ; i <= n - 12 ; i += 12 , src += scn * 4 )
6608
6608
{
6609
6609
float32x4x3_t v_src = vld3q_f32 (src);
6610
+
6610
6611
if ( gammaTab )
6611
6612
{
6612
6613
v_src.val [0 ] = vmulq_f32 (v_src.val [0 ], vdupq_n_f32 (gscale));
@@ -6627,6 +6628,15 @@ struct RGB2Luv_f
6627
6628
for ( ; i <= n - 12 ; i += 12 , src += scn * 4 )
6628
6629
{
6629
6630
float32x4x4_t v_src = vld4q_f32 (src);
6631
+
6632
+ v_src.val [0 ] = vmaxq_f32 (v_src.val [0 ], vdupq_n_f32 (0 ));
6633
+ v_src.val [1 ] = vmaxq_f32 (v_src.val [1 ], vdupq_n_f32 (0 ));
6634
+ v_src.val [2 ] = vmaxq_f32 (v_src.val [2 ], vdupq_n_f32 (0 ));
6635
+
6636
+ v_src.val [0 ] = vminq_f32 (v_src.val [0 ], vdupq_n_f32 (1 ));
6637
+ v_src.val [1 ] = vminq_f32 (v_src.val [1 ], vdupq_n_f32 (1 ));
6638
+ v_src.val [2 ] = vminq_f32 (v_src.val [2 ], vdupq_n_f32 (1 ));
6639
+
6630
6640
if ( gammaTab )
6631
6641
{
6632
6642
v_src.val [0 ] = vmulq_f32 (v_src.val [0 ], vdupq_n_f32 (gscale));
@@ -6670,6 +6680,20 @@ struct RGB2Luv_f
6670
6680
_mm_deinterleave_ps (v_r0, v_r1, v_g0, v_g1, v_b0, v_b1, v_a0, v_a1);
6671
6681
}
6672
6682
6683
+ v_r0 = _mm_max_ps (v_r0, _mm_setzero_ps ());
6684
+ v_r1 = _mm_max_ps (v_r1, _mm_setzero_ps ());
6685
+ v_g0 = _mm_max_ps (v_g0, _mm_setzero_ps ());
6686
+ v_g1 = _mm_max_ps (v_g1, _mm_setzero_ps ());
6687
+ v_b0 = _mm_max_ps (v_b0, _mm_setzero_ps ());
6688
+ v_b1 = _mm_max_ps (v_b1, _mm_setzero_ps ());
6689
+
6690
+ v_r0 = _mm_min_ps (v_r0, _mm_set1_ps (1 .f ));
6691
+ v_r1 = _mm_min_ps (v_r1, _mm_set1_ps (1 .f ));
6692
+ v_g0 = _mm_min_ps (v_g0, _mm_set1_ps (1 .f ));
6693
+ v_g1 = _mm_min_ps (v_g1, _mm_set1_ps (1 .f ));
6694
+ v_b0 = _mm_min_ps (v_b0, _mm_set1_ps (1 .f ));
6695
+ v_b1 = _mm_min_ps (v_b1, _mm_set1_ps (1 .f ));
6696
+
6673
6697
if ( gammaTab )
6674
6698
{
6675
6699
__m128 v_gscale = _mm_set1_ps (gscale);
@@ -6704,6 +6728,9 @@ struct RGB2Luv_f
6704
6728
for ( ; i < n; i += 3 , src += scn )
6705
6729
{
6706
6730
float R = src[0 ], G = src[1 ], B = src[2 ];
6731
+ R = std::min (std::max (R, 0 .f ), 1 .f );
6732
+ G = std::min (std::max (G, 0 .f ), 1 .f );
6733
+ B = std::min (std::max (B, 0 .f ), 1 .f );
6707
6734
if ( gammaTab )
6708
6735
{
6709
6736
R = splineInterpolate (R*gscale, gammaTab, GAMMA_TAB_SIZE);
0 commit comments