/*---------------------------------------------------------------------------* Project: TwlSDK - PRC - include File: prc/algo_common.h Copyright 2003-2008 Nintendo. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Date:: 2008-09-18#$ $Rev: 8573 $ $Author: okubata_ryoma $ *---------------------------------------------------------------------------*/ #ifndef NITRO_PRC_ALGO_COMMON_H_ #define NITRO_PRC_ALGO_COMMON_H_ #ifdef __cplusplus extern "C" { #endif #include #include #include #include /*===========================================================================* Macros *===========================================================================*/ //--- For Get*BufferSize #define PRCi_ARRAY_SIZE(type, size, dummy) \ sizeof(type) * (size) //--- For Set*BufferInfo #define PRCi_ALLOC_ARRAY(dst, type, size, base, offset) \ (dst) = (type*)((u8*)(base) + (offset)); \ (offset) += sizeof(type) * (size) /*===========================================================================* Constant Definitions *===========================================================================*/ #define PRC_RESAMPLE_DEFAULT_METHOD_COMMON PRC_RESAMPLE_METHOD_RECURSIVE #define PRC_RESAMPLE_DEFAULT_THRESHOLD_COMMON 5 /*===========================================================================* Type Definitions *===========================================================================*/ /*---------------------------------------------------------------------------* Parameters for Sample DB Expansion *---------------------------------------------------------------------------*/ typedef struct PRCPrototypeDBParam_Common { int dummy; } PRCPrototypeDBParam_Common; /*---------------------------------------------------------------------------* Parameters for Input Pattern Interpretation normalizeSize Normalization Size resampleMethod type of algorithm used for normalization resampleThreshold post-normalization resample threshold *---------------------------------------------------------------------------*/ typedef struct PRCInputPatternParam_Common { union { int normalizeSize; int regularizeSize; // Old name }; PRCResampleMethod resampleMethod; int resampleThreshold; } PRCInputPatternParam_Common; /*---------------------------------------------------------------------------* Common Parts of Sample DB-Origin and Input-Origin Recognition Patterns *---------------------------------------------------------------------------*/ typedef struct PRCiPatternData_Common { u16 strokeCount; // entry, and redundant information u16 pointCount; // entry, and redundant information const PRCPoint *pointArray; int *strokes; int *strokeSizes; fx32 *lineSegmentLengthArray; fx16 *lineSegmentRatioToStrokeArray; // fx16 *lineSegmentRatioToWholeArray; u16 *lineSegmentAngleArray; fx32 *strokeLengths; fx16 *strokeRatios; fx32 wholeLength; PRCBoundingBox *strokeBoundingBoxes; PRCBoundingBox wholeBoundingBox; } PRCiPatternData_Common; /*---------------------------------------------------------------------------* Buffer Information for forming pattern dynamically during input. Various recognition algorithms may be extensions of this, so when it is changed you need to check ~BufferInfo_* for these algorithms. *---------------------------------------------------------------------------*/ typedef struct PRCiPatternBufferInfo_Common { PRCPoint *pointArray; int *strokes; int *strokeSizes; fx32 *lineSegmentLengthArray; fx16 *lineSegmentRatioToStrokeArray; // fx16 *lineSegmentRatioToWholeArray; u16 *lineSegmentAngleArray; fx32 *strokeLengths; fx16 *strokeRatios; PRCBoundingBox *strokeBoundingBoxes; } PRCiPatternBufferInfo_Common; /*---------------------------------------------------------------------------* Sample DB-Originating Recognition Pattern *---------------------------------------------------------------------------*/ typedef struct PRCiPrototypeEntry_Common { PRCiPatternData_Common data; const PRCPrototypeEntry *entry; } PRCiPrototypeEntry_Common; /*---------------------------------------------------------------------------* Input-Originating Recognition Pattern *---------------------------------------------------------------------------*/ typedef struct PRCInputPattern_Common { PRCiPatternData_Common data; union { int normalizeSize; int regularizeSize; // Old name }; void *buffer; u32 bufferSize; } PRCInputPattern_Common; /*---------------------------------------------------------------------------* Buffer Information for forming sample DB dynamically during input. Various recognition algorithms may be extensions of this, so when it is changed you need to check ~BufferInfo_* for these algorithms. *---------------------------------------------------------------------------*/ typedef struct PRCiPrototypeListBufferInfo_Common { PRCiPrototypeEntry_Common *patterns; fx32 *lineSegmentLengthArray; fx16 *lineSegmentRatioToStrokeArray; // fx16 *lineSegmentRatioToWholeArray; u16 *lineSegmentAngleArray; int *strokeArray; int *strokeSizeArray; fx32 *strokeLengthArray; fx16 *strokeRatioArray; PRCBoundingBox *strokeBoundingBoxArray; } PRCiPrototypeListBufferInfo_Common; /*---------------------------------------------------------------------------* Sample DB Expanded in Memory *---------------------------------------------------------------------------*/ typedef struct PRCPrototypeDB_Common { PRCiPrototypeEntry_Common *patterns; int patternCount; fx32 *lineSegmentLengthArray; fx16 *lineSegmentRatioToStrokeArray; // fx16 *lineSegmentRatioToWholeArray; u16 *lineSegmentAngleArray; int wholePointCount; int *strokeArray; int *strokeSizeArray; fx32 *strokeLengthArray; fx16 *strokeRatioArray; PRCBoundingBox *strokeBoundingBoxArray; int wholeStrokeCount; int maxPointCount; int maxStrokeCount; union { int normalizeSize; int regularizeSize; // Old name }; const PRCPrototypeList *prototypeList; void *buffer; u32 bufferSize; } PRCPrototypeDB_Common; /*---------------------------------------------------------------------------* Name: PRC_Init_Common Description: Initializes pattern recognition API. Arguments: None. Returns: None. *---------------------------------------------------------------------------*/ static inline void PRC_Init_Common(void) { PRCi_Init(); } /*---------------------------------------------------------------------------* Name: PRC_GetPrototypeDBBufferSizeEx_Common Description: Calculates the work area size required for expanding sample DB. Arguments: prototypeList sample pattern list kindMask mask for type specification ignoreDisabledEntries Whether sample DB entries with the enabled flag FALSE are ever expanded. param parameters for sample DB expansion Returns: required memory capacity for expanding sample DB *---------------------------------------------------------------------------*/ u32 PRC_GetPrototypeDBBufferSizeEx_Common(const PRCPrototypeList *prototypeList, u32 kindMask, BOOL ignoreDisabledEntries, const PRCPrototypeDBParam_Common *param); /*---------------------------------------------------------------------------* Name: PRC_GetPrototypeDBBufferSize_Common Description: Calculates the work area size required for expanding sample DB. Arguments: prototypeList sample pattern list Returns: required memory capacity for expanding sample DB *---------------------------------------------------------------------------*/ u32 static inline PRC_GetPrototypeDBBufferSize_Common(const PRCPrototypeList *prototypeList) { return PRC_GetPrototypeDBBufferSizeEx_Common(prototypeList, PRC_KIND_ALL, FALSE, NULL); } /*---------------------------------------------------------------------------* Name: PRC_InitPrototypeDBEx_Common Description: Creates the PRCPrototypeDB structure. A buffer region larger than the size that PRC_GetPrototypeDBBufferSize returns needs to be set up in the buffer. Parameters during expansion can be specified with param. Arguments: protoDB sample DB structure to be initialized buffer pointer to memory region used for sample DB expansion (Memory area size >= return value of PRC_GetPrototypeDBBufferSize) prototypeList sample pattern list kindMask mask for type specification ignoreDisabledEntries Whether or not sample DB entries with the enabled flag FALSE are ever expanded. param parameters for sample DB expansion Returns: TRUE if create succeeded. *---------------------------------------------------------------------------*/ BOOL PRC_InitPrototypeDBEx_Common(PRCPrototypeDB_Common *protoDB, void *buffer, const PRCPrototypeList *prototypeList, u32 kindMask, BOOL ignoreDisabledEntries, const PRCPrototypeDBParam_Common *param); /*---------------------------------------------------------------------------* Name: PRC_InitPrototypeDB_Common Description: Creates the PRCPrototypeDB structure. A buffer region larger than the size that PRC_GetPrototypeDBBufferSize returns needs to be set up in the buffer. Arguments: protoDB sample DB structure to be initialized buffer pointer to memory region used for sample DB expansion (Memory area size >= return value of PRC_GetPrototypeDBBufferSize) prototypeList sample pattern list Returns: TRUE if create succeeded. *---------------------------------------------------------------------------*/ static inline BOOL PRC_InitPrototypeDB_Common(PRCPrototypeDB_Common *protoDB, void *buffer, const PRCPrototypeList *prototypeList) { return PRC_InitPrototypeDBEx_Common(protoDB, buffer, prototypeList, PRC_KIND_ALL, FALSE, NULL); } /*---------------------------------------------------------------------------* Name: PRC_GetInputPatternBufferSize_Common Description: Calculates work area required for expanding pattern data for comparison. Arguments: maxPointCount Upper limit of input points (includes stylus up marker) maxStrokeCount Upper limit of stroke count Returns: Memory capacity required for expanding pattern *---------------------------------------------------------------------------*/ u32 PRC_GetInputPatternBufferSize_Common(int maxPointCount, int maxStrokeCount); /*---------------------------------------------------------------------------* Name: PRC_InitInputPatternEx_Common Description: Creates PRCInputPattern structure. Specification of parameters for input pattern interpretation can be done with param. Arguments: pattern pattern structure to be initialized buffer pointer to memory region used for pattern expansion (Region size >=return value of PRC_GetInputPatternBufferSize) strokes Raw input coordinate value before forming maxPointCount Upper limit of input points (includes stylus up marker) maxStrokeCount Upper limit of stroke count param parameters for input pattern interpretation Returns: TRUE if create succeeded. *---------------------------------------------------------------------------*/ BOOL PRC_InitInputPatternEx_Common(PRCInputPattern_Common *pattern, void *buffer, const PRCStrokes *strokes, int maxPointCount, int maxStrokeCount, const PRCInputPatternParam_Common *param); /*---------------------------------------------------------------------------* Name: PRC_InitInputPattern_Common Description: Creates PRCInputPattern structure. Arguments: pattern pattern structure to be initialized buffer pointer to memory region used for pattern expansion (Region size >=return value of PRC_GetInputPatternBufferSize) strokes Raw input coordinate value before forming maxPointCount Upper limit of input points (includes stylus up marker) maxStrokeCount Upper limit of stroke count Returns: TRUE if create succeeded. *---------------------------------------------------------------------------*/ static inline BOOL PRC_InitInputPattern_Common(PRCInputPattern_Common *pattern, void *buffer, const PRCStrokes *strokes, int maxPointCount, int maxStrokeCount) { return PRC_InitInputPatternEx_Common(pattern, buffer, strokes, maxPointCount, maxStrokeCount, NULL); } /*---------------------------------------------------------------------------* Name: PRC_GetInputPatternStrokes_Common Description: Gets dot sequence data from PRCInputPattern structure. Arguments: strokes: Obtained dot sequence data Overwriting is not permitted. input Input pattern Returns: None. *---------------------------------------------------------------------------*/ void PRC_GetInputPatternStrokes_Common(PRCStrokes *strokes, const PRCInputPattern_Common *input); // For debugging void PRCi_PrintPatternData_Common(PRCiPatternData_Common *data); /*===========================================================================* Inline Functions *===========================================================================*/ #ifdef __cplusplus } /* extern "C" */ #endif /* NITRO_PRC_ALGO_COMMON_H_ */ #endif