The metadata object should be deleted after it is handed off to the image operation. Typically, all this looks like the following:
CPI_ImageOp ShiftExec( CPI_Float32 myTime, CPI_Uint8 quality, CPI_Uint32 output, CPI_Bool viewerOutput, CPI_Float32 scaleX, CPI_Float32 scaleY ) { CPI_Int32 pixels; CPI_ImageOp retval = NULL; CPI_ImageOp myInputs; // declare and create metadata object CPI_Metadata nodeparms = cpiCreateMetadata(); myInputs = cpiGetInputOp( 0, myTime, quality, scaleX, scaleY ); // get a value from the user cpiGetInteger ( &pixels, "pixels", myTime ); // put the value into the metadata object, using the name "pixels" cpiSetMetaInt32( nodeparms, "pixels", pixels ); // add the "shift" operation to the list of operations, and pass // it the parameters contained in the 'nodeparms' metadata object if ( myInputs != NULL ) retval = cpiAddImageOp( "shift", nodeparms, &myInputs, 1 ); else retval = false; // clean up by deleting the metadata cpiDeleteMetadata( nodeparms ); return retval; }To retrieve this value in the IM, the call looks like
cpiGetMetaInt32( parms, "xsize", &xsize );The following is a complete list of metadata operations and a description of each.
CPI_Metadata cpiCreateMetadata( void ); CPI_Metadata cpiCloneMetadata( const CPI_Metadata meta ); CPI_Bool cpiMergeMetadata( CPI_Metadata result, const CPI_Metadata meta ); void cpiClearMetadata( CPI_Metadata meta ); void cpiDeleteMetadata( CPI_Metadata meta ); CPI_Bool cpiUnsetMetadata( CPI_Metadata meta, const char *name ); void cpiPrintMetadata( CPI_Metadata meta ); Prints the contents of the metadataSetting and Getting Values
CPI_Bool cpiSetMetaString( CPI_Metadata meta, const char *name, const char *value ); CPI_Bool cpiSetMetaBool( CPI_Metadata meta, const char *name, CPI_Bool value ); CPI_Bool cpiSetMetaInt32( CPI_Metadata meta, const char *name, CPI_Int32 value ); CPI_Bool cpiSetMetaFloat32( CPI_Metadata meta, const char *name, CPI_Float32 value ); CPI_Bool cpiSetMetaInt64( CPI_Metadata meta, const char *name, CPI_Int64 value ); CPI_Bool cpiSetMetaFloat64( CPI_Metadata meta, const char *name, CPI_Float64 value ); CPI_Bool cpiGetMetaString( const CPI_Metadata meta, const char *name, char *result, size_t buffersize ); CPI_Bool cpiGetMetaBool( CPI_Metadata meta, const char *name, CPI_Bool *result ); CPI_Bool cpiGetMetaInt32( const CPI_Metadata meta, const char *name, int *result ); CPI_Bool cpiGetMetaFloat32( const CPI_Metadata meta, const char *name, float *result ); CPI_Bool cpiGetMetaInt64( const CPI_Metadata meta, const char *name, int *result ); CPI_Bool cpiGetMetaFloat64( const CPI_Metadata meta, const char *name, float *result );File-handling Metadata
CPI_Bool cpiSetFilename( CPI_Metadata meta, const char *filename ); CPI_Bool cpiGetFilename( const CPI_Metadata meta, char *result, size_t buffersize ); CPI_Bool cpiSetDeviceName( CPI_Metadata meta, const char *devname ); CPI_Bool cpiGetDeviceName( const CPI_Metadata meta, char *result, size_t buffersize ); CPI_Bool cpiSetRead( CPI_Metadata meta, CPI_Bool onoff ); CPI_Bool cpiGetRead( const CPI_Metadata meta, CPI_Bool *result ); CPI_Bool cpiSetWrite( CPI_Metadata meta, CPI_Bool onoff ); CPI_Bool cpiGetWrite( const CPI_Metadata meta, CPI_Bool *result ); CPI_Bool cpiSetTrunc( CPI_Metadata meta, CPI_Bool onoff ); CPI_Bool cpiGetTrunc( const CPI_Metadata meta, CPI_Bool *result ); CPI_Bool cpiSetFileSize( CPI_Metadata meta, CPI_Uint64 filesize ); CPI_Bool cpiGetFileSize( const CPI_Metadata meta, CPI_Uint64 *result ); CPI_Bool cpiSetFileLastMod( CPI_Metadata meta, const char *time ); CPI_Bool cpiGetFileLastMod( const CPI_Metadata meta, char *result, size_t buffersize ); CPI_Bool cpiSetIsDir( CPI_Metadata meta, CPI_Bool onoff ); CPI_Bool cpiGetIsDir( const CPI_Metadata meta, CPI_Bool *result ); CPI_Bool cpiSetIsFile( CPI_Metadata meta, CPI_Bool onoff ); CPI_Bool cpiGetIsFile( const CPI_Metadata meta, CPI_Bool *result );Image-related Metadata
The normal case for specifying size.... CPI_Bool cpiSetImageFullSize( CPI_Metadata meta, CPI_Int32 xsize, CPI_Int32 ysize ); CPI_Bool cpiGetImageFullSize( CPI_Metadata meta, CPI_Int32 *xsize, CPI_Int32 *ysize ); For Global space, if your format supports active area where the file represents a sub-image of a larger space, this sets an offset into the larger space CPI_Bool cpiSetImageOffset( CPI_Metadata meta, CPI_Int32 xoff, CPI_Int32 yoff ); CPI_Bool cpiGetImageOffset( CPI_Metadata meta, CPI_Int32 *xoff, CPI_Int32 *yoff ); For Global space, if your format supports active area where the file represents a sub-image of a larger space, this sets the size of your sub-image CPI_Bool cpiSetImageSize( CPI_Metadata meta, CPI_Int32 xsize, CPI_Int32 ysize ); CPI_Bool cpiGetImageSize( CPI_Metadata meta, CPI_Int32 *xsize, CPI_Int32 *ysize ); Other image information CPI_Bool cpiSetImageChannels( CPI_Metadata meta, CPI_Int32 channels ); CPI_Bool cpiGetImageChannels( const CPI_Metadata meta, CPI_Int32 *result ); CPI_Bool cpiSetImageBitDepth( CPI_Metadata meta, CPI_Int32 bitdepth ); CPI_Bool cpiGetImageBitDepth( const CPI_Metadata meta, CPI_Int32 *result ); CPI_Bool cpiSetImageIsLog( CPI_Metadata meta, CPI_Bool islog ); CPI_Bool cpiGetImageIsLog( const CPI_Metadata meta ); CPI_Bool cpiSetImageIsVideo( CPI_Metadata meta, CPI_Bool isvideo ); CPI_Bool cpiGetImageIsVideo( const CPI_Metadata meta ); CPI_Bool cpiSetImagePixelRatio( CPI_Metadata meta, CPI_Float32 pixelratio ); CPI_Bool cpiGetImagePixelRatio( const CPI_Metadata meta, CPI_Float32 *result ); CPI_Bool cpiSetImageIsPremultiplied( CPI_Metadata meta, CPI_Bool isPremult ); CPI_Bool cpiGetImageIsPremultiplied( const CPI_Metadata meta ); For formats that support more than one frame in a file or for a collection of files from the file manager CPI_Bool cpiSetImageRangeStart( CPI_Metadata meta, CPI_Int32 framestart ); CPI_Bool cpiGetImageRangeStart( const CPI_Metadata meta, CPI_Int32 *result ); CPI_Bool cpiSetImageRangeEnd( CPI_Metadata meta, CPI_Int32 frameend ); CPI_Bool cpiGetImageRangeEnd( const CPI_Metadata meta, CPI_Int32 *result ); CPI_Bool cpiSetImageRangeIncr( CPI_Metadata meta, CPI_Int32 frameincr ); CPI_Bool cpiGetImageRangeIncr( const CPI_Metadata meta, CPI_Int32 *result ); CPI_Bool cpiSetImageSubSupport( CPI_Metadata meta, CPI_Bool onoff ); CPI_Bool cpiGetImageSubSupport( CPI_Metadata meta ); Formats that can have animated parameters need to be able to get the time that they should evaluate their parameters at NOTE : This time is only set for file format plugins! CPI_Bool cpiGetParmEvalTime( CPI_Metadata meta, CPI_Float32 *result );