123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- /*****************************************************************************
- * HCtype.h
- *****************************************************************************
- *
- * Project: HALCON/libhalcon
- * Description: (Global) data structures defining the processing context
- * for HALCON operator instances and HALCON operator threads
- *
- * (c) 1996-2020 by MVTec Software GmbH
- * www.mvtec.com
- *
- *****************************************************************************/
- #ifndef HCTYPE_H
- #define HCTYPE_H
- #include "HErrorDef.h"
- #include "IPType.h"
- #if defined(__cplusplus)
- extern "C" {
- #endif
- #ifndef HC_NO_STRUCT_MEMBER_ALIGNMENT
- /* sets the struct member alignment to avoid problems if
- * the settings of the user differ to those of the HALCON
- * version. (8 is the default alignment, generally) */
- # pragma pack(push, 8)
- #endif
- /*---------------------------------------------------------------------------
- * aop_split_t defines CORE-AOP levels
- *---------------------------------------------------------------------------*/
- typedef enum
- {
- split_tuple = 0,
- split_channel,
- split_domain,
- split_num
- } aop_split_t;
- /*---------------------------------------------------------------------------*/
- /* ATTENTION! Increase H_OPERATOR_INFO_VERSION/DERIVATE whenever you change
- * or add operator info identifyers
- * The version number is composed as follows:
- * Version#32 := [Major#8 Minor#8 OptionalInfo16]
- * whereas major#8 denotes a 1 byte coded mojor version number,
- * Minor#8 denotes a 1 byte coded minor version number,
- * OptionalInfo16 denotes a 16 bit coded bitfield of optional coded
- * operator information
- *---------------------------------------------------------------------------*/
- #define H_OPERATOR_INFO_VERSION 0x0400 /* 4.0 */
- #ifndef HC_NO_COMPUTE_DEVICES
- # define HOI_COMPUTE_DEVICES \
- (1 << 0) /* Bit0: information for compute device \
- * support available */
- #else
- # define HOI_COMPUTE_DEVICES 0
- #endif
- #define H_OPERATOR_INFO_DERIVATE \
- ((H_OPERATOR_INFO_VERSION << 16) | HOI_COMPUTE_DEVICES)
- /* HALCON operator info identifyers: */
- #define HOIID_NumInpObjPar 0
- #define HOIID_NumOutpObjPar 1
- #define HOIID_NumInpCtrlPar 2
- #define HOIID_NumOutpCtrlPar 3
- #define HOIID_LogicalName 4
- #define HOIID_PhysicalName 5
- #define HOIID_ParameterName 6
- #define HOIID_ParameterType 7 /* [2] */
- #define HOIID_process_excl_local 8
- #define HOIID_parallelization 9
- #define HOIID_splitIOPmask 10 /*[split_num]*/
- #define HOIID_tupleIOPmask 11 /*[split_num]*/
- #define HOIID_splitIOPref 12 /*[split_num]*/
- #define HOIID_RegionPost 13
- #define HOIID_ParameterCosts 14 /*[MAX_INP_CTRL_PAR]*/
- #define HOIID_ParameterPost 15 /*[MAX_OUTP_CTRL_PAR]*/
- #define HOIID_aopCost 16
- #define HOIID_numCost 17
- #define HOIID_parallelMinCosts 18
- #define HOIID_parallelRegionsplit 19
- #define HOIID_HelpIndex 20
- #define HOIID_InfoLength 21
- #define HOIID_Class 22 /*[MAX_CHAPTER]*/
- #define HOIID_ClassName 23 /*[MAX_CHAPTER]*/
- #define HOIID_package_id 24
- /* --- compute devices: */
- #define HOIID_compute_device 25
- #define HOIID_cd_supported_image_kinds 26
- #define HOIID_cd_supported_values 27
- #define HOIID_cd_supported_values_num 28
- #define HOIID_procedure 50
- #define HOIID_module 51
- /*---------------------------------------------------------------------------
- * HXPkgOpenId initializes extension package structures and checks
- * compatibility.
- *---------------------------------------------------------------------------*/
- extern HLibExport Herror HXPkgOpenId(int32_t xpkg_id, uint32_t halcon_version,
- uint32_t opinfo_version, int op_num,
- int* osid);
- /*---------------------------------------------------------------------------
- * HXPkgSetOpInfo sets operator information of a specific extension package
- * operator.
- *---------------------------------------------------------------------------*/
- extern HLibExport Herror HXPkgSetOpInfo(int32_t xpkg_id, int32_t op_id,
- int32_t oi_id, ...);
- /*---------------------------------------------------------------------------*/
- /* H_OPERATOR_PARAMETERS - data structure that contains the operator
- * parameters passed to the language interface. This information is only valid
- * for the processing time of the associated instance/HALCON thread.
- * All read/write accesses to the information are done exclusively
- * (thus different HALCON threads of the same instance differ in the
- * content of this structure).
- *---------------------------------------------------------------------------*/
- typedef struct
- {
- /*-------------------------------- operator parameters --------------------*/
- /*______________________________________________input object parameters:___*/
- Hkey* InpObjList[MAX_INP_OBJ_PAR + 1]; /* for every input object par *
- * an array of object keys */
- Hkey InpObjSingle[MAX_INP_OBJ_PAR + 1]; /* used, when the array of obj
- * keys has size 1 */
- INT4_8 InpObjNum[MAX_INP_OBJ_PAR + 1]; /* number of objects per input obj. *
- * parameter; index: 1..inp_obj */
- int8_t freeIOP[MAX_INP_OBJ_PAR + 1];
- /*_____________________________________________input control parameters:___*/
- Hctuple** InpCtrlList; /* used to access inp. ctrl handles */
- Hctuple*
- InpCtrlStack[MAX_INP_CTRL_PAR]; /* stores interf./Single references*/
- Hctuple InpCtrlNested[MAX_INP_CTRL_PAR]; /* holds tuple trunks, eg for pure
- * type input ctrls(single values)*/
- bool ctrl_inherited; /* true, if all ctrl. values are inherited from
- * a father instance (only important for
- * correctly freeing the InpCtrlList). */
- /*_____________________________________________output object parameters:___*/
- Hkey* OutpObjList[MAX_OUTP_OBJ_PAR + 1]; /* for every output object par. *
- * an array of objects keys */
- INT4_8 OutpObjNum[MAX_OUTP_OBJ_PAR + 1]; /* number of objects per output *
- * object par.; index: 1.. */
- INT4_8 OutpObjLen[MAX_OUTP_OBJ_PAR + 1]; /* length of OutpObjList per *
- * output object par.; index: 1.. */
- /*____________________________________________output control parameters:___*/
- Hctuple** OutpCtrlList; /* used to access outp. ctrl parameters */
- Hctuple* OutpCtrlStack[MAX_OUTP_CTRL_PAR]; /* stores interface/Nested ref. */
- Hctuple OutpCtrlNested[MAX_OUTP_CTRL_PAR]; /* holds tuple trunks for output
- * ctrl values (eg, pure type
- * operators) */
- uint32_t
- freeOCP; /* bitcoded free flag: 8*sizeof(freeOCP)>=MAX_OUTP_CTRL_PAR*/
- } H_OPERATOR_PARAMETERS;
- /*---------------------------------------------------------------------------*/
- /* H_OPERATOR_SHARED - data structure that is shared among internal threads.
- *---------------------------------------------------------------------------*/
- typedef struct
- {
- int32_t run_state;
- } H_OPERATOR_SHARED;
- typedef enum
- {
- ph_ready = 0,
- ph_running = H_MSG_OK,
- ph_break = H_ERR_BREAK,
- ph_hen_canceled = H_ERR_HEN_CANCEL,
- ph_canceled = H_ERR_CANCEL
- } HRunState;
- typedef struct HLISTEL
- { /* placeholder for internal double linked list element type */
- struct HLISTEL* prev;
- struct HLISTEL* next;
- } H_LIST_EL;
- typedef struct HALCON_OPERATOR_HANDLE
- {
- H_LIST_EL list_el; /*list_el must be defined in the first place*/
- void* generator;
- int32_t proc_index; /* Index of HALCON operator */
- H_OPERATOR_PARAMETERS* param; /* operator parameters (thread-specific) */
- H_OPERATOR_SHARED* shared_data; /*shared operator data*/
- } H_OPHANDLE;
- typedef H_OPHANDLE* Hophandle_;
- #ifndef HC_NO_STRUCT_MEMBER_ALIGNMENT
- # pragma pack(pop)
- #endif
- #if defined(__cplusplus)
- }
- #endif
- #endif
|