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® 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