Update of /cvsroot/ufraw/ufraw In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv5651
Modified Files: dcraw.cc dcraw.h dcraw_api.cc dcraw_api.h dcraw_indi.c ufraw-batch.c ufraw.h ufraw_preview.c ufraw_ufraw.c ufraw_writer.c Added Files: uf_progress.h Log Message: Replace the old progress bar. Patch by Frank van Maarseveen. Index: ufraw_writer.c =================================================================== RCS file: /cvsroot/ufraw/ufraw/ufraw_writer.c,v retrieving revision 1.67 retrieving revision 1.68 diff -u -d -r1.67 -r1.68 --- ufraw_writer.c 21 Nov 2009 05:51:59 -0000 1.67 +++ ufraw_writer.c 25 Nov 2009 16:15:45 -0000 1.68 @@ -215,9 +215,9 @@ int byteDepth = (bitDepth+7)/8; guint8 pixbuf8[width * 3 * byteDepth * DEVELOP_BATCH]; + progress(PROGRESS_SAVE, -height); for (row0 = 0; row0 < height; row0 += DEVELOP_BATCH) { - preview_progress(uf->widget, _("Saving image"), - 0.5 + 0.5*row0/height); + progress(PROGRESS_SAVE, DEVELOP_BATCH); #ifdef _OPENMP #pragma omp parallel for default(shared) private(row) #endif @@ -616,10 +616,9 @@ // Avoid FITS images being saved upside down ufraw_flip_image(uf, 2); + progress(PROGRESS_SAVE, -height); for (row=0; row<height; row++) { - if (row%100==99) - preview_progress(uf->widget, _("Saving image"), - 0.5 + 0.5*row/height); + progress(PROGRESS_SAVE, 1); for (i=0; i < width; i++) { offset = row*width + i; Index: dcraw_indi.c =================================================================== RCS file: /cvsroot/ufraw/ufraw/dcraw_indi.c,v retrieving revision 1.78 retrieving revision 1.79 diff -u -d -r1.78 -r1.79 --- dcraw_indi.c 18 Oct 2009 16:00:18 -0000 1.78 +++ dcraw_indi.c 25 Nov 2009 16:15:45 -0000 1.79 @@ -25,6 +25,7 @@ #include <glib.h> #include <glib/gi18n.h> /*For _(String) definition - NKBJ*/ #include "dcraw_api.h" +#include "uf_progress.h" #ifdef _OPENMP #include <omp.h> @@ -139,6 +140,7 @@ float temp[iheight + iwidth]; #endif if ((nc = colors) == 3 && filters) nc++; + progress(PROGRESS_WAVELET_DENOISE, -nc*5); #ifdef _OPENMP #pragma omp parallel for \ default(none) \ @@ -150,6 +152,7 @@ for (i=0; i < size; i++) fimg[i] = 256 * sqrt(image[i][c] /*<< scale*/); for (hpass=lev=0; lev < 5; lev++) { + progress(PROGRESS_WAVELET_DENOISE, 1); lpass = size*((lev & 1)+1); for (row=0; row < iheight; row++) { hat_transform (temp, fimg+hpass+row*iwidth, 1, iwidth, 1 << lev); @@ -481,6 +484,7 @@ *ip++ = 0; } } + progress(PROGRESS_INTERPOLATE, -height); #ifdef _OPENMP #pragma omp parallel \ default(none) \ @@ -492,6 +496,7 @@ int start_row = 2 + slice * uf_omp_get_thread_num(); int end_row = MIN(start_row + slice, height - 2); for (row=start_row; row < end_row; row++) { /* Do VNG interpolation */ + progress(PROGRESS_INTERPOLATE, 1); for (g = 0; g < 4; g++) brow[g] = &rowtmp[(row + g - 2) % 4]; for (col=2; col < width-2; col++) { @@ -669,10 +674,12 @@ lab = (short (*)[TS][TS][3])(buffer + 12*TS*TS); homo = (char (*)[TS][TS]) (buffer + 24*TS*TS); + progress(PROGRESS_INTERPOLATE, -height); #ifdef _OPENMP #pragma omp for #endif - for (top=2; top < height-5; top += TS-6) + for (top=2; top < height-5; top += TS-6) { + progress(PROGRESS_INTERPOLATE, TS-6); for (left=2; left < width-5; left += TS-6) { /* Interpolate green horizontally and vertically: */ @@ -764,8 +771,9 @@ } } } - free (buffer); } + free (buffer); + } /* _OPENMP */ } #undef TS Index: dcraw.cc =================================================================== RCS file: /cvsroot/ufraw/ufraw/dcraw.cc,v retrieving revision 1.203 retrieving revision 1.204 diff -u -d -r1.203 -r1.204 --- dcraw.cc 30 Oct 2009 06:30:25 -0000 1.203 +++ dcraw.cc 25 Nov 2009 16:15:44 -0000 1.204 @@ -18,6 +18,9 @@ #ifdef HAVE_CONFIG_H /*For UFRaw config system - NKBJ*/ #include "config.h" #endif +extern "C" { +#include "uf_progress.h" +} #define DCRAW_VERSION "8.98" @@ -139,7 +142,6 @@ ifpReadCount = 0; ifpSize = 0; ifpStepProgress = 0; -progressHandle = NULL; } CLASS ~DCRaw() @@ -152,8 +154,14 @@ ifpReadCount += readCount; if (ifpSize==0) return; unsigned newStepProgress = STEPS * ifpReadCount / ifpSize; - if (newStepProgress!=ifpStepProgress && progressHandle!=NULL ) - (*progressHandle)(progressUserData, (double)ifpReadCount/ifpSize); + if (newStepProgress > ifpStepProgress) { +#ifdef DCRAW_NOMAIN + if (ifpStepProgress) + progress(PROGRESS_LOAD, newStepProgress - ifpStepProgress); + else + progress(PROGRESS_LOAD, -STEPS); +#endif + } ifpStepProgress = newStepProgress; } Index: ufraw-batch.c =================================================================== RCS file: /cvsroot/ufraw/ufraw/ufraw-batch.c,v retrieving revision 1.29 retrieving revision 1.30 diff -u -d -r1.29 -r1.30 --- ufraw-batch.c 3 Nov 2009 06:41:31 -0000 1.29 +++ ufraw-batch.c 25 Nov 2009 16:15:45 -0000 1.30 @@ -173,10 +173,3 @@ parentWindow = parentWindow; if (!silentMessenger) ufraw_batch_messenger(message); } - -void preview_progress(void *widget, char *text, double progress) -{ - widget = widget; - text = text; - progress = progress; -} Index: ufraw.h =================================================================== RCS file: /cvsroot/ufraw/ufraw/ufraw.h,v retrieving revision 1.137 retrieving revision 1.138 diff -u -d -r1.137 -r1.138 --- ufraw.h 21 Nov 2009 05:51:59 -0000 1.137 +++ ufraw.h 25 Nov 2009 16:15:45 -0000 1.138 @@ -18,6 +18,7 @@ #endif /* HAVE_LENSFUN */ #include "nikon_curve.h" +#include "uf_progress.h" /* macro to clamp a number between two values */ #ifndef LIM @@ -368,7 +369,6 @@ long (*save_func)()); void ufraw_focus(void *window, gboolean focus); void ufraw_messenger(char *message, void *parentWindow); -void preview_progress(void *widget, char *text, double progress); /* prototypes for functions in ufraw_routines.c */ const char *uf_get_home_dir(); Index: ufraw_ufraw.c =================================================================== RCS file: /cvsroot/ufraw/ufraw/ufraw_ufraw.c,v retrieving revision 1.219 retrieving revision 1.220 diff -u -d -r1.219 -r1.220 --- ufraw_ufraw.c 21 Nov 2009 06:17:05 -0000 1.219 +++ ufraw_ufraw.c 25 Nov 2009 16:15:45 -0000 1.220 @@ -33,6 +33,8 @@ #include "nikon_curve.h" #include "ufraw.h" +void (*ufraw_progress)(int what, int ticks); + #ifdef HAVE_LENSFUN /* What about LF_MODIFY_ALL? */ #define UF_LF_ALL (LF_MODIFY_TCA | LF_MODIFY_VIGNETTING | \ @@ -560,11 +562,6 @@ return UFRAW_SUCCESS; } -static void ufraw_load_raw_progress(void *user_data, double progress) -{ - preview_progress(user_data, _("Loading preview"), progress); -} - /* Scale pixel values: occupy 16 bits to get more precision. In addition * this normalizes the pixel values which is good for non-linear algorithms * which forget to check rgbMax or assume a particular value. */ @@ -606,7 +603,6 @@ uf->thumb.width = thumb.width; return ufraw_read_embedded(uf); } - dcraw_set_progress_handle(raw, ufraw_load_raw_progress, uf->widget); if ( (status=dcraw_load_raw(raw))!=DCRAW_SUCCESS ) { ufraw_message(UFRAW_SET_LOG, raw->message); ufraw_message(status, raw->message); @@ -1075,8 +1071,10 @@ if (passes[c] > maxpass) maxpass = passes[c]; } + progress(PROGRESS_DESPECKLE, -maxpass * colors); for (pass = maxpass - 1; pass >= 0; --pass) { for (c = 0; c < colors; ++c) { + progress(PROGRESS_DESPECKLE, 1); if (pass >= passes[c]) continue; #ifdef _OPENMP Index: ufraw_preview.c =================================================================== RCS file: /cvsroot/ufraw/ufraw/ufraw_preview.c,v retrieving revision 1.310 retrieving revision 1.311 diff -u -d -r1.310 -r1.311 --- ufraw_preview.c 23 Nov 2009 16:30:12 -0000 1.310 +++ ufraw_preview.c 25 Nov 2009 16:15:45 -0000 1.311 @@ -683,13 +683,18 @@ return FALSE; } +static gboolean is_rendering(preview_data *data) +{ + return data->RenderSubArea >= 0; +} + static gboolean switch_highlights(gpointer ptr) { preview_data *data = ptr; /* Only redraw the highlights in the default rendering mode. */ if (data->RenderMode!=render_default || data->FreezeDialog) return TRUE; - if (data->RenderSubArea == -1) { + if (!is_rendering(data)) { /* Set the area to redraw based on the crop rectangle and view port. */ int x1, x2, y1, y2; scale_crop_to_final_image(data->UF, &x1, &x2, &y1, &y2); @@ -766,7 +771,6 @@ gtk_progress_bar_set_fraction(data->ProgressBar, 0); } -static gboolean render_prepare(preview_data *data); static gboolean render_raw_histogram(preview_data *data); static gboolean render_preview_image(preview_data *data); static gboolean render_live_histogram(preview_data *data); @@ -807,23 +811,118 @@ xc - vp.width / 2, yc - vp.height / 2, FALSE); } - render_status_text(data); } -void render_preview(preview_data *data) +static GtkProgressBar *ProgressBar; +static GTimer *ProgressTimer; +static void preview_progress(int what, int ticks) { - if (data->FreezeDialog) return; + static int last_what, todo, done; + char *text; + double start, stop, fraction; + gboolean update = FALSE; + gboolean events = TRUE; - data->RenderSubArea = 0; - while (g_idle_remove_by_data(data)) - ; - g_idle_add_full(G_PRIORITY_DEFAULT_IDLE-10, - (GSourceFunc)(render_prepare), data, NULL); +#ifdef _OPENMP +#pragma omp master +#endif + update = TRUE; +#ifdef _OPENMP +#pragma omp critical(preview_progress) + { +#endif + if (ticks < 0) { + todo = -ticks; + done = 0; + last_what = what; + } else { + if (last_what == what) + done += ticks; + else + update = FALSE; + } +#ifdef _OPENMP + } +#endif + if (!update) + return; // wrong thread for GTK or "what" mismatch + if (g_timer_elapsed(ProgressTimer, NULL) < 0.07 && ticks >= 0) + return; // avoid progress bar rendering hog + g_timer_start(ProgressTimer); + switch (what) { + case PROGRESS_WAVELET_DENOISE: + text = _("Wavelet denoising"); + start = 0.0; + stop = 0.33; + break; + case PROGRESS_DESPECKLE: + text = _("Despeckling"); + start = 0.0; + stop = 0.33; + break; + case PROGRESS_INTERPOLATE: + text = _("Interpolating"); + start = 0.33; + stop = 0.66; + break; + case PROGRESS_RENDER: + text = _("Rendering"); + start = 0.67; + stop = 1.0; + events = FALSE; + break; + case PROGRESS_LOAD: + text = _("Loading preview"); + start = 0.0; + stop = 1.0; + break; + case PROGRESS_SAVE: + text = _("Saving image"); + start = 0.0; + stop = 1.0; + break; + case PROGRESS_RESET: + default: + text = NULL; + start = stop = 0.0; + todo = done = 0; + events = FALSE; + } + if (ticks < 0 && text) + gtk_progress_bar_set_text(ProgressBar, text); + fraction = todo ? start + (stop - start) * done / todo : 0; + if (fraction > stop) + fraction = stop; + gtk_progress_bar_set_fraction(ProgressBar, fraction); + if (events) + while (gtk_events_pending()) + gtk_main_iteration(); } -static gboolean render_prepare(preview_data *data) +static void preview_progress_enable(preview_data *data) { - if (data->FreezeDialog) return FALSE; + ProgressBar = data->ProgressBar; + ProgressTimer = g_timer_new(); + preview_progress(PROGRESS_RESET, 0); + ufraw_progress = preview_progress; +} + +static void preview_progress_disable(preview_data *data) +{ + preview_progress(PROGRESS_RESET, 0); + ufraw_progress = NULL; + g_timer_destroy(ProgressTimer); + render_status_text(data); +} + +static gboolean render_preview_now(preview_data *data) +{ + if (data->FreezeDialog) + return FALSE; + + while (g_idle_remove_by_data(data)) + ; + data->RenderSubArea = 0; if (CFG->autoExposure == apply_state) { ufraw_auto_expose(data->UF); @@ -850,6 +949,7 @@ CFG->curve[CFG->curveIndex].m_anchors[0].x); gtk_label_set_text(GTK_LABEL(data->BlackLabel), text); + ufraw_developer_prepare(data->UF, display_developer); if ( CFG->profileIndex[display_profile]==0 ) { guint8 *displayProfile; gint profileSize; @@ -863,23 +963,34 @@ CFG->profile[display_profile] [CFG->profileIndex[display_profile]].productName); } - ufraw_developer_prepare(data->UF, display_developer); ufraw_convert_prepare_buffers(data->UF); - /* The reset of the rendering can be triggered only after the call to - * ufraw_developer_preare(). Otherwise error messages in this function - * would cause timing problems. */ - g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, - (GSourceFunc)(render_raw_histogram), data, NULL); - g_idle_add_full(G_PRIORITY_DEFAULT_IDLE+10, - (GSourceFunc)(render_preview_image), data, NULL); - g_idle_add_full(G_PRIORITY_DEFAULT_IDLE+20, - (GSourceFunc)(render_live_histogram), data, NULL); - g_idle_add_full(G_PRIORITY_DEFAULT_IDLE+20, - (GSourceFunc)(render_spot), data, NULL); + /* This will trigger the untiled phases if necessary. The progress bar + * updates require gtk_main_iteration() calls which can only be + * done when there are no pending idle tasks which could recurse + * into ufraw_convert_image_area(). */ + preview_progress_enable(data); + gboolean again = render_preview_image(data); + + if (again) { + preview_progress(PROGRESS_RENDER, -32); + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, + (GSourceFunc)(render_preview_image), data, NULL); + } return FALSE; } +void render_preview(preview_data *data) +{ + if (is_rendering(data)) + return; + + while (g_idle_remove_by_data(data)) + ; + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, + (GSourceFunc)(render_preview_now), data, NULL); +} + static gboolean render_raw_histogram(preview_data *data) { if (data->FreezeDialog) return FALSE; @@ -1077,6 +1188,7 @@ 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); again = TRUE; } @@ -1084,6 +1196,15 @@ } #endif + if (!again) { + preview_progress_disable(data); + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, + (GSourceFunc)(render_raw_histogram), data, NULL); + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, + (GSourceFunc)(render_live_histogram), data, NULL); + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, + (GSourceFunc)(render_spot), data, NULL); + } return again; } @@ -1493,7 +1614,7 @@ data->FreezeDialog = FALSE; update_shrink_ranges(data); - render_preview(data); + render_preview_now(data); } static void curve_update(GtkWidget *widget, long curveType) @@ -1698,8 +1819,9 @@ draw_spot(data, FALSE); data->SpotX1 = data->SpotX2 = event->x; data->SpotY1 = data->SpotY2 = event->y; - g_idle_add_full(G_PRIORITY_DEFAULT_IDLE+20, - (GSourceFunc)(render_spot), data, NULL); + if (!is_rendering(data)) + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, + (GSourceFunc)(render_spot), data, NULL); return TRUE; } if ( data->PageNum==data->PageNumCrop ) { @@ -1830,8 +1952,9 @@ event_coordinate_rescale(&event->x, &event->y, data); data->SpotX2 = event->x; data->SpotY2 = event->y; - g_idle_add_full(G_PRIORITY_DEFAULT_IDLE+20, - (GSourceFunc)(render_spot), data, NULL); + if (!is_rendering(data)) + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, + (GSourceFunc)(render_spot), data, NULL); return TRUE; } @@ -1961,8 +2084,9 @@ data->DrawCropID = g_idle_add_full(G_PRIORITY_DEFAULT_IDLE+30, (GSourceFunc)(preview_draw_crop), data, NULL); } - g_idle_add_full(G_PRIORITY_DEFAULT_IDLE+20, - (GSourceFunc)(render_live_histogram), data, NULL); + if (!is_rendering(data)) + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, + (GSourceFunc)(render_live_histogram), data, NULL); } static void crop_reset(GtkWidget *widget, gpointer user_data) @@ -2138,10 +2262,9 @@ --data->FreezeDialog; render_init(data); - if ( data->RenderSubArea >= 0 ) { - /* We are in the middle or a rendering scan, - * so just start from the beginning. */ - data->RenderSubArea = 0; /* TODO: feature does not exist */ + if (is_rendering(data)) { + /* TODO: We are in the middle or a rendering scan, + * so we should restart from the beginning. */ } else { /* Full image was already rendered. * We only need to draw the flipped image. */ @@ -3776,18 +3899,21 @@ "expander-maximized", (gpointer)FALSE); } } - // Redraw histograms if size allocation has changed - GdkPixbuf *pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(data->RawHisto)); - rawHisHeight = data->RawHisto->allocation.height; - if ( pixbuf==NULL || gdk_pixbuf_get_height(pixbuf)!=rawHisHeight ) - g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, - (GSourceFunc)(render_raw_histogram), data, NULL); - pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(data->LiveHisto)); - liveHisHeight = data->LiveHisto->allocation.height; - if ( pixbuf==NULL || gdk_pixbuf_get_height(pixbuf)!=liveHisHeight ) - g_idle_add_full(G_PRIORITY_DEFAULT_IDLE+20, - (GSourceFunc)(render_live_histogram), data, NULL); + if (!is_rendering(data)) { + // Redraw histograms if size allocation has changed + GdkPixbuf *pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(data->RawHisto)); + rawHisHeight = data->RawHisto->allocation.height; + if ( pixbuf==NULL || gdk_pixbuf_get_height(pixbuf)!=rawHisHeight ) + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, + (GSourceFunc)(render_raw_histogram), data, NULL); + + pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(data->LiveHisto)); + liveHisHeight = data->LiveHisto->allocation.height; + if ( pixbuf==NULL || gdk_pixbuf_get_height(pixbuf)!=liveHisHeight ) + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, + (GSourceFunc)(render_live_histogram), data, NULL); + } } static gboolean histogram_menu(GtkMenu *menu, GdkEventButton *event) @@ -3799,16 +3925,6 @@ return TRUE; } -void preview_progress(void *widget, char *text, double progress) -{ - if (widget==NULL) return; - preview_data *data = get_preview_data(widget); - if (data->ProgressBar==NULL) return; - gtk_progress_bar_set_text(data->ProgressBar, text); - gtk_progress_bar_set_fraction(data->ProgressBar, progress); - while (gtk_events_pending()) gtk_main_iteration(); -} - static void control_button_event(GtkWidget *widget, long type) { preview_data *data = get_preview_data(widget); @@ -3842,7 +3958,9 @@ response = UFRAW_RESPONSE_DELETE; break; case save_button: + preview_progress_enable(data); status = ufraw_save_now(data->UF, widget); + preview_progress_disable(data); if (status == UFRAW_SUCCESS) response = GTK_RESPONSE_OK; break; @@ -5697,9 +5815,6 @@ gtk_widget_hide(GTK_WIDGET(data->LightnessAdjustmentTable[i])); gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), data->PageNumSpot); - // preview_progress() changes the size of the progress bar - // and processes the event queue. - preview_progress(previewWindow, _("Loading preview"), 0.2); #if !GTK_CHECK_VERSION(2,8,0) /* There is a bug that causes the mouse location to be misplaced * in the event-box. The following voodoo seems to fix the mapping. */ @@ -5733,7 +5848,9 @@ data->Cursor[i] = gdk_cursor_new(Cursors[i]); gdk_window_set_cursor(PreviewEventBox->window, data->Cursor[spot_cursor]); gtk_widget_set_sensitive(data->Controls, FALSE); + preview_progress_enable(data); ufraw_load_raw(uf); + preview_progress_disable(data); gtk_widget_set_sensitive(data->Controls, TRUE); // Set shrink/size values for preview rendering @@ -5747,18 +5864,6 @@ CFG->size = 0; } - /* Collect raw histogram data */ - memset(data->raw_his, 0, sizeof(data->raw_his)); - /* minor issue: this triggers the first phase conversion too soon */ - ufraw_developer_prepare(uf, display_developer); - ufraw_image_data *image = ufraw_rgb_image(data->UF, TRUE, NULL); - for (i=0; i<image->height*image->width; i++) { - guint16 *buf = (guint16*)(image->buffer+i*image->depth); - for (c=0; c<data->UF->colors; c++) - data->raw_his[MIN( buf[c] * - (raw_his_size-1) / data->UF->rgbMax, - raw_his_size-1) ][c]++; - } /* Save initial WB data for the sake of "Reset WB" */ g_strlcpy(data->initialWB, CFG->wb, max_name); data->initialTemperature = CFG->temperature; @@ -5769,10 +5874,24 @@ curveeditor_widget_set_curve(data->CurveWidget, &CFG->curve[CFG->curveIndex]); + memset(data->raw_his, 0, sizeof(data->raw_his)); + data->RenderSubArea = -1; data->FreezeDialog = FALSE; data->RenderMode = render_default; - update_crop_ranges(data, FALSE); + + /* This will start the conversion and enqueue rendering functions */ update_scales(data); + update_crop_ranges(data, FALSE); // calls ufraw_final_image(uf, FALSE) + + /* Collect raw histogram data */ + ufraw_image_data *image = ufraw_rgb_image(data->UF, TRUE, G_STRFUNC); + for (i=0; i<image->height*image->width; i++) { + guint16 *buf = (guint16*)(image->buffer+i*image->depth); + for (c=0; c<data->UF->colors; c++) + data->raw_his[MIN( buf[c] * + (raw_his_size-1) / data->UF->rgbMax, + raw_his_size-1) ][c]++; + } data->OverUnderTicker = 0; Index: dcraw.h =================================================================== RCS file: /cvsroot/ufraw/ufraw/dcraw.h,v retrieving revision 1.55 retrieving revision 1.56 diff -u -d -r1.55 -r1.56 --- dcraw.h 30 Aug 2009 15:55:45 -0000 1.55 +++ dcraw.h 25 Nov 2009 16:15:45 -0000 1.56 @@ -94,8 +94,6 @@ unsigned ifpSize; unsigned ifpStepProgress; #define STEPS 50 -void (*progressHandle)(void *user_data, double progress); -void *progressUserData; void ifpProgress(unsigned readCount); // Override standard io function for integrity checks and progress report size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); Index: dcraw_api.h =================================================================== RCS file: /cvsroot/ufraw/ufraw/dcraw_api.h,v retrieving revision 1.36 retrieving revision 1.37 diff -u -d -r1.36 -r1.37 --- dcraw_api.h 28 Oct 2009 04:44:05 -0000 1.36 +++ dcraw_api.h 25 Nov 2009 16:15:45 -0000 1.37 @@ -59,9 +59,6 @@ dcraw_none_interpolation }; enum { unknown_thumb_type, jpeg_thumb_type, ppm_thumb_type }; int dcraw_open(dcraw_data *h, char *filename); -void dcraw_set_progress_handle(dcraw_data *h, - void (*progressHandle)(void *user_data, double progress), - void *progressUserData); int dcraw_load_raw(dcraw_data *h); int dcraw_load_thumb(dcraw_data *h, dcraw_image_data *thumb); int dcraw_finalize_shrink(dcraw_image_data *f, dcraw_data *h, Index: dcraw_api.cc =================================================================== RCS file: /cvsroot/ufraw/ufraw/dcraw_api.cc,v retrieving revision 1.60 retrieving revision 1.61 diff -u -d -r1.60 -r1.61 --- dcraw_api.cc 29 Oct 2009 05:14:59 -0000 1.60 +++ dcraw_api.cc 25 Nov 2009 16:15:45 -0000 1.61 @@ -153,15 +153,6 @@ return d->lastStatus; } -void dcraw_set_progress_handle(dcraw_data *h, - void (*progressHandle)(void *user_data, double progress), - void *progressUserData) -{ - DCRaw *d = (DCRaw *)h->dcraw; - d->progressHandle = progressHandle; - d->progressUserData = progressUserData; -} - int dcraw_image_dimensions(dcraw_data *raw, int flip, int *height, int *width) { if (raw->fuji_width) { --- NEW FILE: uf_progress.h --- /* * UFRaw - Unidentified Flying Raw converter for digital camera images * * uf_progress.h - progress bar header * Copyright 2009 by Frank van Maarseveen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #ifndef _UF_PROGRESS_H #define _UF_PROGRESS_H #define PROGRESS_RESET 0 /* special */ #define PROGRESS_WAVELET_DENOISE 1 #define PROGRESS_DESPECKLE 2 #define PROGRESS_INTERPOLATE 3 #define PROGRESS_RENDER 4 /* tiled work */ #define PROGRESS_LOAD 5 #define PROGRESS_SAVE 6 extern void (*ufraw_progress)(int what, int ticks); /* * The first call for a PROGRESS_* activity should specify a negative number * of ticks. This call will prepare the corresponding progress bar segment. * Subsequent calls for the same activity should specify a non-negative number * of ticks corresponding to the amount of work just done. The total number * of ticks including the initialization call should be approximately zero. * * This function is thread safe. See also preview_progress(). */ static inline void progress(int what, int ticks) { if (ufraw_progress) ufraw_progress(what, ticks); } #endif /* _UF_PROGRESS_H */ ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ ufraw-cvs mailing list ufraw-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ufraw-cvs