gtk-doc for interpolate

Add gtk-doc comments for VipsInterpolate.
This commit is contained in:
John Cupitt 2011-02-02 14:24:58 +00:00
parent 444887e57f
commit afef89369b
5 changed files with 148 additions and 17 deletions

View File

@ -24,6 +24,7 @@
- move im_spatres() to almostdeprecated
- done gtk-doc for other
- --vips-progress tells you about nthreads, tile size, nlines
- gtk-doc for interpolate
30/11/10 started 7.24.0
- bump for new stable

View File

@ -42,6 +42,7 @@
<xi:include href="xml/freq_filt.xml"/>
<xi:include href="xml/histograms_lut.xml"/>
<xi:include href="xml/inplace.xml"/>
<xi:include href="xml/interpolate.xml"/>
<xi:include href="xml/mask.xml"/>
<xi:include href="xml/morphology.xml"/>
<xi:include href="xml/mosaicing.xml"/>
@ -53,7 +54,6 @@
<xi:include href="xml/resample.xml"/>
<xi:include href="xml/video.xml"/>
<xi:include href="xml/cimg_funcs.xml"/>
<xi:include href="xml/interpolate.xml"/>
</chapter>
<chapter>

View File

@ -284,6 +284,10 @@ PEL *im__vector_to_ink( const char *domain, IMAGE *im, int n, double *vec );
IMAGE *im__inplace_base( const char *domain,
IMAGE *main, IMAGE *sub, IMAGE *out );
/* Register base vips interpolators, called during startup.
*/
void vips__interpolate_init( void );
#ifdef __cplusplus
}
#endif /*__cplusplus*/

View File

@ -60,7 +60,7 @@ typedef struct _VipsInterpolate {
* function for it to speed up dispatch. Write to the memory at "out",
* interpolate the value at position (x, y) in "in".
*/
typedef void (*VipsInterpolateMethod)( VipsInterpolate *,
typedef void (*VipsInterpolateMethod)( VipsInterpolate *interpolate,
PEL *out, REGION *in, double x, double y );
typedef struct _VipsInterpolateClass {
@ -89,7 +89,7 @@ typedef struct _VipsInterpolateClass {
GType vips_interpolate_get_type( void );
void vips_interpolate( VipsInterpolate *interpolate,
PEL *out, REGION *in, double x, double y );
VipsInterpolateMethod vips_interpolate_get_method( VipsInterpolate * );
VipsInterpolateMethod vips_interpolate_get_method( VipsInterpolate *interpolate );
int vips_interpolate_get_window_size( VipsInterpolate *interpolate );
int vips_interpolate_get_window_offset( VipsInterpolate *interpolate );
@ -111,17 +111,12 @@ int vips_interpolate_get_window_offset( VipsInterpolate *interpolate );
*/
VipsInterpolate *vips_interpolate_nearest_static( void );
VipsInterpolate *vips_interpolate_bilinear_static( void );
VipsInterpolate *vips_interpolate_bicubic_static( void );
/* Convenience: make an interpolator from a nickname. g_object_unref() when
* you're done with it.
*/
VipsInterpolate *vips_interpolate_new( const char *nickname );
/* Register base vips types, called during startup.
*/
void vips__interpolate_init( void );
#ifdef __cplusplus
}
#endif /*__cplusplus*/

View File

@ -12,6 +12,8 @@
* (thanks Nicolas Robidoux)
* 12/1/11
* - faster, more accuarate uchar bilinear (thanks Nicolas)
* 2/2/11
* - gtk-doc
*/
/*
@ -71,6 +73,59 @@
G_DEFINE_ABSTRACT_TYPE( VipsInterpolate, vips_interpolate, VIPS_TYPE_OBJECT );
/**
* VipsInterpolateMethod:
* @interpolate: the interpolator
* @out: write the interpolated pixel here
* @in: read source pixels from here
* @x: interpolate value at this position
* @y: interpolate value at this position
*
* An interpolation function. It should read source pixels from @in with
* IM_REGION_ADDR(), it can look left and up from (x, y) by @window_offset
* pixels and it can access pixels in a window of size @window_size.
*
* The interpolated value should be written to the pixel pointed to by @out.
*
* See also: #VipsInterpolateClass.
*/
/**
* VipsInterpolateClass:
* @interpolate: the interpolation method
* @get_window_size: return the size of the window needed by this method
* @window_size: or just set this for a constant window size
* @get_window_offset: return the window offset for this method
* @window_offset: or just set this for a constant window offset
*
* The abstract base class for the various VIPS interpolation functions.
* Use "vips --list classes" to see all the interpolators available.
*
* An interpolator consists of a function to perform the interpolation, plus
* some extra data fields which tell vips how to call the function and what
* data it needs.
*
* @window_size is the size of the window that the interpolator needs. For
* example, a bicubic interpolator needs to see a window of 4x4 pixels to be
* able to interpolate a value.
*
* You can either have a function in @get_window_size which returns the window
* that a specific interpolator needs, or you can leave @get_window_size %NULL
* and set a constant value in @window_size.
*
* @window_offset is how much to offset the window up and left of (x, y). For
* example, a bicubic interpolator will want a @window_offset of 1.
*
* You can either have a function in @get_window_offset which returns the
* offset that a specific interpolator needs, or you can leave
* @get_window_offset %NULL and set a constant value in @window_offset.
*
* You also need to set @nickname and @description in #VipsObject.
*
* See also: #VipsInterpolateMethod, #VipsObject,
* vips_interpolate_bilinear_static().
*/
#ifdef DEBUG
static void
vips_interpolate_finalize( GObject *gobject )
@ -138,8 +193,19 @@ vips_interpolate_init( VipsInterpolate *interpolate )
#endif /*DEBUG*/
}
/* Set the point out_x, out_y in REGION out to be the point interpolated at
* in_x, in_y in REGION in. Don't do this as a signal for speed.
/**
* vips_interpolate:
* @interpolate: interpolator to use
* @out: write result here
* @in: read source data from here
* @x: interpolate value at this position
* @y: interpolate value at this position
*
* Look up the @interpolate method in the class and call it. Use
* vips_interpolate_get_method() to get a direct pointer to the function and
* avoid the lookup overhead.
*
* You need to set @in and @out up correctly.
*/
void
vips_interpolate( VipsInterpolate *interpolate,
@ -152,8 +218,14 @@ vips_interpolate( VipsInterpolate *interpolate,
class->interpolate( interpolate, out, in, x, y );
}
/* As above, but return the function pointer. Use this to cache method
* dispatch.
/**
* vips_interpolate_get_method:
* @interpolate: interpolator to use
*
* Look up the @interpolate method in the class and return it. Use this
* instead of vips_interpolate() to cache method dispatch.
*
* Returns: a pointer to the interpolation function
*/
VipsInterpolateMethod
vips_interpolate_get_method( VipsInterpolate *interpolate )
@ -165,7 +237,13 @@ vips_interpolate_get_method( VipsInterpolate *interpolate )
return( class->interpolate );
}
/* Get this interpolator's required window size.
/**
* vips_interpolate_get_window_size:
* @interpolate: interpolator to use
*
* Look up an interpolators desired window size.
*
* Returns: the interpolators required window size
*/
int
vips_interpolate_get_window_size( VipsInterpolate *interpolate )
@ -177,7 +255,13 @@ vips_interpolate_get_window_size( VipsInterpolate *interpolate )
return( class->get_window_size( interpolate ) );
}
/* Get this interpolator's required window offset.
/**
* vips_interpolate_get_window_offset:
* @interpolate: interpolator to use
*
* Look up an interpolators desired window offset.
*
* Returns: the interpolators required window offset
*/
int
vips_interpolate_get_window_offset( VipsInterpolate *interpolate )
@ -189,6 +273,32 @@ vips_interpolate_get_window_offset( VipsInterpolate *interpolate )
return( class->get_window_offset( interpolate ) );
}
/**
* VIPS_TRANSFORM_SHIFT:
*
* Many of the vips interpolators use fixed-point arithmetic for coordinate
* calculation. This is how many bits of precision they use.
*/
/**
* VIPS_TRANSFORM_SCALE:
*
* #VIPS_TRANSFORM_SHIFT as a multiplicative constant.
*/
/**
* VIPS_INTERPOLATE_SHIFT:
*
* Many of the vips interpolators use fixed-point arithmetic for value
* calcualtion. This is how many bits of precision they use.
*/
/**
* VIPS_INTERPOLATE_SCALE:
*
* #VIPS_INTERPOLATE_SHIFT as a multiplicative constant.
*/
/* VipsInterpolateNearest class
*/
@ -268,7 +378,13 @@ vips_interpolate_nearest_new( void )
VIPS_TYPE_INTERPOLATE_NEAREST, NULL, NULL, NULL ) ) );
}
/* Convenience: return a static nearest you don't need to free.
/**
* vips_interpolate_nearest_static:
*
* A convenience function that returns a nearest-neighbour interpolator you
* don't need to free.
*
* Returns: a nearest-neighbour interpolator
*/
VipsInterpolate *
vips_interpolate_nearest_static( void )
@ -432,7 +548,13 @@ vips_interpolate_bilinear_new( void )
VIPS_TYPE_INTERPOLATE_BILINEAR, NULL, NULL, NULL ) ) );
}
/* Convenience: return a static bilinear you don't need to free.
/**
* vips_interpolate_bilinear_static:
*
* A convenience function that returns a bilinear interpolator you
* don't need to free.
*
* Returns: a bilinear interpolator
*/
VipsInterpolate *
vips_interpolate_bilinear_static( void )
@ -466,7 +588,16 @@ vips__interpolate_init( void )
#endif /*ENABLE_CXX*/
}
/* Make an interpolator from a nickname.
/**
* vips_interpolate_new:
* @nickname: nickname for interpolator
*
* Look up an interpolator from a nickname and make one. You need to free the
* result with g_object_unref() when you're done with it.
*
* See also: vips_type_find().
*
* Returns: an interpolator, or %NULL on error.
*/
VipsInterpolate *
vips_interpolate_new( const char *nickname )