Author: post
Date: 2010-01-28 18:16:13 +0100 (Thu, 28 Jan 2010)
New Revision: 3106

Modified:
   branches/rawstudio-ng-color/src/rs-batch.c
Log:
Batch output: Fix preview crash by temporarily setting sRGB as display profile 
and disable ICC code. Also preload next file while processing. 

Modified: branches/rawstudio-ng-color/src/rs-batch.c
===================================================================
--- branches/rawstudio-ng-color/src/rs-batch.c  2010-01-28 17:10:00 UTC (rev 
3105)
+++ branches/rawstudio-ng-color/src/rs-batch.c  2010-01-28 17:16:13 UTC (rev 
3106)
@@ -396,17 +396,19 @@
        RSFilter *finput = rs_filter_new("RSInputImage16", NULL);
        RSFilter *fdemosaic = rs_filter_new("RSDemosaic", finput);
        RSFilter *flensfun = rs_filter_new("RSLensfun", fdemosaic);
-       RSFilter *ftransform_input = rs_filter_new("RSColorspaceTransform", 
flensfun);
-       RSFilter *frotate = rs_filter_new("RSRotate", ftransform_input);
+       RSFilter *frotate = rs_filter_new("RSRotate", flensfun);
        RSFilter *fcrop = rs_filter_new("RSCrop", frotate);
        RSFilter *fcache = rs_filter_new("RSCache", fcrop);
        RSFilter *fresample= rs_filter_new("RSResample", fcache);
-       RSFilter *fdenoise= rs_filter_new("RSDenoise", fresample);
+       RSFilter *ftransform_input = rs_filter_new("RSColorspaceTransform", 
fresample);
+       RSFilter *fdcp= rs_filter_new("RSDcp", ftransform_input);
+       RSFilter *fdenoise= rs_filter_new("RSDenoise", fdcp);
        RSFilter *ftransform_display = rs_filter_new("RSColorspaceTransform", 
fdenoise);
        RSFilter *fend = ftransform_display;
        RSFilterResponse *filter_response;
 
        /* FIXME: This is just a temporary hack to make batch work */
+#if 0
        {
                RSIccProfile *profile;
 
@@ -434,6 +436,7 @@
                g_object_set(fend, "icc-profile", profile, NULL);
            g_object_unref(profile);
        }
+#endif
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_transient_for(GTK_WINDOW(window), rawstudio_window);
        gtk_window_set_title(GTK_WINDOW(window), _("Processing photos"));
@@ -513,6 +516,13 @@
                        g_string_append(filename, 
rs_output_get_extension(queue->output));
                        parsed_filename = filename_parse(filename->str, 
filename_in, setting_id);
 
+                       /* Set DCP profile */
+                       RSDcpFile *dcp_profile  = 
rs_photo_get_dcp_profile(photo);
+                       if (dcp_profile != NULL)
+                       {
+                               g_object_set(fdcp, "profile", dcp_profile, 
NULL);
+                       }
+
                        rs_filter_set_recursive(fend,
                                "image", photo->input,
                                "filename", photo->filename,
@@ -548,15 +558,28 @@
                        }
 
                        /* Render preview image */
-                       filter_response = rs_filter_get_image8(fend, NULL);
+                       RSFilterRequest *request = rs_filter_request_new();
+                       rs_filter_request_set_quick(RS_FILTER_REQUEST(request), 
FALSE);
+                       rs_filter_param_set_object(RS_FILTER_PARAM(request), 
"colorspace", rs_color_space_new_singleton("RSSrgb"));     
+                       filter_response = rs_filter_get_image8(fend, request);
                        pixbuf = rs_filter_response_get_image8(filter_response);
                        if (pixbuf)
                        {
                                gtk_image_set_from_pixbuf(GTK_IMAGE(preview), 
pixbuf);
                                g_object_unref(pixbuf);
                        }
+                       g_object_unref(request);
                        g_object_unref(filter_response);
 
+                       if (left > 0)
+                       {
+                               GtkTreeIter iter2 = iter;
+                               if (gtk_tree_model_iter_next (queue->list, 
&iter2))
+                               {
+                                       gtk_tree_model_get(queue->list, &iter2, 
RS_QUEUE_ELEMENT_FILENAME, &filename_in, -1);
+                                       rs_io_idle_prefetch_file(filename_in, 
0xC01A);
+                               }
+                       }
                        /* Build text for small preview-window */
                        basename = g_path_get_basename(parsed_filename);
                        g_string_printf(status, _("Saving %s ..."), basename);
@@ -623,6 +646,7 @@
        g_object_unref(fcrop);
        g_object_unref(fcache);
        g_object_unref(fresample);
+       g_object_unref(fdcp);
        g_object_unref(fdenoise);
        g_object_unref(ftransform_input);
        g_object_unref(ftransform_display);


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to