[Rawstudio-commit] r826 - trunk/src
Anders Brander
anders at brander.dk
Sat Sep 30 16:04:51 CEST 2006
Author: abrander
Date: 2006-09-30 16:04:51 +0200 (Sat, 30 Sep 2006)
New Revision: 826
Modified:
trunk/src/color.h
trunk/src/rawstudio.c
trunk/src/rs-render.c
Log:
Removed working space.
Modified: trunk/src/color.h
===================================================================
--- trunk/src/color.h 2006-09-29 00:07:41 UTC (rev 825)
+++ trunk/src/color.h 2006-09-30 14:04:51 UTC (rev 826)
@@ -21,9 +21,9 @@
/* luminance weight, notice that these is used for linear data */
-#define RLUM (0.297361)
-#define GLUM (0.627355)
-#define BLUM (0.075285)
+#define RLUM (0.3086)
+#define GLUM (0.6094)
+#define BLUM (0.0820)
#define GAMMA 2.2 /* this is ONLY used to render the histogram */
Modified: trunk/src/rawstudio.c
===================================================================
--- trunk/src/rawstudio.c 2006-09-29 00:07:41 UTC (rev 825)
+++ trunk/src/rawstudio.c 2006-09-30 14:04:51 UTC (rev 826)
@@ -50,11 +50,10 @@
#endif
gushort loadtable[65536];
+static cmsHPROFILE testProfile = NULL;
static cmsHPROFILE genericLoadProfile = NULL;
static cmsHPROFILE genericRGBProfile = NULL;
-static cmsHPROFILE workProfile = NULL;
-static cmsHTRANSFORM loadTransform = NULL;
static cmsHTRANSFORM displayTransform = NULL;
static cmsHTRANSFORM exportTransform = NULL;
@@ -76,8 +75,6 @@
static guchar *mycms_pack_rgb_b(void *info, register WORD wOut[], register LPBYTE output);
static guchar *mycms_unroll_rgb_w(void *info, register WORD wIn[], register LPBYTE accum);
static guchar *mycms_unroll_rgb_w_loadtable(void *info, register WORD wIn[], register LPBYTE accum);
-static guchar *mycms_unroll_rgb4_w(void *info, register WORD wIn[], register LPBYTE accum);
-static guchar *mycms_unroll_rgb4_w_loadtable(void *info, register WORD wIn[], register LPBYTE accum);
static guchar *mycms_pack_rgb4_w(void *info, register WORD wOut[], register LPBYTE output);
static gboolean dotdir_is_local = FALSE;
static gboolean load_gdk = FALSE;
@@ -749,7 +746,6 @@
guint x,y;
guint srcoffset, destoffset;
gint64 shift;
- gushort *buffer;
raw = (dcraw_data *) g_malloc(sizeof(dcraw_data));
if (!dcraw_open(raw, (char *) filename))
@@ -757,9 +753,8 @@
dcraw_load_raw(raw);
photo = rs_photo_new();
shift = (gint64) (16.0-log((gdouble) raw->rgbMax)/log(2.0)+0.5);
- photo->input = rs_image16_new(raw->raw.width, raw->raw.height, 3, 4);
+ photo->input = rs_image16_new(raw->raw.width, raw->raw.height, 4, 4);
src = (gushort *) raw->raw.image;
- buffer = g_malloc(raw->raw.width*4*sizeof(gushort));
#ifdef __i386__
if (cpuflags & _MMX)
{
@@ -771,7 +766,7 @@
sub[3] = raw->black;
for (y=0; y<raw->raw.height; y++)
{
- destoffset = (guint) buffer;//(photo->input->pixels + y*photo->input->rowstride);
+ destoffset = (guint) (photo->input->pixels + y*photo->input->rowstride);
srcoffset = (guint) (src + y * photo->input->w * photo->input->pixelsize);
x = raw->raw.width;
asm volatile (
@@ -818,9 +813,6 @@
: "r" (sub), "r" (x), "r" (&shift)
: "%eax"
);
- cmsDoTransform(loadTransform, buffer,
- (photo->input->pixels + y*photo->input->rowstride),
- raw->raw.width);
}
}
else
@@ -828,29 +820,27 @@
{
for (y=0; y<raw->raw.height; y++)
{
- destoffset = 0;
+ destoffset = y*photo->input->rowstride;
srcoffset = y * raw->raw.width * 4;
for (x=0; x<raw->raw.width; x++)
{
- register gint r,g,b;
+ register gint r,g,b,g2;
r = (src[srcoffset++] - raw->black)<<shift;
g = (src[srcoffset++] - raw->black)<<shift;
b = (src[srcoffset++] - raw->black)<<shift;
- srcoffset++;
+ g2 = (src[srcoffset++] - raw->black)<<shift;
_CLAMP65535_TRIPLET(r, g, b);
- buffer[destoffset++] = r;
- buffer[destoffset++] = g;
- buffer[destoffset++] = b;
+ _CLAMP65535(g2);
+ photo->input->pixels[destoffset++] = r;
+ photo->input->pixels[destoffset++] = g;
+ photo->input->pixels[destoffset++] = b;
+ photo->input->pixels[destoffset++] = g2;
}
- cmsDoTransform(loadTransform, buffer,
- photo->input->pixels+y*photo->input->rowstride,
- raw->raw.width);
}
}
photo->filename = g_strdup(filename);
dcraw_close(raw);
photo->active = TRUE;
- g_free(buffer);
}
g_free(raw);
return(photo);
@@ -1277,7 +1267,7 @@
39913, 39913, 39913,
51855, 51855, 51855
};
- cmsDoTransform(loadTransform, table_lin, buffer, 9);
+ cmsDoTransform(transform, table_lin, buffer, 9);
for (n=0;n<9;n++)
{
lin += abs(buffer[n*4]-table_lin[n*3]);
@@ -1296,81 +1286,49 @@
void
rs_cms_prepare_transforms(RS_BLOB *rs)
{
- gdouble gamma;
+ gfloat gamma;
+ cmsHPROFILE in, di, ex;
+ cmsHTRANSFORM testtransform;
+
if (rs->cms_enabled)
{
-
if (rs->loadProfile)
- {
- if (loadTransform)
- cmsDeleteTransform(loadTransform);
- loadTransform = cmsCreateTransform(rs->loadProfile, TYPE_RGB_16,
- workProfile, TYPE_RGB_16, rs->cms_intent, 0);
- }
+ in = rs->loadProfile;
else
- loadTransform = cmsCreateTransform(genericLoadProfile, TYPE_RGB_16,
- workProfile, TYPE_RGB_16, rs->cms_intent, 0);
- }
- else
- {
- if (loadTransform)
- cmsDeleteTransform(loadTransform);
- loadTransform = cmsCreateTransform(workProfile, TYPE_RGB_16,
- workProfile, TYPE_RGB_16, rs->cms_intent, 0);
- }
+ in = genericLoadProfile;
- cmsSetUserFormatters(loadTransform, TYPE_RGB_16, mycms_unroll_rgb_w, TYPE_RGB_16, mycms_pack_rgb4_w);
- gamma = rs_cms_guess_gamma(loadTransform);
- if (gamma != 1.0)
- {
- make_gammatable16(loadtable, gamma);
-#ifdef __i386__
- if (cpuflags & _MMX)
- cmsSetUserFormatters(loadTransform, TYPE_RGB_16, mycms_unroll_rgb4_w_loadtable, TYPE_RGB_16, mycms_pack_rgb4_w);
+ if (rs->displayProfile)
+ di = rs->displayProfile;
else
-#endif
- cmsSetUserFormatters(loadTransform, TYPE_RGB_16, mycms_unroll_rgb_w_loadtable, TYPE_RGB_16, mycms_pack_rgb4_w);
- }
- else
-#ifdef __i386__
- if (cpuflags & _MMX)
- cmsSetUserFormatters(loadTransform, TYPE_RGB_16, mycms_unroll_rgb4_w, TYPE_RGB_16, mycms_pack_rgb4_w);
+ di = genericRGBProfile;
+
+
+ if (rs->exportProfile)
+ ex = rs->exportProfile;
else
-#endif
- cmsSetUserFormatters(loadTransform, TYPE_RGB_16, mycms_unroll_rgb_w, TYPE_RGB_16, mycms_pack_rgb4_w);
+ ex = genericRGBProfile;
- if (rs->displayProfile)
- {
if (displayTransform)
cmsDeleteTransform(displayTransform);
- displayTransform = cmsCreateTransform(workProfile, TYPE_RGB_16,
- rs->displayProfile, TYPE_RGB_8, rs->cms_intent, 0);
- }
- else
- {
- if (displayTransform)
- cmsDeleteTransform(displayTransform);
- displayTransform = cmsCreateTransform(workProfile, TYPE_RGB_16,
- genericRGBProfile, TYPE_RGB_8, rs->cms_intent, 0);
- }
- cmsSetUserFormatters(displayTransform, TYPE_RGB_16, mycms_unroll_rgb_w, TYPE_RGB_8, mycms_pack_rgb_b);
+ displayTransform = cmsCreateTransform(in, TYPE_RGB_16,
+ di, TYPE_RGB_8, rs->cms_intent, 0);
- if (rs->exportProfile)
- {
if (exportTransform)
cmsDeleteTransform(exportTransform);
- exportTransform = cmsCreateTransform(workProfile, TYPE_RGB_16,
- rs->exportProfile, TYPE_RGB_8, rs->cms_intent, 0);
- }
- else
- {
- if (exportTransform)
- cmsDeleteTransform(exportTransform);
- exportTransform = cmsCreateTransform(workProfile, TYPE_RGB_16,
- genericRGBProfile, TYPE_RGB_8, rs->cms_intent, 0);
- }
- cmsSetUserFormatters(exportTransform, TYPE_RGB_16, mycms_unroll_rgb_w, TYPE_RGB_8, mycms_pack_rgb_b);
+ exportTransform = cmsCreateTransform(in, TYPE_RGB_16,
+ ex, TYPE_RGB_8, rs->cms_intent, 0);
+ testtransform = cmsCreateTransform(in, TYPE_RGB_16, genericLoadProfile, TYPE_RGB_16, rs->cms_intent, 0);
+ cmsSetUserFormatters(testtransform, TYPE_RGB_16, mycms_unroll_rgb_w, TYPE_RGB_16, mycms_pack_rgb4_w);
+ gamma = rs_cms_guess_gamma(testtransform);
+ if (gamma != 1.0)
+ {
+ make_gammatable16(loadtable, gamma);
+ cmsSetUserFormatters(displayTransform, TYPE_RGB_16, mycms_unroll_rgb_w_loadtable, TYPE_RGB_8, mycms_pack_rgb_b);
+ }
+ else
+ cmsSetUserFormatters(displayTransform, TYPE_RGB_16, mycms_unroll_rgb_w, TYPE_RGB_8, mycms_pack_rgb_b);
+ }
rs_render_select(rs->cms_enabled);
return;
}
@@ -1397,7 +1355,7 @@
gamma[0] = gamma[1] = gamma[2] = cmsBuildGamma(2,1.0);
/* set up builtin profiles */
- workProfile = cmsCreateRGBProfile(&D65, &AdobeRGBPrimaries, gamma);
+ testProfile = cmsCreateRGBProfile(&D65, &AdobeRGBPrimaries, gamma);
genericRGBProfile = cmsCreate_sRGBProfile();
genericLoadProfile = cmsCreateRGBProfile(&D65, &genericLoadPrimaries, gamma);
@@ -1462,24 +1420,6 @@
}
static guchar *
-mycms_unroll_rgb4_w(void *info, register WORD wIn[], register LPBYTE accum)
-{
- wIn[0] = *(LPWORD) accum; accum+= 2;
- wIn[1] = *(LPWORD) accum; accum+= 2;
- wIn[2] = *(LPWORD) accum; accum+= 4;
- return(accum);
-}
-
-static guchar *
-mycms_unroll_rgb4_w_loadtable(void *info, register WORD wIn[], register LPBYTE accum)
-{
- wIn[0] = loadtable[*(LPWORD) accum]; accum+= 2;
- wIn[1] = loadtable[*(LPWORD) accum]; accum+= 2;
- wIn[2] = loadtable[*(LPWORD) accum]; accum+= 4;
- return(accum);
-}
-
-static guchar *
mycms_pack_rgb4_w(void *info, register WORD wOut[], register LPBYTE output)
{
#if defined (__i386__) || defined (__x86_64__)
Modified: trunk/src/rs-render.c
===================================================================
--- trunk/src/rs-render.c 2006-09-29 00:07:41 UTC (rev 825)
+++ trunk/src/rs-render.c 2006-09-30 14:04:51 UTC (rev 826)
@@ -130,17 +130,17 @@
gfloat top[4] align(16) = {65535.0, 65535.0, 65535.0, 65535.0};
gfloat mat[12] align(16) = {
photo->mat.coeff[0][0],
- photo->mat.coeff[1][0],
+ photo->mat.coeff[1][0]*0.5,
photo->mat.coeff[2][0],
- 0.0,
+ photo->mat.coeff[1][0]*0.5,
photo->mat.coeff[0][1],
- photo->mat.coeff[1][1],
+ photo->mat.coeff[1][1]*0.5,
photo->mat.coeff[2][1],
- 0.0,
+ photo->mat.coeff[1][1]*0.5,
photo->mat.coeff[0][2],
- photo->mat.coeff[1][2],
+ photo->mat.coeff[1][2]*0.5,
photo->mat.coeff[2][2],
- 0.0 };
+ photo->mat.coeff[1][2]*0.5 };
asm volatile (
"movups (%2), %%xmm2\n\t" /* rs->pre_mul */
"movaps (%0), %%xmm3\n\t" /* matrix */
@@ -224,17 +224,17 @@
gfloat mat[12] align(8);
gfloat top[2] align(8);
mat[0] = photo->mat.coeff[0][0];
- mat[1] = photo->mat.coeff[0][1];
+ mat[1] = photo->mat.coeff[0][1]*0.5;
mat[2] = photo->mat.coeff[0][2];
- mat[3] = photo->mat.coeff[0][1]*0.0;
+ mat[3] = photo->mat.coeff[0][1]*0.5;
mat[4] = photo->mat.coeff[1][0];
- mat[5] = photo->mat.coeff[1][1];
+ mat[5] = photo->mat.coeff[1][1]*0.5;
mat[6] = photo->mat.coeff[1][2];
- mat[7] = photo->mat.coeff[1][1]*0.0;
+ mat[7] = photo->mat.coeff[1][1]*0.5;
mat[8] = photo->mat.coeff[2][0];
- mat[9] = photo->mat.coeff[2][1];
+ mat[9] = photo->mat.coeff[2][1]*0.5;
mat[10] = photo->mat.coeff[2][2];
- mat[11] = photo->mat.coeff[2][1]*0.0;
+ mat[11] = photo->mat.coeff[2][1]*0.5;
top[0] = 65535.0;
top[1] = 65535.0;
asm volatile (
@@ -375,18 +375,18 @@
gint col;
gfloat top[4] align(16) = {65535.0, 65535.0, 65535.0, 65535.0};
gfloat mat[12] align(16) = {
- photo->mat.coeff[0][0],
- photo->mat.coeff[1][0],
- photo->mat.coeff[2][0],
- 0.0,
- photo->mat.coeff[0][1],
- photo->mat.coeff[1][1],
- photo->mat.coeff[2][1],
- 0.0,
- photo->mat.coeff[0][2],
- photo->mat.coeff[1][2],
- photo->mat.coeff[2][2],
- 0.0 };
+ photo->mat.coeff[0][0],
+ photo->mat.coeff[1][0]*0.5,
+ photo->mat.coeff[2][0],
+ photo->mat.coeff[1][0]*0.5,
+ photo->mat.coeff[0][1],
+ photo->mat.coeff[1][1]*0.5,
+ photo->mat.coeff[2][1],
+ photo->mat.coeff[1][1]*0.5,
+ photo->mat.coeff[0][2],
+ photo->mat.coeff[1][2]*0.5,
+ photo->mat.coeff[2][2],
+ photo->mat.coeff[1][2]*0.5 };
asm volatile (
"movups (%2), %%xmm2\n\t" /* rs->pre_mul */
"movaps (%0), %%xmm3\n\t" /* matrix */
@@ -468,17 +468,17 @@
gfloat mat[12] align(8);
gfloat top[2] align(8);
mat[0] = photo->mat.coeff[0][0];
- mat[1] = photo->mat.coeff[0][1];
+ mat[1] = photo->mat.coeff[0][1]*0.5;
mat[2] = photo->mat.coeff[0][2];
- mat[3] = photo->mat.coeff[0][1]*0.0;
+ mat[3] = photo->mat.coeff[0][1]*0.5;
mat[4] = photo->mat.coeff[1][0];
- mat[5] = photo->mat.coeff[1][1];
+ mat[5] = photo->mat.coeff[1][1]*0.5;
mat[6] = photo->mat.coeff[1][2];
- mat[7] = photo->mat.coeff[1][1]*0.0;
+ mat[7] = photo->mat.coeff[1][1]*0.5;
mat[8] = photo->mat.coeff[2][0];
- mat[9] = photo->mat.coeff[2][1];
+ mat[9] = photo->mat.coeff[2][1]*0.5;
mat[10] = photo->mat.coeff[2][2];
- mat[11] = photo->mat.coeff[2][1]*0.0;
+ mat[11] = photo->mat.coeff[2][1]*0.5;
top[0] = 65535.0;
top[1] = 65535.0;
asm volatile (
More information about the Rawstudio-commit
mailing list