Update of /cvsroot/ufraw/ufraw
In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv18489

Modified Files:
        ufraw_preview.c 
Log Message:
Move the preview rendering out of the openmp loop.


Index: ufraw_preview.c
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw_preview.c,v
retrieving revision 1.347
retrieving revision 1.348
diff -u -d -r1.347 -r1.348
--- ufraw_preview.c     4 Mar 2010 05:08:21 -0000       1.347
+++ ufraw_preview.c     16 Mar 2010 21:36:50 -0000      1.348
@@ -27,6 +27,16 @@
 #include <string.h>
 #include <math.h>
 #include <errno.h>
+
+#ifdef _OPENMP
+#include <omp.h>
+#define uf_omp_get_thread_num() omp_get_thread_num() 
+#define uf_omp_get_max_threads() omp_get_max_threads()
+#else
+#define uf_omp_get_thread_num() 0
+#define uf_omp_get_max_threads() 1
+#endif
+
 #if GTK_CHECK_VERSION(2,6,0)
 void ufraw_chooser_toggle(GtkToggleButton *button, GtkFileChooser 
*filechooser);
 #endif
@@ -1134,30 +1144,37 @@
     int chosen = 0;
 
     if (data->FreezeDialog) return FALSE;
+    int subarea[uf_omp_get_max_threads()];
+    int i;
+    for (i = 0; i < uf_omp_get_max_threads(); i++)
+       subarea[i] = -1;
 #ifdef _OPENMP
 #pragma omp parallel shared(chosen,data) reduction(||:again)
     {
-#endif
-    int subarea;
-#ifdef _OPENMP
 #pragma omp critical
 #endif
-    subarea = choose_subarea(data, &chosen);
-    if (subarea < 0) {
+    subarea[uf_omp_get_thread_num()] = choose_subarea(data, &chosen);
+    if (subarea[uf_omp_get_thread_num()] < 0) {
         data->RenderSubArea = -1;
     } else {
-       ufraw_image_data *img1 = ufraw_convert_image_area(data->UF,
-               subarea, ufraw_phases_num - 1);
-       UFRectangle area = ufraw_image_get_subarea_rectangle(img1, subarea);
-       preview_draw_area(data, area.x, area.y, area.width, area.height);
-       progress(PROGRESS_RENDER, 1);
+       ufraw_convert_image_area(data->UF,
+               subarea[uf_omp_get_thread_num()], ufraw_phases_num - 1);
        again = TRUE;
     }
 
 #ifdef _OPENMP
     }
 #endif
-
+    ufraw_image_data *img = ufraw_get_image(data->UF,
+           ufraw_display_phase, FALSE);
+    for (i = 0; i < uf_omp_get_max_threads(); i++) {
+       if (subarea[i] >= 0) {
+           UFRectangle area = ufraw_image_get_subarea_rectangle(img,
+                   subarea[i]);
+           preview_draw_area(data, area.x, area.y, area.width, area.height);
+           progress(PROGRESS_RENDER, 1);
+       }
+    }
     if (!again) {
        preview_progress_disable(data);
        gdk_threads_add_idle_full(G_PRIORITY_DEFAULT_IDLE,


------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
ufraw-cvs mailing list
ufraw-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ufraw-cvs

Reply via email to