Update of /cvsroot/ufraw/ufraw
In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv24955
Modified Files:
dcraw_api.cc
Log Message:
Simplify and optimise dcraw_finalize_raw().
Index: dcraw_api.cc
===================================================================
RCS file: /cvsroot/ufraw/ufraw/dcraw_api.cc,v
retrieving revision 1.63
retrieving revision 1.64
diff -u -d -r1.63 -r1.64
--- dcraw_api.cc 4 Dec 2009 06:46:01 -0000 1.63
+++ dcraw_api.cc 5 Dec 2009 02:40:02 -0000 1.64
@@ -304,9 +304,8 @@
}
static int get_pixel(const dcraw_data *h, const dcraw_data *dark,
- int r, int c, int cl, int pixels)
+ int i, int cl, int pixels)
{
- int i = r * h->raw.width + c;
int pixel = h->raw.image[i][cl];
if (dark != 0) {
int w = h->raw.width;
@@ -610,50 +609,34 @@
*/
void dcraw_finalize_raw(dcraw_data *h, dcraw_data *dark, int rgbWB[4])
{
- int r, c, cc, pixels;
- unsigned f4, px, fseq, black;
- dcraw_image_type *base;
-
- pixels = h->raw.width * h->raw.height;
- black = dark ? MAX(h->black - dark->black, 0) : h->black;
- f4 = h->fourColorFilters;
+ const int pixels = h->raw.width * h->raw.height;
+ const unsigned black = dark ? MAX(h->black - dark->black, 0) : h->black;
if (h->colors == 3)
rgbWB[3] = rgbWB[1];
- if (f4 == 0) {
- for(r=0; r<h->height; r++)
- for(c=0; c<h->width; c++)
- for (cc=0; cc<4; cc++)
- h->raw.image[r * h->raw.width + c][cc] = MIN( MAX( (gint64)
- (get_pixel(h, dark, r, c, cc, pixels) - black) *
- rgbWB[cc]/0x10000, 0), 0xFFFF);
- } else if (dark) {
- for(r=0; r<h->height; r++)
- for(c=0; c<h->width; c++) {
- int cc = fc_INDI(f4,r,c);
- h->raw.image[r/2 * h->raw.width + c/2][cc] = MIN( MAX( (gint64)
- (get_pixel(h, dark, r/2, c/2, cc, pixels) - black) *
- rgbWB[cc]/0x10000, 0), 0xFFFF);
+ if (dark) {
+#ifdef _OPENMP
+#pragma omp parallel for schedule(static) default(none) \
+ shared(h,dark,rgbWB)
+#endif
+ for(int i=0; i<pixels; i++) {
+ int cc;
+ for (cc=0; cc<4; cc++) {
+ gint32 p = (gint64)(get_pixel(h, dark, i, cc, pixels) - black) *
+ rgbWB[cc] / 0x10000;
+ h->raw.image[i][cc] = MIN(MAX(p, 0), 0xFFFF);
}
+ }
} else {
#ifdef _OPENMP
#pragma omp parallel for schedule(static) default(none) \
- shared(h,dark,rgbWB,pixels,f4,black) \
- private(r,base,fseq,c,cc,px)
+ shared(h,dark,rgbWB)
#endif
- for (r = 0; r < h->height; r++) {
- base = h->raw.image + (r/2) * h->raw.width;
- fseq = fc_sequence(f4, r);
- for (c = 0; c < h->width; c++) {
- cc = fc_color(fseq, c);
- if (base[c/2][cc] < black) {
- base[c/2][cc] = 0;
- continue;
- }
- px = (base[c/2][cc] - black) * (guint64)(unsigned)(rgbWB[cc]) /
0x10000;
- if (px > 0xffff)
- px = 0xffff;
- base[c/2][cc] = px;
- }
+ for(int i=0; i<pixels; i++) {
+ int cc;
+ for (cc=0; cc<4; cc++)
+ h->raw.image[i][cc] = MIN(MAX(
+ (gint64)(h->raw.image[i][cc] - black) *
+ rgbWB[cc] / 0x10000, 0), 0xFFFF);
}
}
}
------------------------------------------------------------------------------
Join us December 9, 2009 for the Red Hat Virtual Experience,
a free event focused on virtualization and cloud computing.
Attend in-depth sessions from your desk. Your couch. Anywhere.
http://p.sf.net/sfu/redhat-sfdev2dev
_______________________________________________
ufraw-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ufraw-cvs