manpagez: man pages & more
man im_add_eval_callback(3)
Home | html | info | man
IM_AND(3)                                                            IM_AND(3)




NAME

       im_add_close_callback,    im_add_eval_callback,   im_malloc,   im_free,
       im_add_evalend_callback,     im_add_evalstart_callback,     im_add_pre-
       close_callback, im_add_invalidate_callback - add image callbacks


SYNOPSIS

       #include <vips/vips.h>

       typedef int (*im_callback_fn)( void *, void * );

       int im_add_close_callback( IMAGE *, im_callback_fn, void *, void * );

       int  im_add_preclose_callback(  IMAGE *, im_callback_fn, void *, void *
       );

       int im_add_evalstart_callback( IMAGE *, im_callback_fn, void *, void  *
       );

       int im_add_eval_callback( IMAGE *, im_callback_fn, void *, void * );

       int im_add_evalend_callback( IMAGE *, im_callback_fn, void *, void * );

       int im_add_invalidate_callback( IMAGE *, im_callback_fn, void *, void *
       );

       void *im_malloc( IMAGE *, size_t );

       int im_free( void * );



DESCRIPTION

       These  functions  attach  callbacks to images. Callbacks are functions,
       with optional extra arguments a and b,  which  are  remembered  by  the
       IMAGE they are attached to. These functions are triggered at some later
       stage in reponse to some event. You can attach as many callbacks as you
       like; all will be remembered, and will be called when the event occurs.
       The most recently added callback is called first --- this can be impor-
       tant for close callbacks.

       im_add_close_callback(3)  adds  a callback which will be triggered when
       the image is closed by im_close(3).  The callback is expected to return
       0 for success and non-zero for failure. If the function fails, then the
       whole im_close(3) fails. Close callbacks are guaranteed  to  be  called
       exactly once, so they are a good place to release resources.

       This  function  is  used by VIPS to implement im_malloc(3)  This allo-
       cates memory exactly as the standard  malloc(3)  function,  but  memory
       allocated  is local to a descriptor. When the descriptor is closed, the
       memory allocated is automatically freed for you. If you pass  NULL  for
       the descriptor, then im_malloc(3) acts as malloc(3).  On error, im_mal-
       loc(3) returns NULL, setting an error message. See the  man  pages  for
       IM_NEW(3) and im_open_local(3) for further examples.

       Free memory with im_free(3).

       You  may  use  close callbacks to trigger other im_close(3) operations,
       and there may even be circularity in your im_close(3) lists.

       im_add_preclose_callback(3) adds a callback  which  will  be  triggered
       when  the  image  is closed, but before any closing has started. Every-
       thing is still alive and you can do anything with the  image.  Preclose
       callbacks are guaranteed to be called exactly once.

       im_add_evalstart_callback(3)  adds  a  callback which will be triggered
       just before image evaluation starts.  It can be called many times. It's
       a  good  place to initialize data structures.  Don't allocate resources
       here.

       Eval callbacks are inherited. That is, any images which use your  image
       as  input  will inherit your eval callbacks. As a result, if you add an
       eval callback to an image, you will be notified if any later image uses
       your image for computation.

       If  a  later image adds eval callbacks, then the inheritance is broken,
       and that image will receive notification instead.

       im_add_eval_callback(3) adds a callback which will be triggered repeat-
       edly as the image is evaluated.

       When  the  callback is triggered, the time field of the descriptor will
       point to a im_time_t structure, see vips.h

         typedef struct {
           IMAGE *im;     /* Image we are part of */
           time_t unused; /* For compatibility */
           int run;       /* Time we have been running (secs) */
           int eta;       /* Estimated seconds of computation left */
           gint64 tpels;  /* Number of pels we expect to calculate */
           gint64 npels;  /* Number of pels calculated so far */
           int percent;   /* Percent complete */
           GTimer *start; /* Start time */
         } im_time_t;

       These fields are not exact! They should only be used to  give  approxi-
       mate feedback to the user. It is possible to have

         percent > 100
         ntiles > ttiles
         eta == 0

       so be careful. Again, the eval callback should return 0 for success and
       non-zero for failure. If the callback fails, evaluation  is  abandoned.
       This  may be used to provide a `cancel' feature in your user-interface.

         int
         eval_cb( IMAGE *im )
         {
           printf( "%d%% complete ...\n", im->time->percent );
           return( 0 );
         }

         if( im_add_eval_callback( out, eval_cb, out, NULL ) )
           return( -1 );

         ... now as out is evaluated, we will get %complete
         ... messages on stdout.

       im_add_evalend_callback(3) adds a callback which will be triggered when
       VIPS  has  finished  evaluating  the  image. If you want to output some
       diagnostics from your function (an overflow count, for  example),  this
       is the callback to use. Again, this can be called many times.

       im_add_invalidate_callback(3)  adds  a callback which will be triggered
       when VIPS invalidates the cache on an image. This is useful for  remov-
       ing images from other, higher-level caches.



RETURN VALUE

       All functions return 0 on success and non-zero on error.


SEE ALSO

       IM_NEW(3), im_open_local(3).


COPYRIGHT

       National Gallery, 1993


AUTHOR

       J. Cupitt - 23/7/93



                                30 October 1992                      IM_AND(3)

vips 7.22.0 - Generated Fri May 14 06:19:24 CDT 2010
© manpagez.com 2000-2024
Individual documents may contain additional copyright information.