added im_INTERPOLATE
This commit is contained in:
parent
66c81c36bf
commit
f476da4e38
@ -28,6 +28,8 @@
|
|||||||
- added string->double transform for cmdline args
|
- added string->double transform for cmdline args
|
||||||
- merged class-params branch back into trunk
|
- merged class-params branch back into trunk
|
||||||
- IM_FREE() can do "const char*" variables
|
- IM_FREE() can do "const char*" variables
|
||||||
|
- im_buf_t renamed as VipsBuf
|
||||||
|
- added vips_object_to_string()
|
||||||
|
|
||||||
11/9/08 started 7.16.3
|
11/9/08 started 7.16.3
|
||||||
- oop typo in manpage for im_project()
|
- oop typo in manpage for im_project()
|
||||||
|
21
TODO
21
TODO
@ -1,3 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
- try making vips_add(), an operator as a class
|
- try making vips_add(), an operator as a class
|
||||||
|
|
||||||
- nickname, description etc need to be properties so nip2 can read them
|
- nickname, description etc need to be properties so nip2 can read them
|
||||||
@ -13,7 +16,7 @@
|
|||||||
- update format docs
|
- update format docs
|
||||||
|
|
||||||
- how to expose things like yafrsmooth's "sharpening" parameter to
|
- how to expose things like yafrsmooth's "sharpening" parameter to
|
||||||
nip2/C++/Python?
|
C++/Python?
|
||||||
|
|
||||||
can we write a find-by-nickname function? eg.
|
can we write a find-by-nickname function? eg.
|
||||||
|
|
||||||
@ -25,24 +28,8 @@
|
|||||||
|
|
||||||
would get us the GType for VipsInterpolatorBicubic
|
would get us the GType for VipsInterpolatorBicubic
|
||||||
|
|
||||||
add a g_get_children( "classname" ) -> ["child1-name", ..] to nip2, see old
|
|
||||||
vips8.c code?
|
|
||||||
|
|
||||||
in nip2,
|
|
||||||
|
|
||||||
inter = g_object_new "yafrsmooth" [$sharpness => 2.4];
|
|
||||||
|
|
||||||
also need something to return a list of GTypes below a name etc., find class
|
|
||||||
description:w
|
|
||||||
|
|
||||||
need k
|
|
||||||
|
|
||||||
- vips_object_print, set_name etc. need writing
|
- vips_object_print, set_name etc. need writing
|
||||||
|
|
||||||
- im_buf_t -> VipsBuf
|
|
||||||
|
|
||||||
now always included in vips.h
|
|
||||||
|
|
||||||
- check mosaic1, global_balance, similarity etc. use of im__affine
|
- check mosaic1, global_balance, similarity etc. use of im__affine
|
||||||
|
|
||||||
how can we move them to im_affinei ?
|
how can we move them to im_affinei ?
|
||||||
|
@ -27,58 +27,59 @@
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IM_BUF_H
|
#ifndef VIPS_BUF_H
|
||||||
#define IM_BUF_H
|
#define VIPS_BUF_H
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif /*__cplusplus*/
|
#endif /*__cplusplus*/
|
||||||
|
|
||||||
/* A string in the process of being written to ... multiple calls to
|
/* A string in the process of being written to ... multiple calls to
|
||||||
* buf_append add to it, on overflow append "..." and block further writes.
|
* vips_buf_append add to it, on overflow append "..." and block further writes.
|
||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char *base; /* String base */
|
char *base; /* String base */
|
||||||
int mx; /* Maximum length */
|
int mx; /* Maximum length */
|
||||||
int i; /* Current write point */
|
int i; /* Current write point */
|
||||||
gboolean full; /* String has filled, block writes */
|
gboolean full; /* String has filled, block writes */
|
||||||
int lasti; /* For read-recent */
|
int lasti; /* For read-recent */
|
||||||
gboolean dynamic; /* We own the string with malloc() */
|
gboolean dynamic; /* We own the string with malloc() */
|
||||||
} im_buf_t;
|
} VipsBuf;
|
||||||
|
|
||||||
/* Static init of one of these.
|
/* Static init of one of these.
|
||||||
*/
|
*/
|
||||||
#define IM_BUF_STATIC( TEXT, MAX ) \
|
#define VIPS_BUF_STATIC( TEXT, MAX ) \
|
||||||
{ &TEXT[0], MAX, 0, FALSE, 0, FALSE }
|
{ &TEXT[0], MAX, 0, FALSE, 0, FALSE }
|
||||||
|
|
||||||
void im_buf_rewind( im_buf_t *buf );
|
/* Init and append to one of the above.
|
||||||
void im_buf_destroy( im_buf_t *buf );
|
*/
|
||||||
void im_buf_init( im_buf_t *buf );
|
void vips_buf_rewind( VipsBuf *buf );
|
||||||
void im_buf_set_static( im_buf_t *buf, char *base, int mx );
|
void vips_buf_destroy( VipsBuf *buf );
|
||||||
void im_buf_set_dynamic( im_buf_t *buf, int mx );
|
void vips_buf_init( VipsBuf *buf );
|
||||||
void im_buf_init_static( im_buf_t *buf, char *base, int mx );
|
void vips_buf_set_static( VipsBuf *buf, char *base, int mx );
|
||||||
void im_buf_init_dynamic( im_buf_t *buf, int mx );
|
void vips_buf_set_dynamic( VipsBuf *buf, int mx );
|
||||||
gboolean im_buf_appendns( im_buf_t *buf, const char *str, int sz );
|
void vips_buf_init_static( VipsBuf *buf, char *base, int mx );
|
||||||
gboolean im_buf_appends( im_buf_t *buf, const char *str );
|
void vips_buf_init_dynamic( VipsBuf *buf, int mx );
|
||||||
gboolean im_buf_appendline( im_buf_t *buf, const char *str );
|
gboolean vips_buf_appendns( VipsBuf *buf, const char *str, int sz );
|
||||||
gboolean im_buf_appendf( im_buf_t *buf, const char *fmt, ... )
|
gboolean vips_buf_appends( VipsBuf *buf, const char *str );
|
||||||
|
gboolean vips_buf_appendf( VipsBuf *buf, const char *fmt, ... )
|
||||||
__attribute__((format(printf, 2, 3)));
|
__attribute__((format(printf, 2, 3)));
|
||||||
gboolean im_buf_vappendf( im_buf_t *buf, const char *fmt, va_list ap );
|
gboolean vips_buf_vappendf( VipsBuf *buf, const char *fmt, va_list ap );
|
||||||
gboolean im_buf_appendc( im_buf_t *buf, char ch );
|
gboolean vips_buf_appendc( VipsBuf *buf, char ch );
|
||||||
gboolean im_buf_appendg( im_buf_t *buf, double g );
|
gboolean vips_buf_appendsc( VipsBuf *buf, gboolean quote, const char *str );
|
||||||
gboolean im_buf_appendsc( im_buf_t *buf, const char *str );
|
void vips_buf_appendgv( VipsBuf *buf, GValue *value );
|
||||||
gboolean im_buf_removec( im_buf_t *buf, char ch );
|
gboolean vips_buf_removec( VipsBuf *buf, char ch );
|
||||||
gboolean im_buf_change( im_buf_t *buf, const char *old, const char * );
|
gboolean vips_buf_change( VipsBuf *buf, const char *old, const char * );
|
||||||
gboolean im_buf_isempty( im_buf_t *buf );
|
gboolean vips_buf_is_empty( VipsBuf *buf );
|
||||||
gboolean im_buf_isfull( im_buf_t *buf );
|
gboolean vips_buf_is_full( VipsBuf *buf );
|
||||||
const char *im_buf_all( im_buf_t *buf );
|
const char *vips_buf_all( VipsBuf *buf );
|
||||||
gboolean im_buf_appendd( im_buf_t *buf, int d );
|
const char *vips_buf_firstline( VipsBuf *buf );
|
||||||
int im_buf_len( im_buf_t *buf );
|
gboolean vips_buf_appendg( VipsBuf *buf, double g );
|
||||||
|
gboolean vips_buf_appendd( VipsBuf *buf, int d );
|
||||||
|
int vips_buf_len( VipsBuf *buf );
|
||||||
|
|
||||||
|
#endif /*VIPS_BUF_H*/
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif /*__cplusplus*/
|
#endif /*__cplusplus*/
|
||||||
|
|
||||||
#endif /*IM_BUF_H*/
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -196,11 +196,11 @@ struct _VipsObjectClass {
|
|||||||
|
|
||||||
/* Try to print something about the class, handy for help displays.
|
/* Try to print something about the class, handy for help displays.
|
||||||
*/
|
*/
|
||||||
void (*print_class)( struct _VipsObjectClass *, im_buf_t * );
|
void (*print_class)( struct _VipsObjectClass *, VipsBuf * );
|
||||||
|
|
||||||
/* Try to print something about the object, handy for debugging.
|
/* Try to print something about the object, handy for debugging.
|
||||||
*/
|
*/
|
||||||
void (*print)( VipsObject *, im_buf_t * );
|
void (*print)( VipsObject *, VipsBuf * );
|
||||||
|
|
||||||
/* Class nickname, eg. "VipsInterpolateBicubic" has "bicubic" as a
|
/* Class nickname, eg. "VipsInterpolateBicubic" has "bicubic" as a
|
||||||
* nickname. Not internationalised.
|
* nickname. Not internationalised.
|
||||||
@ -236,6 +236,7 @@ void vips_object_class_install_argument( VipsObjectClass *,
|
|||||||
GParamSpec *pspec, VipsArgumentFlags flags, guint offset );
|
GParamSpec *pspec, VipsArgumentFlags flags, guint offset );
|
||||||
|
|
||||||
VipsObject *vips_object_new_from_string( const char *base, const char *str );
|
VipsObject *vips_object_new_from_string( const char *base, const char *str );
|
||||||
|
void vips_object_to_string( VipsObject *object, VipsBuf *buf );
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -84,7 +84,7 @@ vips_format_map( VSListMap2Fn fn, void *a, void *b )
|
|||||||
G_DEFINE_ABSTRACT_TYPE( VipsFormat, vips_format, VIPS_TYPE_OBJECT );
|
G_DEFINE_ABSTRACT_TYPE( VipsFormat, vips_format, VIPS_TYPE_OBJECT );
|
||||||
|
|
||||||
static void
|
static void
|
||||||
vips_format_print_class( VipsObjectClass *object_class, im_buf_t *buf )
|
vips_format_print_class( VipsObjectClass *object_class, VipsBuf *buf )
|
||||||
{
|
{
|
||||||
VipsFormatClass *class = VIPS_FORMAT_CLASS( object_class );
|
VipsFormatClass *class = VIPS_FORMAT_CLASS( object_class );
|
||||||
const char **p;
|
const char **p;
|
||||||
@ -92,24 +92,24 @@ vips_format_print_class( VipsObjectClass *object_class, im_buf_t *buf )
|
|||||||
VIPS_OBJECT_CLASS( vips_format_parent_class )->
|
VIPS_OBJECT_CLASS( vips_format_parent_class )->
|
||||||
print_class( object_class, buf );
|
print_class( object_class, buf );
|
||||||
|
|
||||||
im_buf_appends( buf, ", (" );
|
vips_buf_appends( buf, ", (" );
|
||||||
for( p = class->suffs; *p; p++ ) {
|
for( p = class->suffs; *p; p++ ) {
|
||||||
im_buf_appendf( buf, "%s", *p );
|
vips_buf_appendf( buf, "%s", *p );
|
||||||
if( p[1] )
|
if( p[1] )
|
||||||
im_buf_appends( buf, ", " );
|
vips_buf_appends( buf, ", " );
|
||||||
}
|
}
|
||||||
im_buf_appends( buf, ") " );
|
vips_buf_appends( buf, ") " );
|
||||||
|
|
||||||
if( class->is_a )
|
if( class->is_a )
|
||||||
im_buf_appends( buf, "is_a " );
|
vips_buf_appends( buf, "is_a " );
|
||||||
if( class->header )
|
if( class->header )
|
||||||
im_buf_appends( buf, "header " );
|
vips_buf_appends( buf, "header " );
|
||||||
if( class->load )
|
if( class->load )
|
||||||
im_buf_appends( buf, "load " );
|
vips_buf_appends( buf, "load " );
|
||||||
if( class->save )
|
if( class->save )
|
||||||
im_buf_appends( buf, "save " );
|
vips_buf_appends( buf, "save " );
|
||||||
if( class->get_flags )
|
if( class->get_flags )
|
||||||
im_buf_appends( buf, "get_flags " );
|
vips_buf_appends( buf, "get_flags " );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -247,16 +247,16 @@ static void
|
|||||||
attach_exif_entry( ExifEntry *entry, IMAGE *im )
|
attach_exif_entry( ExifEntry *entry, IMAGE *im )
|
||||||
{
|
{
|
||||||
char name_text[256];
|
char name_text[256];
|
||||||
im_buf_t name;
|
VipsBuf name;
|
||||||
char value_text[256];
|
char value_text[256];
|
||||||
im_buf_t value;
|
VipsBuf value;
|
||||||
char exif_value[256];
|
char exif_value[256];
|
||||||
|
|
||||||
im_buf_init_static( &name, name_text, 256 );
|
vips_buf_init_static( &name, name_text, 256 );
|
||||||
im_buf_init_static( &value, value_text, 256 );
|
vips_buf_init_static( &value, value_text, 256 );
|
||||||
|
|
||||||
im_buf_appendf( &name, "exif-%s", exif_tag_get_title( entry->tag ) );
|
vips_buf_appendf( &name, "exif-%s", exif_tag_get_title( entry->tag ) );
|
||||||
im_buf_appendf( &value, "%s (%s, %d bytes)",
|
vips_buf_appendf( &value, "%s (%s, %d bytes)",
|
||||||
exif_entry_get_value( entry, exif_value, 256 ),
|
exif_entry_get_value( entry, exif_value, 256 ),
|
||||||
exif_format_get_name( entry->format ),
|
exif_format_get_name( entry->format ),
|
||||||
entry->size );
|
entry->size );
|
||||||
@ -264,7 +264,7 @@ attach_exif_entry( ExifEntry *entry, IMAGE *im )
|
|||||||
/* Can't do anything sensible with the error return.
|
/* Can't do anything sensible with the error return.
|
||||||
*/
|
*/
|
||||||
(void) im_meta_set_string( im,
|
(void) im_meta_set_string( im,
|
||||||
im_buf_all( &name ), im_buf_all( &value ) );
|
vips_buf_all( &name ), vips_buf_all( &value ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -338,11 +338,11 @@ parse_header( Read *read )
|
|||||||
#error attributes enabled, but no access funcs found
|
#error attributes enabled, but no access funcs found
|
||||||
#endif
|
#endif
|
||||||
char name_text[256];
|
char name_text[256];
|
||||||
im_buf_t name;
|
VipsBuf name;
|
||||||
|
|
||||||
im_buf_init_static( &name, name_text, 256 );
|
vips_buf_init_static( &name, name_text, 256 );
|
||||||
im_buf_appendf( &name, "magick-%s", attr->key );
|
vips_buf_appendf( &name, "magick-%s", attr->key );
|
||||||
im_meta_set_string( im, im_buf_all( &name ), attr->value );
|
im_meta_set_string( im, vips_buf_all( &name ), attr->value );
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf( "key = \"%s\", value = \"%s\"\n",
|
printf( "key = \"%s\", value = \"%s\"\n",
|
||||||
|
@ -54,7 +54,7 @@
|
|||||||
#define MAX_STRSIZE (16000)
|
#define MAX_STRSIZE (16000)
|
||||||
|
|
||||||
void
|
void
|
||||||
im_buf_rewind( im_buf_t *buf )
|
vips_buf_rewind( VipsBuf *buf )
|
||||||
{
|
{
|
||||||
buf->i = 0;
|
buf->i = 0;
|
||||||
buf->lasti = 0;
|
buf->lasti = 0;
|
||||||
@ -67,64 +67,61 @@ im_buf_rewind( im_buf_t *buf )
|
|||||||
/* Power on init.
|
/* Power on init.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
im_buf_init( im_buf_t *buf )
|
vips_buf_init( VipsBuf *buf )
|
||||||
{
|
{
|
||||||
buf->base = NULL;
|
buf->base = NULL;
|
||||||
buf->mx = 0;
|
buf->mx = 0;
|
||||||
buf->dynamic = FALSE;
|
buf->dynamic = FALSE;
|
||||||
im_buf_rewind( buf );
|
vips_buf_rewind( buf );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Reset to power on state ... only needed for dynamic bufs.
|
/* Reset to power on state ... only needed for dynamic bufs.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
im_buf_destroy( im_buf_t *buf )
|
vips_buf_destroy( VipsBuf *buf )
|
||||||
{
|
{
|
||||||
if( buf->dynamic ) {
|
if( buf->dynamic ) {
|
||||||
if( buf->base ) {
|
IM_FREE( buf->base );
|
||||||
im_free( buf->base );
|
|
||||||
buf->base = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
im_buf_init( buf );
|
vips_buf_init( buf );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set to a static string.
|
/* Set to a static string.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
im_buf_set_static( im_buf_t *buf, char *base, int mx )
|
vips_buf_set_static( VipsBuf *buf, char *base, int mx )
|
||||||
{
|
{
|
||||||
assert( mx >= 4 );
|
g_assert( mx >= 4 );
|
||||||
|
|
||||||
im_buf_destroy( buf );
|
vips_buf_destroy( buf );
|
||||||
|
|
||||||
buf->base = base;
|
buf->base = base;
|
||||||
buf->mx = mx;
|
buf->mx = mx;
|
||||||
buf->dynamic = FALSE;
|
buf->dynamic = FALSE;
|
||||||
im_buf_rewind( buf );
|
vips_buf_rewind( buf );
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
im_buf_init_static( im_buf_t *buf, char *base, int mx )
|
vips_buf_init_static( VipsBuf *buf, char *base, int mx )
|
||||||
{
|
{
|
||||||
im_buf_init( buf );
|
vips_buf_init( buf );
|
||||||
im_buf_set_static( buf, base, mx );
|
vips_buf_set_static( buf, base, mx );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set to a dynamic string.
|
/* Set to a dynamic string.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
im_buf_set_dynamic( im_buf_t *buf, int mx )
|
vips_buf_set_dynamic( VipsBuf *buf, int mx )
|
||||||
{
|
{
|
||||||
assert( mx >= 4 );
|
g_assert( mx >= 4 );
|
||||||
|
|
||||||
if( buf->mx == mx && buf->dynamic )
|
if( buf->mx == mx && buf->dynamic )
|
||||||
/* No change?
|
/* No change?
|
||||||
*/
|
*/
|
||||||
im_buf_rewind( buf );
|
vips_buf_rewind( buf );
|
||||||
else {
|
else {
|
||||||
im_buf_destroy( buf );
|
vips_buf_destroy( buf );
|
||||||
|
|
||||||
if( !(buf->base = IM_ARRAY( NULL, mx, char )) )
|
if( !(buf->base = IM_ARRAY( NULL, mx, char )) )
|
||||||
/* No error return, so just block writes.
|
/* No error return, so just block writes.
|
||||||
@ -133,23 +130,23 @@ im_buf_set_dynamic( im_buf_t *buf, int mx )
|
|||||||
else {
|
else {
|
||||||
buf->mx = mx;
|
buf->mx = mx;
|
||||||
buf->dynamic = TRUE;
|
buf->dynamic = TRUE;
|
||||||
im_buf_rewind( buf );
|
vips_buf_rewind( buf );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
im_buf_init_dynamic( im_buf_t *buf, int mx )
|
vips_buf_init_dynamic( VipsBuf *buf, int mx )
|
||||||
{
|
{
|
||||||
im_buf_init( buf );
|
vips_buf_init( buf );
|
||||||
im_buf_set_dynamic( buf, mx );
|
vips_buf_set_dynamic( buf, mx );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Append at most sz chars from string to buf. sz < 0 means unlimited.
|
/* Append at most sz chars from string to buf. sz < 0 means unlimited.
|
||||||
* FALSE on overflow.
|
* Error on overflow.
|
||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
im_buf_appendns( im_buf_t *buf, const char *str, int sz )
|
vips_buf_appendns( VipsBuf *buf, const char *str, int sz )
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
int n;
|
int n;
|
||||||
@ -191,41 +188,28 @@ im_buf_appendns( im_buf_t *buf, const char *str, int sz )
|
|||||||
/* Append a string to a buf. Error on overflow.
|
/* Append a string to a buf. Error on overflow.
|
||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
im_buf_appends( im_buf_t *buf, const char *str )
|
vips_buf_appends( VipsBuf *buf, const char *str )
|
||||||
{
|
{
|
||||||
return( im_buf_appendns( buf, str, -1 ) );
|
return( vips_buf_appendns( buf, str, -1 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Append a character to a buf. Error on overflow.
|
/* Append a character to a buf. Error on overflow.
|
||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
im_buf_appendc( im_buf_t *buf, char ch )
|
vips_buf_appendc( VipsBuf *buf, char ch )
|
||||||
{
|
{
|
||||||
char tiny[2];
|
char tiny[2];
|
||||||
|
|
||||||
tiny[0] = ch;
|
tiny[0] = ch;
|
||||||
tiny[1] = '\0';
|
tiny[1] = '\0';
|
||||||
|
|
||||||
return( im_buf_appendns( buf, tiny, 1 ) );
|
return( vips_buf_appendns( buf, tiny, 1 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Append a double, non-localised. Useful for config files etc.
|
|
||||||
*/
|
|
||||||
gboolean
|
|
||||||
im_buf_appendg( im_buf_t *buf, double g )
|
|
||||||
{
|
|
||||||
char text[G_ASCII_DTOSTR_BUF_SIZE];
|
|
||||||
|
|
||||||
g_ascii_dtostr( text, sizeof( text ), g );
|
|
||||||
|
|
||||||
return( im_buf_appends( buf, text ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Swap the rightmost occurence of old for new.
|
/* Swap the rightmost occurence of old for new.
|
||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
im_buf_change( im_buf_t *buf, const char *old, const char *new )
|
vips_buf_change( VipsBuf *buf, const char *old, const char *new )
|
||||||
{
|
{
|
||||||
int olen = strlen( old );
|
int olen = strlen( old );
|
||||||
int nlen = strlen( new );
|
int nlen = strlen( new );
|
||||||
@ -243,7 +227,7 @@ im_buf_change( im_buf_t *buf, const char *old, const char *new )
|
|||||||
for( i = buf->i - olen; i > 0; i-- )
|
for( i = buf->i - olen; i > 0; i-- )
|
||||||
if( im_isprefix( old, buf->base + i ) )
|
if( im_isprefix( old, buf->base + i ) )
|
||||||
break;
|
break;
|
||||||
assert( i >= 0 );
|
g_assert( i >= 0 );
|
||||||
|
|
||||||
/* Move tail of buffer to make right-size space for new.
|
/* Move tail of buffer to make right-size space for new.
|
||||||
*/
|
*/
|
||||||
@ -258,75 +242,126 @@ im_buf_change( im_buf_t *buf, const char *old, const char *new )
|
|||||||
return( TRUE );
|
return( TRUE );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Remove the last character.
|
/* Remove the last character, if it's ch.
|
||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
im_buf_removec( im_buf_t *buf, char ch )
|
vips_buf_removec( VipsBuf *buf, char ch )
|
||||||
{
|
{
|
||||||
if( buf->full )
|
if( buf->full )
|
||||||
return( FALSE );
|
return( FALSE );
|
||||||
|
|
||||||
if( buf->i <= 0 )
|
if( buf->i <= 0 )
|
||||||
return( FALSE );
|
return( FALSE );
|
||||||
buf->i -= 1;
|
if( buf->base[buf->i - 1] == ch )
|
||||||
assert( buf->base[buf->i] == ch );
|
buf->i -= 1;
|
||||||
|
|
||||||
return( TRUE );
|
return( TRUE );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Append to a buf, args as printf. FALSE on overflow.
|
/* Append to a buf, args as printf. Error on overflow.
|
||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
im_buf_appendf( im_buf_t *buf, const char *fmt, ... )
|
vips_buf_appendf( VipsBuf *buf, const char *fmt, ... )
|
||||||
{
|
{
|
||||||
va_list ap;
|
|
||||||
char str[MAX_STRSIZE];
|
char str[MAX_STRSIZE];
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
va_start( ap, fmt );
|
va_start( ap, fmt );
|
||||||
(void) im_vsnprintf( str, MAX_STRSIZE, fmt, ap );
|
(void) im_vsnprintf( str, MAX_STRSIZE, fmt, ap );
|
||||||
va_end( ap );
|
va_end( ap );
|
||||||
|
|
||||||
return( im_buf_appends( buf, str ) );
|
return( vips_buf_appends( buf, str ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Append to a buf, args as vprintf. Error on overflow.
|
/* Append to a buf, args as vprintf. Error on overflow.
|
||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
im_buf_vappendf( im_buf_t *buf, const char *fmt, va_list ap )
|
vips_buf_vappendf( VipsBuf *buf, const char *fmt, va_list ap )
|
||||||
{
|
{
|
||||||
char str[MAX_STRSIZE];
|
char str[MAX_STRSIZE];
|
||||||
|
|
||||||
(void) im_vsnprintf( str, MAX_STRSIZE, fmt, ap );
|
(void) im_vsnprintf( str, MAX_STRSIZE, fmt, ap );
|
||||||
|
|
||||||
return( im_buf_appends( buf, str ) );
|
return( vips_buf_appends( buf, str ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Append a double, non-localised. Useful for config files etc.
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
vips_buf_appendg( VipsBuf *buf, double g )
|
||||||
|
{
|
||||||
|
char text[G_ASCII_DTOSTR_BUF_SIZE];
|
||||||
|
|
||||||
|
g_ascii_dtostr( text, sizeof( text ), g );
|
||||||
|
|
||||||
|
return( vips_buf_appends( buf, text ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Append a number ... if the number is -ve, add brackets. Needed for
|
||||||
|
* building function arguments.
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
vips_buf_appendd( VipsBuf *buf, int d )
|
||||||
|
{
|
||||||
|
if( d < 0 )
|
||||||
|
return( vips_buf_appendf( buf, " (%d)", d ) );
|
||||||
|
else
|
||||||
|
return( vips_buf_appendf( buf, " %d", d ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
vips_buf_appendgv( VipsBuf *buf, GValue *value )
|
||||||
|
{
|
||||||
|
char *str_value;
|
||||||
|
|
||||||
|
str_value = g_strdup_value_contents( value );
|
||||||
|
vips_buf_appends( buf, str_value );
|
||||||
|
g_free( str_value );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Read all text from buffer.
|
/* Read all text from buffer.
|
||||||
*/
|
*/
|
||||||
const char *
|
const char *
|
||||||
im_buf_all( im_buf_t *buf )
|
vips_buf_all( VipsBuf *buf )
|
||||||
{
|
{
|
||||||
buf->base[buf->i] = '\0';
|
buf->base[buf->i] = '\0';
|
||||||
|
|
||||||
return( buf->base );
|
return( buf->base );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Trim to just the first line (excluding "\n").
|
||||||
|
*/
|
||||||
|
const char *
|
||||||
|
vips_buf_firstline( VipsBuf *buf )
|
||||||
|
{
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
if( (p = strchr( vips_buf_all( buf ), '\n' )) )
|
||||||
|
*p = '\0';
|
||||||
|
|
||||||
|
return( vips_buf_all( buf ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test for buffer empty.
|
||||||
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
im_buf_isempty( im_buf_t *buf )
|
vips_buf_is_empty( VipsBuf *buf )
|
||||||
{
|
{
|
||||||
return( buf->i == 0 );
|
return( buf->i == 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Test for buffer full.
|
||||||
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
im_buf_isfull( im_buf_t *buf )
|
vips_buf_is_full( VipsBuf *buf )
|
||||||
{
|
{
|
||||||
return( buf->full );
|
return( buf->full );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Buffer length ... still need to do im_buf_all().
|
/* VipsBuffer length ... still need to do vips_buf_all().
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
im_buf_len( im_buf_t *buf )
|
vips_buf_len( VipsBuf *buf )
|
||||||
{
|
{
|
||||||
return( buf->i );
|
return( buf->i );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,8 +70,8 @@
|
|||||||
*/
|
*/
|
||||||
#define IM_MAX_ERROR (10240)
|
#define IM_MAX_ERROR (10240)
|
||||||
static char im_error_text[IM_MAX_ERROR] = "";
|
static char im_error_text[IM_MAX_ERROR] = "";
|
||||||
static im_buf_t im_error_buf =
|
static VipsBuf im_error_buf =
|
||||||
IM_BUF_STATIC( im_error_text, IM_MAX_ERROR );
|
VIPS_BUF_STATIC( im_error_text, IM_MAX_ERROR );
|
||||||
|
|
||||||
#define IM_DIAGNOSTICS "IM_DIAGNOSTICS"
|
#define IM_DIAGNOSTICS "IM_DIAGNOSTICS"
|
||||||
#define IM_WARNING "IM_WARNING"
|
#define IM_WARNING "IM_WARNING"
|
||||||
@ -82,7 +82,7 @@ im_error_buffer( void )
|
|||||||
const char *msg;
|
const char *msg;
|
||||||
|
|
||||||
g_mutex_lock( im__global_lock );
|
g_mutex_lock( im__global_lock );
|
||||||
msg = im_buf_all( &im_error_buf );
|
msg = vips_buf_all( &im_error_buf );
|
||||||
g_mutex_unlock( im__global_lock );
|
g_mutex_unlock( im__global_lock );
|
||||||
|
|
||||||
return( msg );
|
return( msg );
|
||||||
@ -92,9 +92,9 @@ void
|
|||||||
im_verror( const char *domain, const char *fmt, va_list ap )
|
im_verror( const char *domain, const char *fmt, va_list ap )
|
||||||
{
|
{
|
||||||
g_mutex_lock( im__global_lock );
|
g_mutex_lock( im__global_lock );
|
||||||
im_buf_appendf( &im_error_buf, "%s: ", domain );
|
vips_buf_appendf( &im_error_buf, "%s: ", domain );
|
||||||
im_buf_vappendf( &im_error_buf, fmt, ap );
|
vips_buf_vappendf( &im_error_buf, fmt, ap );
|
||||||
im_buf_appends( &im_error_buf, "\n" );
|
vips_buf_appends( &im_error_buf, "\n" );
|
||||||
g_mutex_unlock( im__global_lock );
|
g_mutex_unlock( im__global_lock );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,7 +154,7 @@ void
|
|||||||
im_error_clear( void )
|
im_error_clear( void )
|
||||||
{
|
{
|
||||||
g_mutex_lock( im__global_lock );
|
g_mutex_lock( im__global_lock );
|
||||||
im_buf_rewind( &im_error_buf );
|
vips_buf_rewind( &im_error_buf );
|
||||||
g_mutex_unlock( im__global_lock );
|
g_mutex_unlock( im__global_lock );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,17 +63,17 @@ im_updatehist( IMAGE *out, const char *name, int argc, char *argv[] )
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
char txt[IM_MAX_LINE];
|
char txt[IM_MAX_LINE];
|
||||||
im_buf_t buf;
|
VipsBuf buf;
|
||||||
|
|
||||||
im_buf_init_static( &buf, txt, IM_MAX_LINE );
|
vips_buf_init_static( &buf, txt, IM_MAX_LINE );
|
||||||
im_buf_appends( &buf, name );
|
vips_buf_appends( &buf, name );
|
||||||
|
|
||||||
for( i = 0; i < argc; i++ ) {
|
for( i = 0; i < argc; i++ ) {
|
||||||
im_buf_appends( &buf, " " );
|
vips_buf_appends( &buf, " " );
|
||||||
im_buf_appends( &buf, argv[i] );
|
vips_buf_appends( &buf, argv[i] );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( im_histlin( out, "%s", im_buf_all( &buf ) ) )
|
if( im_histlin( out, "%s", vips_buf_all( &buf ) ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
|
@ -92,25 +92,25 @@ vips_object_build( VipsObject *object )
|
|||||||
void
|
void
|
||||||
vips_object_print_class( VipsObjectClass *class )
|
vips_object_print_class( VipsObjectClass *class )
|
||||||
{
|
{
|
||||||
im_buf_t buf;
|
VipsBuf buf;
|
||||||
char str[1000];
|
char str[1000];
|
||||||
|
|
||||||
im_buf_init_static( &buf, str, 1000 );
|
vips_buf_init_static( &buf, str, 1000 );
|
||||||
class->print_class( class, &buf );
|
class->print_class( class, &buf );
|
||||||
printf( "%s\n", im_buf_all( &buf ) );
|
printf( "%s\n", vips_buf_all( &buf ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
vips_object_print( VipsObject *object )
|
vips_object_print( VipsObject *object )
|
||||||
{
|
{
|
||||||
VipsObjectClass *class = VIPS_OBJECT_GET_CLASS( object );
|
VipsObjectClass *class = VIPS_OBJECT_GET_CLASS( object );
|
||||||
im_buf_t buf;
|
VipsBuf buf;
|
||||||
char str[1000];
|
char str[1000];
|
||||||
|
|
||||||
vips_object_print_class( class );
|
vips_object_print_class( class );
|
||||||
im_buf_init_static( &buf, str, 1000 );
|
vips_buf_init_static( &buf, str, 1000 );
|
||||||
class->print( object, &buf );
|
class->print( object, &buf );
|
||||||
printf( "\n%s (%p)\n", im_buf_all( &buf ), object );
|
printf( "\n%s (%p)\n", vips_buf_all( &buf ), object );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Extra stuff we track for properties to do our argument handling.
|
/* Extra stuff we track for properties to do our argument handling.
|
||||||
@ -459,7 +459,7 @@ vips_object_set_property( GObject *gobject,
|
|||||||
|
|
||||||
str_value = g_strdup_value_contents( value );
|
str_value = g_strdup_value_contents( value );
|
||||||
printf( "vips_object_set_property: %s.%s = %s\n",
|
printf( "vips_object_set_property: %s.%s = %s\n",
|
||||||
object->name, pspec->name, str_value );
|
object->name, g_param_spec_get_name( pspec ), str_value );
|
||||||
g_free( str_value );
|
g_free( str_value );
|
||||||
}
|
}
|
||||||
#endif /*DEBUG*/
|
#endif /*DEBUG*/
|
||||||
@ -472,8 +472,10 @@ vips_object_set_property( GObject *gobject,
|
|||||||
*/
|
*/
|
||||||
if( argument_class->flags & VIPS_ARGUMENT_CONSTRUCT &&
|
if( argument_class->flags & VIPS_ARGUMENT_CONSTRUCT &&
|
||||||
object->constructed ) {
|
object->constructed ) {
|
||||||
g_warning( "%s: can't assign '%s' after construct", G_STRLOC,
|
g_warning( "%s: %s can't assign '%s' after construct",
|
||||||
((VipsArgument *) argument_class)->pspec->name);
|
G_STRLOC,
|
||||||
|
G_OBJECT_TYPE_NAME( gobject ),
|
||||||
|
g_param_spec_get_name( pspec ) );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -481,8 +483,10 @@ vips_object_set_property( GObject *gobject,
|
|||||||
*/
|
*/
|
||||||
if( argument_class->flags & VIPS_ARGUMENT_SET_ONCE &&
|
if( argument_class->flags & VIPS_ARGUMENT_SET_ONCE &&
|
||||||
argument_instance->assigned ) {
|
argument_instance->assigned ) {
|
||||||
g_warning( "%s: can only assign '%s' once", G_STRLOC,
|
g_warning( "%s: %s can only assign '%s' once",
|
||||||
((VipsArgument *)argument_class)->pspec->name );
|
G_STRLOC,
|
||||||
|
G_OBJECT_TYPE_NAME( gobject ),
|
||||||
|
g_param_spec_get_name( pspec ) );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -548,8 +552,10 @@ vips_object_set_property( GObject *gobject,
|
|||||||
*member = g_value_dup_boxed( value );
|
*member = g_value_dup_boxed( value );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
g_warning( "%s: '%s' has unimplemented type", G_STRLOC,
|
g_warning( "%s: %s unimplemented property type %s",
|
||||||
((VipsArgument *) argument_class)->pspec->name );
|
G_STRLOC,
|
||||||
|
G_OBJECT_TYPE_NAME( gobject ),
|
||||||
|
g_type_name( G_PARAM_SPEC_VALUE_TYPE( pspec ) ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Note that it's now been set.
|
/* Note that it's now been set.
|
||||||
@ -612,6 +618,12 @@ vips_object_get_property( GObject *gobject,
|
|||||||
|
|
||||||
g_value_set_pointer( value, *member );
|
g_value_set_pointer( value, *member );
|
||||||
}
|
}
|
||||||
|
else if( G_IS_PARAM_SPEC_DOUBLE( pspec ) ) {
|
||||||
|
double *member = &G_STRUCT_MEMBER( double, object,
|
||||||
|
argument_class->offset );
|
||||||
|
|
||||||
|
g_value_set_double( value, *member );
|
||||||
|
}
|
||||||
else if( G_IS_PARAM_SPEC_BOXED( pspec ) ) {
|
else if( G_IS_PARAM_SPEC_BOXED( pspec ) ) {
|
||||||
gpointer *member = &G_STRUCT_MEMBER( gpointer, object,
|
gpointer *member = &G_STRUCT_MEMBER( gpointer, object,
|
||||||
argument_class->offset );
|
argument_class->offset );
|
||||||
@ -622,7 +634,10 @@ vips_object_get_property( GObject *gobject,
|
|||||||
g_value_set_boxed( value, *member );
|
g_value_set_boxed( value, *member );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
g_warning( "%s: unimplemented property type", G_STRLOC );
|
g_warning( "%s: %s unimplemented property type %s",
|
||||||
|
G_STRLOC,
|
||||||
|
G_OBJECT_TYPE_NAME( gobject ),
|
||||||
|
g_type_name( G_PARAM_SPEC_VALUE_TYPE( pspec ) ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -639,7 +654,7 @@ vips_object_check_required( VipsObject *object, GParamSpec *pspec,
|
|||||||
!argument_instance->assigned ) {
|
!argument_instance->assigned ) {
|
||||||
im_error( "check_required",
|
im_error( "check_required",
|
||||||
_( "required construct param %s to %s %s not set" ),
|
_( "required construct param %s to %s %s not set" ),
|
||||||
pspec->name,
|
g_param_spec_get_name( pspec ),
|
||||||
G_OBJECT_TYPE_NAME( object ),
|
G_OBJECT_TYPE_NAME( object ),
|
||||||
object->name );
|
object->name );
|
||||||
*result = -1;
|
*result = -1;
|
||||||
@ -679,20 +694,20 @@ vips_object_real_changed( VipsObject *object )
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
vips_object_real_print_class( VipsObjectClass *class, im_buf_t *buf )
|
vips_object_real_print_class( VipsObjectClass *class, VipsBuf *buf )
|
||||||
{
|
{
|
||||||
im_buf_appendf( buf, "%s", G_OBJECT_CLASS_NAME( class ) );
|
vips_buf_appendf( buf, "%s", G_OBJECT_CLASS_NAME( class ) );
|
||||||
if( class->nickname )
|
if( class->nickname )
|
||||||
im_buf_appendf( buf, " (%s)", class->nickname );
|
vips_buf_appendf( buf, " (%s)", class->nickname );
|
||||||
if( class->description )
|
if( class->description )
|
||||||
im_buf_appendf( buf, ", %s", class->description );
|
vips_buf_appendf( buf, ", %s", class->description );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
vips_object_real_print( VipsObject *object, im_buf_t *buf )
|
vips_object_real_print( VipsObject *object, VipsBuf *buf )
|
||||||
{
|
{
|
||||||
if( object->name )
|
if( object->name )
|
||||||
im_buf_appendf( buf, "\"%s\"", object->name );
|
vips_buf_appendf( buf, "\"%s\"", object->name );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -910,7 +925,7 @@ vips_object_new_from_string( const char *basename, const char *p )
|
|||||||
if( token == VIPS_TOKEN_LEFT &&
|
if( token == VIPS_TOKEN_LEFT &&
|
||||||
vips_object_set_args( object, p ) ) {
|
vips_object_set_args( object, p ) ) {
|
||||||
im_error( "object_new", "%s",
|
im_error( "object_new", "%s",
|
||||||
_( "bad object arguents" ) );
|
_( "bad object arguments" ) );
|
||||||
g_object_unref( object );
|
g_object_unref( object );
|
||||||
return( NULL );
|
return( NULL );
|
||||||
}
|
}
|
||||||
@ -924,3 +939,94 @@ vips_object_new_from_string( const char *basename, const char *p )
|
|||||||
return( object );
|
return( object );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
vips_object_print_arg( VipsObject *object, GParamSpec *pspec, VipsBuf *buf )
|
||||||
|
{
|
||||||
|
GType type = G_PARAM_SPEC_VALUE_TYPE( pspec );
|
||||||
|
const char *name = g_param_spec_get_name( pspec );
|
||||||
|
GValue value = { 0 };
|
||||||
|
char *str_value;
|
||||||
|
|
||||||
|
g_value_init( &value, type );
|
||||||
|
g_object_get_property( G_OBJECT( object ), name, &value );
|
||||||
|
str_value = g_strdup_value_contents( &value );
|
||||||
|
vips_buf_appends( buf, str_value );
|
||||||
|
g_free( str_value );
|
||||||
|
g_value_unset( &value );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *
|
||||||
|
vips_object_to_string_required( VipsObject *object,
|
||||||
|
GParamSpec *pspec,
|
||||||
|
VipsArgumentClass *argument_class,
|
||||||
|
VipsArgumentInstance *argument_instance,
|
||||||
|
void *a, void *b )
|
||||||
|
{
|
||||||
|
VipsBuf *buf = (VipsBuf *) a;
|
||||||
|
gboolean *first = (gboolean *) b;
|
||||||
|
|
||||||
|
if( (argument_class->flags & VIPS_ARGUMENT_REQUIRED) ) {
|
||||||
|
if( *first ) {
|
||||||
|
vips_buf_appends( buf, "(" );
|
||||||
|
*first = FALSE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
vips_buf_appends( buf, "," );
|
||||||
|
}
|
||||||
|
|
||||||
|
vips_object_print_arg( object, pspec, buf );
|
||||||
|
}
|
||||||
|
|
||||||
|
return( NULL );
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *
|
||||||
|
vips_object_to_string_optional( VipsObject *object,
|
||||||
|
GParamSpec *pspec,
|
||||||
|
VipsArgumentClass *argument_class,
|
||||||
|
VipsArgumentInstance *argument_instance,
|
||||||
|
void *a, void *b )
|
||||||
|
{
|
||||||
|
VipsBuf *buf = (VipsBuf *) a;
|
||||||
|
gboolean *first = (gboolean *) b;
|
||||||
|
|
||||||
|
if( !(argument_class->flags & VIPS_ARGUMENT_REQUIRED) &&
|
||||||
|
argument_instance->assigned ) {
|
||||||
|
if( *first ) {
|
||||||
|
vips_buf_appends( buf, "(" );
|
||||||
|
*first = FALSE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
vips_buf_appends( buf, "," );
|
||||||
|
}
|
||||||
|
|
||||||
|
vips_buf_appends( buf, g_param_spec_get_name( pspec ) );
|
||||||
|
vips_buf_appends( buf, "=" );
|
||||||
|
vips_object_print_arg( object, pspec, buf );
|
||||||
|
}
|
||||||
|
|
||||||
|
return( NULL );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The inverse of vips_object_new_from_string(): turn an object into eg.
|
||||||
|
* "VipsInterpolateYafrsmooth(sharpening=12)".
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
vips_object_to_string( VipsObject *object, VipsBuf *buf )
|
||||||
|
{
|
||||||
|
VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS( object );
|
||||||
|
gboolean first;
|
||||||
|
|
||||||
|
/* Nicknames are not guaranteed to be unique, so use the full type
|
||||||
|
* name.
|
||||||
|
*/
|
||||||
|
vips_buf_appends( buf, G_OBJECT_TYPE_NAME( object ) );
|
||||||
|
first = TRUE;
|
||||||
|
(void) vips_argument_map( object,
|
||||||
|
vips_object_to_string_required, buf, &first );
|
||||||
|
(void) vips_argument_map( object,
|
||||||
|
vips_object_to_string_optional, buf, &first );
|
||||||
|
if( !first )
|
||||||
|
vips_buf_appends( buf, ")" );
|
||||||
|
}
|
||||||
|
@ -106,7 +106,7 @@ im__lrmerge1( IMAGE *ref, IMAGE *sec, IMAGE *out,
|
|||||||
{
|
{
|
||||||
Transformation trn;
|
Transformation trn;
|
||||||
IMAGE *t1 = im_open_local( out, "im_lrmosaic1:1", "p" );
|
IMAGE *t1 = im_open_local( out, "im_lrmosaic1:1", "p" );
|
||||||
im_buf_t buf;
|
VipsBuf buf;
|
||||||
char text[1024];
|
char text[1024];
|
||||||
|
|
||||||
/* Scale, rotate and displace sec.
|
/* Scale, rotate and displace sec.
|
||||||
@ -123,18 +123,18 @@ im__lrmerge1( IMAGE *ref, IMAGE *sec, IMAGE *out,
|
|||||||
/* Note parameters in history file ... for global balance to pick up
|
/* Note parameters in history file ... for global balance to pick up
|
||||||
* later.
|
* later.
|
||||||
*/
|
*/
|
||||||
im_buf_init_static( &buf, text, 1024 );
|
vips_buf_init_static( &buf, text, 1024 );
|
||||||
im_buf_appendf( &buf, "#LRROTSCALE <%s> <%s> <%s> <",
|
vips_buf_appendf( &buf, "#LRROTSCALE <%s> <%s> <%s> <",
|
||||||
ref->filename, sec->filename, out->filename );
|
ref->filename, sec->filename, out->filename );
|
||||||
im_buf_appendg( &buf, a );
|
vips_buf_appendg( &buf, a );
|
||||||
im_buf_appendf( &buf, "> <" );
|
vips_buf_appendf( &buf, "> <" );
|
||||||
im_buf_appendg( &buf, b );
|
vips_buf_appendg( &buf, b );
|
||||||
im_buf_appendf( &buf, "> <" );
|
vips_buf_appendf( &buf, "> <" );
|
||||||
im_buf_appendg( &buf, dx );
|
vips_buf_appendg( &buf, dx );
|
||||||
im_buf_appendf( &buf, "> <" );
|
vips_buf_appendf( &buf, "> <" );
|
||||||
im_buf_appendg( &buf, dy );
|
vips_buf_appendg( &buf, dy );
|
||||||
im_buf_appendf( &buf, "> <%d>", mwidth );
|
vips_buf_appendf( &buf, "> <%d>", mwidth );
|
||||||
if( im_histlin( out, "%s", im_buf_all( &buf ) ) )
|
if( im_histlin( out, "%s", vips_buf_all( &buf ) ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
@ -148,7 +148,7 @@ im__tbmerge1( IMAGE *ref, IMAGE *sec, IMAGE *out,
|
|||||||
{
|
{
|
||||||
Transformation trn;
|
Transformation trn;
|
||||||
IMAGE *t1 = im_open_local( out, "im_lrmosaic1:2", "p" );
|
IMAGE *t1 = im_open_local( out, "im_lrmosaic1:2", "p" );
|
||||||
im_buf_t buf;
|
VipsBuf buf;
|
||||||
char text[1024];
|
char text[1024];
|
||||||
|
|
||||||
/* Scale, rotate and displace sec.
|
/* Scale, rotate and displace sec.
|
||||||
@ -165,18 +165,18 @@ im__tbmerge1( IMAGE *ref, IMAGE *sec, IMAGE *out,
|
|||||||
/* Note parameters in history file ... for global balance to pick up
|
/* Note parameters in history file ... for global balance to pick up
|
||||||
* later.
|
* later.
|
||||||
*/
|
*/
|
||||||
im_buf_init_static( &buf, text, 1024 );
|
vips_buf_init_static( &buf, text, 1024 );
|
||||||
im_buf_appendf( &buf, "#TBROTSCALE <%s> <%s> <%s> <",
|
vips_buf_appendf( &buf, "#TBROTSCALE <%s> <%s> <%s> <",
|
||||||
ref->filename, sec->filename, out->filename );
|
ref->filename, sec->filename, out->filename );
|
||||||
im_buf_appendg( &buf, a );
|
vips_buf_appendg( &buf, a );
|
||||||
im_buf_appendf( &buf, "> <" );
|
vips_buf_appendf( &buf, "> <" );
|
||||||
im_buf_appendg( &buf, b );
|
vips_buf_appendg( &buf, b );
|
||||||
im_buf_appendf( &buf, "> <" );
|
vips_buf_appendf( &buf, "> <" );
|
||||||
im_buf_appendg( &buf, dx );
|
vips_buf_appendg( &buf, dx );
|
||||||
im_buf_appendf( &buf, "> <" );
|
vips_buf_appendf( &buf, "> <" );
|
||||||
im_buf_appendg( &buf, dy );
|
vips_buf_appendg( &buf, dy );
|
||||||
im_buf_appendf( &buf, "> <%d>", mwidth );
|
vips_buf_appendf( &buf, "> <%d>", mwidth );
|
||||||
if( im_histlin( out, "%s", im_buf_all( &buf ) ) )
|
if( im_histlin( out, "%s", vips_buf_all( &buf ) ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
|
Loading…
Reference in New Issue
Block a user