another try at improving progress feedback

This commit is contained in:
John Cupitt 2015-06-21 19:28:10 +01:00
parent 12764053db
commit 7077356496
2 changed files with 3 additions and 41 deletions

8
TODO
View File

@ -1,11 +1,3 @@
- try:
$ python test_colour.py TestColour.test_icc
Segmentation fault (core dumped)
C stack overflow, related to the progress changes?
- vips_sink_screen() should create its output images
- how about something like vips_grid() which turns a tall thin one-band
image into a much smaller many-band image?

View File

@ -760,31 +760,6 @@ vips_foreign_load_iscompat( VipsImage *a, VipsImage *b )
return( TRUE );
}
/* Forward pre-eval-post signals to our output image so our caller can see
* progress for load via disc or memory.
*/
static void
vips_foreign_load_preeval( VipsImage *image,
VipsProgress *progress, VipsForeignLoad *load )
{
vips_image_preeval( load->out );
}
static void
vips_foreign_load_eval( VipsImage *image,
VipsProgress *progress, VipsForeignLoad *load )
{
vips_image_eval( load->out, progress->npels );
}
static void
vips_foreign_load_posteval( VipsImage *image,
VipsProgress *progress, VipsForeignLoad *load )
{
vips_image_posteval( load->out );
}
/* Our start function ... do the lazy open, if necessary, and return a region
* on the new image.
*/
@ -806,15 +781,9 @@ vips_foreign_load_start( VipsImage *out, void *a, void *b )
* will finish with load->real holding the decompressed image.
*
* We want our caller to be able to see this computation on
* @out, so we need to forward the signals.
* @out, so eval signals on ->real need to appear on ->out.
*/
g_signal_connect( load->real, "preeval",
G_CALLBACK( vips_foreign_load_preeval ), load );
g_signal_connect( load->real, "eval",
G_CALLBACK( vips_foreign_load_eval ), load );
g_signal_connect( load->real, "posteval",
G_CALLBACK( vips_foreign_load_posteval ), load );
vips_image_set_progress( load->real, TRUE );
load->real->progress_signal = load->out;
if( class->load( load ) ||
vips_image_pio_input( load->real ) )
@ -835,6 +804,7 @@ vips_foreign_load_start( VipsImage *out, void *a, void *b )
*/
vips_image_pipelinev( load->out, load->out->dhint,
load->real, NULL );
}
return( vips_region_new( load->real ) );