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 ufraw-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ufraw-cvs