operation cache works from Python
This commit is contained in:
parent
6f82f1ad61
commit
a6dc0b6fea
2
TODO
2
TODO
@ -1,5 +1,3 @@
|
|||||||
- test Vips.cache_operation_build()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
- grep for other vips_class_find() problems: do we use it for simple class
|
- grep for other vips_class_find() problems: do we use it for simple class
|
||||||
|
@ -46,8 +46,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
#define VIPS_DEBUG
|
|
||||||
*/
|
*/
|
||||||
|
#define VIPS_DEBUG
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
@ -607,7 +607,10 @@ vips_cache_operation_buildp( VipsOperation **operation )
|
|||||||
|
|
||||||
g_assert( VIPS_IS_OPERATION( *operation ) );
|
g_assert( VIPS_IS_OPERATION( *operation ) );
|
||||||
|
|
||||||
VIPS_DEBUG_MSG( "vips_cache_operation_build: %p\n", *operation );
|
#ifdef VIPS_DEBUG
|
||||||
|
printf( "vips_cache_operation_build: " );
|
||||||
|
vips_object_print_summary( VIPS_OBJECT( *operation ) );
|
||||||
|
#endif /*VIPS_DEBUG*/
|
||||||
|
|
||||||
vips_cache_init();
|
vips_cache_init();
|
||||||
|
|
||||||
|
@ -153,7 +153,8 @@ vips_operation_print_usage( VipsOperationClass *class, VipsBuf *buf )
|
|||||||
static void *
|
static void *
|
||||||
vips_operation_call_argument( VipsObject *object, GParamSpec *pspec,
|
vips_operation_call_argument( VipsObject *object, GParamSpec *pspec,
|
||||||
VipsArgumentClass *argument_class,
|
VipsArgumentClass *argument_class,
|
||||||
VipsArgumentInstance *argument_instance )
|
VipsArgumentInstance *argument_instance,
|
||||||
|
void *a, void *b )
|
||||||
{
|
{
|
||||||
VipsArgument *argument = (VipsArgument *) argument_class;
|
VipsArgument *argument = (VipsArgument *) argument_class;
|
||||||
|
|
||||||
@ -181,11 +182,57 @@ vips_operation_print( VipsObject *object, VipsBuf *buf )
|
|||||||
|
|
||||||
printf( "%s args:\n", object_class->nickname );
|
printf( "%s args:\n", object_class->nickname );
|
||||||
vips_argument_map( VIPS_OBJECT( operation ),
|
vips_argument_map( VIPS_OBJECT( operation ),
|
||||||
(VipsArgumentMapFn) vips_operation_call_argument, NULL, NULL );
|
vips_operation_call_argument, NULL, NULL );
|
||||||
|
|
||||||
VIPS_OBJECT_CLASS( vips_operation_parent_class )->print( object, buf );
|
VIPS_OBJECT_CLASS( vips_operation_parent_class )->print( object, buf );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void *
|
||||||
|
vips_operation_vips_operation_print_summary_arg( VipsObject *object,
|
||||||
|
GParamSpec *pspec,
|
||||||
|
VipsArgumentClass *argument_class,
|
||||||
|
VipsArgumentInstance *argument_instance,
|
||||||
|
void *a, void *b )
|
||||||
|
{
|
||||||
|
VipsBuf *buf = (VipsBuf *) a;
|
||||||
|
|
||||||
|
/* Just assigned required input construct args
|
||||||
|
*/
|
||||||
|
if( (argument_class->flags & VIPS_ARGUMENT_REQUIRED) &&
|
||||||
|
(argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) &&
|
||||||
|
(argument_class->flags & VIPS_ARGUMENT_INPUT) &&
|
||||||
|
argument_instance->assigned ) {
|
||||||
|
const char *name = g_param_spec_get_name( pspec );
|
||||||
|
GType type = G_PARAM_SPEC_VALUE_TYPE( pspec );
|
||||||
|
|
||||||
|
GValue gvalue = { 0, };
|
||||||
|
char *str;
|
||||||
|
|
||||||
|
g_value_init( &gvalue, type );
|
||||||
|
g_object_get_property( G_OBJECT( object ), name, &gvalue );
|
||||||
|
str = g_strdup_value_contents( &gvalue );
|
||||||
|
vips_buf_appendf( buf, " %s", str );
|
||||||
|
g_free( str );
|
||||||
|
g_value_unset( &gvalue );
|
||||||
|
}
|
||||||
|
|
||||||
|
return( NULL );
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
vips_operation_print_summary( VipsObject *object, VipsBuf *buf )
|
||||||
|
{
|
||||||
|
VipsOperation *operation = VIPS_OPERATION( object );
|
||||||
|
VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS( object );
|
||||||
|
|
||||||
|
vips_buf_appendf( buf, "%s", object_class->nickname );
|
||||||
|
vips_argument_map( VIPS_OBJECT( operation ),
|
||||||
|
vips_operation_vips_operation_print_summary_arg, buf, NULL );
|
||||||
|
|
||||||
|
VIPS_OBJECT_CLASS( vips_operation_parent_class )->
|
||||||
|
print_summary( object, buf );
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
vips_operation_class_init( VipsOperationClass *class )
|
vips_operation_class_init( VipsOperationClass *class )
|
||||||
{
|
{
|
||||||
@ -198,6 +245,7 @@ vips_operation_class_init( VipsOperationClass *class )
|
|||||||
vobject_class->nickname = "operation";
|
vobject_class->nickname = "operation";
|
||||||
vobject_class->description = _( "operations" );
|
vobject_class->description = _( "operations" );
|
||||||
vobject_class->print = vips_operation_print;
|
vobject_class->print = vips_operation_print;
|
||||||
|
vobject_class->print_summary = vips_operation_print_summary;
|
||||||
|
|
||||||
class->print_usage = vips_operation_print_usage;
|
class->print_usage = vips_operation_print_usage;
|
||||||
}
|
}
|
||||||
@ -705,8 +753,7 @@ vips_call_options_set( const gchar *option_name, const gchar *value,
|
|||||||
VIPS_DEBUG_MSG( "\tGValue %s = %s\n",
|
VIPS_DEBUG_MSG( "\tGValue %s = %s\n",
|
||||||
g_param_spec_get_name( pspec ), str );
|
g_param_spec_get_name( pspec ), str );
|
||||||
g_free( str );
|
g_free( str );
|
||||||
|
g_value_unset( &gvalue );
|
||||||
g_object_unref( &gvalue );
|
|
||||||
}
|
}
|
||||||
#endif /*VIPS_DEBUG*/
|
#endif /*VIPS_DEBUG*/
|
||||||
}
|
}
|
||||||
|
@ -42,11 +42,12 @@ for prop in op.props:
|
|||||||
|
|
||||||
op.props.left = a
|
op.props.left = a
|
||||||
op.props.right = a
|
op.props.right = a
|
||||||
if op.build() != 0:
|
op2 = Vips.cache_operation_build(op)
|
||||||
|
if op2 == None:
|
||||||
print Vips.error_buffer()
|
print Vips.error_buffer()
|
||||||
sys.exit(-1)
|
sys.exit(-1)
|
||||||
out = op.props.out
|
out = op2.props.out
|
||||||
op.unref_outputs()
|
op2.unref_outputs()
|
||||||
|
|
||||||
print 'out.get_format() =', out.get_format()
|
print 'out.get_format() =', out.get_format()
|
||||||
print 'out.props.format =', out.props.format
|
print 'out.props.format =', out.props.format
|
||||||
@ -54,12 +55,8 @@ print 'out.props.format =', out.props.format
|
|||||||
out.write_to_file("x.v")
|
out.write_to_file("x.v")
|
||||||
|
|
||||||
print 'starting shutdown ...'
|
print 'starting shutdown ...'
|
||||||
del a
|
|
||||||
del op
|
|
||||||
del out
|
|
||||||
|
|
||||||
# sometimes have to do several GCs to get them all, not sure why
|
# sometimes have to do several GCs to get them all, not sure why
|
||||||
for i in range(10):
|
#for i in range(10):
|
||||||
gc.collect ()
|
# gc.collect ()
|
||||||
print 'shutdown!'
|
#print 'shutdown!'
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user