[Rawstudio-commit] r829 - trunk/src

Anders Brander anders at brander.dk
Sat Sep 30 19:12:14 CEST 2006


Author: abrander
Date: 2006-09-30 19:12:14 +0200 (Sat, 30 Sep 2006)
New Revision: 829

Modified:
   trunk/src/rs-render.c
   trunk/src/rs-render.h
Log:
Aded rs_render_pixel_cms() and rs_render_pixel_nocms().

Modified: trunk/src/rs-render.c
===================================================================
--- trunk/src/rs-render.c	2006-09-30 15:24:12 UTC (rev 828)
+++ trunk/src/rs-render.c	2006-09-30 17:12:14 UTC (rev 829)
@@ -42,6 +42,9 @@
 DECL_RENDER(rs_render_nocms_3dnow)
 #endif
 
+void rs_render_pixel_cms(RS_PHOTO *photo, gushort *in, guchar *out, void *profile);
+void rs_render_pixel_nocms(RS_PHOTO *photo, gushort *in, guchar *out, void *profile);
+
 void rs_render_histogram_table_c(RS_PHOTO *photo, RS_IMAGE16 *input, guint *table);
 
 #if defined (__i386__) || defined (__x86_64__)
@@ -70,6 +73,7 @@
 		else
 #endif
 			rs_render = rs_render_cms;
+		rs_render_pixel = rs_render_pixel_cms;
 	}
 	else
 	{
@@ -81,6 +85,7 @@
 		else
 #endif
 			rs_render = rs_render_nocms;
+		rs_render_pixel = rs_render_pixel_nocms;
 	}
 #if defined( __i386__) || defined (__x86_64__)
 	if (cpuflags & _CMOV)
@@ -653,6 +658,87 @@
 #endif
 
 void
+rs_render_pixel_cms(RS_PHOTO *photo, gushort *in, guchar *out, void *profile)
+{
+	gushort buffer[3];
+	gfloat rr, gg, bb;
+	gint r,g,b;
+
+	rr = ((gfloat) in[R]) * photo->pre_mul[R];
+	gg = ((gfloat) in[G]) * photo->pre_mul[G];
+	bb = ((gfloat) in[B]) * photo->pre_mul[B];
+
+	if (rr>65535.0)
+		rr = 65535.0;
+	else if (rr<0.0)
+		rr = 0.0;
+	if (gg>65535.0)
+		gg = 65535.0;
+	else if (gg<0.0)
+		gg = 0.0;
+	if (bb>65535.0)
+		bb = 65535.0;
+	else if (bb<0.0)
+		bb = 0.0;
+
+	r = rr*photo->mat.coeff[0][0]
+		+ gg*photo->mat.coeff[0][1]
+		+ bb*photo->mat.coeff[0][2];
+	g = rr*photo->mat.coeff[1][0]
+		+ gg*photo->mat.coeff[1][1]
+		+ bb*photo->mat.coeff[1][2];
+	b = rr*photo->mat.coeff[2][0]
+		+ gg*photo->mat.coeff[2][1]
+		+ bb*photo->mat.coeff[2][2];
+	_CLAMP65535_TRIPLET(r,g,b);
+	buffer[R] = previewtable16[r];
+	buffer[G] = previewtable16[g];
+	buffer[B] = previewtable16[b];
+	cmsDoTransform((cmsHPROFILE) profile, buffer, out, 1);
+	return;
+}
+
+void
+rs_render_pixel_nocms(RS_PHOTO *photo, gushort *in, guchar *out, void *profile)
+{
+	gushort buffer[3];
+	gfloat rr, gg, bb;
+	gint r,g,b;
+
+	rr = ((gfloat) in[R]) * photo->pre_mul[R];
+	gg = ((gfloat) in[G]) * photo->pre_mul[G];
+	bb = ((gfloat) in[B]) * photo->pre_mul[B];
+
+	if (rr>65535.0)
+		rr = 65535.0;
+	else if (rr<0.0)
+		rr = 0.0;
+	if (gg>65535.0)
+		gg = 65535.0;
+	else if (gg<0.0)
+		gg = 0.0;
+	if (bb>65535.0)
+		bb = 65535.0;
+	else if (bb<0.0)
+		bb = 0.0;
+
+	r = rr*photo->mat.coeff[0][0]
+		+ gg*photo->mat.coeff[0][1]
+		+ bb*photo->mat.coeff[0][2];
+	g = rr*photo->mat.coeff[1][0]
+		+ gg*photo->mat.coeff[1][1]
+		+ bb*photo->mat.coeff[1][2];
+	b = rr*photo->mat.coeff[2][0]
+		+ gg*photo->mat.coeff[2][1]
+		+ bb*photo->mat.coeff[2][2];
+	_CLAMP65535_TRIPLET(r,g,b);
+	out[R] = previewtable8[r];
+	out[G] = previewtable8[g];
+	out[B] = previewtable8[b];
+	return;
+}
+
+void
 rs_render_histogram_table_c(RS_PHOTO *photo, RS_IMAGE16 *input, guint *table)
 {
 	gint y,x;

Modified: trunk/src/rs-render.h
===================================================================
--- trunk/src/rs-render.h	2006-09-30 15:24:12 UTC (rev 828)
+++ trunk/src/rs-render.h	2006-09-30 17:12:14 UTC (rev 829)
@@ -22,3 +22,4 @@
 void (*rs_render)(RS_PHOTO *photo, gint width, gint height, gushort *in,
 	gint in_rowstride, gint in_channels, guchar *out, gint out_rowstride, void *profile);
 void (*rs_render_histogram_table)(RS_PHOTO *photo, RS_IMAGE16 *input, guint *table);
+void (*rs_render_pixel)(RS_PHOTO *photo, gushort *in, guchar *out, void *profile);




More information about the Rawstudio-commit mailing list