Author: post
Date: 2009-12-31 01:52:35 +0100 (Thu, 31 Dec 2009)
New Revision: 2933

Modified:
   branches/rawstudio-ng-color/plugins/dcp/dcp-sse.c
Log:
Clamp after exposure before contrast to match C routine.

Modified: branches/rawstudio-ng-color/plugins/dcp/dcp-sse.c
===================================================================
--- branches/rawstudio-ng-color/plugins/dcp/dcp-sse.c   2009-12-31 00:27:23 UTC 
(rev 2932)
+++ branches/rawstudio-ng-color/plugins/dcp/dcp-sse.c   2009-12-31 00:52:35 UTC 
(rev 2933)
@@ -699,7 +699,12 @@
                        __m128 y2_r = _mm_mul_ps(exposure_slope, _mm_sub_ps(r, 
exposure_black));
                        __m128 y2_g = _mm_mul_ps(exposure_slope, _mm_sub_ps(g, 
exposure_black));
                        __m128 y2_b = _mm_mul_ps(exposure_slope, _mm_sub_ps(b, 
exposure_black));
-
+                       
+                       /* x = MIN(1.0, x) */
+                       max_val = _mm_load_ps(_ones_ps);
+                       y2_r = _mm_min_ps(y2_r, max_val);
+                       y2_g = _mm_min_ps(y2_g, max_val);
+                       y2_b = _mm_min_ps(y2_b, max_val);
                        __m128 black_plus_radius = 
_mm_load_ps(_black_plus_radius);
                        __m128 r_mask = _mm_cmpgt_ps(r, black_plus_radius);
                        __m128 g_mask = _mm_cmpgt_ps(g, black_plus_radius);
@@ -710,6 +715,8 @@
                        y_r = _mm_or_ps(y_r, _mm_and_ps(r_mask, y2_r));
                        y_g = _mm_or_ps(y_g, _mm_and_ps(g_mask, y2_g));
                        y_b = _mm_or_ps(y_b, _mm_and_ps(b_mask, y2_b));
+
+                       /* if (x <= dcp->exposure_black - dcp->exposure_radius) 
x = 0; */
                        black_minus_radius = _mm_load_ps(_black_minus_radius);
                        r_mask = _mm_cmple_ps(r, black_minus_radius);
                        g_mask = _mm_cmple_ps(g, black_minus_radius);
@@ -1390,6 +1397,12 @@
                        __m128 y2_g = _mm_mul_ps(exposure_slope, _mm_sub_ps(g, 
exposure_black));
                        __m128 y2_b = _mm_mul_ps(exposure_slope, _mm_sub_ps(b, 
exposure_black));
 
+                       /* x = MIN(1.0, x) */
+                       max_val = _mm_load_ps(_ones_ps);
+                       y2_r = _mm_min_ps(y2_r, max_val);
+                       y2_g = _mm_min_ps(y2_g, max_val);
+                       y2_b = _mm_min_ps(y2_b, max_val);
+
                        __m128 black_plus_radius = 
_mm_load_ps(_black_plus_radius);
                        __m128 r_mask = _mm_cmpgt_ps(r, black_plus_radius);
                        __m128 g_mask = _mm_cmpgt_ps(g, black_plus_radius);


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to