Wait for postprocess process to complete before updating preview
Fixes #27 Fixes #28
This commit is contained in:
parent
52e2fdcbd0
commit
153d8c93e2
4
main.c
4
main.c
|
@ -169,7 +169,7 @@ draw_surface_scaled_centered(cairo_t *cr, uint32_t dst_width, uint32_t dst_heigh
|
||||||
static bool
|
static bool
|
||||||
capture_completed(const char *fname)
|
capture_completed(const char *fname)
|
||||||
{
|
{
|
||||||
strncpy(last_path, fname, 260);
|
strncpy(last_path, fname, 259);
|
||||||
|
|
||||||
// Create a thumbnail from the current surface
|
// Create a thumbnail from the current surface
|
||||||
cairo_surface_t *thumb =
|
cairo_surface_t *thumb =
|
||||||
|
@ -330,7 +330,7 @@ on_open_last_clicked(GtkWidget *widget, gpointer user_data)
|
||||||
if (strlen(last_path) == 0) {
|
if (strlen(last_path) == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sprintf(uri, "file://%s.tiff", last_path);
|
sprintf(uri, "file://%s", last_path);
|
||||||
if (!g_app_info_launch_default_for_uri(uri, NULL, &error)) {
|
if (!g_app_info_launch_default_for_uri(uri, NULL, &error)) {
|
||||||
g_printerr("Could not launch image viewer: %s\n", error->message);
|
g_printerr("Could not launch image viewer: %s\n", error->message);
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,8 +65,11 @@ if [ -n "$DCRAW" ]; then
|
||||||
-overwrite_original "$TARGET_NAME.jpg"
|
-overwrite_original "$TARGET_NAME.jpg"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "$TARGET_NAME.jpg"
|
||||||
else
|
else
|
||||||
cp "$MAIN_PICTURE.$TIFF_EXT" "$TARGET_NAME.tiff"
|
cp "$MAIN_PICTURE.$TIFF_EXT" "$TARGET_NAME.tiff"
|
||||||
|
|
||||||
|
echo "$TARGET_NAME.tiff"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -301,6 +301,28 @@ process_image_for_capture(const MPImage *image, int count)
|
||||||
TIFFClose(tif);
|
TIFFClose(tif);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
post_process_finished(GSubprocess *proc, GAsyncResult *res, gpointer user_data)
|
||||||
|
{
|
||||||
|
char *stdout;
|
||||||
|
g_subprocess_communicate_utf8_finish(proc, res, &stdout, NULL, NULL);
|
||||||
|
|
||||||
|
// The last line contains the file name
|
||||||
|
int end = strlen(stdout);
|
||||||
|
// Skip the newline at the end
|
||||||
|
stdout[--end] = '\0';
|
||||||
|
|
||||||
|
char *path = path = stdout + end - 1;
|
||||||
|
do {
|
||||||
|
if (*path == '\n') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
--path;
|
||||||
|
} while (path > stdout);
|
||||||
|
|
||||||
|
mp_main_capture_completed(path);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
process_capture_burst()
|
process_capture_burst()
|
||||||
{
|
{
|
||||||
|
@ -315,9 +337,27 @@ process_capture_burst()
|
||||||
|
|
||||||
// Start post-processing the captured burst
|
// Start post-processing the captured burst
|
||||||
g_print("Post process %s to %s.ext\n", burst_dir, capture_fname);
|
g_print("Post process %s to %s.ext\n", burst_dir, capture_fname);
|
||||||
char command[1024];
|
GError *error = NULL;
|
||||||
sprintf(command, "%s %s %s &", processing_script, burst_dir, capture_fname);
|
GSubprocess *proc = g_subprocess_new(
|
||||||
system(command);
|
G_SUBPROCESS_FLAGS_STDOUT_PIPE,
|
||||||
|
&error,
|
||||||
|
processing_script,
|
||||||
|
burst_dir,
|
||||||
|
capture_fname,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
if (!proc) {
|
||||||
|
g_printerr("Failed to spawn postprocess process: %s\n",
|
||||||
|
error->message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_subprocess_communicate_utf8_async(
|
||||||
|
proc,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
(GAsyncReadyCallback)post_process_finished,
|
||||||
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -335,8 +375,6 @@ process_image(MPPipeline *pipeline, const MPImage *image)
|
||||||
|
|
||||||
if (captures_remaining == 0) {
|
if (captures_remaining == 0) {
|
||||||
process_capture_burst();
|
process_capture_burst();
|
||||||
|
|
||||||
mp_main_capture_completed(capture_fname);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue