add source codes

This commit is contained in:
miketsai 2026-04-12 17:47:54 +08:00
parent 4d27951ea6
commit 9d7d9073a5
1315 changed files with 430579 additions and 0 deletions

View File

@ -0,0 +1,90 @@
#ifndef KDP2_INF_APP_YOLO_H
#define KDP2_INF_APP_YOLO_H
#include <stdint.h>
#include "kp_struct.h"
#define KDP2_INF_ID_APP_YOLO 11
#define KDP2_JOB_ID_APP_YOLO_CONFIG_POST_PROC 100 // handle set or get
typedef struct
{
uint32_t model_id; // specify model id
kp_normalize_mode_t model_norm; // specify model normalization
} __attribute__((aligned(4))) kp_app_yolo_config_t;
/**
* @brief describe a yolo post-process configurations for yolo v5 series
*/
typedef struct
{
float prob_thresh;
float nms_thresh;
uint32_t max_detection_per_class;
uint16_t anchor_row;
uint16_t anchor_col;
uint16_t stride_size;
uint16_t reserved_size;
uint32_t data[40];
} __attribute__((aligned(4))) kp_app_yolo_post_proc_config_t;
// align to YOLO_V5_MAX_BOX_NUM in post_utils.h
#define YOLO_GOOD_BOX_MAX_SCPU 500 /**< maximum number of bounding boxes for Yolo models */
/**
* @brief describe a yolo output result after post-processing
* The object name corresponding to class_num in each boxex are listed in the document in Kneron Document Center
* Please visit https://doc.kneron.com/ -> Kneron PLUS - C -> Appendix -> Yolo Object Name Mapping
*/
typedef struct
{
uint32_t class_count; /**< total class count */
uint32_t box_count; /**< boxes of all classes */
kp_bounding_box_t boxes[YOLO_GOOD_BOX_MAX_SCPU]; /**< box information */
} __attribute__((aligned(4))) kp_app_yolo_result_t;
/********** KDP2_INF_ID_APP_YOLO **********/
// post-proc config data struct shared for setting or getting
typedef struct
{
/* header stamp is necessary for data transfer between host and device */
kp_inference_header_stamp_t header_stamp;
uint32_t set_or_get; // get = 0, set = 1
uint32_t model_id;
uint32_t param_size;
uint8_t param_data[200]; // contains kp_app_yolo_post_proc_config_*** body
} __attribute__((aligned(4))) kdp2_ipc_app_yolo_post_proc_config_t;
// input header for 'Kneron APP Yolo Inference'
typedef struct
{
/* header stamp is necessary for data transfer between host and device */
kp_inference_header_stamp_t header_stamp;
uint32_t inf_number;
uint32_t width;
uint32_t height;
uint32_t channel;
uint32_t model_id;
uint32_t image_format; // kp_image_format_t
uint32_t model_normalize; // kp_normalize_mode_t
} __attribute__((aligned(4))) kdp2_ipc_app_yolo_inf_header_t;
// result (header + data) for 'Kneron APP Yolo Inference'
typedef struct
{
/* header stamp is necessary for data transfer between host and device */
kp_inference_header_stamp_t header_stamp;
uint32_t inf_number;
kp_app_yolo_result_t yolo_data;
} __attribute__((aligned(4))) kdp2_ipc_app_yolo_result_t;
void kdp2_app_yolo_config_post_process_parameters(int job_id, int num_input_buf, void **inf_input_buf_list);
void kdp2_app_yolo_inference(int job_id, int num_input_buf, void **inf_input_buf_list);
void kdp2_app_yolo_inference_deinit();
#endif

View File

@ -0,0 +1,92 @@
/*
* Utility function headers for the postprocess functions.
*
* Copyright (C) 2021 Kneron, Inc. All rights reserved.
*
*/
#ifndef DEMO_POST_UTILS_H
#define DEMO_POST_UTILS_H
#include <stdlib.h>
#include <stdio.h>
#include "utils.h"
#define YOLO_BOX_FIX_CH (5)
#define YOLO_V5_O0_GRID_W (60)
#define YOLO_V5_O0_GRID_H (32)
#define YOLO_V5_O0_GRID_MAX (YOLO_V5_O0_GRID_W * YOLO_V5_O0_GRID_H)
#define YOLO_V5_O1_GRID_W (30)
#define YOLO_V5_O1_GRID_H (16)
#define YOLO_V5_O1_GRID_MAX (YOLO_V5_O1_GRID_W * YOLO_V5_O1_GRID_H)
#define YOLO_V5_O2_GRID_W (15)
#define YOLO_V5_O2_GRID_H (8)
#define YOLO_V5_O2_GRID_MAX (YOLO_V5_O2_GRID_W * YOLO_V5_O2_GRID_H)
#define YOLO_V5_CELL_BOX_NUM (3)
#define YOLO_V5_MAX_BOX_NUM MIN(500, MAX(MAX(YOLO_V5_O1_GRID_MAX, YOLO_V5_O2_GRID_MAX), YOLO_V5_O0_GRID_MAX) * YOLO_V5_CELL_BOX_NUM)
#define KDP_COL_MIN 16 /* Bytes, i.e. 128 bits */
#define NMS_ALL_CLASS (0)
#define NMS_GROUP_CLASS (1)
#define NMS_SINGLE_CLASS (2)
// thresholds for various solutions
// prob_thresh is the score threshold
// nms_thresh is the iou threshold
extern float nms_thresh_yolov5;
extern float prob_thresh_yolov5;
extern const float anchors_yolov5[3][3][2];
// how a output node layout
struct output_node {
int8_t *base_ptr;
uint32_t ch;
uint32_t row;
uint32_t col;
uint32_t col_len;
uint32_t radix;
float scale;
};
/* Shared global variable area among models */
struct yolo_v5_post_globals_s {
struct bounding_box_s bboxes[YOLO_V5_MAX_BOX_NUM];
struct bounding_box_s result_tmp_s[YOLO_V5_MAX_BOX_NUM];
};
struct yolo_v5_post_globals_s *yolov5_gp;
struct yolo_v5_post_globals_s *get_yolov5_gp();
void free_gp(void *gp);
// conversion functions
float do_div_scale(float v, int div, float scale);
float do_div_scale_optim(float v, float scale);
uint32_t round_up(uint32_t num);
// bounding box helpers
int int_comparator(const void *pa, const void *pb);
int float_comparator(float a, float b);
int box_score_comparator(const void *pa, const void *pb);
int box_lm_score_comparator(const void *pa, const void *pb);
float box_intersection(struct bounding_box_s *a, struct bounding_box_s *b);
float box_union(struct bounding_box_s *a, struct bounding_box_s *b);
float box_iou(struct bounding_box_s *a, struct bounding_box_s *b);
float box_area(struct bounding_box_s *box);
float box_lm_area(struct bounding_box_landmark_s *box);
float overlap(float l1, float r1, float l2, float r2);
// functions to get parameters from 520/720 specific structures to common structure
uint32_t get_index(struct output_node node, uint32_t ch_idx, uint32_t row_idx, uint32_t col_idx);
int8_t *get_data(struct output_node node, uint32_t ch_idx, uint32_t row_idx, uint32_t col_idx);
void get_output_node(struct output_node *out_node, struct kdp_image_s *image_p, int node_num);
// more bounding box helpers
int nms_bbox(struct bounding_box_s *potential_boxes, struct bounding_box_s *temp_results,
int class_num, int good_box_count, int max_boxes, int single_class_max_boxes, struct bounding_box_s *results,
float score_thresh, float iou_thresh, float nms_mode);
void remap_bbox(struct kdp_image_s *image_p, int index, struct bounding_box_s *box, int need_scale);
#endif

View File

@ -0,0 +1,29 @@
/*
* STDC inference application header for KL630 host_stream
*/
#ifndef STDC_APP_H
#define STDC_APP_H
#include <stdint.h>
#include "kp_struct.h"
#include "stdc_post_process.h"
/* Inference request header sent from host to device */
typedef struct {
kp_inference_header_stamp_t header_stamp;
uint32_t width;
uint32_t height;
uint32_t model_id;
float fps;
} __attribute__((aligned(4))) stdc_inf_header_t;
/* Inference result sent from device back to host */
typedef struct {
kp_inference_header_stamp_t header_stamp;
stdc_result_t stdc_result;
} __attribute__((aligned(4))) stdc_inf_result_t;
void stdc_inference(int job_id, int num_input_buf, void **inf_input_buf_list);
void stdc_inference_deinit(void);
#endif /* STDC_APP_H */

View File

@ -0,0 +1,106 @@
/*
* STDC Segmentation Post-Processing for KL630
* Matches Python stdc630inference.py logic
*/
#ifndef STDC_POST_PROCESS_H
#define STDC_POST_PROCESS_H
#include <stdint.h>
#include "ncpu_gen_struct.h"
/* Job ID - must match host_stream.ini [nnm] JobId */
#define STDC_JOB_ID 200
/* Model ID from readme.txt */
#define STDC_MODEL_ID 32769
/* Number of segmentation classes */
#define STDC_NUM_CLASSES 8
/* Maximum seg map pixels (safe upper bound: 128 cols × 64 rows) */
#define STDC_SEG_MAP_MAX 8192
/* Class indices (from Python CLASS_LABELS dict) */
#define STDC_CLASS_BUNKER 0
#define STDC_CLASS_CAR 1
#define STDC_CLASS_GRASS 2
#define STDC_CLASS_GREENERY 3
#define STDC_CLASS_PERSON 4
#define STDC_CLASS_POND 5
#define STDC_CLASS_ROAD 6
#define STDC_CLASS_TREE 7
/* Warning thresholds (from Python code) */
#define STDC_WARNING_SECONDS 2.0f
#define STDC_MOTION_THRESHOLD 3.0f
#define STDC_TREE_GROWTH_THR 0.05f
#define THR_GRASS_ROI 0.30f /* grass ratio in forward ROI */
#define THR_CAR_GLOBAL 0.05f
#define THR_PERSON_GLOBAL 0.01f
#define THR_GREENERY_GLOBAL 0.20f
#define THR_BUNKER_GLOBAL 0.01f
#define THR_POND_GLOBAL 0.01f
#define THR_TREE_DENSE 0.30f
/* Collision ROI boundaries (fraction of image) - from Python COL_ROI_* */
#define COL_ROI_LEFT 0.25f
#define COL_ROI_RIGHT 0.75f
#define COL_ROI_TOP 0.25f
#define COL_ROI_BOTTOM 0.70f
#define THR_PERSON_COLLISION 0.01f
#define THR_CAR_COLLISION 0.05f
#define THR_TREE_COLLISION 0.20f
#define THR_BUNKER_COLLISION 0.01f
#define THR_POND_COLLISION 0.01f
/* Forward ROI trapezoid - from Python roi_pts */
#define FWD_ROI_TOP_LEFT 0.45f
#define FWD_ROI_TOP_RIGHT 0.55f
#define FWD_ROI_BOTTOM_LEFT 0.30f
#define FWD_ROI_BOTTOM_RIGHT 0.70f
#define FWD_ROI_TOP 0.55f
#define FWD_ROI_BOTTOM 0.95f
typedef struct {
float fps;
} stdc_post_proc_params_t;
/* Per-class analysis result */
typedef struct {
float class_ratio[STDC_NUM_CLASSES]; /* global ratio per class */
float grass_roi_ratio; /* grass ratio in forward ROI */
float tree_roi_ratio; /* tree ratio in forward ROI */
float tree_roi_growth; /* delta vs previous frame */
float col_person_ratio; /* collision ROI ratios */
float col_car_ratio;
float col_tree_ratio;
float col_bunker_ratio;
float col_pond_ratio;
float grass_duration_sec; /* consecutive on-grass duration */
float motion_diff; /* mean luma diff in forward ROI */
uint8_t is_moving; /* 1 if ROI motion exceeds threshold */
uint8_t on_grass; /* 1 if on_grass detected */
uint8_t grass_warning; /* 1 if on grass for warning duration */
uint8_t person_warning; /* 1 if person > threshold */
uint8_t car_warning; /* 1 if car > threshold */
uint8_t greenery_warning; /* 1 if greenery > threshold */
uint8_t bunker_warning; /* 1 if bunker > threshold */
uint8_t pond_warning; /* 1 if pond > threshold */
uint8_t collision_risk; /* 1 if collision risk in center ROI */
uint8_t tree_approaching; /* 1 if tree ROI grows too fast */
uint8_t tree_dense; /* 1 if tree dense area */
uint32_t frame_count; /* analyzed frame count */
uint32_t seg_width; /* segmentation output width */
uint32_t seg_height; /* segmentation output height */
} stdc_analysis_t;
typedef struct {
stdc_analysis_t analysis;
uint8_t seg_map[STDC_SEG_MAP_MAX]; /* argmax class per pixel, row-major */
} stdc_result_t;
/* Post-processing function - matches VMF NNM post_proc_func signature */
int stdc_post_process(int model_id, struct kdp_image_s *image_p);
#endif /* STDC_POST_PROCESS_H */

76
include/common/base.h Normal file
View File

@ -0,0 +1,76 @@
/**
* @file base.h
* @brief Basic utils & struct
* @copyright (c) 2018 Kneron Inc. All right reserved.
*/
#ifndef __BASE_H__
#define __BASE_H__
#include <stdint.h>
#ifndef BIT
#define BIT(x) (0x01U << (x))
#endif
#define BIT0 0x00000001
#define BIT1 0x00000002
#define BIT2 0x00000004
#define BIT3 0x00000008
#define BIT4 0x00000010
#define BIT5 0x00000020
#define BIT6 0x00000040
#define BIT7 0x00000080
#define BIT8 0x00000100
#define BIT9 0x00000200
#define BIT10 0x00000400
#define BIT11 0x00000800
#define BIT12 0x00001000
#define BIT13 0x00002000
#define BIT14 0x00004000
#define BIT15 0x00008000
#define BIT16 0x00010000
#define BIT17 0x00020000
#define BIT18 0x00040000
#define BIT19 0x00080000
#define BIT20 0x00100000
#define BIT21 0x00200000
#define BIT22 0x00400000
#define BIT23 0x00800000
#define BIT24 0x01000000
#define BIT25 0x02000000
#define BIT26 0x04000000
#define BIT27 0x08000000
#define BIT28 0x10000000
#define BIT29 0x20000000
#define BIT30 0x40000000
#define BIT31 0x80000000
#define STS_OK 0
#define STS_ERR_NORMAL 1
#define STS_ERR_CRC 2
#ifndef TYPE_DEFINED
#ifndef u8
typedef unsigned char u8;
#endif
#ifndef u16
typedef unsigned short u16;
#endif
#ifndef u32
typedef unsigned int u32;
#endif
#ifndef s16
typedef short s16;
#endif
#ifndef s32
typedef int s32;
#endif
#define TYPE_DEFINED
#endif
#endif

View File

@ -0,0 +1,163 @@
#ifndef __EXTEND_INTERFACE_H__
#define __EXTEND_INTERFACE_H__
/******************************************************
This is the IPC interface to support extended features without NPU involvement.
Such as: IE operation, auxiliary computation, etc.
******************************************************/
#ifdef __cplusplus
extern "C" {
#endif
#include "stdint.h"
#ifndef BOOLEAN_DEFINED
#ifndef boolean
typedef char boolean;
#endif
#define BOOLEAN_DEFINED
#endif
#define MAX_INT_FOR_ALIGN 0x10000000
/*************************************************************************
IE interfaces
**************************************************************************/
#define CFG_IE_MESH_POINTS_ONLINE (DISABLE)
typedef enum {
OPERATION_FAILED = -1, /* Failure in doing operation */
OPERATION_SUCCESS = 1, /* Operation Succeded */
OPERATION_INVALID_PARM, /* Inavlid parameter provided */
OPERATION_NOT_SUPPORTED, /* Parameter/operation not supported */
OPERATION_ALIGN_32 = MAX_INT_FOR_ALIGN
} ext_oper_sts_t;
typedef enum {
IE_OPS_MODE_ROTATION = 0x1,
IE_OPS_MODE_DEWARP = 0x2,
IE_OPS_MODE_AFFINE = 0x4,
IE_OPS_MODE_ALIGN_32 = MAX_INT_FOR_ALIGN
} ie_ops_mode_t;
typedef enum {
IE_ANGLE_OF_ROTATION_0 = 0,
IE_ANGLE_OF_ROTATION_90 = 1,
IE_ANGLE_OF_ROTATION_180 = 2,
IE_ANGLE_OF_ROTATION_270 = 3,
IE_ANGEL_OF_ROTATE_ALIGN_32 = MAX_INT_FOR_ALIGN
} ie_angle_of_rotation_t;
struct ie_control_points_info {
uint8_t x;
uint8_t y;
};
struct ie_control_points {
uint8_t cols;
uint8_t rows;
struct ie_control_points_info infos[64];
};
struct ie_affine_matrix {
float val[2][3];
};
typedef struct ie_input_img_cfg {
uint32_t imgfmt;
uint32_t pad_mode;
int width;
int height;
int stride;
/* Crop parameters or other purposes */
int crop_top;
int crop_bottom;
int crop_left;
int crop_right;
/* Pad parameters or other purposes */
int pad_top;
int pad_bottom;
int pad_left;
int pad_right;
int flip_face;
} ie_input_img_cfg_t;
typedef struct ie_output_img_cfg {
uint32_t imgfmt;
int width;
int height;
int stride;
} ie_output_img_cfg_t;
typedef struct ie_ops_params {
ie_ops_mode_t ops_mode __attribute__((aligned (4)));
union {
ie_angle_of_rotation_t angle_of_rotation __attribute__((aligned (4)));
struct ie_affine_matrix affine;
#if CFG_IE_MESH_POINTS_ONLINE == ENABLE
struct ie_control_points ctrlps;
#endif
} u;
} ie_ops_params_t;
typedef struct ie_config {
ie_ops_params_t ops_params;
ie_input_img_cfg_t input_cfg;
ie_output_img_cfg_t output_cfg;
} ie_config_t;
typedef struct {
int frame_seq;
ie_config_t ie_cfg;
uint32_t in_buf_addr;
uint32_t in_buf_len;
uint32_t out_buf_addr;
uint32_t out_buf_len;
} ie_oper_params_t;
typedef struct {
int rslt_type;
ext_oper_sts_t sts;
/* output buf */
uint32_t out_buf_addr;
uint32_t out_filled_len;
int32_t seq_num;
} ie_oper_result_t;
/*************************************************************************
Auxilary Computation Interfaces
**************************************************************************/
typedef struct aux_compute_s {
int compute_type;
} aux_compute_config_t;
typedef struct {
int frame_seq;
aux_compute_config_t aux_compute_cfg;
uint32_t in_buf_addr;
uint32_t in_buf_len;
uint32_t out_buf_addr;
uint32_t out_buf_len;
} aux_compute_params_t;
typedef struct {
int rslt_type;
ext_oper_sts_t sts;
/* output buf */
uint32_t out_buf_addr;
uint32_t out_filled_len;
int32_t seq_num;
} aux_compute_result_t;
#endif

598
include/common/ipc.h Normal file
View File

@ -0,0 +1,598 @@
/* Copyright (c) 2020 Kneron, Inc. All Rights Reserved.
*
* The information contained herein is property of Kneron, Inc.
* Terms and conditions of usage are described in detail in Kneron
* STANDARD SOFTWARE LICENSE AGREEMENT.
*
* Licensees are granted free, non-transferable use of the information.
* NO WARRANTY of ANY KIND is provided. This heading must NOT be removed
* from the file.
*/
/******************************************************************************
* Filename:
* ---------
* ipc.h
*
* Description:
* ------------
*
*
******************************************************************************/
#ifndef _IPC_H_
#define _IPC_H_
/******************************************************************************
Head Block of The File
******************************************************************************/
#include <stdint.h>
#include "model_type.h"
#include "model_res.h"
#include "base.h"
//#include "extend_intf.h"
#ifndef BOOLEAN_DEFINED
#ifndef boolean
typedef char boolean;
#endif
#define BOOLEAN_DEFINED
#endif
#if _BOARD_SN720HAPS_H_ == 1
#define ADDR_ADJUST_OFFSET_FOR_HAPS 0x01d2b000
// Sec 2: Constant Definitions, Imported Symbols, miscellaneous
/* IPC memory */
//----------------------------
/* Used for KL720 */
#define SCPU_IPC_MEM_ADDR (0x85060000 + ADDR_ADJUST_OFFSET_FOR_HAPS)
#define SCPU_IPC_MEM_ADDR2 (0x85061000 + ADDR_ADJUST_OFFSET_FOR_HAPS)
#define IPC_NPU_REQ_IMG_MSG_ADDR (SCPU_IPC_MEM_ADDR2+0x100)
#else
#include "membase.h"
#define SCPU_IPC_MEM_ADDR DDR_MEM_IPC_ADDR
#define SCPU_IPC_MEM_ADDR2 (SCPU_IPC_MEM_ADDR + 0x1C00)
#endif
#define SCPU2NCPU_ID ('s'<<24 | 'c'<<16 | 'p'<<8 | 'u')
#define NCPU2SCPU_ID ('n'<<24 | 'c'<<16 | 'p'<<8 | 'u')
#define MULTI_MODEL_MAX 16 /* Max active models in memory */
#define IPC_IMAGE_ACTIVE_MAX 2 /* Max active images for NCPU/NPU */
#define IPC_IMAGE_MAX 10 /* Max cycled buffer for images */
#define IPC_MODEL_MAX (MULTI_MODEL_MAX * IPC_IMAGE_ACTIVE_MAX)
/* Image process cmd_flags set by scpu, TODO: Check all state command */
#define IMAGE_STATE_INACTIVE 0
#define IMAGE_STATE_ACTIVE 1
#define IMAGE_STATE_NPU_DONE 2
#define IMAGE_STATE_DONE 3
#define IMAGE_STATE_JPEG_ENC_DONE 4
#define IMAGE_STATE_JPEG_DEC_DONE 5
#define IMAGE_STATE_ERR_DSP_BUSY 6
#define IMAGE_STATE_JPEG_ENC_FAIL 7
#define IMAGE_STATE_JPEG_DEC_FAIL 8
#define IMAGE_STATE_RECEIVING 9 //need check with mozart firmware
#define IMAGE_STATE_TOF_DEC_DONE 10
#define IMAGE_STATE_TOF_DEC_FAIL 11
/* Image process status set by ncpu */
#define IMAGE_STATE_IDLE 0
#define IMAGE_STATE_NPU_BUSY 1
//#define IMAGE_STATE_NPU_DONE 2
#define IMAGE_STATE_POST_PROCESSING IMAGE_STATE_NPU_DONE
#define IMAGE_STATE_POST_PROCESSING_DONE 3
//#define IMAGE_STATE_DONE IMAGE_STATE_POST_PROCESSING_DONE
#define IMAGE_STATE_ERR (-1)
#define IMAGE_STATE_TIMEOUT (7)
/* Image format flags and config values */
typedef enum {
/* normalization control
* ------------------*/
IMAGE_FORMAT_SUB128 = (int)BIT31, /* 1: sub 128 for each value */
IMAGE_FORMAT_RIGHT_SHIFT_ONE_BIT = BIT22, /* 1: right shift for 1-bit (normalization)*/
/* cv rotate control
* ------------------*/
IMAGE_FORMAT_ROT_MASK = (BIT30 | BIT29),
IMAGE_FORMAT_ROT_SHIFT = 29,
/* -- setting values of ROT -- */
IMAGE_FORMAT_ROT_CLOCKWISE = 0x01, /* ROT 90 */
IMAGE_FORMAT_ROT_COUNTER_CLOCKWISE = 0x02, /* ROT 270 */
IMAGE_FORMAT_ROT_180 = 0x03, // TODO, ROT 180
/* flow control
* ------------------*/
//IMAGE_FORMAT_RAW_OUTPUT = BIT28 !!! move to "bypass control"
IMAGE_FORMAT_PARALLEL_PROC = BIT27, /* 1: parallel execution of NPU and NCPU */
//IMAGE_FORMAT_NOT_KEEP_RATIO = BIT26, // TODO, duplicated
//IMAGE_FORMAT_MODEL_AGE_GENDER = BIT24, // TODO, should remove
/* scale/crop control
* -------------------*/
//IMAGE_FORMAT_RIGHT_SHIFT_ONE_BIT = BIT22, !!! move to "normalization functions"
IMAGE_FORMAT_SYMMETRIC_PADDING = BIT21, /* 1: symmetic padding;
0: corner padding */
IMAGE_FORMAT_CHANGE_ASPECT_RATIO = BIT20, /* 1: scale without padding;
0: scale with padding */
/* flow control - 2
* ------------------*/
IMAGE_FORMAT_BYPASS_PRE = BIT19, /* 1: bypass pre-process */
IMAGE_FORMAT_BYPASS_NPU_OP = BIT18, /* 1: bypass NPU OP */
IMAGE_FORMAT_BYPASS_CPU_OP = BIT17, /* 1: bypass CPU OP */
IMAGE_FORMAT_BYPASS_POST = BIT16, /* 1: bypass post-process (output NPU result directly) */
IMAGE_FORMAT_RAW_OUTPUT = BIT28, /* 1: bypass post-process (include meta data for data parsing )*/
/* supported image foramts BIT7 - BIT0
* --------------------------------------*/
IMAGE_FORMAT_NPU = 0x00FF, /* settings: NPU_FORMAT_XXXX */
} dsp_img_fmt_t;
/*********************************************
* settings for IMAGE_FORMAT_NPU
*********************************************/
#define NPU_FORMAT_RGBA8888 0x00
#define NPU_FORMAT_YUV422 0x10 /* similiar to Y0CBY1CR */
#define NPU_FORMAT_NIR 0x20
/* Determine the exact format with the data byte sequence in DDR memory:
* [lowest byte]...[highest byte]
*/
#define NPU_FORMAT_YCBCR422 0x30 /* alias of CRY1CBY0 */
#define NPU_FORMAT_YCBCR422_CRY1CBY0 0x30
#define NPU_FORMAT_YCBCR422_CBY1CRY0 0x31
#define NPU_FORMAT_YCBCR422_Y1CRY0CB 0x32
#define NPU_FORMAT_YCBCR422_Y1CBY0CR 0x33
#define NPU_FORMAT_YCBCR422_CRY0CBY1 0x34
#define NPU_FORMAT_YCBCR422_CBY0CRY1 0x35
#define NPU_FORMAT_YCBCR422_Y0CRY1CB 0x36
#define NPU_FORMAT_YCBCR422_Y0CBY1CR 0x37 /* Y0CbY1CrY2CbY3Cr... */
#define NPU_FORMAT_YUV444 0x40
#define NPU_FORMAT_YCBCR444 0x50
#define NPU_FORMAT_RGB565 0x60
#define NPU_FORMAT_YUV420 0x70
// ------------------------------------------
#define MAX_CNN_NODES 45 //NetputNode, CPU nodes, Out Nodes, etc
#define MAX_OUT_NODES 40 //max Out Nodes
#define MAX_INT_FOR_ALIGN 0x10000000
#define NCPU_CLOCK_CNT_PER_MS 500000
#define KP_DEBUG_BUF_SIZE (8 * 1024 * 1024) // FIXME, max is 1920x1080 RGB8888
/******************************************************************************
Declaration of External Variables & Functions
******************************************************************************/
// Sec 3: declaration of external variable
// Sec 4: declaration of external function prototype
/******************************************************************************
Declaration of data structure
******************************************************************************/
// Sec 5: structure, uniou, enum, linked list
/* Model structure */
typedef struct kdp_model_s {
/* Model type */
uint32_t model_type; //defined in model_type.h
/* Model version */
uint32_t model_version;
/* Input in memory */
uint32_t input_mem_addr;
int32_t input_mem_len;
/* Output in memory */
uint32_t output_mem_addr;
int32_t output_mem_len;
/* Working buffer */
uint32_t buf_addr;
int32_t buf_len;
/* command.bin in memory */
uint32_t cmd_mem_addr;
int32_t cmd_mem_len;
/* weight.bin in memory */
uint32_t weight_mem_addr;
int32_t weight_mem_len;
/* setup.bin in memory */
uint32_t setup_mem_addr;
int32_t setup_mem_len;
} kdp_model_t;
typedef struct kdp_model_s kdp_model_info_t;
/* Result structure of a model */
typedef struct result_buf_s {
int32_t model_id;
uint32_t result_mem_addr;
int32_t result_mem_len;
int32_t result_ret_len;
} result_buf_t;
#define MAX_PARAMS_LEN 40 /* uint32_t */
#define MAX_INPUT_NODE_COUNT 5
/* Parameter structure of a raw image */
typedef struct parameter_s {
/* Crop parameters or other purposes */
int crop_top;
int crop_bottom;
int crop_left;
int crop_right;
/* Pad parameters or other purposes */
int pad_top;
int pad_bottom;
int pad_left;
int pad_right;
float scale_width;
float scale_height;
/* IE driver padding mode for pre-processing
0:change aspect ratio(no padding).
1:keep aspect ratio, allow scaling, pad corner(right or bottom)
2:keep aspect ratio, allow scaling, pad center(top/down or right/left)
3:keep aspect ratio, not allow scaling, pad corner(right or bottom)
4:keep aspect ratio, not allow scaling, pad center(top/down, or right/left)
*/
uint32_t ie_pad_mode;
int32_t angle;
int flip_face;
} parameter_t;
typedef struct kdp_img_info_s {
/* input image in memory */
uint32_t image_mem_addr;
int32_t image_mem_len;
/* raw image dimensions */
uint32_t input_row;
uint32_t input_col;
uint32_t input_channel;
/* Raw image format and pre-process flags
* refer to dsp_img_fmt_t
*/
uint32_t format;
/* Parameter structure */
struct parameter_s params_s;
} kdp_img_info_t;
struct kdp_img_cfg {
uint32_t num_image;
kdp_img_info_t image_list[MAX_INPUT_NODE_COUNT];
uint32_t inf_format;
uint32_t image_buf_active_index; // scpu_to_ncpu->active_img_index
};
struct kdp_crop_box_s {
int32_t top;
int32_t bottom;
int32_t left;
int32_t right;
};
struct kdp_pad_value_s {
int32_t pad_top;
int32_t pad_bottom;
int32_t pad_left;
int32_t pad_right;
};
typedef struct {
uint32_t w;
uint32_t h;
uint32_t c;
} img_dim_t;
/* scpu_to_ncpu: cmd */
typedef enum {
CMD_INVALID,
CMD_INIT,
CMD_RUN_NPU,
CMD_SLEEP_NPU,
CMD_JPEG_ENCODE,
CMD_JPEG_DECODE,
CMD_CROP_RESIZE,
CMD_TOF_DECODE,
CMD_SCPU_NCPU_TOTAL,
CMD_ALIGN_32 = MAX_INT_FOR_ALIGN,
} scpu_ncpu_cmd_t;
/* in every IPC interrupt triggered by NCPU, SCPU check in_comm_p to see the data type */
typedef enum {
NCPU_REQUEST_NEW_IMG = 1,
NCPU_EXEC_RESULT,
MSG_ALIGN_32 = MAX_INT_FOR_ALIGN,
} ncpu_scpu_ipc_msg_type_t;
/* overall SCPU/DSP status*/
typedef enum {
NCPU_STS_READY = 0, //DSP is ready to run new task
NCPU_STS_BUSY, // one of CNN/JPEG ENC/JPEG DEC is running, cannot accept new task now
NCPU_STS_INVALID_PARAM, // invalid IPC parameters
STS_ALIGN_32 = MAX_INT_FOR_ALIGN,
} ncpu_status_t;
typedef enum {
POST_PROC_FAIL = -1,
POST_PROC_SUCCESS = 0,
RET_ALIGN_32 = MAX_INT_FOR_ALIGN,
} post_proc_return_sts_t;
/* Raw image structure */
typedef struct kdp_img_raw_s {
/* Image state: 1 = active, 0 = inactive */
int state;
/* Image sequence number */
int seq_num;
/* Image ref index */
int ref_idx;
/* List of raw images */
uint32_t num_image;
kdp_img_info_t image_list[MAX_INPUT_NODE_COUNT];
/* Parallel and raw output flags
* refer to dsp_img_fmt_t
*/
uint32_t inf_format;
/* Shared parameters for raw image */
uint32_t ext_params[MAX_PARAMS_LEN];
struct result_buf_s result;
/* Test: SCPU total */
uint32_t tick_start;
uint32_t tick_end;
uint32_t tick_got_ncpu_ack;
/* Test: NCPU processes */
uint32_t tick_start_parse;
uint32_t tick_end_parse;
uint32_t tick_start_inproc;
uint32_t tick_end_inproc;
uint32_t tick_start_pre;
uint32_t tick_end_pre;
uint32_t tick_start_npu;
uint32_t tick_cnn_interrupt_rvd;
uint32_t tick_end_npu;
uint32_t tick_start_post;
uint32_t tick_end_post;
uint32_t tick_start_dram_copy;
uint32_t tick_end_dram_copy;
uint32_t tick_rslt_got_scpu_ack;
uint32_t tick_ncpu_img_req;
uint32_t tick_ncpu_img_ack;
uint32_t tick_last_img_req;
} kdp_img_raw_t;
/* Image result structure */
typedef struct kdp_img_result_s {
post_proc_return_sts_t status __attribute__((aligned (4)));
/* Image sequence number */
int seq_num;
/* result memory addr */
//dummy information
uint32_t result_mem_addr;
} kdp_img_result_t;
typedef struct {
uint32_t fmt;
parameter_t param;
img_dim_t src_dim;
img_dim_t dst_dim;
uint32_t src_addr;
uint32_t src_data_len;
uint32_t dst_addr;
uint32_t dst_buf_size;
uint32_t dst_filled_len;
int32_t seq_num;
int32_t bUseHwInproc; /* 1: use NPU HW inproc; 0: use DSP SW solution */
uint32_t tmp_buf_addr; /* this tmp_buf_addr is needed for SW crop/resize, not for HW inproc */
} crop_resize_param_t;
typedef enum {
CROP_RESIZE_OPERATION_FAILED = -1, /* Failure in doing operation */
CROP_RESIZE_OPERATION_SUCCESS = 1, /* Operation Succeded */
CROP_RESIZE_OPERATION_INVALID_PARM, /* Inavlid parameter provided */
RESIZE_ALIGN_32 = MAX_INT_FOR_ALIGN,
} crop_resize_oper_sts_t;
typedef struct {
int32_t rslt_type; //NCPU_TO_SCPU_RESULT_TYPE
crop_resize_oper_sts_t sts __attribute__((aligned (4)));
/* output buf */
uint32_t out_addr;
uint32_t out_len;
int32_t seq_num;
} crop_resize_result_t;
/* Structure of nCPU->sCPU IPC Message data */
typedef struct ncpu_to_scpu_req_img_s {
int32_t bHandledByScpu;
int32_t ipc_type; //ncpu_scpu_ipc_msg_type_t
int32_t sts; //ncpu_status_t
} ncpu_to_scpu_req_img_t;
typedef struct
{
int model_id;
uint32_t tick_before_preprocess;
uint32_t sum_ticks_preprocess;
uint32_t tick_before_inference;
uint32_t sum_ticks_inference;
uint32_t tick_before_postprocess;
uint32_t sum_ticks_postprocess;
uint32_t tick_before_cpu_op;
uint32_t sum_ticks_cpu_op;
uint32_t sum_cpu_op_count;
uint32_t sum_frame_count;
} kp_model_profile_t;
/* Structure of sCPU->nCPU Message */
typedef struct scpu_to_ncpu_s {
uint32_t id; /* = 'scpu' */
volatile uint32_t bNcpuReceived;
uint32_t cmd; // scpu_ncpu_cmd_t
/*
* debug control flags (dbg.h):
* bits 19-16: scpu debug level
* bits 03-00: ncpu debug level
*/
uint32_t debug_flags;
uint32_t kp_dbg_checkpoinots;
/* Active models in memory and running */
int32_t num_models; //usually, num_models=1 (only one active model)
struct kdp_model_s models[IPC_MODEL_MAX]; //to save active modelInfo
int32_t models_type[IPC_MODEL_MAX]; //to save model type
int32_t model_slot_index;
/* working buffer in case in-proc is necessary, raw img will copy to here for in-proc,
in-proc output will be placed in the input mem address in setup.bin */
uint32_t input_mem_addr2;
int32_t input_mem_len2;
/* Memory for DME */
uint32_t output_mem_addr2;
int32_t output_mem_len2;
/* Memory for post processing (shared) */
uint32_t output_mem_addr3;
kdp_img_raw_t *pRawimg; //SCPU need to alloc for every image
uint32_t ncpu_img_req_msg_addr; // ncpu_to_scpu_req_img_t *, SCPU always get result from here
uint32_t log_buf_base;
int32_t log_buf_len;
/* support features extension or for standalone non-cnn features */
void* pExtInParam; //pointer to extended parameter data structure
int32_t nLenExtInParam; //length of extended parameter data structure
void* pExtOutRslt; //pointer to extended feature result data structure
int32_t nLenExtOutRslt; //Length of extended feature result data
void* pCpuNodeBuffer; // pointer to working buffer for Cpu Node
int32_t nLenCpuNodeBuffer; // Length of working buffer for Cpu Node
/* Raw image information */
struct kdp_img_raw_s raw_images[IPC_IMAGE_MAX];
/* Memory for post processing (shared) */
uint32_t output_mem_addr4;
void * kp_dbg_buffer;
uint32_t kp_dbg_enable_profile; // 1: enable, 0: disable
kp_model_profile_t kp_model_profile_records[MULTI_MODEL_MAX];
} scpu_to_ncpu_t;
typedef enum {
NCPU_NONE_RESULT = -1,
NCPU_POSTPROC_RESULT = 1,
NCPU_JPEG_ENC_RESULT,
NCPU_JPEG_DEC_RESULT,
NCPU_CROP_RESIZE_RESULT,
NCPU_TOF_DEC_RESULT,
NCPU_RESULT_TYPE_MAX,
RES_ALIGN_32 = MAX_INT_FOR_ALIGN,
} ncpu_to_scpu_result_type;
/* Structure of nCPU->sCPU IPC Message data */
typedef struct ncpu_to_scpu_postproc_result_s {
int32_t model_slot_index; // RUN which model for this image
kdp_img_result_t img_result;
uint32_t OrigRawImgAddr;
} ncpu_to_scpu_postproc_result_t;
typedef struct ncpu_to_scpu_s {
volatile boolean print_log;
uint8_t *p_log_buf_base;
uint32_t id; /* = 'ncpu' */
int32_t bHandledByScpu;
ncpu_scpu_ipc_msg_type_t ipc_type __attribute__((aligned (4))); //ncpu_scpu_ipc_msg_type_t
ncpu_status_t sts __attribute__((aligned (4))); //overall NCPU/DSP status
ncpu_to_scpu_result_type out_type __attribute__((aligned (4)));
ncpu_to_scpu_postproc_result_t postproc;
uint32_t extRsltAddr;
ncpu_to_scpu_req_img_t req_img;
volatile int32_t kp_dbg_status;
} ncpu_to_scpu_result_t;
/*50k log buffer*/
#define MAX_LOG_LENGTH 256
#define LOG_QUEUE_NUM 200
#define FLAG_LOGGER_SCPU_IN (1U << 0)
#define FLAG_LOGGER_NCPU_IN (1U << 1)
enum {
LOGGER_SCPU_IN = 0,
LOGGER_NCPU_IN,
LOGGER_OUT,
LOGGER_TOTAL
};
typedef struct {
volatile boolean init_done;
volatile boolean willing[LOGGER_TOTAL];
volatile uint8_t w_idx;
volatile uint8_t r_idx;
volatile uint8_t turn;
uint8_t *p_msg;
} logger_mgt_t;
#endif //_IPC_H_

View File

@ -0,0 +1,73 @@
/*
* Header for pre post process parameters.
*
* Copyright (C) 2022 Kneron, Inc. All rights reserved.
*
*/
#ifndef KNERON_PRE_POST_PROC_PARAMS_H
#define KNERON_PRE_POST_PROC_PARAMS_H
#include <stdint.h>
#include <stdbool.h>
#include "model_res.h"
typedef struct {
float prob_thresh;
float nms_thresh;
uint32_t max_detection_per_class;
uint16_t anchor_row;
uint16_t anchor_col;
uint16_t stride_size;
uint16_t reserved_size;
uint32_t data[40];
} kneron_pre_post_proc_params_yolo_t;
typedef struct
{
// pre-proc config
struct {
uint32_t x;
uint32_t y;
} landmark[4]; /**< license plate corner landmark */
bool enable_hw_inproc; /**< to enable hw inproc or run warp perspective transform instead */
// post-proc config
bool is_maxpool_in_model; /**< is maxpool layer in ocr model */
uint32_t ocr_rule_base_code; /**< ocr rule base code for ocr correction (ref: enum OCR_RULE_BASE_CODE) */
uint32_t max_ocr_number; /**< max number of detected characters */
float ocr_score_threshold; /**< score threshold for ocr character filter */
float ocr_iou_threshold; /**< IoU threshold for ocr character bounding box filter */
} kneron_pre_post_proc_params_car_plate_t;
typedef struct
{
// pre-proc config
float lm_result[LANDMARK_POINTS * 2]; /**< face landmark */
int flip_face; /**< is face flip (0: not flip; 1: flip) */
// post-proc config
int run_sigmoid; /**< do sigmoid in post-processing (0: disable; 1: enable) */
} kneron_pre_post_proc_params_fr_t;
typedef struct
{
// pre-proc config
float lm_result[LANDMARK_POINTS * 2]; /**< face landmark */
int flip_face; /**< is face flip (0: not flip; 1: flip) */
int is_masked; /**< is face masked (0: unmasked; 1: masked) */
// post-proc config
int run_sigmoid; /**< do sigmoid in post-processing (0: disable; 1: enable) */
} kneron_pre_post_proc_params_fr_mask_t;
typedef struct
{
// post-proc config
float prob_threshold; /**< probability threshold */
float iou_threshold; /**< IoU threshold */
} kneron_pre_post_proc_params_fcos_det_t;
#endif // KNERON_PRE_POST_PROC_PARAMS_H

View File

@ -0,0 +1,45 @@
/*
*******************************************************************************
* Copyright (c) 2010-2022 VATICS(KNERON) Inc. All rights reserved.
*
* +-----------------------------------------------------------------+
* | THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED |
* | AND COPIED IN ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH |
* | A LICENSE AND WITH THE INCLUSION OF THE THIS COPY RIGHT NOTICE. |
* | THIS SOFTWARE OR ANY OTHER COPIES OF THIS SOFTWARE MAY NOT BE |
* | PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. THE |
* | OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. |
* | |
* | THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT |
* | ANY PRIOR NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY |
* | VATICS(KNERON) INC. |
* +-----------------------------------------------------------------+
*
*******************************************************************************
*/
#ifndef KP_CONFIG_H
#define KP_CONFIG_H
/**
* @file kp_config.h
* @brief KL630 global config
* @version 2.0
* @date 2022-09-15
* @note This file must be decoupled from "kl630/kdp_apps/kmdw/libvmf_nnm/usb_companion/kmdw_cmd_handler_630.c" & "kl630/kdp_apps/SPL_Internal"
*
* @copyright Copyright (c) 2022 Kneron Inc. All rights reserved.
*/
#pragma once
#define BOOT_CONFIG_FILE_PATH "/mnt/flash/plus/boot_config.conf"
#define FLASH_NEF_PATH "/mnt/flash/plus/kp_model/models_630.nef"
#define UPLOAD_KP_FW_TAR_PATH "/tmp/kp_firmware.tar"
#define KP_FW_PARTITION_PATH_BASE "/mnt/flash/plus/kp_firmware/kp_firmware"
#define UPLOAD_KP_LOADER_TAR_PATH "/tmp/kp_loader.tar"
#define KP_LOADER_EXE_PATH "/kp_loader/bin/kp_loader"
#define KP_LOADER_PARTITION_PATH_BASE "/mnt/flash/plus/kp_loader/kp_loader"
#define KP_FW_PATH "/tmp/plus"
#define KP_FW_EXE_PATH "/tmp/plus/kp_firmware/bin/kp_firmware"
#endif

918
include/common/kp_struct.h Normal file
View File

@ -0,0 +1,918 @@
/*
*******************************************************************************
* Copyright (c) 2010-2022 VATICS(KNERON) Inc. All rights reserved.
*
* +-----------------------------------------------------------------+
* | THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED |
* | AND COPIED IN ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH |
* | A LICENSE AND WITH THE INCLUSION OF THE THIS COPY RIGHT NOTICE. |
* | THIS SOFTWARE OR ANY OTHER COPIES OF THIS SOFTWARE MAY NOT BE |
* | PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. THE |
* | OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. |
* | |
* | THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT |
* | ANY PRIOR NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY |
* | VATICS(KNERON) INC. |
* +-----------------------------------------------------------------+
*
*******************************************************************************
*/
#ifndef KP_STRUCT_H
#define KP_STRUCT_H
/**
* @file kp_struct.h
* @brief Kneron PLUS data structure
* @version 0.1
* @date 2021-03-22
*
* @copyright Copyright (c) 2021 Kneron Inc. All rights reserved.
*/
#pragma once
#include <stdint.h>
#include <stdbool.h>
#define APP_PADDING_BYTES 28 /**< Default padding size */
#define MAX_INPUT_NODE_COUNT 5 /**< Supported maximum count of the model input node */
#define KDP2_MAGIC_TYPE_COMMAND 0xAB67CD13 /**< Magic number for data check */
#define KDP2_MAGIC_TYPE_INFERENCE 0x11FF22AA /**< Magic number for data check */
#define KDP2_MAGIC_TYPE_CUSTOMIZED 0x11FF33CC /**< Magic number for customized data */
#define KDP2_MAGIC_TYPE_CHECKPOINT_DATA 0x34ABF977 /**< Magic number for debug checkpoint data */
/**
* @brief return code of most APIs.
*/
enum KP_API_RETURN_CODE
{
KP_SUCCESS = 0,
/* libusb error code */
KP_ERROR_USB_IO_N1 = -1,
KP_ERROR_USB_INVALID_PARAM_N2 = -2,
KP_ERROR_USB_ACCESS_N3 = -3,
KP_ERROR_USB_NO_DEVICE_N4 = -4,
KP_ERROR_USB_NOT_FOUND_N5 = -5,
KP_ERROR_USB_BUSY_N6 = -6,
KP_ERROR_USB_TIMEOUT_N7 = -7,
KP_ERROR_USB_OVERFLOW_N8 = -8,
KP_ERROR_USB_PIPE_N9 = -9,
KP_ERROR_USB_INTERRUPTED_N10 = -10,
KP_ERROR_USB_NO_MEM_N11 = -11,
KP_ERROR_USB_NOT_SUPPORTED_N12 = -12,
KP_ERROR_USB_OTHER_N99 = -99,
/* libwdi error code (remapping from: kneron_plus/thirdparty/windows/include/libwdi.h) */
KP_ERROR_WDI_BEGIN = -200,
KP_ERROR_WDI_IO_N1 = -201,
KP_ERROR_WDI_INVALID_PARAM_N2 = -202,
KP_ERROR_WDI_ACCESS_N3 = -203,
KP_ERROR_WDI_NO_DEVICE_N4 = -204,
KP_ERROR_WDI_NOT_FOUND_N5 = -205,
KP_ERROR_WDI_BUSY_N6 = -206,
KP_ERROR_WDI_TIMEOUT_N7 = -207,
KP_ERROR_WDI_OVERFLOW_N8 = -208,
KP_ERROR_WDI_PENDING_INSTALLATION_N9 = -209,
KP_ERROR_WDI_INTERRUPTED_N10 = -210,
KP_ERROR_WDI_RESOURCE_N11 = -211,
KP_ERROR_WDI_NOT_SUPPORTED_N12 = -212,
KP_ERROR_WDI_EXISTS_N13 = -213,
KP_ERROR_WDI_USER_CANCEL_N14 = -214,
KP_ERROR_WDI_NEEDS_ADMIN_N15 = -215,
KP_ERROR_WDI_WOW64_N16 = -216,
KP_ERROR_WDI_INF_SYNTAX_N17 = -217,
KP_ERROR_WDI_CAT_MISSING_N18 = -218,
KP_ERROR_WDI_UNSIGNED_N19 = -219,
KP_ERROR_WDI_OTHER_N99 = -299,
/* host error code */
KP_ERROR_MEMORY_ALLOCATION_FAILURE_9 = 9,
KP_ERROR_DEVICE_NOT_EXIST_10 = 10,
KP_ERROR_DEVICE_INCORRECT_RESPONSE_11 = 11,
KP_ERROR_INVALID_PARAM_12 = 12,
KP_ERROR_SEND_DESC_FAIL_13 = 13,
KP_ERROR_SEND_DATA_FAIL_14 = 14,
KP_ERROR_SEND_DATA_TOO_LARGE_15 = 15,
KP_ERROR_RECV_DESC_FAIL_16 = 16,
KP_ERROR_RECV_DATA_FAIL_17 = 17,
KP_ERROR_RECV_DATA_TOO_LARGE_18 = 18,
KP_ERROR_FW_UPDATE_FAILED_19 = 19,
KP_ERROR_FILE_OPEN_FAILED_20 = 20,
KP_ERROR_INVALID_MODEL_21 = 21,
KP_ERROR_IMAGE_RESOLUTION_TOO_SMALL_22 = 22,
KP_ERROR_IMAGE_INVALID_WIDTH_23 = 23,
KP_ERROR_INVALID_FIRMWARE_24 = 24,
KP_ERROR_RESET_FAILED_25 = 25,
KP_ERROR_DEVICES_NUMBER_26 = 26,
KP_ERROR_CONFIGURE_DEVICE_27 = 27,
KP_ERROR_CONNECT_FAILED_28 = 28,
KP_ERROR_DEVICE_GROUP_MIX_PRODUCT_29 = 29,
KP_ERROR_RECEIVE_INCORRECT_HEADER_STAMP_30 = 30,
KP_ERROR_RECEIVE_SIZE_MISMATCH_31 = 31,
KP_ERROR_RECEIVE_JOB_ID_MISMATCH_32 = 32,
KP_ERROR_INVALID_CUSTOMIZED_JOB_ID_33 = 33,
KP_ERROR_FW_LOAD_FAILED_34 = 34,
KP_ERROR_MODEL_NOT_LOADED_35 = 35,
KP_ERROR_INVALID_CHECKPOINT_DATA_36 = 36,
KP_DBG_CHECKPOINT_END_37 = 37,
KP_ERROR_INVALID_HOST_38 = 38,
KP_ERROR_MEMORY_FREE_FAILURE_39 = 39,
KP_ERROR_USB_BOOT_LOAD_SECOND_MODEL_40 = 40,
KP_ERROR_CHECK_FW_VERSION_FAILED_41 = 41,
KP_ERROR_FIFOQ_INPUT_BUFF_COUNT_NOT_ENOUGH_42 = 42,
KP_ERROR_FIFOQ_SETTING_FAILED_43 = 43,
KP_ERROR_UNSUPPORTED_DEVICE_44 = 44,
KP_ERROR_IMAGE_INVALID_HEIGHT_45 = 45,
KP_ERROR_ADJUST_DDR_HEAP_FAILED_46 = 46,
KP_ERROR_DEVICE_NOT_ACCESSIBLE_47 = 47,
KP_ERROR_OTHER_99 = 99,
/* firmware error code */
KP_FW_ERROR_UNKNOWN_APP = 100,
KP_FW_INFERENCE_ERROR_101 = 101,
KP_FW_DDR_MALLOC_FAILED_102 = 102,
KP_FW_INFERENCE_TIMEOUT_103 = 103,
KP_FW_LOAD_MODEL_FAILED_104 = 104,
KP_FW_CONFIG_POST_PROC_ERROR_MALLOC_FAILED_105 = 105,
KP_FW_CONFIG_POST_PROC_ERROR_NO_SPACE_106 = 106,
KP_FW_IMAGE_SIZE_NOT_MATCH_MODEL_INPUT_107 = 107,
KP_FW_NOT_SUPPORT_PREPROCESSING_108 = 108,
KP_FW_GET_MODEL_INFO_FAILED_109 = 109,
KP_FW_WRONG_INPUT_BUFFER_COUNT_110 = 110,
KP_FW_INVALID_PRE_PROC_MODEL_INPUT_SIZE_111 = 111,
KP_FW_INVALID_INPUT_CROP_PARAM_112 = 112,
KP_FW_ERROR_FILE_OPEN_FAILED_113 = 113,
KP_FW_ERROR_FILE_STATE_FAILED_114 = 114,
KP_FW_ERROR_FILE_READ_FAILED_115 = 115,
KP_FW_ERROR_FILE_WRITE_FAILED_116 = 116,
KP_FW_ERROR_FILE_CHMOD_FAILED_117 = 117,
KP_FW_ERROR_FILE_FAILED_OTHER_118 = 118,
KP_FW_ERROR_INVALID_BOOT_CONFIG_119 = 119,
KP_FW_ERROR_LOADER_ERROR_120 = 120,
KP_FW_ERROR_POSIX_SPAWN_FAILED_121 = 121,
KP_FW_ERROR_USB_SEND_FAILED_122 = 122,
KP_FW_ERROR_USB_RECEIVE_FAILED_123 = 123,
KP_FW_ERROR_HANDLE_NOT_READY_124 = 124,
KP_FW_FIFOQ_ACCESS_FAILED_125 = 125,
KP_FW_FIFOQ_NOT_READY_126 = 126,
KP_FW_ERROR_FILE_SEEK_FAILED_127 = 127,
KP_FW_ERROR_FILE_FLUSH_FAILED_128 = 128,
KP_FW_ERROR_FILE_SYNC_FAILED_129 = 129,
KP_FW_ERROR_FILE_CLOSE_FAILED_130 = 130,
KP_FW_ERROR_MODEL_EXIST_CPU_NODE_131 = 131,
KP_FW_ERROR_MODEL_EXIST_CONST_INPU_NODE_132 = 132,
/* ncpu error code (sync with ipc.h) */
KP_FW_NCPU_ERR_BEGIN = 200,
KP_FW_NCPU_INVALID_IMAGE_201 = 201,
KP_FW_NCPU_INPROC_FAILED_202 = 202,
/* firmware eFuse error code */
KP_FW_EFUSE_CAN_NOT_BURN_300 = 300,
KP_FW_EFUSE_PROTECTED_301 = 301,
KP_FW_EFUSE_OTHER_302 = 302,
/* firmware APP error code */
/* mask_fdfr error code */
KP_FW_APP_MASK_FDFR_ENROLL_WITH_MASKED_FACE_10000 = 10000,
/* seg error code */
KP_FW_APP_SEG_INSUFFICIENT_RESULT_BUFFER_SIZE_10001 = 10001,
};
/**
* @brief enum for USB speed mode
*/
typedef enum
{
KP_USB_SPEED_UNKNOWN = 0,
KP_USB_SPEED_LOW = 1,
KP_USB_SPEED_FULL = 2,
KP_USB_SPEED_HIGH = 3,
KP_USB_SPEED_SUPER = 4,
} kp_usb_speed_t;
/**
* @brief enum for USB PID(Product ID)
*/
typedef enum
{
KP_DEVICE_KL520 = 0x100, /**< KL520 USB PID */
KP_DEVICE_KL720 = 0x720, /**< KL720 USB PID */
KP_DEVICE_KL720_LEGACY = 0x200, /**< KL720 Legacy USB PID */
KP_DEVICE_KL530 = 0x530, /**< KL530 USB PID */
KP_DEVICE_KL730 = 0x730, /**< KL730 USB PID */
KP_DEVICE_KL630 = 0x630, /**< KL630 USB PID */
KP_DEVICE_KL540 = 0x540, /**< KL540 USB PID */
} kp_product_id_t;
/**
* @brief reset mode
*/
typedef enum
{
KP_RESET_REBOOT = 0, /**< Higheset level to reset Kneron device. Kneron device would disconnect after this reset. */
KP_RESET_INFERENCE = 1, /**< Soft reset: reset inference FIFO queue. */
KP_RESET_SHUTDOWN = 2, /**< Shut down Kneron device. For KL520, only useful if HW circuit supports (ex. 96 bord), dongle is not supported. For KL720, this function is not supported. */
KP_RESET_REBOOT_SYSTEM = 3, /**< Reboot entire system */
} kp_reset_mode_t;
/**
* @brief enum for generic raw data channel ordering
*/
typedef enum
{
KP_CHANNEL_ORDERING_HCW = 0, /**< KL520 default, height/channel/width in order */
KP_CHANNEL_ORDERING_CHW = 1, /**< KL720 default, channel/height/width in order */
KP_CHANNEL_ORDERING_HWC = 2, /**< TensorFlow style, height/width/channel in order */
} kp_channel_ordering_t;
/**
* @brief enum for fixed-point data type
*/
typedef enum
{
KP_FIXED_POINT_DTYPE_UNKNOWN = 0, /**< unknown data type */
KP_FIXED_POINT_DTYPE_INT8 = 1, /**< represent one fixed-point value by 8-bit data type */
KP_FIXED_POINT_DTYPE_INT16 = 2, /**< represent one fixed-point value by 16-bit data type */
} kp_fixed_point_dtype_t;
/**
* @brief information of device (USB)
*/
typedef struct
{
uint32_t port_id; /**< an unique ID representing for a Kneron device, can be used as input while connecting devices */
uint16_t vendor_id; /**< supposed to be 0x3231. */
uint16_t product_id; /**< enum kp_product_id_t. */
int link_speed; /**< enum kp_usb_speed_t. */
uint32_t kn_number; /**< KN number. */
bool isConnectable; /**< indicate if this device is connectable. */
char port_path[20]; /**< "busNo-hub_portNo-device_portNo"
ex: "1-2-3", means bus 1 - (hub) port 2 - (device) port 3 */
char firmware[30]; /**< Firmware description. */
} __attribute__((aligned(4))) kp_device_descriptor_t;
/**
* @brief information of connected devices from USB perspectives.
*/
typedef struct
{
int num_dev; /**< connected devices */
kp_device_descriptor_t device[]; /**< real index range from 0 ~ (num_dev-1) */
} __attribute__((aligned(4))) kp_devices_list_t;
/**
* @brief image format supported for inference.
*/
typedef enum
{
KP_IMAGE_FORMAT_UNKNOWN = 0x0,
KP_IMAGE_FORMAT_RGB565 = 0x60, /**< RGB565 16bits */
KP_IMAGE_FORMAT_RGBA8888 = 0x0D, /**< RGBA8888 32bits */
KP_IMAGE_FORMAT_YUYV = 0x2F, /**< YUYV 16bits */
KP_IMAGE_FORMAT_YCBCR422_CRY1CBY0 = 0x30, /**< YCbCr422 (order: CrY1CbY0) 16bits */
KP_IMAGE_FORMAT_YCBCR422_CBY1CRY0 = 0x31, /**< YCbCr422 (order: CbY1CrY0) 16bits */
KP_IMAGE_FORMAT_YCBCR422_Y1CRY0CB = 0x32, /**< YCbCr422 (order: Y1CrY0Cb) 16bits */
KP_IMAGE_FORMAT_YCBCR422_Y1CBY0CR = 0x33, /**< YCbCr422 (order: Y1CbY0Cr) 16bits */
KP_IMAGE_FORMAT_YCBCR422_CRY0CBY1 = 0x34, /**< YCbCr422 (order: CrY0CbY1) 16bits */
KP_IMAGE_FORMAT_YCBCR422_CBY0CRY1 = 0x35, /**< YCbCr422 (order: CbY0CrY1) 16bits */
KP_IMAGE_FORMAT_YCBCR422_Y0CRY1CB = 0x36, /**< YCbCr422 (order: Y0CrY1Cb) 16bits */
KP_IMAGE_FORMAT_YCBCR422_Y0CBY1CR = 0x37, /**< YCbCr422 (order: Y0CbY1Cr) 16bits */
KP_IMAGE_FORMAT_RAW8 = 0x20, /**< RAW 8bits */
KP_IMAGE_FORMAT_YUV420 = 0x70, /**< YUV420 (planar) 12bits (KL630 only) */
} kp_image_format_t;
/**
* @brief npu raw data layout format for tensors.
*/
typedef enum
{
KP_MODEL_TENSOR_DATA_LAYOUT_UNKNOWN = 0,
KP_MODEL_TENSOR_DATA_LAYOUT_4W4C8B = 1, /**< width: 4 bits, channel: 4 bits, depth: 8 bits */
KP_MODEL_TENSOR_DATA_LAYOUT_1W16C8B = 2, /**< width: 1 bits, channel: 16 bits, depth: 8 bits */
KP_MODEL_TENSOR_DATA_LAYOUT_16W1C8B = 3, /**< width: 16 bits, channel: 4 bits, depth: 8 bits */
KP_MODEL_TENSOR_DATA_LAYOUT_8W1C16B = 4, /**< width: 8 bits, channel: 1 bits, depth: 16 bits */
} kp_model_tensor_data_layout_t;
/**
* @brief model target chip.
*/
typedef enum
{
KP_MODEL_TARGET_CHIP_UNKNOWN = 0,
KP_MODEL_TARGET_CHIP_KL520 = 1, /**< model for kl520 */
KP_MODEL_TARGET_CHIP_KL720 = 2, /**< model for kl720 */
KP_MODEL_TARGET_CHIP_KL530 = 3, /**< model for kl530 */
KP_MODEL_TARGET_CHIP_KL730 = 4, /**< model for kl730 */
KP_MODEL_TARGET_CHIP_KL630 = 5, /**< model for kl630 */
KP_MODEL_TARGET_CHIP_KL540 = 6, /**< model for kl540 */
} kp_model_target_chip_t;
/**
* @brief a basic descriptor for nef schema version
*/
typedef struct
{
uint32_t major; /**< major number */
uint32_t minor; /**< minor number */
uint32_t revision; /**< revision number */
} __attribute__((packed, aligned(4))) kp_nef_schema_version_t;
/**
* @brief a basic descriptor for setup.bin schema version
*/
typedef struct
{
uint32_t major; /**< major number */
uint32_t minor; /**< minor number */
uint32_t revision; /**< revision number */
} __attribute__((packed, aligned(4))) kp_setup_bin_schema_version_t;
/**
* @brief a basic descriptor for setup.bin file schema version
*/
typedef struct
{
uint32_t major; /**< major number */
uint32_t minor; /**< minor number */
uint32_t revision; /**< revision number */
} __attribute__((packed, aligned(4))) kp_file_schema_version_t;
/**
* @brief a basic descriptor for a fixed-point quantization information
*/
typedef struct
{
float scale; /**< scale of node */
int32_t radix; /**< radix of node */
} __attribute__((packed, aligned(4))) kp_quantized_fixed_point_descriptor_t;
/**
* @brief a basic descriptor for quantization parameters
*/
typedef struct
{
uint32_t quantized_fixed_point_descriptor_num; /**< numbers of fixed-point quantization information */
kp_quantized_fixed_point_descriptor_t* quantized_fixed_point_descriptor; /**< array of fixed-point quantization information */
} __attribute__((packed, aligned(4))) kp_quantization_parameters_t;
/**
* @brief a basic descriptor for a node in model
*/
typedef struct
{
uint32_t index; /**< index of node */
char* name; /**< name of node */
uint32_t shape_npu_len; /**< length of npu shape */
uint32_t* shape_npu; /**< npu shape */
uint32_t shape_onnx_len; /**< length of onnx shape */
uint32_t* shape_onnx; /**< onnx shape */
uint32_t data_layout; /**< npu memory layout */
kp_quantization_parameters_t quantization_parameters; /**< quantization parameters */
} __attribute__((packed, aligned(4))) kp_tensor_descriptor_t;
/**
* @brief a basic descriptor for a model
*/
typedef struct
{
uint32_t target; /**< target chip of model */
uint32_t version; /**< version of model */
uint32_t id; /**< id of model */
uint32_t input_nodes_num; /**< number of model input nodes */
kp_tensor_descriptor_t* input_nodes; /**< array of model output node information */
uint32_t output_nodes_num; /**< number of model output nodes */
kp_tensor_descriptor_t* output_nodes; /**< array of model output node information */
kp_setup_bin_schema_version_t setup_bin_schema_version; /**< schema version of setup.bin */
kp_file_schema_version_t file_schema_version; /**< file schema version of setup.bin */
uint32_t max_raw_out_size; /**< needed raw output buffer size for this model */
} __attribute__((packed, aligned(4))) kp_single_model_descriptor_t;
/**
* @brief a basic descriptor for a NEF metadata
*/
typedef struct
{
uint32_t kn_num; /**< target KN number device of encrypted all models */
char* toolchain_version; /**< toolchain version of all models */
char* compiler_version; /**< compiler version of all models */
kp_nef_schema_version_t nef_schema_version; /**< schema version of nef */
char* platform; /**< usb dongle, 96 board, etc. */
} __attribute__((packed, aligned(4))) kp_model_nef_metadata_t;
/**
* @brief a basic descriptor for a NEF
*/
typedef struct
{
uint32_t magic; /**< magic number for model_nef_descriptor (0x5AA55AA5) */
kp_model_nef_metadata_t metadata; /**< nef metadata */
uint32_t target; /**< target chip of all models (1: KL520, 2: KL720, etc.) */
uint32_t crc; /**< crc of all models */
uint32_t num_models; /**< number of models */
kp_single_model_descriptor_t* models; /**< model descriptors */
} __attribute__((packed, aligned(4))) kp_model_nef_descriptor_t;
/**
* @brief attribute for configuring ddr
*/
typedef struct
{
uint32_t model_size; /**< DDR space for model */
uint32_t input_buffer_size; /**< input buffer size for FIFO queue */
uint32_t input_buffer_count; /**< input buffer count for FIFO queue */
uint32_t result_buffer_size; /**< result buffer size for FIFO queue */
uint32_t result_buffer_count; /**< result buffer count for FIFO queue */
} __attribute__((aligned(4))) kp_ddr_manage_attr_t;
/**
* @brief a handle represent connected Kneron device.
*/
typedef struct
{
int timeout; /**< global timeout value for all USB communications with the device */
int num_device; /**< number of devices in device group */
kp_product_id_t product_id; /**< enum kp_product_id_t */
kp_model_nef_descriptor_t loaded_model_desc; /**< a basic descriptor for a NEF */
kp_ddr_manage_attr_t ddr_attr; /**< attribute for configuring ddr */
} __attribute__((aligned(4))) kp_device_group_s;
/**
* @brief a pointer handle represent connected Kneron device.
*/
typedef kp_device_group_s *kp_device_group_t;
/**
* @brief normalization mode
*/
typedef enum
{
KP_NORMALIZE_DISABLE = 0xFF, /**< disable normalize */
KP_NORMALIZE_KNERON = 0x1, /**< RGB/256 - 0.5, refer to the toolchain manual */
KP_NORMALIZE_TENSOR_FLOW = 0x2, /**< RGB/127.5 - 1.0, refer to the toolchain manual */
KP_NORMALIZE_YOLO = 0x3, /**< RGB/255.0, refer to the toolchain manual */
KP_NORMALIZE_CUSTOMIZED_DEFAULT = 0x4, /**< customized, default, refer to the toolchain manual */
KP_NORMALIZE_CUSTOMIZED_SUB128 = 0x5, /**< customized, subtract 128, refer to the toolchain manual */
KP_NORMALIZE_CUSTOMIZED_DIV2 = 0x6, /**< customized, divide by 2, refer to the toolchain manual */
KP_NORMALIZE_CUSTOMIZED_SUB128_DIV2 = 0x7, /**< customized, subtract 128 and divide by 2, refer to the toolchain manual */
} kp_normalize_mode_t;
/**
* @brief resize mode
*/
typedef enum
{
KP_RESIZE_DISABLE = 0x1, /**< Disable Resize in Pre-process */
KP_RESIZE_ENABLE = 0x2, /**< Enable Resize in Pre-process */
} kp_resize_mode_t;
/**
* @brief rotation mode
*/
typedef enum
{
KP_ROT_0_DEGRESS = 0x0, /**< Disable Rotation in Pre-process */
KP_ROT_90_DEGRESS = 0x1, /**< Enable Rotation 90 Degress in Pre-process */
KP_ROT_270_DEGRESS = 0x2, /**< Enable Rotation 270 Degress in Pre-process */
KP_ROT_180_DEGRESS = 0x3, /**< Enable Rotation 180 Degress in Pre-process */
KP_ROT_MAX_NUM,
} kp_rotation_mode_t;
/**
* @brief padding mode
*/
typedef enum
{
KP_PADDING_DISABLE = 0x1, /**< Disable Padding in Pre-process */
KP_PADDING_CORNER = 0x2, /**< Using Corner Padding in Pre-process */
KP_PADDING_SYMMETRIC = 0x3, /**< Using Symmetric Padding in Pre-process */
} kp_padding_mode_t;
/**
* @brief data structure for inference configurations
*/
typedef struct
{
bool enable_frame_drop; /**< enable this to keep inference non-blocking by dropping oldest and unprocessed frames */
} __attribute__((aligned(4))) kp_inf_configuration_t;
/**
* @brief data structure for a crop
*/
typedef struct
{
uint32_t crop_number; /**< index number */
uint32_t x1; /**< top-left corner: x */
uint32_t y1; /**< top-left corner: y */
uint32_t width; /**< width */
uint32_t height; /**< height */
} __attribute__((packed, aligned(4))) kp_inf_crop_box_t, VMF_NNM_INF_CROP_BOX_T;
/**
* @brief hardware pre-process related value for raw output result
*
*/
typedef struct
{
uint32_t img_width; /**< image width before hardware pre-process */
uint32_t img_height; /**< image height before hardware pre-process */
uint32_t resized_img_width; /**< image width after resize */
uint32_t resized_img_height; /**< image height after resize */
uint32_t pad_top; /**< pixels padding on top */
uint32_t pad_bottom; /**< pixels padding on bottom */
uint32_t pad_left; /**< pixels padding on left */
uint32_t pad_right; /**< pixels padding on right */
uint32_t model_input_width; /**< model required input width */
uint32_t model_input_height; /**< model required input height */
kp_inf_crop_box_t crop_area; /**< info of crop area (may not be the same as input due to hw limit) */
} __attribute__((packed, aligned(4))) kp_hw_pre_proc_info_t;
#define MAX_CROP_BOX 4 /**< MAX crop count */
/**
* @brief inference RAW descriptor for one image
*/
typedef struct
{
uint32_t width; /**< image width */
uint32_t height; /**< image height */
uint32_t resize_mode; /**< resize mode, refer to kp_resize_mode_t */
uint32_t padding_mode; /**< padding mode, refer to kp_resize_mode_t */
uint32_t image_format; /**< image format, refer to kp_image_format_t */
uint32_t normalize_mode; /**< inference normalization, refer to kp_normalize_mode_t */
uint32_t crop_count; /**< crop count */
kp_inf_crop_box_t inf_crop[MAX_CROP_BOX]; /**< box information to crop */
uint8_t *image_buffer; /**< image buffer */
} __attribute__((packed, aligned(4))) kp_generic_input_node_image_t;
/**
* @brief inference RAW descriptor for one image under bypass pre process
*
*/
typedef struct
{
uint32_t buffer_size; /**< buffer size */
uint8_t *buffer; /**< buffer of input data*/
} __attribute__((packed, aligned(4))) kp_generic_input_node_data_t;
/**
* @brief inference descriptor for images
*/
typedef struct
{
uint32_t inference_number; /**< inference sequence number */
uint32_t model_id; /**< target inference model ID */
uint32_t num_input_node_image; /**< number of images for input nodes */
kp_generic_input_node_image_t input_node_image_list[MAX_INPUT_NODE_COUNT]; /**< list of image data for each input node(maps to input nodes order of model) */
} __attribute__((packed, aligned(4))) kp_generic_image_inference_desc_t;
/**
* @brief inference RAW output descriptor
*/
typedef struct
{
uint32_t inference_number; /**< inference sequence number */
uint32_t crop_number; /**< crop box sequence number */
uint32_t num_output_node; /**< total number of output nodes */
uint32_t product_id; /**< product id, refer to kp_product_id_t */
uint32_t num_pre_proc_info; /**< number of pre_proc_info is available */
kp_hw_pre_proc_info_t pre_proc_info[MAX_INPUT_NODE_COUNT]; /**< hardware pre-process related value */
} __attribute__((packed, aligned(4))) kp_generic_image_inference_result_header_t;
/**
* @brief inference descriptor for multiple input images bypass pre-processing
*/
typedef struct
{
uint32_t inference_number; /**< inference sequence number */
uint32_t model_id; /**< target inference model ID */
uint32_t num_input_node_data; /**< number of data for input nodes */
kp_generic_input_node_data_t input_node_data_list[MAX_INPUT_NODE_COUNT]; /**< list of data for each input node(maps to input nodes order of model) */
} __attribute__((packed, aligned(4))) kp_generic_data_inference_desc_t;
/**
* @brief inference RAW output descriptor for multiple input and bypass pre-processing
*/
typedef struct
{
uint32_t inference_number; /**< inference sequence number */
uint32_t crop_number; /**< crop box sequence number */
uint32_t num_output_node; /**< total number of output nodes */
uint32_t product_id; /**< product id, refer to kp_product_id_t */
} __attribute__((packed, aligned(4))) kp_generic_data_inference_result_header_t;
/**
* @brief Metadata of RAW node output in fixed-point format
*/
typedef struct
{
uint32_t height; /**< node height */
uint32_t channel; /**< node channel */
uint32_t width; /**< node width, should be aligned to 16 bytes for futher processing due to low level output */
int32_t radix; /**< radix for fixed/floating point conversion */
float scale; /**< scale for fixed/floating point conversion */
uint32_t data_layout; /**< npu memory layout (ref. kp_model_tensor_data_layout_t) */
} __attribute__((aligned(4))) kp_inf_raw_fixed_node_metadata_t;
/**
* @brief RAW node output in raw fixed-point format (with width padding and device channel ordering)
*/
typedef struct
{
kp_inf_raw_fixed_node_metadata_t metadata; /**< metadata of RAW node output in fixed-point format */
uint32_t num_data; /**< total number of fixed-poiont values, should be
metadata->width (aligned to 16 bytes) * metadata->height * metadata->channel */
int8_t *data; /**< array of fixed-point values*/
} __attribute__((aligned(4))) kp_inf_raw_fixed_node_output_t;
/**
* @brief data of fixed-point values in 8-bits/16-bits (depended on fixed_point_dtype)
*/
typedef union
{
int8_t int8[1]; /**< array of fixed-point values in 8-bits */
int16_t int16[1]; /**< array of fixed-point values in 16-bits */
} fixed_node_output_data_t;
/**
* @brief RAW node output in fixed-point format
*/
typedef struct
{
uint32_t width; /**< node width */
uint32_t height; /**< node height */
uint32_t channel; /**< node channel */
int32_t radix; /**< radix for fixed/floating point conversion */
float scale; /**< scale for fixed/floating point conversion */
float factor; /**< conversion factor for fixed-point to floating-point conversion - formula: 1 / (scale * (2 ^ radix)) */
uint32_t fixed_point_dtype; /**< enum kp_fixed_point_dtype_t */
uint32_t num_data; /**< total number of fixed-point values */
fixed_node_output_data_t data; /**< data of fixed-point values in 8-bits/16-bits (depended on fixed_point_dtype) ref. fixed_node_output_data_t */
} __attribute__((aligned(4))) kp_inf_fixed_node_output_t;
/**
* @brief RAW node output in floating-point format
*/
typedef struct
{
uint32_t width; /**< node width */
uint32_t height; /**< node height */
uint32_t channel; /**< node channel */
uint32_t num_data; /**< total number of floating-point values */
float data[]; /**< array of floating-point values */
} __attribute__((aligned(4))) kp_inf_float_node_output_t;
/**
* @brief describe a bounding box
*/
typedef struct
{
float x1; /**< top-left corner: x */
float y1; /**< top-left corner: y */
float x2; /**< bottom-right corner: x */
float y2; /**< bottom-right corner: y */
float score; /**< probability score */
int32_t class_num; /**< class # (of many) with highest probability */
} __attribute__((aligned(4))) kp_bounding_box_t;
#define YOLO_GOOD_BOX_MAX 500 /**< maximum number of bounding boxes for Yolo models */
/**
* @brief describe a yolo output result after post-processing
*/
typedef struct
{
uint32_t class_count; /**< total class count detectable by model */
uint32_t box_count; /**< boxes of all classes */
kp_bounding_box_t boxes[YOLO_GOOD_BOX_MAX]; /**< box information */
} __attribute__((aligned(4))) kp_yolo_result_t;
#define LAND_MARK_POINTS 5 /**< the number of land marks points */
/**
* @brief decribe a point
*/
typedef struct
{
uint32_t x; /**< x value */
uint32_t y; /**< y value */
} __attribute__((aligned(4))) kp_point_t;
/**
* @brief describe a landmark
*/
typedef struct
{
kp_point_t marks[LAND_MARK_POINTS]; /**< landmark points */
float score; /**< score of this landmark */
float blur; /**< blur score of this landmark */
int32_t class_num; /**< class number */
} __attribute__((aligned(4))) kp_landmark_result_t;
#define FR_FEAT_LENGTH 256 /**< the length of one feature map */
/**
* @brief describe a feature map
*/
typedef struct {
float feature_map[FR_FEAT_LENGTH]; /**< feature map in floating point */
int8_t feature_map_fixed[FR_FEAT_LENGTH]; /**< feature map in fixed point */
} __attribute__((aligned(4))) kp_fr_result_t;
/**
* @brief describe a classification result
*/
typedef struct
{
int32_t class_num; /**< class # (of many) with highest probability */
float score; /**< probability score */
} __attribute__((aligned(4))) kp_classification_result_t;
/**
* @brief describe version string
*/
typedef struct
{
uint8_t reserved; /**< for backward compatibility */
uint8_t major; /**< major number */
uint8_t minor; /**< minor number */
uint8_t update; /**< update number */
uint32_t build; /**< build number */
} __attribute__((aligned(4))) kp_firmware_version_t;
/**
* @brief describe system information
*/
typedef struct
{
uint32_t kn_number; /**< Chip K/N number */
kp_firmware_version_t firmware_version; /**< FW version */
} __attribute__((aligned(4))) kp_system_info_t;
/**
* @brief header stamp for user-defined data transfer
*/
typedef struct
{
uint32_t magic_type; /**< must be 'KDP2_MAGIC_TYPE_XXXXXX' */
uint32_t total_size; /**< total size of user-defined header data struct and data (image) */
uint32_t job_id; /**< user-defined ID to synchronize with firmware side, must >= 1000 */
uint32_t status_code; /**< this field is valid only for result data, refer to KP_API_RETURN_CODE */
uint32_t total_image; /**< total number of images for this inference */
uint32_t image_index; /**< the index of the image in this transmission */
} __attribute__((aligned(4))) kp_inference_header_stamp_t;
/**
* @brief Inference debug checkpoints in bit-fields format
*/
typedef enum
{
KP_DBG_CHECKPOINT_BEFORE_PREPROCESS = 0x1 << 0, /**< Checkpoint data(image) at before-pre_processing stage */
KP_DBG_CHECKPOINT_AFTER_PREPROCESS = 0x1 << 1, /**< Checkpoint data(image) at after-pre_processing stage */
KP_DBG_CHECKPOINT_AFTER_INFERENCE = 0x1 << 2, /**< Checkpoint data(fixed-point raw) at after-inference stage */
KP_DBG_CHECKPOINT_BEFORE_CPU_OP = 0x1 << 3, /**< Checkpoint data(cpu operation) at before-cpu operation stage */
KP_DBG_CHECKPOINT_AFTER_CPU_OP = 0x1 << 4, /**< Checkpoint data(cpu operation) at after-cpu operation stage */
} kp_dbg_checkpoint_flag_t;
/**
* @brief Inference debug data structure represents for "before-pre_process"
*/
typedef struct
{
kp_inference_header_stamp_t header_stamp; /**< magic_type = 'KDP2_MAGIC_TYPE_CHECKPOINT_DATA' */
uint32_t checkpoint_tag; /**< refer to kp_dbg_checkpoint_flag_t */
uint32_t img_x; /**< image position X */
uint32_t img_y; /**< image position Y */
uint32_t img_width; /**< image width in pixels */
uint32_t img_height; /**< image height in pixels */
uint32_t img_format; /**< image format, refer to kp_image_format_t */
int target_inf_model; /**< inferencing model */
uint32_t img_index; /**< index of input image */
uint8_t image[]; /**< image raw data */
} __attribute__((aligned(4))) kp_dbg_checkpoint_data_before_preprocess_t;
/**
* @brief Inference debug data structure represents for "after-pre_process"
*/
typedef struct
{
kp_inference_header_stamp_t header_stamp; /**< magic_type = 'KDP2_MAGIC_TYPE_CHECKPOINT_DATA' */
uint32_t checkpoint_tag; /**< refer to kp_dbg_checkpoint_flag_t */
uint32_t img_width; /**< image width in pixels */
uint32_t img_height; /**< image height in pixels */
uint32_t img_format; /**< image format, refer to kp_image_format_t */
int target_inf_model; /**< inferencing model */
uint32_t img_index; /**< index of input image */
uint8_t image[]; /**< image raw data */
} __attribute__((aligned(4))) kp_dbg_checkpoint_data_after_preprocess_t;
/**
* @brief Inference debug data structure represents for "after-inference"
*/
typedef struct
{
kp_inference_header_stamp_t header_stamp; /**< magic_type = 'KDP2_MAGIC_TYPE_CHECKPOINT_DATA' */
uint32_t checkpoint_tag; /**< refer to kp_dbg_checkpoint_flag_t */
int target_inf_model; /**< inferencing model */
uint32_t num_nodes; /**< number of output nodes */
kp_inf_raw_fixed_node_metadata_t node_metadata[50]; /**< output node metada */
uint32_t total_output_size; /**< total raw output size in bytes */
uint8_t raw_output[]; /**< truly raw output from NPU */
} __attribute__((aligned(4))) kp_dbg_checkpoint_data_after_inference_t;
/**
* @brief Inference debug data structure represents for "before-cpu operation"
*/
typedef struct
{
kp_inference_header_stamp_t header_stamp; /**< magic_type = 'KDP2_MAGIC_TYPE_CHECKPOINT_DATA' */
uint32_t checkpoint_tag; /**< refer to kp_dbg_checkpoint_flag_t */
int target_inf_model; /**< inferencing model */
uint32_t num_nodes; /**< number of output nodes */
kp_inf_raw_fixed_node_metadata_t node_metadata[50]; /**< output node metada */
uint32_t total_output_size; /**< total raw output size in bytes */
uint8_t raw_output[]; /**< truly raw output from NPU */
} __attribute__((aligned(4))) kp_dbg_checkpoint_data_before_cpu_op_t;
/**
* @brief Inference debug data structure represents for "after-cpu operation"
*/
typedef struct
{
kp_inference_header_stamp_t header_stamp; /**< magic_type = 'KDP2_MAGIC_TYPE_CHECKPOINT_DATA' */
uint32_t checkpoint_tag; /**< refer to kp_dbg_checkpoint_flag_t */
int target_inf_model; /**< inferencing model */
uint32_t num_nodes; /**< number of output nodes */
kp_inf_raw_fixed_node_metadata_t node_metadata[50]; /**< output node metada */
uint32_t total_output_size; /**< total raw output size in bytes */
uint8_t raw_output[]; /**< truly raw output from NPU */
} __attribute__((aligned(4))) kp_dbg_checkpoint_data_after_cpu_op_t;
typedef struct
{
uint32_t model_id; /**< model ID */
uint32_t inf_count; /**< number of inference */
uint32_t cpu_op_count; /**< number of cpu operation per inference */
float avg_pre_process_ms; /**< average pre-process time in milliseconds */
float avg_inference_ms; /**< average inference time in milliseconds */
float avg_cpu_op_ms; /**< average cpu operation time per-inference in milliseconds */
float avg_cpu_op_per_cpu_node_ms; /**< average cpu operation time per-cpu node in milliseconds */
float avg_post_process_ms; /**< average post-process time in milliseconds */
} kp_profile_model_statistics_t;
typedef struct
{
int num_model_profiled; /**< number of models profiled */
kp_profile_model_statistics_t model_st[16]; /**< refer to kp_profile_model_statistics_t */
} __attribute__((aligned(4))) kp_profile_data_t;
typedef struct
{
uint32_t model_id; /**< model ID */
uint32_t f0;
uint32_t f1;
uint32_t f2;
uint32_t f3;
uint32_t f4;
uint32_t f5;
uint32_t f6;
uint32_t f7;
} kp_npu_performance_monitor_statistics_t;
typedef struct
{
uint32_t npu_clock_rate; /**< NPU clock rate */
int num_model_profiled; /**< number of models profiled */
kp_npu_performance_monitor_statistics_t model_st[16]; /**< refer to kp_npu_performance_monitor_statistics_t */
} __attribute__((aligned(4))) kp_performance_monitor_data_t;
/**
* @brief Describe DDR memory space current configuration
*/
typedef struct
{
uint32_t ddr_available_begin; /**< Available DDR space begin address */
uint32_t ddr_available_end; /**< Available DDR space end address */
uint32_t ddr_model_end; /**< Model used DDR space end address */
uint32_t ddr_fifoq_allocated; /**< Whether FIFO queue has been configured */
} __attribute__((aligned(4))) kp_available_ddr_config_t;
/**
* @brief Describe FIFO Queue current configuration
*/
typedef struct
{
uint32_t fifoq_input_buf_count; /**< Input buffer count for FIFO queue, 0 if FIFO queue has not been set */
uint32_t fifoq_input_buf_size; /**< Input buffer size for FIFO queue, 0 if FIFO queue has not been set */
uint32_t fifoq_result_buf_count; /**< Input buffer count for FIFO queue, 0 if FIFO queue has not been set */
uint32_t fifoq_result_buf_size; /**< Input buffer size for FIFO queue, 0 if FIFO queue has not been set */
} __attribute__((aligned(4))) kp_fifo_queue_config_t;
#endif

99
include/common/membase.h Normal file
View File

@ -0,0 +1,99 @@
/* Copyright (c) 2020 Kneron, Inc. All Rights Reserved.
*
* The information contained herein is property of Kneron, Inc.
* Terms and conditions of usage are described in detail in Kneron
* STANDARD SOFTWARE LICENSE AGREEMENT.
*
* Licensees are granted free, non-transferable use of the information.
* NO WARRANTY of ANY KIND is provided. This heading must NOT be removed
* from the file.
*/
/******************************************************************************
* Filename:
* ---------
* membase.h
*
* Description:
* ------------
*
*
******************************************************************************/
#ifndef _MEMBASE_H_
#define _MEMBASE_H_
/******************************************************************************
Head Block of The File
******************************************************************************/
// Sec 0: Comment block of the file
// Sec 1: Include File
// Sec 2: Constant Definitions, Imported Symbols, miscellaneous
#define SPIF_XIP_BASE 0x10000000
#define SiRAM_MEM_BASE 0x1FF80000
#define SiRAM_MEM_SIZE 0x40000 //256KB
#define SdRAM_MEM_BASE 0x1FFC0000
#define SdRAM_MEM_SIZE 0x18000 //96KB
#define NiRAM_MEM_BASE 0x80000000
#define NiRAM_MEM_SIZE 0x00000000 //0
#define NdRAM_MEM_BASE 0x6F200000
#define NdRAM_MEM_SIZE 0x10000 //64KB
#define NCPU_FW_SIZE 0x200000 //2MB
#define NCPU_FW_IRAM_SIZE NiRAM_MEM_SIZE
#define NCPU_FW_DDR_BASE (0x80000000 + NiRAM_MEM_SIZE)
#define NCPU_FW_DDR_SIZE (NCPU_FW_SIZE-NCPU_FW_IRAM_SIZE) //2MB - 128KB
#define NPRAM_MEM_BASE 0x70000000
#define NPRAM_MEM_SIZE 0x80000 //512KB
// IPC memory: 8KB
#define DDR_MEM_IPC_ADDR 0x8021E000
//DDR memory address space means the addressing capability.
//For KL720, it's 1.75G bytes.
//The physical DDR size is determined by the DDR chip(s) in the silicon package.
//For example, Winbond 128MBytes, Micron 1GBytes
//DDR size will be different from projects.
#define DDR_MEM_PHY_BASE 0x80000000 // DDR physical address base
#define DDR_MEM_BASE 0x80220000 // for all models and heap
#define DDR_MEM_SIZE 0x8000000 // chip default 128MB
/******************************************************************************
Declaration of External Variables & Functions
******************************************************************************/
// Sec 3: declaration of external variable
// Sec 4: declaration of external function prototype
/******************************************************************************
Declaration of data structure
******************************************************************************/
// Sec 5: structure, uniou, enum, linked list
/******************************************************************************
Declaration of Global Variables & Functions
******************************************************************************/
// Sec 6: declaration of global variable
// Sec 7: declaration of global function prototype
/******************************************************************************
Declaration of static Global Variables & Functions
******************************************************************************/
// Sec 8: declaration of static global variable
// Sec 9: declaration of static function prototype
/******************************************************************************
// Sec 10: C Functions
******************************************************************************/
#endif //_MEMBASE_H_

View File

@ -0,0 +1,422 @@
#ifndef __MODEL_PARSER_API_H__
#define __MODEL_PARSER_API_H__
/* --------------------------------------------------------------------------
* Copyright (c) 2018-2021 Kneron Inc. All rights reserved.
*
* Name: model_parser_api.h
* Purpose: Kneron model parser API
*
*---------------------------------------------------------------------------*/
#include <stdint.h>
typedef enum {
DEFAULT_TGT,
KL520_TGT,
KL720_TGT,
KL530_TGT,
KL730_TGT,
KL630_TGT,
KL540_TGT,
} mdl_target_t;
typedef enum {
MDL_IN_NODE,
MDL_OUT_NODE,
MDL_CPU_NODE,
MDL_CONST_NODE,
TOTAL_MDL_NODES
} mdl_node_type_t;
typedef enum {
MDL_SEQ_DEFAULT,
MDL_SEG_INPUT,
MDL_SEG_OUTPUT,
MDL_SEG_WORK,
MDL_SEG_CMD,
MDL_SEG_WT,
MDL_SEG_SETUP,
TOTAL_SEGS
} mdl_seg_type_t;
typedef enum {
MDL_ENCY_NON,
MDL_ENCY_EFUSE,
MDL_ENCY_CUSTKEY
} mdl_encrypt_mode_t;
typedef enum {
DRAM_FMT_UNKNOWN = -1,
/* conv format */
DRAM_FMT_1W16C8B = 0,
DRAM_FMT_1W16C8BHL = 1,
DRAM_FMT_4W4C8B = 2,
DRAM_FMT_4W4C8BHL = 3,
DRAM_FMT_16W1C8B = 4,
DRAM_FMT_16W1C8BHL = 5,
DRAM_FMT_8W1C16B = 6,
/* psum data format */
DRAM_FMT_PS_1W16C24B = 7,
/* row format */
DRAM_FMT_RAW8B = 100,
DRAM_FMT_RAW16B = 101,
DRAM_FMT_RAW_FLOAT = 102
} mdl_dram_data_fmt_t;
typedef enum {
DT_None,
DT_Int8,
DT_Int16,
DT_Int32,
DT_Int64,
DT_UInt8,
DT_UInt16,
DT_Uint32,
DT_UInt64,
DT_Float,
DT_Bfloat16,
DT_Double
} mdl_data_type_t;
typedef enum {
ADDR_MODE_DEFAULT,
ADDR_MODE_ABS,
ADDR_MODE_REL,
} mdl_addr_mode_t;
typedef void * node_hdl_t;
typedef void * tensor_hdl_t;
typedef void * cpu_operator_hdl_t;
typedef void * session_hdl_t;
typedef void * param_hdl_t;
typedef struct {
uint32_t batch;
uint32_t ch;
uint32_t h;
uint32_t w;
} mdl_shape_t;
typedef struct {
uint32_t ch;
float scale;
int32_t radix;
} mdl_quant_factor_t;
/*********************************************************************************
Control Functions
**********************************************************************************/
/**
Setup one parsing session
[In]: setup_addr - address of the setup.bin
Return: session handle; NULL - fail
*/
session_hdl_t mdl_parser_open(uint32_t setup_addr, void * pModel);
/**
Close one parsing session
[In]: session - session handle
Return: 0 - success; -1 - fail
*/
int mdl_parser_close(session_hdl_t session);
/*********************************************************************************
Global Properties Inqury APIs
**********************************************************************************/
/**
query the hardware target supported by this model
[In]: session_hdl - the parse session handle
Return: supported hardware target ID
*/
mdl_target_t mdl_parse_get_target_id(session_hdl_t session_hdl);
/**
query the encryption mode of this model
[In]: session_hdl - the parse session handle
Return: encryption mode
*/
mdl_encrypt_mode_t mdl_parse_get_ency_mode(session_hdl_t session_hdl);
/**
obtain encryption key of this model
[In]: session_hdl - the parse session handle
[Out]: key - point to encryption key vector flatbuffers_uint8_vec_t
Return: 0 - success; -1 - encryption key does not exist
*/
int mdl_parse_get_ency_key(session_hdl_t session_hdl, const void **key);
/**
query the addressing mode of this model
[In]: session_hdl - the parse session handle
Return: addressing mode
*/
mdl_addr_mode_t mdl_parse_get_addressing_mode(session_hdl_t session_hdl);
/**
query the segment address for the specified segment
[In]: session_hdl - the parse session handle
[In]: seg - segment ID
Return: segment address
*/
uint32_t mdl_parse_get_seg_addr(session_hdl_t session_hdl, mdl_seg_type_t seg);
/*********************************************************************************
Node Utility APIs
**********************************************************************************/
/**
obtain the node handle for the specified node type
this handle is used for further access to this node properties
[In]: session_hdl - the parse session handle
[In]: node_type - node ID
Return: node handle; -1 if that node does not exist (especially CPU node)
*/
node_hdl_t mdl_parse_get_node(session_hdl_t session_hdl, mdl_node_type_t node_type);
/**
query the Tensor total count for inputs for the specified node
[In]: hdl - handle of the node
Return: Tensor count(0 - inputs Tensor does not existing)
*/
int mdl_parse_get_inputs_tensor_cnt(node_hdl_t hdl);
/**
query the Tensor total count for outputs for the specified node
[In]: hdl - handle of the node
Return: Tensor count (0 - outputs Tensor does not existing)
*/
int mdl_parse_get_outputs_tensor_cnt(node_hdl_t hdl);
/**
query the Tensor total count for const inputs for the specified node
[In]: hdl - handle of the node
Return: Tensor count (0 - outputs Tensor does not existing)
*/
int mdl_parse_get_consts_tensor_cnt(node_hdl_t hdl);
/**
obtain the inputs Tensor table for the specified node
[In]: hdl - handle of the node
Return: point to Tensor table; NULL for none
*/
tensor_hdl_t mdl_parse_get_inputs_tensor_hdl(node_hdl_t hdl);
/**
obtain the outputs Tensor table for the specified node
[In]: hdl - handle of the node
Return: handle to Tensor table; NULL for none
*/
tensor_hdl_t mdl_parse_get_outputs_tensor_hdl(node_hdl_t hdl);
/**
obtain the const inputs Tensor table for the specified node
[In]: hdl - handle of the node
Return: handle to Tensor table; NULL for none
*/
tensor_hdl_t mdl_parse_get_consts_tensor_hdl(node_hdl_t hdl);
/*********************************************************************************
Tensor Utility APIs
**********************************************************************************/
/**
query the NPU output data format in DRAM for the specified tensor table
[In]: hdl - handle of the tensor table
[In]: idx - index of Tensor vector
Return: NPU data format
*/
mdl_dram_data_fmt_t mdl_parse_get_fmt(tensor_hdl_t hdl, int idx);
/**
query the NPU output data shape (b,c,h,w) for the specified tensor table
[In]: hdl - handle of the tensor table
[In]: idx - index of Tensor vector
[Out]: point to the Shape data (mdl_shape_t)
Return: 0 - sucess; -1 - fail
*/
int mdl_parse_get_shape(tensor_hdl_t hdl, int idx, mdl_shape_t *pShape);
/**
query the NPU output data address for the specified tensor table
[In]: session - parse session handle
[In]: hdl - handle of the tensor table
[In]: idx - index of Tensor vector
Return: the address of the NPU data
*/
uint32_t mdl_parse_get_out_addr(session_hdl_t session, tensor_hdl_t hdl, int idx);
/**
query the NPU output data length for the specified tensor table
[In]: hdl - handle of the tensor table
[In]: idx - index of Tensor vector
Return: the length of the NPU data
*/
uint32_t mdl_parse_get_out_len(tensor_hdl_t hdl, int idx);
/**
query the const input data address for the specified tensor table
[In]: hdl - handle of the tensor table
[In]: idx - index of Tensor vector
Return: the source address of the const input data
*/
uint32_t mdl_parse_get_const_data_addr(tensor_hdl_t hdl, int idx);
/**
query the const input data length for the specified tensor table
[In]: hdl - handle of the tensor table
[In]: idx - index of Tensor vector
Return: the length of the const input data
*/
uint32_t mdl_parse_get_const_data_len(tensor_hdl_t hdl, int idx);
/**
query quantization vector length for the specified tensor table
[In]: hdl - handle of the tensor table
[In]: idx - index of Tensor vector
Return: the length of quantization vector
*/
uint32_t mdl_parse_get_quant_vector_len(tensor_hdl_t hdl, int idx);
/**
query the specified quantization cell
[In]: hdl - handle of the tensor table
[In]: t_idx - index of Tensor vector
[In]: q_idx - index in the quantization vector table
[Out]: pQuant - point to the query result
Return: 0 - sucess; -1 - that cell does not exist
*/
int mdl_parse_get_quant_vector_cell(tensor_hdl_t hdl, int t_idx,
int q_idx, mdl_quant_factor_t *pQuant);
/*********************************************************************************
CPU Utility APIs
Note: a cpu "knot" is a sub-node of cpu "node"
**********************************************************************************/
/**
query the cpu knot count for the specified operator table
[In]: hdl - handle of the cpu node
Return: total count of cpu knot
*/
int mdl_parse_get_cpu_knot_count(node_hdl_t hdl);
/**
query the operator information for the specified cpu knot
[In]: hdl - handle of the cpu node
[In]: k_idx - index of the cpu knot
[Out]: opcode - point to retrived operator opcode
[Out]: oper_name - point to operator name string address
[Out]: union_type_id - point to union Kneron_BuiltinOptions_union_type_t type, used to
match out the parameter type
[Out]: union_type_name - point to the type name string address
Return: the handle to obtain parameter options
*/
param_hdl_t mdl_parse_get_cpu_operator_info(node_hdl_t hdl, int k_idx, uint32_t* opcode,
char** oper_name, uint32_t* union_type_id, char** union_type_name);
/**
obtain the cpu operator parameters
[In]: pHdl: point to handle (return value of mdl_parse_get_cpu_operator_info())
[In]: opcode: operator code got from call to mdl_parse_get_cpu_operator_info()
[Out]: point to the point of operator parameter struct instance
Return: 0 - success; -1 - fail
*/
int mdl_parse_get_cpu_params(param_hdl_t *pHdl, uint32_t opcode, void **pParam);
/**
query the length of the inputs Tensor vector for the specified cpu knot
[In]: hdl - handle of the cpu node
[In]: k_idx - index of the cpu knot
Return: length of inputs tensor
*/
int mdl_parse_get_cpu_inputs_tensor_len(node_hdl_t hdl, int k_idx);
/**
query the length of the outputs Tensor vector for the specified cpu knot
[In]: hdl - handle of the cpu node
[In]: k_idx - index of the cpu knot
Return: length of outputs tensor
*/
int mdl_parse_get_cpu_outputs_tensor_len(node_hdl_t hdl, int k_idx);
/**
obtain the inputs tensor vector table for the specified cpu knot
[In]: hdl - handle of the cpu node
[In]: k_idx - knot index of the cpu knot table
Return: handle to the inputs tensor table (Kneron_Tensor_table_t), as
the handle to access Tensor parameters via Tensor Utility APIs
*/
tensor_hdl_t mdl_parse_get_cpu_inputs_tensor_hdl(node_hdl_t hdl, int k_idx);
/**
obtain the outputs tensor vector table for the specified cpu knot
[In]: hdl - handle of the cpu node
[In]: k_idx - knot index of the cpu knot table
Return: handle to the outputs tensor table, as the handle to
access Tensor parameters via Tensor Utility APIs
*/
tensor_hdl_t mdl_parse_get_cpu_outputs_tensor_hdl(node_hdl_t hdl, int k_idx);
#endif //__MODEL_PARSER_API_H__

257
include/common/model_res.h Normal file
View File

@ -0,0 +1,257 @@
/*
* Postprocess result data structures.
*
* Copyright (C) 2021 Kneron, Inc. All rights reserved.
*
*/
#ifndef MODEL_RES_H
#define MODEL_RES_H
#define BOXES_MAX_NUM 80
#define YOLO_KEYPOINT_MAX 127
#define YOLO_GOOD_BOX_MAX_SCPU 500
#define CLASSIFIER_MAX_NUM 1000
#define FR_FEATURE_MAP_SIZE 256
#define KEYPOINT_POINTS 11
#define LANDMARK_POINTS 5
#define LAND_MARK_MOUTH_POINTS 4 // new
#define LAND_MARK_EYE_POINTS 7 // new
#define MAX_LANDMARK_POINTS 5
#define MAX_ONET_POINTS 100
#define MAX_YOLO_FACE_LANDMARK_CNT 4 * 2 // (x and y) * max point count
#define OCR_MAX_NUM 20
#define SEG_WIDTH 80
#define SEG_HEIGHT 60
// used with post_age_gender
struct age_gender_result_s {
uint32_t age; // detected age
uint32_t ismale; // 0 for female, 1 for male
};
// bounding box coordinates, score, and class
struct bounding_box_s {
float x1; // top-left x corner
float y1; // top-left y corner
float x2; // bottom-right x corner
float y2; // bottom-right y corner
float score; // probability score
int32_t class_num; // class number (of many) with highest probability
};
// bounding box and landmark data
struct bounding_box_landmark_s {
float x1; // top-left x corner
float y1; // top-left y corner
float x2; // bottom-right x corner
float y2; // bottom-right y corner
float score; // probability score
int32_t class_num; // class number (of many) with highest probability
float lm[MAX_YOLO_FACE_LANDMARK_CNT]; // landmark data
};
// bounding box and landmark plus data
struct bounding_box_landmark_plus_s {
float x1; // top-left x corner
float y1; // top-left y corner
float x2; // bottom-right x corner
float y2; // bottom-right y corner
float score; // probability score
int32_t class_num; // class number (of many) with highest probability
float score_next; // second best probability score
int32_t class_num_next; // class number with second highest probability
float lm[MAX_YOLO_FACE_LANDMARK_CNT]; // landmark data
};
// used with post_classifier
struct classifier_result_s {
float score[CLASSIFIER_MAX_NUM]; // score for each class index
};
// used with post_face_pose
struct face_occlude_result_s {
float yaw;
float pitch;
float roll;
float occ;
float seg_res[5];
};
// used with post_face_recognition
struct fr_result_s {
float feature_map[FR_FEATURE_MAP_SIZE];
};
// used with post_face_recognition (floating & fixed point face embedding)
struct fr_flfix_result_s {
float feature_map[FR_FEATURE_MAP_SIZE];
int8_t raw_feature_map[FR_FEATURE_MAP_SIZE];
};
// used with post_face_landmark_onet
struct landmark_result_s {
struct {
uint32_t x;
uint32_t y;
} marks[MAX_ONET_POINTS];
float score;
float blur;
};
// used with post_face_landmark_onet_5p
struct landmark_result_5p_s {
struct {
uint32_t x;
uint32_t y;
} marks[LANDMARK_POINTS];
float score;
float blur;
int32_t class_num;
};
// used with post_onet_plus
struct onet_plus_result_s {
struct {
float x;
float y;
} marks[MAX_LANDMARK_POINTS];
float scores[MAX_LANDMARK_POINTS];
};
typedef struct classifier_pupil_result_s { // new
float fScore; // fScore for each class index
int idx_class;
}classifier_pupil_result_t;
struct landmark_68pt_result_s { // new
struct {
uint32_t x;
uint32_t y;
} marks[MAX_ONET_POINTS];
float score;
float blur;
};
struct eye_landmarks_s{ // new
struct {
uint32_t x;
uint32_t y;
} marks[LAND_MARK_EYE_POINTS];
};
enum mouth { // new
MOUTH_T = 0,
MOUTH_B,
MOUTH_L,
MOUTH_R,
};
struct yawning_result_s { // new
struct {
float x;
float y;
} marks[LAND_MARK_MOUTH_POINTS]; // mouth 0:top 1:bottom 2: left 3:right
uint32_t isYawning;
float yawning_rate;
};
// used with post_ocr
typedef struct ocr_s {
/*copy from lpr_result_s to store each bounding box of ocr value*/
uint32_t chars_count;
struct bounding_box_s char_boxes[OCR_MAX_NUM];
/*-------------------------------------------------------------*/
uint8_t valid; // 0 for invalid, 1 for valid
uint8_t value[OCR_MAX_NUM]; // integers representing characters in order, mapping
// defined in licenseplate_ocr.c
uint8_t hyphen; // position after which the hyphen should occur
} ocr_t;
struct general_semantic_segmentation_with_score_result_s {
uint32_t width; /**< class map width */
uint32_t height; /**< class map height */
uint64_t total_class_num; /**< total class number */
uint64_t class_map_address; /**< address of class number data in class_score_map */
uint64_t score_map_address; /**< address of score data in class_score_map */
uint32_t class_score_map[]; /**< class number and score data per image pixel (the score map data follows the class map data) */
};
// used with post_rsn
struct upperbody_keypoint_result_s {
struct {
float x; // x coordinate
float y; // y coordinate
} marks[KEYPOINT_POINTS];
};
// used with fd, yolo postprocesses
struct yolo_result_s {
uint32_t class_count; // total class count
uint32_t box_count; // total box count
struct bounding_box_s boxes[YOLO_GOOD_BOX_MAX_SCPU]; // found bounding boxes
};
struct keypoint_s {
float x;
float y;
float score;
};
struct bounding_box_keypoint_s {
struct bounding_box_s bbox;
uint32_t keypoint_count;
struct keypoint_s kpts[YOLO_KEYPOINT_MAX]; // keypoint data
};
struct yolo_and_keypoint_result_s {
uint32_t class_count; // total class count
uint32_t box_count; // total box count
struct bounding_box_keypoint_s boxes_kpts[BOXES_MAX_NUM]; // found bounding boxes
};
// used with yolo_face
struct yolo_and_landmark_result_s {
uint32_t class_count; // total class count
uint32_t box_count; // total box count
struct bounding_box_landmark_s boxes[BOXES_MAX_NUM]; // found bounding boxes
};
// used with yolo_X
struct yolox_and_landmark_result_s {
uint32_t class_count; // total class count
uint32_t box_count; // total box count
struct bounding_box_landmark_plus_s boxes[BOXES_MAX_NUM]; // found bounding boxes
};
/***********************************
struct raw_onode_t only support one channel quantization only here.
if the model has quantization parameters per channel,
then host side need to parse the fw model to get all parameters,
because too many parameters convey impact performance.
************************************/
typedef struct {
uint32_t idx; //sequence number of out sub-nodes
uint32_t fmt;
uint32_t batch;
uint32_t ch_length;
uint32_t row_length;
uint32_t col_length;
uint32_t buf_addr;
uint32_t buf_len;
uint32_t scale;
uint32_t radix;
uint32_t start_offset;
uint32_t buf_aligned_len;
uint32_t quant_vect_len;
} raw_onode_t;
typedef struct {
uint32_t total_raw_len;
int32_t total_nodes;
raw_onode_t onode_a[40];
uint8_t data[];
} raw_cnn_res_t;
#endif

418
include/common/model_type.h Normal file
View File

@ -0,0 +1,418 @@
#ifndef MODELTYPE_H
#define MODELTYPE_H
// !!!---------------------------------------------------------------------------!!!
// Whenever ModelType is updated,
// please also update Begin_Enum_String( ModelType ) as well
// !!!---------------------------------------------------------------------------!!!
#ifdef VATICS_PLATFORM
enum model_type {
#else
enum class ModelType {
#endif
INVALID_TYPE = 0,
KNERON_FD_SMALLBOX_200_200_3 = 1,
KNERON_FD_ANCHOR_200_200_3 = 2,
KNERON_FD_MBSSD_200_200_3= 3,
AVERAGE_POOLING = 4, //use with FD smallbox and don't use anymore
KNERON_LM_5PTS_ONET_56_56_3 = 5,
KNERON_LM_68PTS_dlib_112_112_3 = 6,
KNERON_LM_150PTS = 7,
KNERON_FR_RES50_112_112_3 = 8,
KNERON_FR_RES34 = 9,
KNERON_FR_VGG10 = 10,
KNERON_TINY_YOLO_PERSON_416_416_3 = 11,
KNERON_3D_LIVENESS = 12, //has two inputs: depth and RGB
KNERON_GESTURE_RETINANET_320_320_3 = 13,
TINY_YOLO_VOC_224_224_3 = 14,
IMAGENET_CLASSIFICATION_RES50_224_224_3 = 15,
IMAGENET_CLASSIFICATION_RES34_224_224_3 = 16,
IMAGENET_CLASSIFICATION_INCEPTION_V3_224_224_3 = 17,
IMAGENET_CLASSIFICATION_MOBILENET_V2_224_224_3 = 18,
TINY_YOLO_V3_224_224_3 = 19,
KNERON_2D_LIVENESS_224_224_3 = 20, //oldest rgb liveness model and don't use anymore
KNERON_FD_RETINANET_RES50_640_640_3 = 21,
KNERON_PERSON_MOBILENETSSD_224_224_3 = 22,
KNERON_AGE_GENDER = 23, //oldest age gender model and don't use anymore
KNERON_LM_5PTS_BLUR_ONET_48_48_3 = 24,
KNERON_2D_LIVENESS_V3_FACEBAGNET_224_224_3 = 25,
KNERON_AGE_GENDER_V2_RES18_128_128_3 = 26,
KNERON_OD_MBSSD = 27, //HW model and don't know input size
KNERON_PD_MBSSD = 28, //HW model and don't know which version and input size
KNERON_FR_MASK_RES50_112_112_3 = 29,
KNERON_NIR_LIVENESS_RES18_112_112_3 = 30,
KNERON_FR_MASK_RES101_112_112_3 = 31,
KNERON_FD_MASK_MBSSD_200_200_3 = 32,
TINY_YOLO_V3_416_416_3 = 33,
TINY_YOLO_V3_608_608_3 = 34,
KNERON_RACE_RES18_128_128_3 = 35,
KNERON_AGE_GENDER_WHITE_RES18_128_128_3 = 36,
KNERON_AGE_GENDER_BLACK_RES18_128_128_3 = 37,
KNERON_AGE_GENDER_INDIAN_RES18_128_128_3 = 38,
KNERON_FR_RES20MB_112_112_3 = 39,
//Category Face related 40~200
KNERON_CAT_FACE = 40,
KNERON_FACE_QAULITY_ONET_56_56_1 = KNERON_CAT_FACE,
KNERON_FUSE_LIVENESS = KNERON_CAT_FACE +1, // don't know the model backbone and input size of fuse liveness model
KNERON_EYELID_DETECTION_ONET_48_48_3 = KNERON_CAT_FACE +2,
KNERON_YAWN_DETECTION_PFLD_112_112_3 = KNERON_CAT_FACE +3,
KNERON_DBFACE_MBNET_V2_480_864_3 = KNERON_CAT_FACE +4,
KNERON_FILTER = KNERON_CAT_FACE +5, //No model inference, just pre and post-process
KNERON_ALIGNMENT = KNERON_CAT_FACE +6, //No model inference, just preprocess
KNERON_FACE_EXPRESSION_112_112_3 = KNERON_CAT_FACE +7,//105.391,689.658
KNERON_RBG_OCCLUSION_RES18_112_112_3 = KNERON_CAT_FACE +8,
KNERON_LM2BBOX = KNERON_CAT_FACE + 9, //No model inference, just post-process
KNERON_PUPIL_ONET_48_48_3 = KNERON_CAT_FACE +10,
KNERON_NIR_OCCLUSION_RES18_112_112_3 = KNERON_CAT_FACE +11,
KNERON_HEAD_SHOULDER_MBNET_V2_112_112_3 = KNERON_CAT_FACE + 12,
KNERON_RGB_LIVENESS_RES18_112_112_3 = KNERON_CAT_FACE +13,
KNERON_MOUTH_LM_v1_56_56_1 = KNERON_CAT_FACE +14, //3dLM: nose, upper lip middle, chin, two sides of faces
KNERON_MOUTH_LM_v2_56_56_1 = KNERON_CAT_FACE +15, //3dLM: nose, upper/lower lip middle, two sides of faces
KNERON_PUPIL_ONET_48_48_1 = KNERON_CAT_FACE +16,
KNERON_RGB_LIVENESS_MBV2_112_112_3 = KNERON_CAT_FACE +17,
KNERON_FACESEG_DLA34_128_128_3 = KNERON_CAT_FACE +18,
KNERON_OCC_CLS = KNERON_CAT_FACE +19, //no model inference, just post-process
KNERON_LMSEG_FUSE = KNERON_CAT_FACE+20, //no model inference, just post-process
KNERON_AGEGROUP_RES18_128_128_3 = KNERON_CAT_FACE+21,
KNERON_FR_kface_112_112_3 = KNERON_CAT_FACE+22,
KNERON_FDmask_ROTATE_MBSSD_200_200_3 = KNERON_CAT_FACE+23,
KNERON_LM_5PTSROTATE_ONET_56_56_3 = KNERON_CAT_FACE+24,
KNERON_FUSE_LIVENESS_850MM = KNERON_CAT_FACE +25,
KNERON_FUSE_LIVENESS_940MM = KNERON_CAT_FACE +26,
KNERON_FACE_QAULITY_ONET_112_112_3 = KNERON_CAT_FACE +27,
KNERON_FACE_POSE_ONET_56_56_3 = KNERON_CAT_FACE + 28,
KNERON_FUSE_LIVENESS_850MM_RES18_112_112_3 = KNERON_CAT_FACE + 29, //Gen's resnet+agg fuse model
KNERON_OCCCLASSIFER_112_112_3 = KNERON_CAT_FACE +30,
KNERON_FACE_ROTATE_POSE_ONET_56_56_3 = KNERON_CAT_FACE + 31,
KNERON_NIR_LIVENESS_ROT_RES18_112_112_3 = KNERON_CAT_FACE +32,
KNERON_LM_5PTS_ONETPLUS_56_56_3 = KNERON_CAT_FACE + 33,
KNERON_FUSE_LIVENESS_940MM_18_RES18_112_112_3 = KNERON_CAT_FACE + 34,
KNERON_DBFACE_MBNET_V2_256_352_3 = KNERON_CAT_FACE +35,
KNERON_NIR_Liveness_aligned_112_112_3 = KNERON_CAT_FACE +36,
KNERON_FUSE_Liveness_940_850_RES18_112_112_3 = KNERON_CAT_FACE +37,
KNERON_FDLM_RETINANET_MBV2_640_640_3 = KNERON_CAT_FACE + 38,
KNERON_NIR_OCCLUSION_MBV2D4_112_112_3 = KNERON_CAT_FACE +39,
KNERON_FACE_EYEGLASSES_CLS3_56_56_3 = KNERON_CAT_FACE +40,
KNERON_HEAD_SHOULDER_ROT_MBNET_V2_112_112_3 = KNERON_CAT_FACE + 41,
KNERON_YOLOV5_FACE_AND_LM_640_640_3 = KNERON_CAT_FACE + 42, // bbox and lm, 2 outputs
KNERON_YOLOV5_FACE_AND_LM_NO_UPSAMPLE_640_640_3 = KNERON_CAT_FACE + 43, // bbox and lm, 2 outputs
KNERON_YOLOV5_FACE_FD_640_640_3 = KNERON_CAT_FACE + 44, // only bbox
KNERON_YOLOV5_FACE_FD_NO_UPSAMPLE_640_640_3 = KNERON_CAT_FACE + 45, // only bbox
KNERON_RSN_AFFINE = KNERON_CAT_FACE + 46, // affine preprocess only
KNERON_MOUTH_LM_v2_ROTATE_56_56_1 = KNERON_CAT_FACE +47, //3dLM: nose, upper/lower lip middle, two sides of faces
KNERON_YOLOV5_FACE_MASK_LM_640_640_3 = KNERON_CAT_FACE + 48, // bbox and lm, 2 outputs, 640(w)x640(h)
KNERON_YOLOV5_FACE_MASK_LM_384_640_3 = KNERON_CAT_FACE + 49, // bbox and lm, 2 outputs, 640(w)x384(h)
KNERON_YOLOV5_FACE_MASK_640_640_3 = KNERON_CAT_FACE + 50, // only bbox, 640(w)x640(h)
KNERON_YOLOV5_FACE_MASK_384_640_3 = KNERON_CAT_FACE + 51, // only bbox, 640(w)x384(h)
KNERON_FACE_PUPIL_CLS2_48_48_3 = KNERON_CAT_FACE +52,
KNERON_LM_5PTS_ROTATE_ONETPLUS_80_80_3 = KNERON_CAT_FACE +53,
KNERON_FDmask_ROTATE_fcos_224_224_3 = KNERON_CAT_FACE+54,
KNERON_FDmask_fcos_224_224_3 = KNERON_CAT_FACE+55,
KNERON_FACE_PUPIL_ROTATE_CLS2_48_48_3 = KNERON_CAT_FACE +56,
KNERON_NIR_OCCLUSION_ROT_MBV2D4_112_112_3 = KNERON_CAT_FACE +57,
KNERON_FUSE_LIVENESS_sc035_112_112_4 = KNERON_CAT_FACE +58,
KNERON_FDmask_fcos_512_704_3 = KNERON_CAT_FACE+59,
KNERON_FACESEG_DLA34_rotate_128_128_3 = KNERON_CAT_FACE +60,
KNERON_FUSE_LIVENESS_R18_5crops_48_48_3 = KNERON_CAT_FACE + 61,
KNERON_RGB2NIR_MOBILEFACENET_RESNET_6BLOCKS_256_256_3 = KNERON_CAT_FACE + 62,
KNERON_FUSE_LIVENESS_1054sc035_112_112_4 = KNERON_CAT_FACE +63,
KNERON_NIR_LIVENESS_ROT_1054_RES18_112_112_3 = KNERON_CAT_FACE +64,
KNERON_FDmask_ROTATE_fcos_256_448_3 = KNERON_CAT_FACE+65,
KNERON_FDmask_ROTATE_fcos_288_416_3 = KNERON_CAT_FACE+66,
KNERON_DEPTH_LIVENESS_FeatherNetB_112_112_1 = KNERON_CAT_FACE +67,
KNERON_FUSE_TOF_LIVENESS_DEP_NIR_112_112_1 = KNERON_CAT_FACE +68,
KNERON_NSH_LIVENESS_ROT_1054_MBV2D2_112_112_3 = KNERON_CAT_FACE +69,
KNERON_FDmask_fcos_384_320_3 = KNERON_CAT_FACE+70,
KNERON_COMBINE_LIVENESS_ROT_1054_MBV2_112_112_3 = KNERON_CAT_FACE +71,
KNERON_RGB2NIR_UNET_FR_112_112_1 = KNERON_CAT_FACE + 72,
KNERON_RGB2NIR_UNET_FR_112_112_3 = KNERON_CAT_FACE + 73,
KNERON_TOF_EYE_LIVENESS_ROT_MBV2_112_112_3 = KNERON_CAT_FACE +74,
KNERON_FACESEG_VGG10L_128_128_3 = KNERON_CAT_FACE +75,
KNERON_FR_kfacer152_112_112_3 = KNERON_CAT_FACE +76,
//Category Object Detection related 200~300
KNERON_OB_DETECT = 200,
KNERON_OBJECTDETECTION_CENTERNET_512_512_3 = KNERON_OB_DETECT,
KNERON_OBJECTDETECTION_FCOS_416_416_3 = KNERON_OB_DETECT +1,
KNERON_PD_MBNET_V2_480_864_3 = KNERON_OB_DETECT +2, //16:9 aspect ratio
KNERON_CAR_DETECTION_MBSSD_224_416_3 = KNERON_OB_DETECT +3,
KNERON_PD_CROP_MBSSD_304_304_3 = KNERON_OB_DETECT +4,
YOLO_V3_416_416_3 = KNERON_OB_DETECT +5,
YOLO_V4_416_416_3 = KNERON_OB_DETECT +6,
KNERON_CAR_DETECTION_YOLOV5S_CarMotorcycleBusTruck4_352_640_3 = KNERON_OB_DETECT +7,
KNERON_LICENSE_DETECT_WPOD_208_416_3 = KNERON_OB_DETECT +8,
KNERON_2D_UPPERBODY_KEYPOINT_RES18_384_288_3 = KNERON_OB_DETECT +9,
YOLO_V3_608_608_3 = KNERON_OB_DETECT +10,
KNERON_YOLOV5S_COCO80_640_640_3 = KNERON_OB_DETECT +11,
KNERON_YOLOV5S_PersonBicycleCarMotorcycleBusTruckCatDog8_256_480_3 = KNERON_OB_DETECT + 12,
KNERON_SITTINGPOSTURE_RESNET34_288_384_3 = KNERON_OB_DETECT + 13,
KNERON_PERSONDETECTION_FCOS_416_416_3 = KNERON_OB_DETECT +14,
KNERON_YOLOV5m_COCO80_640_640_3 = KNERON_OB_DETECT +15,
KNERON_YOLOV5S_PersonBicycleCarMotorcycleBusTruck6_256_480_3 = KNERON_OB_DETECT + 16,
KNERON_PERSONDETECTION_FCOS_384_288_3 = KNERON_OB_DETECT +17,
KNERON_PERSONDETECTION_FCOS_720_416_3 = KNERON_OB_DETECT +18,
KNERON_PERSONDETECTION_dbface_864_480_3 = KNERON_OB_DETECT +19,
KNERON_PERSONDETECTION_YOLOV5s_256_480_3 = KNERON_OB_DETECT +20,
KNERON_PERSONCLASSIFIER_MB_56_32_3 = KNERON_OB_DETECT +21,
KNERON_PERSONREID_RESNET_42_82_3 = KNERON_OB_DETECT +22,
KNERON_PERSONDETECTION_YOLOV5s_512_928_3 = KNERON_OB_DETECT +23,
KNERON_UPKPTS_RSN_256_192_3 = KNERON_OB_DETECT + 24,
KNERON_PERSONDETECTION_YOLOV5sParklot_256_480_3 = KNERON_OB_DETECT + 25,
KNERON_CAR_DETECTION_MBSSD_304_544_3 = KNERON_OB_DETECT +26,
KNERON_KPTSCLASSIFIER_3_11_1 = KNERON_OB_DETECT +27,
KNERON_YOLOV5S_PersonCatDogBottleChairPottedplant6_256_480_3 = KNERON_OB_DETECT + 28,
KNERON_DBFAIR_320_160_3 = KNERON_OB_DETECT + 29,
KNERON_CAR_MOTOR_PERSON_DETECTION_MBSSD_224_416_3 = KNERON_OB_DETECT +30,
KNERON_LICENSE_DETECT_QUANTIZED_WPOD_208_416_3 = KNERON_OB_DETECT +31,
KNERON_PERSON_DETECTION_MBSSD_224_416_3 = KNERON_OB_DETECT +32,
KNERON_PERSONCLASSIFIER_MB_56_48_3 = KNERON_OB_DETECT +33,
KNERON_YOLOV5S_CarMotorcycleBusTruckPlate5_352_640_3 = KNERON_OB_DETECT + 34,
KNERON_YOLOV5S_PersonBottleChairPottedplant4_288_640_3 = KNERON_OB_DETECT + 35,
KNERON_COCO_KPTS_dbpose_640_384_3 = KNERON_OB_DETECT + 36,
KNERON_YOLOV5S_OCR_NUMBER_ALPHABET_PLATE_352_640_3 = KNERON_OB_DETECT + 37,
KNERON_PERSONKPTS_ONETPLUS_112_56_3 = KNERON_OB_DETECT + 38,
KNERON_IMAGE_KPT_240_320_3 = KNERON_OB_DETECT + 39,
KNERON_FULLBODYKPTS_LHRN_256_192_3 = KNERON_OB_DETECT + 40,//520: 8.81063, 720:119.38
KNERON_YOLOF_R50_640_384_3 = KNERON_OB_DETECT + 41,
KNERON_SOLOV2_R18_FPN_448_448_3 = KNERON_OB_DETECT + 42,
KNERON_IMAGE_KPT_SP_240_320_3 = KNERON_OB_DETECT + 43,
KNERON_YOLOX_S_640_640_3 = KNERON_OB_DETECT + 44,
KNERON_SCRFD_500M_BNKPS_640_480_3 = KNERON_OB_DETECT + 45,
KNERON_SCRFD_2G_BNKPS_640_480_3 = KNERON_OB_DETECT + 46,
KNERON_SCRFD_10G_BNKPS_640_480_3 = KNERON_OB_DETECT + 47,
KNERON_PERSONCLASSIFIER_HALF_56_32_3 = KNERON_OB_DETECT +48,
KNERON_SCRFD_10G_BNKPS_640_640_3 = KNERON_OB_DETECT + 49,
KNERON_YOLOV5S_PersonBicycleCarMotorcycleBusTruck6_512_864_3 = KNERON_OB_DETECT + 50,
KNERON_FULLBODYKPTS_RSN_COCO_256_192_3 = KNERON_OB_DETECT + 51,//9.14208, 56.433
KNERON_YOLOV5S_768192PersonCatDogBottleChairPottedplant6_256_480_3 = KNERON_OB_DETECT + 52,
KNERON_PERSONCLASSIFIER_768192MB_56_48_3 = KNERON_OB_DETECT +53,
KNERON_FULLBODYKPTS_RSN_MPII_256_256_3 = KNERON_OB_DETECT + 54,
KNERON_CENTERTRACK_PERSON_960_544_7 = KNERON_OB_DETECT + 55,
KNERON_FAIRMOT_PERSON_928_512_3 = KNERON_OB_DETECT + 56,
KNERON_YOLOP_VEHICLE_384_640_3 = KNERON_OB_DETECT + 57,
KNERON_YOLOV5S_PersonBicycleCarMotorcycleBusTruck6_480_832_3 = KNERON_OB_DETECT + 58,
KNERON_YOLOV5S_PersonBottleChairPottedplant4_480_832_3 = KNERON_OB_DETECT + 59,
KNERON_YOLOV5S_PersonHead2_256_480_3 = KNERON_OB_DETECT + 60,
KNERON_HANDKPTS_RSN18_FREIHAND_224_224_3 = KNERON_OB_DETECT + 62,
KNERON_YOLOV5S_COCO80_256_480_3 = KNERON_OB_DETECT + 63,
KNERON_YOLOV5S_COCO80_480_640_3 = KNERON_OB_DETECT + 64,
KNERON_YOLOV5S_PersonBicycleCarMotorcycleBusTruck6_192_480_3 = KNERON_OB_DETECT + 65,
KNERON_YOLOV5S_PersonBicycleCarMotorcycleBusTruck6_352_480_3 = KNERON_OB_DETECT + 66,
KNERON_YOLOOP_PersonTwowheelVehicle3_384_640_3 = KNERON_OB_DETECT + 67,
KNERON_YOLOV5M_PersonBottleChairPottedplant4_160_960_3 = KNERON_OB_DETECT + 68,
KNERON_YOLOX_Person_448_800_3 = KNERON_OB_DETECT + 69,
KNERON_YOLOV5S_PersonVboxHead2_256_480_3 = KNERON_OB_DETECT + 70,
KNERON_YOLOX_Person_160_960_3 = KNERON_OB_DETECT + 71,
KNERON_IMAGE_KPT_CV_240_320_3 = KNERON_OB_DETECT + 72,
KNERON_LICENSE_DETECT_YOLO5FACE_S_4PT_608_800_3 = KNERON_OB_DETECT + 73,
KNERON_LICENSE_DETECT_YOLO5FACE_S_4PT_NO_UPSAMPLE_480_640_3 = KNERON_OB_DETECT + 74,
KNERON_YOLOV5S_PersonBicycleCarMotorcycleBusTruck6_192_288_3 = KNERON_OB_DETECT + 75,
KNERON_YOLOV5S0375_PersonBicycleCarMotorcycleBusTruck6_256_352_3 = KNERON_OB_DETECT + 76,
KNERON_YOLOV5S_ROBOT_VACUUM_61CLS_480_640_3 = KNERON_OB_DETECT + 77,
KNERON_YOLOV5M_PersonBottleChairPottedplantTvmonitorProjectorscreenLaptop7_160_1152_3 = KNERON_OB_DETECT + 78,
KNERON_YOLOV5M_PersonBottleChairPottedplantTvmonitorProjectorscreenLaptop7_192_928_3 = KNERON_OB_DETECT + 79,
KNERON_YOLOV5M_ROBOT_VACUUM_61CLS_480_640_3 = KNERON_OB_DETECT + 80,
KNERON_YOLOV5S_PersonHead2_288_384_3 = KNERON_OB_DETECT + 81,
KNERON_IMAGE_KPT_LOFTR_240_320_3 = KNERON_OB_DETECT + 82,
KNERON_YOLOXS_LANDMARK_USLPD_480_832_3 = KNERON_OB_DETECT + 95,
KNERON_YOLOXM_USLPR_96_256_3 = KNERON_OB_DETECT + 96,
//Category OCR related 300~600
KNERON_OCR = 300,
KNERON_LICENSE_OCR_MBNET_64_160_3 = KNERON_OCR,
KNERON_WATERMETER_OCR_MBNET = KNERON_OCR +1, //unknown
KNERON_LICENSE_OCR_MBNETv2_64_160_3 = KNERON_OCR +2,
KNERON_LICENSE_OCR_MBNETv2_96_256_3 = KNERON_OCR +3,
//Category Audio related 600~900
KNERON_AUDIO = 600,
KNERON_KWS_DSCNN3_149_10_1 = KNERON_AUDIO,
KNERON_SIMPLE_COMMAND_DSCNN3_49_10_1 = KNERON_AUDIO +1,
KNERON_SOUND_CLASSIFICATION_THINRESNET34_128_250_3 = KNERON_AUDIO +2,
KNERON_ASR_ENCODER_1_1000_64 = KNERON_AUDIO+3,
KNERON_ASR_DECODER_1024 = KNERON_AUDIO+4,
KNERON_SOUND_CLASSIFICATION_11CLASSES_RESNET34_128_250_3 = KNERON_AUDIO +6, //Add baby crying class
KNERON_TTS_AM = KNERON_AUDIO +7,
KNERON_TTS_VO = KNERON_AUDIO +8,
KNERON_TTS_FRONTEND = KNERON_AUDIO +9,
KNERON_SILERO_VAD = KNERON_AUDIO +10,
KNERON_THINRESNET34_GVLAD = KNERON_AUDIO +11, // 512-dimensional speakcer feature extraction
KNERON_THINRESNET34_GVLAD_10_SECONDS = KNERON_AUDIO +12, // 512-dimensional speakcer feature extraction for 10 seconds input
KNERON_THINRESNET34_GVLAD_15_SECONDS = KNERON_AUDIO +13, // 512-dimensional speakcer feature extraction for 15 seconds input
KNERON_TTS_COSYVOICE = KNERON_AUDIO + 14,
KNERON_SOUND_CLASSIFICATION_12CLASSES_RESNET34_128_250_3 = KNERON_AUDIO +15, //Add speech class
KNERON_SOUND_CLASSIFICATION_13CLASSES_RESNET34_128_250_3 = KNERON_AUDIO +16, //Add glass breaking class
//Category Depth prediction related
KNERON_DEPTH = 700,
KNERON_DEPTH_RESNET18_320_480_3 = KNERON_DEPTH,
KNERON_RAFT_FRONT_272_480_3 = KNERON_DEPTH +1,
KNERON_RAFT_GRU_272_480_3 = KNERON_DEPTH +2,
KNERON_RAFT_UP_272_480_3 = KNERON_DEPTH +3,
KNERON_STEREONET_FE_480_640_3 = KNERON_DEPTH +4, // Feature Extraction
KNERON_STEREONET_CC_120_160_320 = KNERON_DEPTH +5, // Cost Construction
KNERON_STEREONET_CA_120_160_48 = KNERON_DEPTH +6, // Cost Aggregation
KNERON_STEREONET_CN_480_640_3 = KNERON_DEPTH +7, // Context Net
//Category tracker related 900~1000
KNERON_TRACKER= 900,
KNERON_TRACKER_UPDATE=901,
KNERON_TRACKER_GET_DATEBASE=902,
KNERON_TRACKER_RESET_DATEBASE=903,
//Category SDK test related
KNERON_CAT_SDK_TEST = 1000,
KNERON_SDK_FD = KNERON_CAT_SDK_TEST,
KNERON_SDK_LM = KNERON_CAT_SDK_TEST +1,
KNERON_SDK_FR = KNERON_CAT_SDK_TEST +2,
// Category Function Runner related 2000
KNERON_FUNCTION = 2000,
KNERON_FUNCTION_FANIR_CLS = KNERON_FUNCTION,
KNERON_FUNCTION_OCC_CLS = KNERON_FUNCTION +1,
KNERON_FUNCTION_LMSEG_FUSE = KNERON_FUNCTION +2,
KNERON_FUNCTION_FILTER_SCORE = KNERON_FUNCTION +3,
KNERON_FUNCTION_BLINK_DETECT = KNERON_FUNCTION +4,
KNERON_FUNCTION_NMS = KNERON_FUNCTION +5,
KNERON_FUNCTION_FILTER_PD_FALSEPOSITIVE = KNERON_FUNCTION +6,
KNERON_FUNCTION_TRACKER = KNERON_FUNCTION +7,
KNERON_FUNCTION_LANDMARK_SCORE_FILTER = KNERON_FUNCTION +8,
KNERON_FUNCTION_FILTER_REID = KNERON_FUNCTION +9,
KNERON_FUNCTION_IS_SKIP = KNERON_FUNCTION +10,
KNERON_FUNCTION_CHOOSE_LARGEBOX = KNERON_FUNCTION + 11,
KNERON_FUNCTION_FILTERPITCH = KNERON_FUNCTION + 12,
KNERON_FUNCTION_FILTERPOSE = KNERON_FUNCTION+13,
KNERON_FUNCTION_COMBINEBOX_PDFALSEPOSITIVE = KNERON_FUNCTION + 14,
KNERON_FUNCTION_FILTERBOXSIZE = KNERON_FUNCTION + 15,
KNERON_FUNCTION_FARGB_CLS = KNERON_FUNCTION + 16,
KNERON_FUNCTION_RGBCHECKER = KNERON_FUNCTION + 17,
KNERON_FUNCTION_NIRCHECKER = KNERON_FUNCTION + 18,
KNERON_FUNCTION_FRISKIP = KNERON_FUNCTION +19,
KNERON_FUNCTION_MASKCHECKER = KNERON_FUNCTION +20,
KNERON_FUNCTION_BBOXLMPOSE_FILTER = KNERON_FUNCTION + 21,
KNERON_FUNCTION_FUSESKIP = KNERON_FUNCTION + 22,
KNERON_FUNCTION_RETAIN_PERSONCATEGORY = KNERON_FUNCTION + 23,
KNERON_FUNCTION_CHOOSE_CENTER_BBOX = KNERON_FUNCTION + 24,
KNERON_FUNCTION_FILTER_SCORE_CLASS = KNERON_FUNCTION + 25,
KNERON_FUNCTION_BBOX_LM_LIVENESS_FILTER = KNERON_FUNCTION + 26,
KNERON_FUNCTION_UPPERSQUARE_BBOX = KNERON_FUNCTION + 27,
KNERON_FUNCTION_LOWERSQUARE_BBOX = KNERON_FUNCTION + 28,
KNERON_FUNCTION_FAIRMOT = KNERON_FUNCTION + 29,
KNERON_FUNCTION_MERGEBOX = KNERON_FUNCTION +30,
KNERON_FUNCTION_NIR_OCC_MBV=KNERON_FUNCTION +31,
KNERON_FUNCTION_FA_NIR_SH=KNERON_FUNCTION +32,
KNERON_FUNCTION_EYE_LMK_FUSE=KNERON_FUNCTION +33,
KNERON_FUNCTION_FILTER_GLASSES=KNERON_FUNCTION +34,
KNERON_FUNCTION_YOLOLP2WPODFORMAT=KNERON_FUNCTION +36,
KNERON_FUNCTION_AGGREGATE_OCCLUSION_CLASSIFIER_INPUTS=KNERON_FUNCTION +37,
KNERON_FUNCTION_FILTER_BBOXES_BY_PITCH_RESULTS=KNERON_FUNCTION +38,
KNERON_FUNCTION_REORDER_CENTER_BBOXES=KNERON_FUNCTION +39,
KNERON_FUNCTION_GENERAL_SCORE_FILTER=KNERON_FUNCTION+40,
KNERON_FER_CROP = KNERON_FUNCTION+41,
KNERON_FUNCTION_FILTER_FACE_WITH_CLOSED_EYES = KNERON_FUNCTION + 42,
KNERON_FUNCTION_EXPAND_PLATE = KNERON_FUNCTION + 43,
KNERON_FUNCTION_BBOX_TO_STRING = KNERON_FUNCTION + 44,
KNERON_FUNCTION_OCR_REMOVE_DIGITS = KNERON_FUNCTION + 45,
KNERON_FUNCTION_LMK_SELECTOR = KNERON_FUNCTION + 46,
KNERON_FUNCTION_REVERSE_KPTS = KNERON_FUNCTION + 47,
KNERON_FUNCTION_REVERSE_KPTS_FULLBODY = KNERON_FUNCTION + 48,
KNERON_FUNCTION_MERGE_YOLO_TYPE_CARPLATES = KNERON_FUNCTION + 49,
KNERON_FUNCTION_MERGE_BBOX_EMB = KNERON_FUNCTION + 50,
KNERON_FUNCTION_CROP_IMG_AGEGENDER = KNERON_FUNCTION + 51,
KNERON_FUNCTION_IMG_FLIP = KNERON_FUNCTION + 52,
KNERON_FUNCTION_AVERAGE_EMB = KNERON_FUNCTION + 53,
KNERON_FUNCTION_GETVALIDREIDBBOX = KNERON_FUNCTION + 54,
KNERON_FUNCTION_COMBINEVALIDINVALIDBBOX = KNERON_FUNCTION + 55,
KNERON_MATMUL = KNERON_OB_DETECT + 56,
KNERON_FUNCTION_MERGENODE = KNERON_OB_DETECT + 57,
KNERON_FUNCTION_RETINAFACE_MERGERBOX = KNERON_FUNCTION + 58,
KNERON_YOLOV5S_PersonBottleChairPottedplant4_832_480_3 = KNERON_OB_DETECT + 59,
KNERON_YOLOV5S_PersonHead2_480_256_3 = KNERON_OB_DETECT + 60,
KNERON_FUNCTION_KEEP_BBOX_BY_CLASS_IDS = KNERON_FUNCTION + 61,
KNERON_ByteTrack = KNERON_FUNCTION + 62,
KNERON_FUNCTION_SPLIT_OCCLUDED_BBOX = KNERON_FUNCTION + 63,
KNERON_FUNCTION_GET_OCCLUDED_UNMATCHED_BBOX = KNERON_FUNCTION + 64,
KNERON_FUNCTION_SIMPLE_IGNORE_FACE_OF_BAD_POSE = KNERON_FUNCTION + 65,
KNERON_FUNCTION_SIMPLE_IGNORE_FACE_OF_BAD_POSE_WITH_CONFIDENCE = KNERON_FUNCTION + 66,
KNERON_FUNCTION_FILTER_BICYCLE_MOTORCYCLE = KNERON_FUNCTION + 67,
KNERON_FUNCTION_SKIP_REID_FILTER = KNERON_FUNCTION + 68,
KNERON_FUNCTION_TRACKING_WO_REID = KNERON_FUNCTION + 69,
KNERON_FUNCTION_OCC_CHECKER = KNERON_FUNCTION + 70,
KNERON_FUNCTION_TRACKER_IN_DET_FORMAT = KNERON_FUNCTION +71,
KNERON_FUNCTION_LOW_HIGH_SCORE_BBOX_SPLIT = KNERON_FUNCTION +73,
KNERON_FUNCTION_RM_INCOMPLETE_BBOX = KNERON_FUNCTION +74,
KNERON_FUNCTION_RM_PERSON_IN_TV = KNERON_FUNCTION +75,
KNERON_FUNCTION_BBOX_LM_OCCLU_FILTER = KNERON_FUNCTION +76,
KNERON_FUNCTION_APPEND_EMPTY_LIST_TO_ORIGINAL_OUTPUT = KNERON_FUNCTION + 77,
KNERON_FUNCTION_DEPTH_DECODE_CROP_RESIZE = KNERON_FUNCTION +78,
KNERON_FUNCTION_SKIP_DARK_BRIGHT_FACE = KNERON_FUNCTION + 79,
KNERON_FUNCTION_TRACKER_KPTS = KNERON_FUNCTION + 80,
KNERON_FUNCTION_NIR_CROP_RESIZE = KNERON_FUNCTION + 81,
KNERON_FUNCTION_DEPTH_FUSE_FILTER = KNERON_FUNCTION + 82,
KNERON_FUNCTION_TWO_STAGE_SCORE_COMBINE = KNERON_FUNCTION + 83,
KNERON_FUNCTION_FILTER_LARGE_AREA_LOWER_SCORE = KNERON_FUNCTION + 84,
KNERON_FUNCTION_NORMALIZE_GLUE_KPTS = KNERON_FUNCTION + 85,
//Category Segmentation
KNERON_SEGMENTATION = 3000,
KNERON_INSTANCE_YOLACT_R18_FPN_448_448_3 = KNERON_SEGMENTATION,
KNERON_SEGMENTATION_STDCNET_CITYSCAPES_512_1024_3 = KNERON_SEGMENTATION + 1,
KNERON_SEGMENTATION_STDCNET_INDOOR_480_640_3 = KNERON_SEGMENTATION + 2,
KNERON_SEGMENTATION_DDRNET23SLIMCONV_INDOOR_480_640_3 = KNERON_SEGMENTATION + 3,
KNERON_INSTANCE_SOLO_R18_FPN_448_448_3 = KNERON_SEGMENTATION + 4,
KNERON_SEGMENTATION_DDRNET23SLIMCONV_POLY_INDOOR_480_640_3 = KNERON_SEGMENTATION + 5,
KNERON_SEGMENTATION_PIDNETS_CITYSCAPES_BDD10K_192_256_3 = KNERON_SEGMENTATION + 30,
//Category System models
KNERON_SYSTEMMODELS = 4000,
KNERON_IMAGENET_MOBILENETV2_224_224_3 = KNERON_SYSTEMMODELS,
KNERON_IMAGENET_MOBILENETV2_QAT_224_224_3 = KNERON_SYSTEMMODELS + 1,
//The IDs of KNERON_OB_DETECT and KNERON_OCR are conflicting, please don't use KNERON_OB_DETECT anymore, use KNERON_OB_DETECT_ instead
//Category Object Detection related 5000~10000
KNERON_OB_DETECT_ = 5000,
KNERON_YOLOV705_PersonBottleChairPottedplantTvmonitorProjectorscreenLaptopHead8_192_928_3 = KNERON_OB_DETECT_,
KNERON_YOLOV705_PersonBottleChairPottedplantTvmonitorProjectorscreenLaptopHead8_448_2112_3 = KNERON_OB_DETECT_ + 1,
KNERON_YOLOV705_PersonBottleChairPottedplantTvmonitorProjectorscreenLaptopHead8_640_1440_3 = KNERON_OB_DETECT_ + 2,
KNERON_YOLOV7TINY_PersonCatDogBottleChairPottedplantHead7_480_256_3 = KNERON_OB_DETECT_ + 3,
KNERON_YOLOV7pose_PersonBottleChairPottedplantTvmonitorProjectorscreenLaptopHead8_832_480_3 = KNERON_OB_DETECT_ + 4,
KNERON_YOLOV7TINY_HADNDETECTION_640_640_3 = KNERON_OB_DETECT_ + 5,
KNERON_YOLOV7pose_61kpts_PersonHeadHand3_640_384_3 = KNERON_OB_DETECT_ + 6,
KNERON_YOLOV705_PersonBicycleCarMotorcycleBusTruckHead7_512_288_3 = KNERON_OB_DETECT_ + 30,
KNERON_YOLOV705_PersonBottleChairPottedplantHead5_608_800_3 = KNERON_OB_DETECT_ + 34,
KNERON_YOLOV7pose_tiny_LicensePlateDetection_640_640_3 = KNERON_OB_DETECT_ + 43,
KNERON_YOLOV705_LicensePlateRecognition_256_96_3 = KNERON_OB_DETECT_ + 44,
KNERON_YOLOV705_kbro_PersonBottleChairPottedplantHead5_608_800_3 = KNERON_OB_DETECT_ + 47,
KNERON_YOLOV705_PersonBicycleCarMotorcycleBusTruckHeadTrafficCone8_512_288_3 = KNERON_OB_DETECT_ + 57,
KNERON_YOLOV705_PersonBicycleCarMotorcycleBusTruckHeadTrafficConeTrafficPoleTrafficBarrel10_512_288_3 = KNERON_OB_DETECT_ + 68,
KNERON_YOLOV7TINY075_PersonBicycleCarMotorcycleBusTruckHead7_448_224_3 = KNERON_OB_DETECT_ + 73,
KNERON_YOLOV7TINY075_PersonBicycleCarMotorcycleBusTruckHead7_96_64_3 = KNERON_OB_DETECT_ + 74,
KNERON_YOLOV7TINY_DMS_640_384_3 = KNERON_OB_DETECT_ + 76,
KNERON_YOLOV7TINY_HORSE24_640_384_3 = KNERON_OB_DETECT_ + 78,
//Category Model Zoo training models
//20000~30000
KNERON_MODEL_ZOO = 20000,
KNERON_MODEL_ZOO_MOBILENETV2 = KNERON_MODEL_ZOO,
KNERON_MODEL_ZOO_RESNET18 = KNERON_MODEL_ZOO + 1,
KNERON_MODEL_ZOO_RESNET50 = KNERON_MODEL_ZOO + 2,
KNERON_MODEL_ZOO_FP_Classifier = KNERON_MODEL_ZOO + 3,
KNERON_MODEL_ZOO_FCOS_DARKNET53s = KNERON_MODEL_ZOO + 4,
KNERON_MODEL_ZOO_YOLOV5s_NoUpsample = KNERON_MODEL_ZOO + 5,
KNERON_MODEL_ZOO_YOLOV5s = KNERON_MODEL_ZOO + 6,
//Category Customer models
//0x8000 = 32768
CUSTOMER = 32768,
Count
};
#endif

View File

@ -0,0 +1,167 @@
/**
* @file kneron_interface_data.h
* @brief Kneron data structures used for API
* @copyright (c) 2020 Kneron Inc. All right reserved.
*/
#ifndef __KNERON_API_DATA_H__
#define __KNERON_API_DATA_H__
#include <stdint.h>
#include "ipc.h"
#include "model_parser_api.h"
/* Helper macros */
#define RAW_INFERENCE_FORMAT(image_p) (image_p->raw_img_p->inf_format)
#define RAW_IMAGE_NUM_INPUT(image_p) (image_p->raw_img_p->num_image)
#define RAW_IMAGE_MEM_ADDR(image_p, i) (image_p->raw_img_p->image_list[i].image_mem_addr)
#define RAW_IMAGE_MEM_LEN(image_p, i) (image_p->raw_img_p->image_list[i].image_mem_len)
#define RAW_FORMAT(image_p, i) (image_p->raw_img_p->image_list[i].format)
#define RAW_INPUT_ROW(image_p, i) (image_p->raw_img_p->image_list[i].input_row)
#define RAW_INPUT_COL(image_p, i) (image_p->raw_img_p->image_list[i].input_col)
#define RAW_CROP_TOP(image_p, i) (image_p->raw_img_p->image_list[i].params_s.crop_top)
#define RAW_CROP_BOTTOM(image_p, i) (image_p->raw_img_p->image_list[i].params_s.crop_bottom)
#define RAW_CROP_LEFT(image_p, i) (image_p->raw_img_p->image_list[i].params_s.crop_left)
#define RAW_CROP_RIGHT(image_p, i) (image_p->raw_img_p->image_list[i].params_s.crop_right)
#define RAW_PAD_TOP(image_p, i) (image_p->raw_img_p->image_list[i].params_s.pad_top)
#define RAW_PAD_BOTTOM(image_p, i) (image_p->raw_img_p->image_list[i].params_s.pad_bottom)
#define RAW_PAD_LEFT(image_p, i) (image_p->raw_img_p->image_list[i].params_s.pad_left)
#define RAW_PAD_RIGHT(image_p, i) (image_p->raw_img_p->image_list[i].params_s.pad_right)
#define RAW_SCALE_WIDTH(image_p, i) (image_p->raw_img_p->image_list[i].params_s.scale_width)
#define RAW_SCALE_HEIGHT(image_p, i) (image_p->raw_img_p->image_list[i].params_s.scale_height)
#define RAW_FLIP_FACE(image_p, i) (image_p->raw_img_p->image_list[i].params_s.flip_face)
#define RAW_OTHER_PARAMS(image_p) (image_p->raw_img_p->ext_params)
#define DIM_INPUT_ROW(image_p, i) (image_p->model_preproc[i].dim.input_row)
#define DIM_INPUT_COL(image_p, i) (image_p->model_preproc[i].dim.input_col)
#define DIM_INPUT_CH(image_p, i) (image_p->model_preproc[i].dim.input_channel)
#define PREPROC_INPUT_MEM_ADDR(image_p, i) (image_p->model_preproc[i].preproc.input_mem_addr)
#define PREPROC_INPUT_MEM_LEN(image_p, i) (image_p->model_preproc[i].preproc.input_mem_len)
#define PREPROC_INPUT_MEM_ADDR2(image_p, i) (image_p->model_preproc[i].preproc.input_mem_addr2)
#define PREPROC_INPUT_MEM_LEN2(image_p, i) (image_p->model_preproc[i].preproc.input_mem_len2)
#define PREPROC_INPUT_RADIX(image_p, i) (image_p->model_preproc[i].preproc.input_radix)
#define PREPROC_INPUT_FORMAT(image_p, i) (image_p->model_preproc[i].preproc.input_format)
#define PREPROC_PARAMS_P(image_p, i) (image_p->model_preproc[i].preproc.params_p)
#define POSTPROC_OUTPUT_NUM(image_p) (image_p->postproc.output_num)
#define POSTPROC_OUTPUT_FORMAT(image_p) (image_p->postproc.output_format)
#define POSTPROC_OUTPUT_MEM_ADDR(image_p) (image_p->postproc.output_mem_addr)
#define POSTPROC_OUTPUT_MEM_LEN(image_p) (image_p->postproc.output_mem_len)
#define POSTPROC_RESULT_MEM_ADDR(image_p) (image_p->postproc.result_mem_addr)
#define POSTPROC_RESULT_MEM_LEN(image_p) (image_p->postproc.result_mem_len)
#define POSTPROC_RESULT_MODEL_ID(image_p) (image_p->postproc.model_id)
#define POSTPROC_PARAMS_P(image_p) (image_p->postproc.params_p)
#define POSTPROC_RAW_RESULT_MEM_ADDR(image_p) (image_p->postproc.raw_result_mem_addr)
#define POSTPROC_OUTPUT_MEM_ADDR3(image_p) (image_p->postproc.output_mem_addr3)
#define POSTPROC_OUTPUT_MEM_ADDR4(image_p) (image_p->postproc.output_mem_addr4)
/* Structure of kdp_model_dim */
struct kdp_model_dim_s {
/* CNN input dimensions */
uint32_t input_row;
uint32_t input_col;
uint32_t input_channel;
};
/* Structure of kdp_pre_proc_s */
struct kdp_pre_proc_s {
/* input image in memory for NPU */
uint32_t input_mem_addr;
int32_t input_mem_len;
/* Input working buffers for NPU */
uint32_t input_mem_addr2;
int32_t input_mem_len2;
/* number of bits for input fraction */
uint32_t input_radix;
/* scaling factor */
float input_scale;
/* Other parameters for the model */
void *params_p;
};
struct kdp_model_pre_proc_s {
/* Model dimension */
struct kdp_model_dim_s dim;
/* Pre process struct */
struct kdp_pre_proc_s preproc;
};
/* Structure of kdp_post_proc_s */
struct kdp_post_proc_s {
/* output number */
uint32_t output_num;
/* output data memory from NPU */
uint32_t output_mem_addr;
int32_t output_mem_len;
/* result data memory from post processing */
uint32_t result_mem_addr;
int32_t result_mem_len;
uint32_t output_mem_addr3; // for FD SSR or shared
uint32_t output_mem_addr4; // for CenterNet or shared
/* output data format from NPU
* BIT(0): =0, 8-bits
* =1, 16-bits
*/
uint32_t output_format;
/* output node parameter */
// Out_Node *node_p;
/* Other parameters for the model */
void *params_p;
};
/*****************************************************************
* Flatbuffer setup.bin model information
*****************************************************************/
/* Parsed model setup.bin information (flatbuffer) */
typedef struct {
session_hdl_t parser_session_hdl;
node_hdl_t in_node_hdl;
node_hdl_t out_node_hdl;
node_hdl_t cpu_node_hdl;
node_hdl_t const_node_hdl;
} parsed_fw_model_flatbuffer_t;
/* KDP image structure */
typedef struct kdp_image_s {
/* a NCPU copy of raw image struct in in_comm_p */
struct kdp_img_raw_s *raw_img_p;
/**
* To compatible legacy/flatbuffer version setup.bin information
*
* is_flatbuffer: false - legacy. true - flatbuffer.
* pParsedModel: for legacy setup.bin model. (NULL when is_flatbuffer is true)
* pParsedModelFlatbuffer: for flatbuffer setup.bin model. (NULL when is_flatbuffer is false)
*/
// bool is_flatbuffer;
// parsed_fw_model_t *pParsedModel;
parsed_fw_model_flatbuffer_t *pParsedModelFlatbuffer;
int model_id;
int slot_idx;
// char *setup_mem_p;
void *pExtParam;
int32_t nLenExtParam;
/* Model dimension and Pre process struct */
struct kdp_model_pre_proc_s model_preproc[MAX_INPUT_NODE_COUNT];
/* Post process struct */
struct kdp_post_proc_s postproc;
} kdp_image_t;
#endif /* __KNERON_API_DATA_H__ */

116
include/common/types.h Normal file
View File

@ -0,0 +1,116 @@
#ifndef TYPES_H
#define TYPES_H
#define BIT0 0x00000001
#define BIT1 0x00000002
#define BIT2 0x00000004
#define BIT3 0x00000008
#define BIT4 0x00000010
#define BIT5 0x00000020
#define BIT6 0x00000040
#define BIT7 0x00000080
#define BIT8 0x00000100
#define BIT9 0x00000200
#define BIT10 0x00000400
#define BIT11 0x00000800
#define BIT12 0x00001000
#define BIT13 0x00002000
#define BIT14 0x00004000
#define BIT15 0x00008000
#define BIT16 0x00010000
#define BIT17 0x00020000
#define BIT18 0x00040000
#define BIT19 0x00080000
#define BIT20 0x00100000
#define BIT21 0x00200000
#define BIT22 0x00400000
#define BIT23 0x00800000
#define BIT24 0x01000000
#define BIT25 0x02000000
#define BIT26 0x04000000
#define BIT27 0x08000000
#define BIT28 0x10000000
#define BIT29 0x20000000
#define BIT30 0x40000000
#define BIT31 0x80000000
#define BS 0x08
#define ESC 27
#ifndef NULL
#define NULL 0
#endif
#ifndef ENABLE
#define ENABLE 1
#endif
#ifndef DISABLE
#define DISABLE 0
#endif
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
/* type define */
typedef unsigned long long UINT64;
typedef long long INT64;
typedef unsigned int UINT32;
typedef int INT32;
typedef unsigned short UINT16;
typedef short INT16;
typedef unsigned char UINT8;
typedef char INT8;
typedef unsigned char BOOL;
typedef unsigned char BOOLEAN;
typedef unsigned char u8_t;
typedef unsigned short u16_t;
typedef unsigned long u32_t;
typedef unsigned long long u64_t;
typedef unsigned char uchar;
#ifndef u16
typedef unsigned short u16;
#endif
#ifndef u32
typedef unsigned int u32;
#endif
#ifndef s16
typedef short s16;
#endif
#ifndef s32
typedef int s32;
#endif
typedef INT8 INT8S;
typedef UINT8 INT8U;
typedef INT16 INT16S;
typedef UINT16 INT16U;
typedef INT32 INT32S;
typedef UINT32 INT32U;
typedef unsigned char byte;
typedef unsigned short word;
typedef unsigned long int dword;
#ifndef boolean
typedef char boolean;
#endif
#define vLib_LeWrite8(x,y) *(volatile INT8U *)((INT8U * )x)=(y)
#define vLib_LeWrite32(x,y) *(volatile INT32U *)((INT8U * )x)=(y) //bessel:add (INT8U * )
#define u32lib_leread32(x) *((volatile INT32U *)((INT8U * )x)) //bessel:add (INT8U * )
#define u32Lib_LeRead32(x) *((volatile INT32U *)((INT8U * )x)) //bessel:add (INT8U * )
#endif //TYPES_H

34
include/common/utils.h Normal file
View File

@ -0,0 +1,34 @@
#ifndef UTILS_H
#define UTILS_H
#define MIN(a,b) (((a)<(b))?(a):(b))
#define MAX(a,b) (((a)>(b))?(a):(b))
#define ABS(a) (((a)>=0)?(a):(-(a)))
#define FLOOR(val) ((int)(val) - ((int)(val) > val))
#define ROUND(x) ((x)>=0?(int)((x)+0.5):(int)((x)-0.5))
/* Exported macro ------------------------------------------------------------*/
#ifdef USE_FULL_ASSERT
/**
* @brief The assert_param macro is used for function's parameters check.
* @param expr: If expr is false, it calls assert_failed function
* which reports the name of the source file and the source
* line number of the call that failed.
* If expr is true, it returns no value.
* @retval None
*/
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
/* Exported functions ------------------------------------------------------- */
void assert_failed(uint8_t* file, uint32_t line);
#else
#define assert_param(expr) ((void)0)
#endif /* USE_FULL_ASSERT */
int constrain_int(int a, int min, int max);
float max_item_f(float* arr, int size);
float find_median_positive_short(short int *input, int size);
short find_min_positive_n(short* input, int size);
#endif

View File

@ -0,0 +1,12 @@
#ifndef MEM_BROKER_H
#define MEM_BROKER_H
#include <stdint.h>
void *MemBroker_GetMemory(uint32_t size, uint32_t align);
void MemBroker_FreeMemory(void *ptr);
void MemBroker_Init(void);
void MemBroker_Deinit(void);
void *MemBroker_GetPhysAddr(void *virt_addr);
void MemBroker_CacheInvalidate(void *addr, uint32_t size);
void MemBroker_CacheCopyBack(void *addr, uint32_t size);
void MemBroker_CacheFlush(void *addr, uint32_t size);
#endif

View File

@ -0,0 +1,36 @@
#ifndef MSG_BROKER_H
#define MSG_BROKER_H
#include <stdint.h>
typedef struct MsgBroker_Handle_S MsgBroker_Handle_T;
/* Message callback context — all fields accessed in kdp2_host_stream.c msg_callback */
typedef struct {
uint32_t msg_type;
void *data;
uint32_t size;
char *pszHost; /* target module name */
char *pszCmd; /* command string */
void *pbyData; /* command payload */
uint32_t bHasResponse;
uint32_t dwDataSize;
uint32_t _pad[4];
} MsgContext;
/* System runtime suspend/resume command strings */
#define SR_MODULE_NAME "sr"
#define SUSPEND_CMD "suspend"
#define RESUME_CMD "resume"
int MsgBroker_Init(void);
int MsgBroker_Deinit(void);
int MsgBroker_Send(const char *topic, void *data, uint32_t size);
int MsgBroker_Recv(const char *topic, void *data, uint32_t size, int timeout_ms);
int MsgBroker_RegisterMsg(const char *topic);
int MsgBroker_UnRegisterMsg(void);
int MsgBroker_Run(const char *topic,
void (*callback)(MsgContext *ctx, void *user),
void *user_data,
int *terminate);
int MsgBroker_SuspendAckMsg(void);
#endif

View File

@ -0,0 +1,5 @@
#ifndef COMM_VIDEO_BUF_H
#define COMM_VIDEO_BUF_H
#include <stdint.h>
typedef struct { uint32_t phy_addr; uint32_t virt_addr; uint32_t size; } VideoBuf_T;
#endif

View File

@ -0,0 +1,12 @@
#ifndef COMM_VMF_LOG_H
#define COMM_VMF_LOG_H
#include <stdio.h>
/* VMF logging stub - maps to standard printf */
#define VMF_LOG_ERR(fmt, ...) fprintf(stderr, "[ERR] " fmt "\n", ##__VA_ARGS__)
#define VMF_LOG_WARN(fmt, ...) fprintf(stderr, "[WRN] " fmt "\n", ##__VA_ARGS__)
#define VMF_LOG_INFO(fmt, ...) printf("[INF] " fmt "\n", ##__VA_ARGS__)
#define VMF_LOG_DBG(fmt, ...) do {} while(0)
#endif /* COMM_VMF_LOG_H */

View File

@ -0,0 +1,29 @@
#ifndef INIPARSER_H
#define INIPARSER_H
#ifdef __cplusplus
extern "C" {
#endif
/* Opaque dictionary handle (matches libiniparser ABI) */
typedef struct _dictionary_ {
int n;
int size;
char **val;
char **key;
unsigned *hash;
} dictionary;
dictionary * iniparser_load(const char *ininame);
void iniparser_freedict(dictionary *d);
int iniparser_getint(dictionary *d, const char *key, int notfound);
double iniparser_getdouble(dictionary *d, const char *key, double notfound);
const char * iniparser_getstring(dictionary *d, const char *key, const char *def);
int iniparser_getboolean(dictionary *d, const char *key, int notfound);
int iniparser_find_entry(dictionary *d, const char *entry);
#ifdef __cplusplus
}
#endif
#endif /* INIPARSER_H */

View File

@ -0,0 +1,195 @@
#ifndef VMF_FEC_LAYOUT_H
#define VMF_FEC_LAYOUT_H
#include <stdint.h>
#include <vmf/video_source.h>
/* Opaque FEC handle */
typedef struct VMF_FEC_HANDLE_S VMF_FEC_HANDLE_T;
typedef struct VMF_FEC_INFO_S VMF_FEC_INFO_T;
/* FEC processing method */
typedef enum {
VMF_FEC_METHOD_GTR = 0,
VMF_FEC_METHOD_CGE,
VMF_FEC_METHOD_MAX
} VMF_FEC_METHOD;
/* FEC grid size (real values match SDK: 4/8/16/32) */
typedef enum {
VMF_FEC_GRID_4X4 = 4,
VMF_FEC_GRID_8X8 = 8,
VMF_FEC_GRID_16X16 = 16,
VMF_FEC_GRID_32X32 = 32,
VMF_FEC_GRID_64X64 = 64,
VMF_FEC_GRID_128X128= 128,
} VMF_FEC_GRID_SIZE_TYPE;
typedef VMF_FEC_GRID_SIZE_TYPE VMF_FEC_GRID_SIZE_E;
/* FEC coefficient mode */
typedef enum {
VMF_FEC_COEF_MODE_ORIG = 0,
VMF_FEC_COEF_MODE_AREA,
VMF_FEC_COEF_MODE_PTZ,
VMF_FEC_COEF_MODE_P360,
VMF_FEC_COEF_MODE_P180,
VMF_FEC_COEF_MODE_VR,
VMF_FEC_COEF_MODE_OBJ,
VMF_FEC_COEF_MODE_DUAL,
VMF_FEC_COEF_MODE_PT,
VMF_FEC_COEF_MODE_NULL,
VMF_FEC_COEF_MODE_NUM
} VMF_FEC_COEF_MODE;
/* FEC mode type (used by P180 / PTZ config structs) */
typedef enum {
VMF_FEC_MODE_AREA = 0,
VMF_FEC_MODE_PTZ_MODE,
VMF_FEC_MODE_PANO_180_ALL_DIRECTION,
VMF_FEC_MODE_PANO_180_ONE_DIRECTION,
VMF_FEC_MODE_PANO_180_TWO_DIRECTION,
VMF_FEC_MODE_PANO_360_FULL,
VMF_FEC_MODE_PANO_360_SEPE,
VMF_FEC_MODE_PANO_360_HALF,
VMF_FEC_MODE_LDC,
VMF_FEC_MODE_ORI,
VMF_FEC_MODE_VR_SPHERE,
VMF_FEC_MODE_VR_CYLINDER,
VMF_FEC_MODE_OBJECT,
VMF_FEC_MODE_PT = 14
} VMF_FEC_MODE_TYPE;
/* FEC app type */
typedef enum {
VMF_FEC_APP_CEILING = 0,
VMF_FEC_APP_TABLE = 1,
VMF_FEC_APP_WALL = 2,
VMF_FEC_APP_LDC,
VMF_FEC_APP_P720,
VMF_FEC_APP_DVS,
VMF_FEC_APP_CGE
} VMF_FEC_APP_TYPE;
typedef VMF_FEC_APP_TYPE VMF_FEC_APP_TYPE_E;
/* FEC lens type */
typedef enum {
VMF_FEC_LENS_STEREOGRAPHIC = 0,
VMF_FEC_LENS_EQUISOLIDANGLE,
VMF_FEC_LENS_EQUIDISTANT,
VMF_FEC_LENS_ORTHOGRAPHIC,
VMF_FEC_LENS_LDC,
VMF_FEC_LENS_NODISTORT,
VMF_FEC_LENS_USER_DEF
} VMF_FEC_LENS_TYPE;
/* Extra perspective-transform points (mirrors Extra_PT in fec_api.h) */
typedef struct {
unsigned int bExtraPtEn;
unsigned int dwX[4];
unsigned int dwY[4];
} VMF_FEC_EXTRA_PT_T;
/* Encoder specification */
typedef struct {
unsigned int bEncH264;
unsigned int bEncH265;
unsigned int bEncJPEG;
unsigned int bOthers;
} VMF_ENC_SPEC_T;
/* FEC layout config — full field layout from SDK fec_layout.h */
typedef struct {
unsigned int dwOutputId;
VMF_LAYOUT_T tLayout;
unsigned int bCoeffOnly;
VMF_FEC_GRID_SIZE_E eGridSize;
unsigned int dwClearBackColor;
VMF_FEC_METHOD eLayoutMethod;
VMF_ENC_SPEC_T tEncSpec;
unsigned int bDuplexMode;
unsigned int bEisMode;
} VMF_FEC_LYT_CONFIG_T;
/* FEC cell config — full field layout from SDK fec_layout.h */
typedef struct {
VMF_FEC_COEF_MODE eFecMode;
void *pFecConfig;
unsigned int dwFlag;
unsigned int dwIspLinePixels;
unsigned int bEisMode;
} VMF_FEC_CELL_CONFIG_T;
/* FEC original (passthrough) config */
typedef struct {
float fZoom;
float fDstOffsetX;
float fDstOffsetY;
float fDstXYRatio;
VMF_FEC_APP_TYPE eAppType;
void *ptRoi;
unsigned int dwOutRadius;
unsigned int eFECRotateType;
VMF_FEC_EXTRA_PT_T tExtraPt;
unsigned int dwSrcRadius;
} VMF_FEC_ORIG_CONFIG_T;
/* FEC PTZ (pan-tilt-zoom) config */
typedef struct {
float fPan;
float fTilt;
float fZoom;
float fFocalLength;
VMF_FEC_APP_TYPE eAppType;
VMF_FEC_MODE_TYPE eModeType;
VMF_FEC_LENS_TYPE eLensType;
void *ptRoi;
unsigned int dwOutRadius;
float fDstOffsetX;
float fDstOffsetY;
VMF_FEC_EXTRA_PT_T tExtraPt;
float fDstRotate;
unsigned int eFECRotateType;
} VMF_FEC_PTZ_CONFIG_T;
/* FEC panorama-180 config */
typedef struct {
float fTilt;
float fZoom;
float fSpin;
float fFocalLength;
float fRectCurvature;
float fRectSlope;
float fDstOffsetX;
float fDstOffsetY;
float fDstXYRatio;
unsigned int eFECRotateType;
VMF_FEC_MODE_TYPE eModeType;
VMF_FEC_LENS_TYPE eLensType;
void *ptRoi;
unsigned int dwOutRadius;
unsigned int dwOptionFlags;
VMF_FEC_EXTRA_PT_T tExtraPt;
} VMF_FEC_P180_CONFIG_T;
/* FEC projection-transform (PT) config */
typedef struct {
void *pCoeffData;
unsigned int dwCoeffDataSize;
void *pComplexCoeffData;
unsigned int dwComplexCoeffDataSize;
void *pMrfCoeffData;
unsigned int dwMrfCoeffDataSize;
} VMF_FEC_PT_CONFIG_T;
/* FEC APIs (real implementations are in libvmf.so on device) */
int VMF_FEC_Open(VMF_FEC_HANDLE_T **handle, const char *cal_path, const char *conf_path);
int VMF_FEC_Close(VMF_FEC_HANDLE_T *handle);
int VMF_FEC_SetMode(VMF_FEC_HANDLE_T *handle, unsigned int mode, unsigned int app_type);
int VMF_FEC_LYT_Single(VMF_VSRC_HANDLE_T *vsrc, VMF_FEC_LYT_CONFIG_T *lyt, VMF_FEC_CELL_CONFIG_T *cell);
int VMF_FEC_LYT_Single_Ext(VMF_VSRC_HANDLE_T *vsrc, VMF_FEC_LYT_CONFIG_T *lyt, VMF_FEC_CELL_CONFIG_T *cell,
unsigned int adwRectangles[2], unsigned int adwOffsets[2]);
VMF_FEC_INFO_T *VMF_LYT_FEC_Info_Init(VMF_VSRC_HANDLE_T *vsrc, VMF_FEC_LYT_CONFIG_T *lyt, VMF_FEC_CELL_CONFIG_T *cell);
int VMF_LYT_FEC_Info_Release(VMF_FEC_INFO_T *info);
#endif /* VMF_FEC_LAYOUT_H */

View File

@ -0,0 +1,5 @@
#ifndef VMF_GYRO_DAEMON_H
#define VMF_GYRO_DAEMON_H
int VMF_GYRO_Init(void);
int VMF_GYRO_Deinit(void);
#endif

View File

@ -0,0 +1,19 @@
#ifndef VMF_SSM_INFO_H
#define VMF_SSM_INFO_H
#include <stdint.h>
/* Video source shared memory output info - fields accessed by app code */
typedef struct {
uint32_t dwWidth;
uint32_t dwHeight;
uint32_t dwStride;
uint32_t dwYStride;
uint32_t dwFormat;
uint32_t dwType;
uint32_t dwSize;
uint32_t dwYSize;
uint32_t dwUVSize;
uint32_t dwOffset[3];
uint32_t dwPhyAddr;
uint32_t dwReserved[4];
} VMF_VSRC_SSM_OUTPUT_INFO_T;
#endif

View File

@ -0,0 +1,75 @@
#ifndef VMF_SYNC_SHARED_MEMORY_H
#define VMF_SYNC_SHARED_MEMORY_H
#include <stdint.h>
/* VMF SSM (Sync Shared Memory) — opaque handle */
typedef struct VMF_SSM_HANDLE_S VMF_SSM_HANDLE_T;
/* Legacy SSM reader/writer handle (lower-case) */
typedef struct ssm_handle_s ssm_handle_t;
/* Uppercase alias used in kdp2_host_stream.c */
typedef ssm_handle_t SSM_HANDLE_T;
/* SSM buffer descriptor */
typedef struct {
void *buffer;
unsigned char *buffer_phys_addr;
uint32_t buf_size;
uint32_t _pad[4];
} SSM_BUFFER_T;
/* SSM writer init options */
typedef struct {
const char *name;
uint32_t buf_size;
uint32_t alignment;
uint32_t pshared;
void *pUserData;
void (*fp_setup_buffer)(unsigned char *buf, uint32_t size, void *pUserData);
uint32_t _pad[4];
} SSM_WRITER_INIT_OPTION_T;
/* VMF frame info (opaque stub) */
typedef struct {
uint32_t _pad[32];
} VMF_FRAME_INFO_T;
/* Lowercase alias for SSM_BUFFER_T used in kdp2_host_stream.c */
typedef SSM_BUFFER_T ssm_buffer_t;
/* SSM reader image scheme */
typedef enum {
VMF_SSM_READER_SCHEME_BLOCK = 0,
VMF_SSM_READER_SCHEME_NONBLOCK = 1,
} VMF_SSM_READER_SCHEME;
/* SSM header size */
#define VMF_MAX_SSM_HEADER_SIZE 128u
int VMF_SSM_Open(VMF_SSM_HANDLE_T **handle, const char *name, uint32_t size);
int VMF_SSM_Close(VMF_SSM_HANDLE_T *handle);
/* SSM reader API */
ssm_handle_t *SSM_Reader_Init(const char *name, int mode);
int SSM_Reader_Open(ssm_handle_t **handle, const char *name);
int SSM_Reader_Close(ssm_handle_t *handle);
int SSM_Reader_GetBuf(ssm_handle_t *handle, void **buf, uint32_t *size, int timeout_ms);
int SSM_Reader_ReleaseBuf(ssm_handle_t *handle, void *buf);
void SSM_Reader_Wakeup(ssm_handle_t *handle);
int SSM_Reader_ReturnReceiveBuff(ssm_handle_t *handle, SSM_BUFFER_T *buf);
int SSM_Reader_ReturnBuff(ssm_handle_t *handle, SSM_BUFFER_T *buf);
/* SSM writer API */
ssm_handle_t *SSM_Writer_Init(SSM_WRITER_INIT_OPTION_T *opt);
int SSM_Writer_SendGetBuff(ssm_handle_t *handle, SSM_BUFFER_T *buf);
int SSM_Release(ssm_handle_t *handle);
/* VSRC SSM info helpers */
void VMF_VSRC_SSM_GetInfo(void *buf, void *info);
void VMF_VSRC_SSM_SetInfo(void *buf, void *info);
int SSM_Reader_ReturnReceiveNewestBuff(ssm_handle_t *handle, SSM_BUFFER_T *buf, VMF_SSM_READER_SCHEME scheme);
#endif /* VMF_SYNC_SHARED_MEMORY_H */

View File

@ -0,0 +1,52 @@
#ifndef VMF_VECTOR_DMA_H
#define VMF_VECTOR_DMA_H
#include <stdint.h>
/* Opaque DMA handles */
typedef struct VMF_DMA_HANDLE_S VMF_DMA_HANDLE_T;
typedef struct VMF_DMA_DESCRIPTOR_S VMF_DMA_DESCRIPTOR_T;
/* MemBroker alignment type enum: ALIGN_TYPE_32_BYTE = 5 (not the byte value) */
#define VMF_ALIGN_TYPE_DEFAULT 5u
/* DMA descriptor type enum */
typedef enum {
DMA_1D = 0,
DMA_2D = 1,
} VMF_DMA_TYPE_E;
/* 2D copy filter init struct */
typedef struct {
uint32_t dwProcessCbCr; /* 1 = process chroma plane */
uint32_t dwSrcFormatFlag; /* source pixel format flag */
uint32_t dwReserved[6];
} VMF_DMA_2DCF_INIT_T;
/* DMA address / copy parameters */
typedef struct {
uint32_t dwCopyWidth;
uint32_t dwCopyHeight;
unsigned char *pbySrcYPhysAddr;
unsigned char *pbySrcCbPhysAddr;
unsigned char *pbySrcCrPhysAddr;
unsigned char *pbyDstYPhysAddr;
unsigned char *pbyDstCbPhysAddr;
unsigned char *pbyDstCrPhysAddr;
uint32_t dwSrcStride;
uint32_t dwDstStride;
uint32_t _pad[4];
} VMF_DMA_ADDR_T;
/* DMA API */
VMF_DMA_HANDLE_T *VMF_DMA_Init(uint32_t ch_id, uint32_t queue_depth);
void VMF_DMA_Release(VMF_DMA_HANDLE_T *handle);
VMF_DMA_DESCRIPTOR_T *VMF_DMA_Descriptor_Create(VMF_DMA_TYPE_E type, void *init_param);
void VMF_DMA_Descriptor_Destroy(VMF_DMA_DESCRIPTOR_T *desc);
int VMF_DMA_Copy(VMF_DMA_HANDLE_T *handle, VMF_DMA_DESCRIPTOR_T *desc,
void *dst, void *src, uint32_t size);
int VMF_DMA_Descriptor_Update_Addr(VMF_DMA_DESCRIPTOR_T *desc, VMF_DMA_ADDR_T *addr);
int VMF_DMA_Setup(VMF_DMA_HANDLE_T *handle, VMF_DMA_DESCRIPTOR_T **descs, uint32_t count);
int VMF_DMA_Process(VMF_DMA_HANDLE_T *handle);
#endif /* VMF_VECTOR_DMA_H */

View File

@ -0,0 +1,51 @@
#ifndef VMF_VIDEO_BIND_H
#define VMF_VIDEO_BIND_H
#include <stdint.h>
/* Opaque bind context */
typedef struct VMF_BIND_CONTEXT_S VMF_BIND_CONTEXT_T;
typedef struct VMF_VBIND_HANDLE_S VMF_VBIND_HANDLE_T;
/*
* Source connection info fields accessed by Custom_Roi_BIND_Request /
* Custom_Main_BIND_Request in kdp2_host_stream.c
*/
typedef struct {
uint32_t bConnectIfp;
uint32_t bDisableSharedOsd;
uint32_t bIsSsmShared;
uint32_t bUnregister;
uint32_t bUseResizedSrc;
uint32_t dwCodecType;
uint32_t dwDataType;
uint32_t dwSrcWidth;
uint32_t dwSrcHeight;
uint32_t dwSrcYStride;
uint32_t dwSrcUVStride;
char szSrcPin[64];
uint32_t _pad[8];
} VMF_SRC_CONNECT_INFO_T;
/* Function pointer types */
typedef void (*VMF_SRC_CONNECT_FUNC)(VMF_SRC_CONNECT_INFO_T *info, uint32_t w, uint32_t h);
typedef void *(*VMF_BIND_QUERY_FUNC)(void *handle, uint32_t idx, void *info);
typedef int (*VMF_BIND_CONFIG_ISP_FUNC)(void *handle, int stream, int layer, int isp, void *opt);
/* Bind init options */
typedef struct {
uint32_t dwSrcOutputIndex;
void *ptSrcHandle;
VMF_BIND_QUERY_FUNC pfnQueryFunc;
VMF_BIND_CONFIG_ISP_FUNC pfnIspFunc;
uint32_t _pad[8];
} VMF_BIND_INITOPT_T;
VMF_BIND_CONTEXT_T *VMF_BIND_Init(VMF_BIND_INITOPT_T *opt);
void VMF_BIND_Release(VMF_BIND_CONTEXT_T *pBind);
int VMF_BIND_Request(VMF_BIND_CONTEXT_T *bind, uint32_t w, uint32_t h, uint32_t stride, int mode, VMF_SRC_CONNECT_INFO_T *info);
int VMF_VBIND_Bind(void *src, void *dst);
int VMF_VBIND_Unbind(void *src, void *dst);
#endif /* VMF_VIDEO_BIND_H */

View File

@ -0,0 +1,42 @@
#ifndef VMF_VIDEO_DISPLAY_H
#define VMF_VIDEO_DISPLAY_H
#include <stdint.h>
typedef struct VMF_VDISP_HANDLE_S VMF_VDISP_HANDLE_T;
#define VMF_VIDEO_DISPLAY_MIN_QUEUE_SIZE 3
/* Frame buffer descriptor (apdwData[0] = Y plane virtual address) */
typedef struct {
void *apdwData[4];
uint32_t _pad[8];
} VMF_FRAME_BUF_T;
/* Display init options — fields accessed by set_video_data() in kdp2_host_stream.c */
typedef struct {
uint32_t dwInPixFormat;
uint32_t dwMaxInWidth;
uint32_t dwMaxInHeight;
uint32_t _pad[61];
} VMF_VDISP_INITOPT_T;
VMF_VDISP_HANDLE_T *VMF_VDISP_Init(VMF_VDISP_INITOPT_T *opt);
int VMF_VDISP_Open(VMF_VDISP_HANDLE_T **handle, unsigned int w, unsigned int h);
int VMF_VDISP_Close(VMF_VDISP_HANDLE_T *handle);
void VMF_VDISP_SetEarlyInterrupt(VMF_VDISP_HANDLE_T *handle, uint32_t val);
int VMF_VDISP_All_Setting_Reset(VMF_VDISP_HANDLE_T *handle);
int VMF_VDISP_SetCompress(VMF_VDISP_HANDLE_T *handle, int enable);
void VMF_VDISP_Stop(VMF_VDISP_HANDLE_T *handle);
void VMF_VDISP_Release(VMF_VDISP_HANDLE_T *handle);
int VMF_VDISP_ProcessOneFrame(VMF_VDISP_HANDLE_T *handle, VMF_FRAME_BUF_T *buf, uint32_t *q_idx);
int VMF_VDISP_SetMirror(VMF_VDISP_HANDLE_T *handle, uint32_t enable);
int VMF_VDISP_SetFlip(VMF_VDISP_HANDLE_T *handle, uint32_t enable);
int VMF_VDISP_YUVOutput_SetContrast(VMF_VDISP_HANDLE_T *handle, int contrast);
int VMF_VDISP_YUVOutput_GetContrast(VMF_VDISP_HANDLE_T *handle, int *contrast);
int VMF_VDISP_YUVOutput_SetBrightness(VMF_VDISP_HANDLE_T *handle, int brightness);
int VMF_VDISP_YUVOutput_GetBrightness(VMF_VDISP_HANDLE_T *handle, int *brightness);
int VMF_VDISP_YUVOutput_SetSaturation(VMF_VDISP_HANDLE_T *handle, uint32_t saturation);
int VMF_VDISP_YUVOutput_GetSaturation(VMF_VDISP_HANDLE_T *handle, uint32_t *saturation);
#endif /* VMF_VIDEO_DISPLAY_H */

View File

@ -0,0 +1,90 @@
#ifndef VMF_VIDEO_ENCODER_H
#define VMF_VIDEO_ENCODER_H
#include <stdint.h>
#include <vmf/video_bind.h>
typedef struct VMF_VENC_HANDLE_S VMF_VENC_HANDLE_T;
typedef enum {
VMF_VENC_CODEC_TYPE_H264 = 0,
VMF_VENC_CODEC_TYPE_H265 = 1,
VMF_VENC_CODEC_TYPE_MJPG = 2,
} VMF_VENC_CODEC_TYPE;
typedef enum {
VMF_H4E_PROFILE_HIGH = 0,
VMF_H4E_PROFILE_MAIN = 1,
VMF_H4E_PROFILE_BASE = 2,
} VMF_H4E_PROFILE_E;
typedef enum {
VMF_ADMODE_MEET_FPS = 0,
VMF_ADMODE_CBR = 1,
} VMF_ADMODE_E;
/* H.264 encoder config — positional init: dwQp,dwBitrate,dbFps,dwGop,eProfile,iSQS,eAdMode,dwMinQp,dwMaxQp,dwMinFps,dwVirtI,dwPIQ */
typedef struct {
uint32_t dwQp;
uint32_t dwBitrate;
double dbFps;
uint32_t dwGop;
VMF_H4E_PROFILE_E eProfile;
int32_t iSliceQualityStrategy;
VMF_ADMODE_E eAdMode;
uint32_t dwMinQp;
uint32_t dwMaxQp;
uint32_t dwMinFps;
uint32_t dwVirtIFrameInterval;
uint32_t dwPIQ;
} VMF_H4E_CONFIG_T;
/* H.265 encoder config — positional init: dwQp,dwBitrate,dwFps,dwGop,iSQS,dwMinQp,dwMaxQp,dwVirtI,dwPIQ,eAdMode,dwComplexMapCtrl */
typedef struct {
uint32_t dwQp;
uint32_t dwBitrate;
uint32_t dwFps;
uint32_t dwGop;
int32_t iSliceQualityStrategy;
uint32_t dwMinQp;
uint32_t dwMaxQp;
uint32_t dwVirtIFrameInterval;
uint32_t dwPIQ;
VMF_ADMODE_E eAdMode;
uint32_t dwComplexMapCtrl;
} VMF_H5E_CONFIG_T;
/* MJPEG encoder config — positional init: dwQp,bEnableThumbnail,dwThumbnailQp,bJfifHdr,dwBitrate,dwFps */
typedef struct {
uint32_t dwQp;
uint32_t bEnableThumbnail;
uint32_t dwThumbnailQp;
uint32_t bJfifHdr;
uint32_t dwBitrate;
uint32_t dwFps;
} VMF_JE_CONFIG_T;
/* Video encoder config */
typedef struct {
uint32_t dwEncWidth;
uint32_t dwEncHeight;
uint32_t dwFps;
uint32_t bConnectIfp;
VMF_VENC_CODEC_TYPE eCodecType;
void *pCodecConfig;
void *pBind;
VMF_SRC_CONNECT_FUNC fnSrcConnectFunc;
uint32_t bKeepRatio;
uint32_t _pad[8];
} VMF_VENC_CONFIG_T;
VMF_VENC_HANDLE_T *VMF_VENC_Init(VMF_VENC_CONFIG_T *cfg);
void VMF_VENC_Release(VMF_VENC_HANDLE_T *h);
void VMF_VENC_ProduceStreamHdr(VMF_VENC_HANDLE_T *h);
int VMF_VENC_Start(VMF_VENC_HANDLE_T *h);
int VMF_VENC_Stop(VMF_VENC_HANDLE_T *h);
int VMF_VENC_SetIntra(VMF_VENC_HANDLE_T *h);
int VMF_VENC_Suspend(VMF_VENC_HANDLE_T *h);
int VMF_VENC_Resume(VMF_VENC_HANDLE_T *h);
#endif /* VMF_VIDEO_ENCODER_H */

View File

@ -0,0 +1,21 @@
#ifndef VMF_VENC_OUT_SCM_H
#define VMF_VENC_OUT_SCM_H
#include <stdint.h>
typedef struct VMF_VENC_OUT_SCM_S VMF_VENC_OUT_SCM_T;
typedef struct {
const char *szScmName;
uint32_t dwChkSize;
uint32_t dwBufSize;
uint32_t bBlock;
uint32_t bLimit;
uint32_t _pad[4];
} VMF_VENC_OUT_SCM_INITOPT_T;
int VMF_VENC_OUT_SCM_Init(VMF_VENC_OUT_SCM_T **pp, VMF_VENC_OUT_SCM_INITOPT_T *opt);
void VMF_VENC_OUT_SCM_Release(VMF_VENC_OUT_SCM_T **pp);
int VMF_VENC_OUT_SCM_Setup_Config(void *venc_cfg, int codec_type, void *codec_cfg, VMF_VENC_OUT_SCM_T *scm);
#endif /* VMF_VENC_OUT_SCM_H */

View File

@ -0,0 +1,19 @@
#ifndef VMF_VENC_OUT_SRB_H
#define VMF_VENC_OUT_SRB_H
#include <stdint.h>
typedef struct VMF_VENC_OUT_SRB_S VMF_VENC_OUT_SRB_T;
typedef struct {
const char *pszSrbName;
uint32_t dwSrbNum;
uint32_t dwSrbSize;
uint32_t _pad[4];
} VMF_VENC_OUT_SRB_INITOPT_T;
int VMF_VENC_OUT_SRB_Init(VMF_VENC_OUT_SRB_T **pp, VMF_VENC_OUT_SRB_INITOPT_T *opt);
void VMF_VENC_OUT_SRB_Release(VMF_VENC_OUT_SRB_T **pp);
int VMF_VENC_OUT_SRB_Setup_Config(void *venc_cfg, int codec_type, void *codec_cfg, VMF_VENC_OUT_SRB_T *srb);
#endif /* VMF_VENC_OUT_SRB_H */

View File

@ -0,0 +1,203 @@
#ifndef VMF_VIDEO_SOURCE_H
#define VMF_VIDEO_SOURCE_H
#include <stdint.h>
typedef struct VMF_VSRC_HANDLE_S VMF_VSRC_HANDLE_T;
typedef void (*VMF_VSRC_CALLBACK_T)(void *arg, void *buf_info);
/* Gyro daemon config — matches real SDK gyro_daemon.h (VMF_VSRC_GYRO_CONFIG_T) */
typedef struct {
unsigned long ulDeviceNum; /* device number (default: 1) */
unsigned int dwSpeed; /* polling speed in fps (default: 30) */
unsigned int dwFrequency; /* iio sample frequency (default: 200) */
int sdwGyroFsr; /* gyro full-scale range; -1 = unchanged */
int sdwAccelFsr; /* accel full-scale range; -1 = unchanged */
unsigned int dwSampleCount; /* gyro buffer depth (default: 200) */
char *pszPinName; /* SCM output pin name */
} VMF_VSRC_GYRO_CONFIG_T;
/* EIS init config — all fields accessed by set_eis() in kdp2_host_stream.c */
typedef struct {
char *pszLensCurveNodesPath;
char *pszLogPath;
float fGyroDataGain;
uint32_t dwGridSection;
uint32_t dwMaxGridSection;
float fCropRatio;
uint32_t dwImageType;
uint32_t dwProcessMode;
uint32_t dwCoordinateTransform[3];
int64_t sqwTimeOffset;
uint32_t bImageRotate180;
int32_t sdwReadoutTimeOffset;
float fReadoutTimeRatio;
uint32_t bForceOriRs;
VMF_VSRC_GYRO_CONFIG_T tGyroConfig;
uint32_t _pad[8];
} VMF_EIS_INIT_T;
/* FEC init config — the REAL VMF_VSRC_FEC_INIT_CONFIG_T layout, deduced from fec_api.c
* field access patterns. VMF_VSRC_Init reads up to afLensCurveNodeY[63], so the
* struct must cover at least 536 bytes to prevent stack overread SIGSEGV.
*
* Confirmed field order from loadCalibrateConfig / loadFECConfig in fec_api.c:
* offset 0: eFecMethod (uint32_t) VMF_FEC_METHOD
* offset 4: ptEisInit (ptr) EIS init (NULL if EIS disabled)
* offset 8: iFecCenterOffsetX (int32_t)
* offset 12: iFecCenterOffsetY (int32_t)
* offset 16: iFecRadiusOffset (int32_t)
* offset 20: dwLensCurveNodeNum (uint32_t) 0 = no lens correction
* offset 24: afLensCurveNodeX[64] (float[64], 256 bytes)
* offset 280: afLensCurveNodeY[64] (float[64], 256 bytes)
* offset 536: _pad[64] extra safety
*/
typedef struct {
uint32_t eFecMethod; /* offset 0 */
VMF_EIS_INIT_T *ptEisInit; /* offset 4 */
int32_t iFecCenterOffsetX; /* offset 8 */
int32_t iFecCenterOffsetY; /* offset 12 */
int32_t iFecRadiusOffset; /* offset 16 */
uint32_t dwLensCurveNodeNum; /* offset 20 — 0 = no correction */
float afLensCurveNodeX[64]; /* offset 24 (256 bytes) */
float afLensCurveNodeY[64]; /* offset 280 (256 bytes) */
uint32_t _pad[64]; /* offset 536 (256 bytes extra safety) */
} VMF_FEC_INIT_CONFIG_T; /* total: 792 bytes */
/* Alias used by the real fec_api.c */
typedef VMF_FEC_INIT_CONFIG_T VMF_VSRC_FEC_INIT_CONFIG_T;
/* Frontend config — confirmed real layout from VSRC_Front_Init_Normal disasm (0x3ec08):
* r8 = initopt[8] = ptFrontConfig
* [r8, #0] = dwSensorConfigCount checked: if 0 "sensor config should not be empty"
* [r8, #4] = apszSensorConfig[0] loaded for sensor 0
* [r8, #8] = apszSensorConfig[1] loaded for sensor 1 (fusion)
* [r8, #12] = apszSensorConfig[2]
* [r8, #16] = apszSensorConfig[3]
* [r8, #20] = tFecInitConfig (eFecMethod, ptEisInit, ...) */
typedef struct {
uint32_t dwSensorConfigCount; /* offset 0 — MUST BE FIRST */
const char *apszSensorConfig[4]; /* offset 4 (16 bytes) */
VMF_FEC_INIT_CONFIG_T tFecInitConfig; /* offset 20 (792 bytes) */
uint32_t _pad[8]; /* offset 812, extra safety */
} VMF_VSRC_FRONTEND_CONFIG_T;
/*
* VMF_LAYOUT_T layout descriptor used for FEC and video positioning.
*/
typedef struct {
uint32_t dwCanvasWidth;
uint32_t dwCanvasHeight;
uint32_t dwVideoPosX;
uint32_t dwVideoPosY;
uint32_t dwVideoWidth;
uint32_t dwVideoHeight;
uint32_t _pad[58];
} VMF_LAYOUT_T;
/* ISP option flag */
#define ISP_OPTION_PRIVACY_MASK_SETTINGS 1u
typedef struct {
uint32_t option_flag;
uint32_t adwData[4];
uint32_t _pad[8];
} VMF_ISP_OPTION_T;
typedef struct {
uint32_t bEnable;
uint8_t abyColorYUV[3];
uint8_t _reserved1;
uint32_t dwMaskStride;
uint32_t bMainMaskDisable;
uint32_t bResizeMaskDisable;
unsigned char *pMaskBuffer;
uint32_t _pad[4];
} VMF_ISP_PM_CONFIG_T;
/* ISP mode enum */
typedef enum {
VMF_ISP_MODE_NORMAL = 0,
VMF_ISP_MODE_FEC = 1,
VMF_ISP_MODE_FEC_C = 2,
VMF_ISP_MODE_EIS = 3,
} VMF_ISP_MODE_E;
/* Encoder spec bits (nested in VMF_VSRC_SPEC_CONFIG_T.tIspEncSpec) */
typedef struct {
uint32_t bEncH265;
uint32_t bEncH264;
uint32_t bEncJPEG;
uint32_t bOthers;
} VMF_ISP_ENC_SPEC_T;
/* Spec config — fields accessed by setup_spec() in kdp2_host_stream.c.
* Real size = 24 bytes (no padding): bEnableSpec(4)+dwIspMode(4)+tIspEncSpec(16).
* Confirmed: fp[36]=bEnableSpechandle[992], fp[40-47]=vld1.32(dwIspMode+tIspEncSpec[0])handle[1012]. */
typedef struct {
uint32_t bEnableSpec;
uint32_t dwIspMode; /* VMF_ISP_MODE_E */
VMF_ISP_ENC_SPEC_T tIspEncSpec;
/* NO padding — struct is 24 bytes; placed at initopt[36] per disasm */
} VMF_VSRC_SPEC_CONFIG_T;
/* App mode enum */
typedef enum {
VMF_VSRC_APP_MODE_NORMAL = 0,
VMF_VSRC_APP_MODE_FUSION = 1,
} VMF_VSRC_APP_MODE_E;
/* Init callback type */
typedef void (*VMF_VSRC_INIT_CALLBACK_T)(uint32_t width, uint32_t height);
/*
* VMF_VSRC_INITOPT_T confirmed offsets from libvmf.so disassembly:
*
* [r4,#0] = eAppMode jump table 0-8 in sub_30a80; NORMAL=0, FUSION=1
* [r4,#4] = dwFrontConfigCount CHECKED: must be 1-2 (VMF_VSRC_Init@32080)
* [r4,#8] = ptFrontConfig CHECKED: must be non-NULL (VMF_VSRC_Init@3208c)
* [r4,#12] = fnInitCallback init-done callback (placed after ptFrontConfig)
* [r4,#16] = _unk[5] unknown fields (20 bytes)
* [r4,#36] = tSpecConfig bEnableSpechandle[992], vld1.32[40-47]handle[1012]
* [r4,#60] = _unk2[5] unknown (20 bytes, before pszAutoSceneConfig)
* [r4,#80] = pszAutoSceneConfig nullable string, conditional strduphandle[204]
* [r4,#84] = _unk3[11] unknown (44 bytes)
* [r4,#128] = bShared CHECKED booleanhandle[212] (VMF_VSRC_Init sub_30a80@30ac4)
* [r4,#132] = pszOutPinPrefix CHECKED non-NULL; strncpy(9)handle[188] (@30ae8)
* [r4,#136] = _unk6 unknown (4 bytes)
* [r4,#140] = pszResourceDir strduphandle[200] (@30afc)
* [r4,#144] = _unk7[10] unknown tail fields
*/
typedef struct {
VMF_VSRC_APP_MODE_E eAppMode; /* offset 0 */
uint32_t dwFrontConfigCount; /* offset 4 */
VMF_VSRC_FRONTEND_CONFIG_T *ptFrontConfig; /* offset 8 */
VMF_VSRC_INIT_CALLBACK_T fnInitCallback; /* offset 12 */
uint32_t _unk[5]; /* offset 16 (20 bytes) */
VMF_VSRC_SPEC_CONFIG_T tSpecConfig; /* offset 36 (24 bytes) */
uint32_t _unk2[5]; /* offset 60 (20 bytes) */
const char *pszAutoSceneConfig; /* offset 80 */
uint32_t _unk3[11]; /* offset 84 (44 bytes) */
uint32_t bShared; /* offset 128 */
const char *pszOutPinPrefix; /* offset 132 */
uint32_t _unk6; /* offset 136 */
const char *pszResourceDir; /* offset 140 */
uint32_t _unk7[10]; /* offset 144 (40 bytes) */
} VMF_VSRC_INITOPT_T;
VMF_VSRC_HANDLE_T *VMF_VSRC_Init(VMF_VSRC_INITOPT_T *initopt);
void VMF_VSRC_Release(VMF_VSRC_HANDLE_T *hVsrc);
int VMF_VSRC_Open(VMF_VSRC_HANDLE_T **handle, const char *cfg_path);
int VMF_VSRC_Close(VMF_VSRC_HANDLE_T *handle);
int VMF_VSRC_Start(VMF_VSRC_HANDLE_T *handle, void *arg);
int VMF_VSRC_Stop(VMF_VSRC_HANDLE_T *handle);
int VMF_VSRC_Suspend(VMF_VSRC_HANDLE_T *handle);
int VMF_VSRC_Resume(VMF_VSRC_HANDLE_T *handle);
int VMF_VSRC_SetFrontendConfig(VMF_VSRC_HANDLE_T *handle, VMF_VSRC_FRONTEND_CONFIG_T *cfg);
int VMF_VSRC_ConfigISP(VMF_VSRC_HANDLE_T *h, int stream, int layer, int isp, VMF_ISP_OPTION_T *opt);
void *VMF_VSRC_GetInfo(VMF_VSRC_HANDLE_T *h, uint32_t idx, void *info);
/* Pull in FEC method enum (VMF_FEC_METHOD_GTR etc.) — safe due to include guards */
#include <vmf/fec_layout.h>
#endif /* VMF_VIDEO_SOURCE_H */

View File

@ -0,0 +1,39 @@
#ifndef VMF_NNM_FIFOQ_MANAGER_H
#define VMF_NNM_FIFOQ_MANAGER_H
#include <stdint.h>
#include <stdbool.h>
/* Basic FIFO queue management */
void VMF_NNM_Fifoq_Manager_Init(void);
void VMF_NNM_Fifoq_Manager_Destroy(void);
void VMF_NNM_Fifoq_Manager_Wakeup(void);
void VMF_NNM_Fifoq_Manager_Suspend(void);
void VMF_NNM_Fifoq_Manager_Resume(void);
void VMF_NNM_Fifoq_Manager_Status_Code_Enqueue(unsigned int job_id, int status_code);
bool VMF_NNM_Fifoq_Manager_Get_Fifoq_Allocated(void);
/* Image queue */
int VMF_NNM_Fifoq_Manager_Image_Get_Free_Buffer(uint32_t *buf_addr, uint32_t *phy_addr, int *buf_size, int timeout_ms, bool droppable);
int VMF_NNM_Fifoq_Manager_Image_Enqueue(uint32_t total, uint32_t index, uint32_t buf_addr, uint32_t phy_addr, int buf_size, int flags, bool is_last);
int VMF_NNM_Fifoq_Manager_Image_Put_Free_Buffer(uint32_t buf_addr, uint32_t phy_addr, int buf_size, int flags);
/* Result queue */
int VMF_NNM_Fifoq_Manager_Result_Get_Free_Buffer(uint32_t *buf_addr, uint32_t *phy_addr, int *buf_size, int timeout_ms);
int VMF_NNM_Fifoq_Manager_Result_Enqueue(uint32_t buf_addr, uint32_t phy_addr, int buf_size, int timeout_ms, bool is_last);
int VMF_NNM_Fifoq_Manager_Result_Dequeue(uint32_t *buf_addr, uint32_t *phy_addr, int *buf_size, int timeout_ms);
int VMF_NNM_Fifoq_Manager_Result_Put_Free_Buffer(uint32_t buf_addr, uint32_t phy_addr, int buf_size, int flags);
/* Buffer allocation / release */
int VMF_NNM_Fifoq_Manager_Allocate_Buffer(int img_buf_count, int img_buf_size, int res_buf_count, int res_buf_size);
void VMF_NNM_Fifoq_Manager_Release_All_Buffer(void);
/* Thread entry points (used with pthread_create) */
void *VMF_NNM_Fifoq_Manager_Enqueue_Image_Thread(void *arg);
void *VMF_NNM_Inference_Image_Dispatcher_Thread(void *arg);
/* NNM version / model loading */
void VMF_NNM_Get_Version(uint32_t *major, uint32_t *minor, uint32_t *patch, uint32_t *build);
int VMF_NNM_Load_Model_From_File(const char *model_path);
#endif /* VMF_NNM_FIFOQ_MANAGER_H */

View File

@ -0,0 +1,52 @@
#ifndef VMF_NNM_INFERENCE_APP_H
#define VMF_NNM_INFERENCE_APP_H
#include <stdint.h>
#include "kp_struct.h"
#include "ncpu_gen_struct.h"
/* VMF alignment macros - used across VMF headers */
#ifndef VMF_ALIGN
#define VMF_ALIGN(x, n) (((x) + (n) - 1) & ~((n) - 1))
#define VMF_32_ALIGN(x) VMF_ALIGN(x, 32)
#define VMF_16_ALIGN(x) VMF_ALIGN(x, 16)
#define VMF_8_ALIGN(x) VMF_ALIGN(x, 8)
#define VMF_4_ALIGN(x) VMF_ALIGN(x, 4)
#endif
/* Image config for one input node */
typedef struct {
void *image_buf;
uint32_t image_width;
uint32_t image_height;
uint32_t image_channel;
kp_image_format_t image_format;
kp_normalize_mode_t image_norm;
kp_resize_mode_t image_resize;
kp_padding_mode_t image_padding;
uint32_t enable_crop; /* bool padded to 4 bytes */
struct {
uint32_t crop_number;
uint32_t x1;
uint32_t y1;
uint32_t width;
uint32_t height;
} crop_area;
} VMF_NNM_IMAGE_CONFIG_T;
/* Main inference config passed to VMF_NNM_Inference_App_Execute */
typedef struct {
int num_image;
VMF_NNM_IMAGE_CONFIG_T image_list[MAX_INPUT_NODE_COUNT];
uint32_t model_id;
int (*post_proc_func)(int model_id, struct kdp_image_s *image_p);
void *user_define_data;
void *ncpu_result_buf;
} VMF_NNM_INFERENCE_APP_CONFIG_T;
/* API */
void VMF_NNM_Inference_App_Init(void (*app_func)(int num_input_buf, void **inf_input_buf_list));
int VMF_NNM_Inference_App_Execute(VMF_NNM_INFERENCE_APP_CONFIG_T *inf_config);
void VMF_NNM_Inference_App_Destroy(void);
#endif /* VMF_NNM_INFERENCE_APP_H */

View File

@ -0,0 +1,25 @@
#ifndef VMF_NNM_IPC_CMD_H
#define VMF_NNM_IPC_CMD_H
#include <stdint.h>
/* VMF NNM alignment macros */
#define VMF_ALIGN(x, n) (((x) + (n) - 1) & ~((n) - 1))
#define VMF_32_ALIGN(x) VMF_ALIGN(x, 32)
#define VMF_16_ALIGN(x) VMF_ALIGN(x, 16)
#define VMF_8_ALIGN(x) VMF_ALIGN(x, 8)
#define VMF_4_ALIGN(x) VMF_ALIGN(x, 4)
/* IPC command codes (stub - actual values must match libvmf_nnm.so) */
#define VMF_NNM_IPC_CMD_INFERENCE 0x0001
#define VMF_NNM_IPC_CMD_LOAD_MODEL 0x0002
#define VMF_NNM_IPC_CMD_GET_VERSION 0x0003
/* IPC header structure */
typedef struct {
uint32_t cmd;
uint32_t size;
uint32_t reserved[2];
} VMF_NNM_IPC_CMD_HDR_T;
#endif /* VMF_NNM_IPC_CMD_H */

View File

@ -0,0 +1,127 @@
/*
*******************************************************************************
* Copyright (c) 2010-2022 VATICS(KNERON) Inc. All rights reserved.
*
* +-----------------------------------------------------------------+
* | THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED |
* | AND COPIED IN ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH |
* | A LICENSE AND WITH THE INCLUSION OF THE THIS COPY RIGHT NOTICE. |
* | THIS SOFTWARE OR ANY OTHER COPIES OF THIS SOFTWARE MAY NOT BE |
* | PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. THE |
* | OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. |
* | |
* | THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT |
* | ANY PRIOR NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY |
* | VATICS(KNERON) INC. |
* +-----------------------------------------------------------------+
*
*******************************************************************************
*/
#ifndef MEM_BROKER_H
#define MEM_BROKER_H
#ifdef __cplusplus
extern "C" {
#endif
typedef enum
{
VMF_ALIGN_TYPE_DEFAULT = 0,
VMF_ALIGN_TYPE_2_BYTE,
VMF_ALIGN_TYPE_4_BYTE,
VMF_ALIGN_TYPE_8_BYTE,
VMF_ALIGN_TYPE_16_BYTE,
VMF_ALIGN_TYPE_32_BYTE,
VMF_ALIGN_TYPE_64_BYTE,
VMF_ALIGN_TYPE_128_BYTE,
VMF_ALIGN_TYPE_256_BYTE,
VMF_ALIGN_TYPE_512_BYTE,
VMF_ALIGN_TYPE_1024_BYTE,
VMF_ALIGN_TYPE_2048_BYTE,
VMF_ALIGN_TYPE_4096_BYTE,
VMF_ALIGN_TYPE_8192_BYTE,
VMF_ALIGN_TYPE_16384_BYTE,
VMF_ALIGN_TYPE_32768_BYTE
} vmf_align_type;
typedef vmf_align_type VMF_ALIGN_TYPE;
/**
* @brief Allocate memory from EDMC.
*
* @param[in] size Allocates size bytes
* @param[in] alignment the start address alignment. Please check the hardware restriction.
* @return A pointer to the allocated memory
*/
void* MemBroker_GetMemory(unsigned int size, VMF_ALIGN_TYPE alignment);
/**
* @brief Allocate memory from EDMC.
*
* @param[in] size Allocates size bytes
* @param[in] alignment the start address alignment. Please check the hardware restriction.
* @return A pointer to the allocated memory
*/
void* MemBroker_GetMemory_Reverse(unsigned int size, VMF_ALIGN_TYPE alignment);
/**
* @brief Free memory to EDMC.
*
* @param[in] A pointer to the allocated memory.
*/
void MemBroker_FreeMemory(void*);
/**
* @brief Translate a virtual address to a physical address
*
* @param[in] A pointer to the virtual address of this allocated memory.
* @return A pointer to the physical address of this allocated memory.
*/
void* MemBroker_GetPhysAddr(void*);
/**
* @brief Translate a physical address to a virtual address
*
* @param[in] A pointer to the physical address of this allocated memory.
* @return A pointer to the virtual address of this allocated memory.
*/
void* MemBroker_GetVirtAddr(void*);
/**
* @brief Map(Build) a virtual address from a physical address. (it is used for a memory segment not allocated from "MemBroker_GetMemory".
*
* @param[in] A pointer to the physical address of this allocated memory.
* @param[in] size The size bytes of this allocated buffer.
* @return A pointer to the virtual address of this allocated memory.
*/
void* MemBroker_MapPhysAddr(void* ptr, unsigned int size);
/**
* @brief 'Flush' the data in CPU cache to DRAM.
*
* @param[in] A pointer to the virtual address of this allocated memory.
* @param[in] size The size bytes of this allocated buffer.
*/
int MemBroker_CacheCopyBack(void*, unsigned int size);
/**
* @brief invalidate those cache tags with the specified memory section.
*
* @param[in] A pointer to the virtual address of this allocated memory.
* @param[in] size The size bytes of this allocated buffer.
*/
int MemBroker_CacheInvalidate(void*, unsigned int size);
/**
* @brief 'Flush' the data in CPU cache to DRAM and invalidate those cache tags with the specified memory section.
*
* @param[in] A pointer to the virtual address of this allocated memory.
* @param[in] size The size bytes of this allocated buffer.
*/
int MemBroker_CacheFlush(void*, unsigned int size);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -0,0 +1,127 @@
/*
*******************************************************************************
* Copyright (c) 2010-2022 VATICS(KNERON) Inc. All rights reserved.
*
* +-----------------------------------------------------------------+
* | THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED |
* | AND COPIED IN ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH |
* | A LICENSE AND WITH THE INCLUSION OF THE THIS COPY RIGHT NOTICE. |
* | THIS SOFTWARE OR ANY OTHER COPIES OF THIS SOFTWARE MAY NOT BE |
* | PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. THE |
* | OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. |
* | |
* | THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT |
* | ANY PRIOR NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY |
* | VATICS(KNERON) INC. |
* +-----------------------------------------------------------------+
*
*******************************************************************************
*/
#ifndef SHARED_COMPACT_MEMORY_H
#define SHARED_COMPACT_MEMORY_H
#ifdef __cplusplus
extern "C" {
#endif
#include <pthread.h>
#include <stdint.h>
#include <stdbool.h>
#include <time.h>
#include <sys/types.h>
#include <unistd.h>
#define VMF_VENC_OUTPUT_SCM_HEADER 256 //! SCM Encode Header Size
struct _scm_buffer_t_
{
uint32_t dwOccupiedSpace;
uint8_t *pbyVirtAddr;
uint8_t *pbyPhysAddr;
};
typedef struct _scm_buffer_t_ scm_buffer_t;
typedef scm_buffer_t SCM_BUFFER_T;
typedef struct _scm_handle_t_ scm_handle_t;
typedef scm_handle_t SCM_HANDLE_T;
extern const SCM_BUFFER_T SCM_BUFFER_T_DEFAULT;
/**
* @brief Create a SharedCompactMemory writer
*
* @param[in] The name of object to be created or opened.
* @param[in] The buffer size of the object. Please use bigger than 2*(check size). Recommend 2.5*(check size).
* @param[in] The check size of the object. Every time SCM writer will make sure this size for writing buffer.
* @param[in] The flag for block mode. True: Writer will waiting reader if buffer is not enough.
* False: Writer will remove the oldest data in buffer if buffer is not enough.
* @param[in] The flag for limit mode. True: SCM handle will only hold the maximum 16 data logs in handle.
* False: SCM handle will not limit the amount of data logs in handle.
*
* @return The handle of shared compact memroy.
*/
SCM_HANDLE_T *SCM_InitWriter(const char *, uint32_t, uint32_t, bool, bool);
/**
* @brief Create a SharedCompactMemory reader
*
* @param[in] The name of object to be created or opened.
*
* @return The handle of shared compact memroy.
*/
SCM_HANDLE_T *SCM_InitReader(const char *);
/**
* @brief Function to explicitly recycle SharedCompactMemory handle.
*
* @param[in] The handle of shared compact memory.
*
* @return 0 with no error, -1 otherwise
*/
int SCM_Release(SCM_HANDLE_T *);
/**
* @brief Record the current 'scm buffer' and update it with new writable address.
*
* @param[in] The handle of shared compact memory.
* @param[in] The pointer of SCM_BUFFER_T structure.
*
* @return 0 with no error, -1 otherwise
*/
int SCM_SendGetWriterBuff(SCM_HANDLE_T *, SCM_BUFFER_T *);
/**
* @brief Release the current 'scm buffer'and update it with new readable address.
*
* @param[in] The handle of shared compact memory.
* @param[in] The pointer of SCM_BUFFER_T structure.
*
* @return 0 with no error, -2 when awakened, -1 otherwise
*/
int SCM_ReturnReceiveReaderBuff(SCM_HANDLE_T *, SCM_BUFFER_T *);
/**
* @brief It is used to relase a 'scm buffer' (For reader only)
*
* @param[in] The handle of shared compact memory.
* @param[in] The pointer of srb_buffer_t structure.
*
* @return 0 with no error, -1 otherwise
*/
int SCM_ReturnReaderBuff(SCM_HANDLE_T *, SCM_BUFFER_T *);
/**
* @brief Wake up the reader while it is waiting for a buffer coming from the writer.
*
* @param[in] The handle of shared compact memroy.
*
* @return 0 with no error, -1 otherwise
*/
int SCM_WakeupReader(SCM_HANDLE_T *);
#ifdef __cplusplus
}
#endif
#endif //SHARED_COMPACT_MEMORY_H

View File

@ -0,0 +1,133 @@
/*
*******************************************************************************
* Copyright (c) 2010-2022 VATICS(KNERON) Inc. All rights reserved.
*
* +-----------------------------------------------------------------+
* | THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED |
* | AND COPIED IN ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH |
* | A LICENSE AND WITH THE INCLUSION OF THE THIS COPY RIGHT NOTICE. |
* | THIS SOFTWARE OR ANY OTHER COPIES OF THIS SOFTWARE MAY NOT BE |
* | PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. THE |
* | OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. |
* | |
* | THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT |
* | ANY PRIOR NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY |
* | VATICS(KNERON) INC. |
* +-----------------------------------------------------------------+
*
*******************************************************************************
*/
#ifndef SYNC_RING_BUFFER_H
#define SYNC_RING_BUFFER_H
#ifdef __cplusplus
extern "C" {
#endif
//#define VIENNA_SSM_CORE
typedef struct
{
int idx;
unsigned char* buffer;
unsigned char* buffer_phys_addr;
} srb_buffer_t;
typedef srb_buffer_t SRB_BUFFER_T;
typedef struct srb_handle_t srb_handle_t;
typedef struct srb_handle_t SRB_HANDLE_T;
/**
* @brief Create a SyncRingBuffer writer
*
* @param[in] name It specifies the object to be created or opened.
* @param[in] buf_size The buffer size of the object.
* @param[in] ring_bufer_num The total number of slots within this ring buffer.
* @return The handle of sync ring buffer.
*/
SRB_HANDLE_T* SRB_InitWriter(const char* name, unsigned int buf_size, int ring_buf_num);
/**
* @brief Create a SyncRingBuffer writer using reversed EDMC address
*
* @param[in] name It specifies the object to be created or opened.
* @param[in] buf_size The buffer size of the object.
* @param[in] ring_bufer_num The total number of slots within this ring buffer.
* @return The handle of sync ring buffer.
*/
SRB_HANDLE_T* SRB_InitWriter_Reverse(const char* name, unsigned int buf_size, int ring_buf_num);
/**
* @brief Create a SyncRingBuffer reader
*
* @param[in] name It specifies the object to be created or opened.
* @return The handle of sync ring buffer.
*/
SRB_HANDLE_T* SRB_InitReader(const char* name);
/**
* @brief Function to explicitly recycle SyncRingBuffer handle.
*
* @param[in] handle The handle of sync ring buffer.
*/
int SRB_Release(SRB_HANDLE_T* ptHandle);
/**
* @brief Deliver the current 'srb buffer'to those related readers and allocate a new 'srb buffer'.
*
* @param[in] handle The handle of sync shared memory.
* @param[in] ssm_buf The pointer of srb_buffer_t structure.
*/
int SRB_SendGetWriterBuff(SRB_HANDLE_T* ptHandle, SRB_BUFFER_T* ptSrbBuf);
/**
* @brief Deliver the current 'srb buffer'to those related readers and check wether writer will over reader.
*
* @param[in] handle The handle of sync shared memory.
* @param[in] ssm_buf The pointer of srb_buffer_t structure.
*/
int SRB_WriterCheckReader(SRB_HANDLE_T* ptHandle, SRB_BUFFER_T* ptSrbBuf);
/**
* @brief Release the current 'srb buffer'and receive a new 'srb buffer' from the writer.
*
* @param[in] handle The handle of sync shared memory.
* @param[in] ssm_buf The pointer of srb_buffer_t structure.
*/
int SRB_ReturnReceiveReaderBuff(SRB_HANDLE_T* ptHandle, SRB_BUFFER_T* ptSrbBuf);
/**
* @brief It is used to relase a 'srb buffer' (For reader only)
*
* @param[in] handle The handle of sync ring buffer.
* @param[in] ssm_buf The pointer of srb_buffer_t structure.
*/
int SRB_ReturnReaderBuff(SRB_HANDLE_T* ptHandle, SRB_BUFFER_T* ptSrbBuf);
/**
* @brief Release the current 'srb buffer'and peek if a new 'srb buffer' is ready, if not ready, just quit.
*
* @param[in] ptHandle The handle of sync ring buffer.
* @param[in] ssm_buf The pointer of srb_buffer_t structure.
*/
int SRB_QueryReaderBuff(srb_handle_t* ptHandle, srb_buffer_t* srb_buf);
/**
* @brief Wake up the reader while it is waiting for a buffer coming from the writer.
*
* @param[in] ptHandle The handle of sync ring buffer.
*/
int SRB_WakeupReader(SRB_HANDLE_T* ptHandle);
/**
* @brief Clear writer buffer.
*
* @param[in] ptHandle The handle of sync ring buffer.
*/
int SRB_ClearWriterBuffer(SRB_HANDLE_T* handle);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -0,0 +1,320 @@
/*
*******************************************************************************
* Copyright (c) 2010-2022 VATICS(KNERON) Inc. All rights reserved.
*
* +-----------------------------------------------------------------+
* | THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED |
* | AND COPIED IN ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH |
* | A LICENSE AND WITH THE INCLUSION OF THE THIS COPY RIGHT NOTICE. |
* | THIS SOFTWARE OR ANY OTHER COPIES OF THIS SOFTWARE MAY NOT BE |
* | PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. THE |
* | OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. |
* | |
* | THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT |
* | ANY PRIOR NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY |
* | VATICS(KNERON) INC. |
* +-----------------------------------------------------------------+
*
*******************************************************************************
*/
#ifndef __TEXT_RENDER_H__
#define __TEXT_RENDER_H__
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
#include <stddef.h>
#define VTXT_TAG "VMF_VTXT_RENDER"
typedef struct draw_info_t draw_info_t;
typedef struct draw_info_t DRAW_INFO_T;
typedef struct txt_renderer_t txt_renderer_t;
typedef struct txt_renderer_t TXT_RENDERER_T;
typedef struct
{
unsigned int dwFontColor; /**< The color of font content, Byte 0:Y, 1:Cb, 2:Cr */
unsigned int dwBorderColor; /**< The color of font border, Byte 0:Y, 1:Cb, 2:Cr */
unsigned int dwBackColor; /**< The color of font background, Byte 0:Y, 1:Cb, 2:Cr, 3:alpha */
} font_color_t;
typedef font_color_t FONT_COLOR_T;
typedef struct
{
const char* pszFontPath; /**< A path to the font file. */
const char* pszExtraUTF8; /**< Extra utf8 text which want pre-generate in text renderer. NULL: disable */
float fOutlineWidth; /**< The outline width of stroke. */
short nFontSize; /**< The size of font. */
short nAscent; /**< The ascender is the vertical distance from the horizontal baseline to the highest character coordinate in a font face. */
short nDescent; /**< The descender is the vertical distance from the horizontal baseline to the lowest character coordinate in a font face. */
short nHeight; /**< The baseline-to-baseline distance. */
FONT_COLOR_T tColorInfo; /**< The color setting of font. */
} font_info_t;
typedef font_info_t FONT_INFO_T;
typedef struct
{
unsigned char *y; /**< Y planar. */
unsigned char *u; /**< U planar. */
unsigned char *v; /**< V planar. */
size_t y_size; /**< Size of Y planar. */
size_t uv_size; /**< Size of each V and U planar. */
size_t stride; /**< Stride of surface. */
} txt_surface_t;
typedef txt_surface_t TXT_SURFACE_T;
/**
* @struct VMTK_TEXT_RENDER_CONTEXT_T
* @brief Text Render Contexts
* @sa VMTK_DMA2D_CONFIG_T
*/
typedef struct _txt_render_context_t {
TXT_SURFACE_T text_surface;
int textoverlay_w;
int textoverlay_h;
} TXT_RENDER_CONTEXT_T;
typedef struct
{
int first_surface_offset;
int last_surface_offset;
} draw_result_t;
typedef draw_result_t DRAW_RESULT_T;
/**
* @brief Function to create the handle of the text render.
*
* @return NULL: Failed. Otherwise: Successful.
*/
TXT_RENDERER_T* CreateTextRender();
/**
* @brief Function to release the resource inside the information structure.
*
* @param[in] ptHandle The pointer of information structure about the font.
* @return Negative value: Failed. Zero: Successful.
*/
int ReleaseTextRender(TXT_RENDERER_T *ptHandle);
/**
* @brief Function to set the path and size of the font.
*
* @param[in] ptHandle The pointer of information structure about the font.
* @param[in] font_info The information about font.
* @return Negative value: Failed. Zero: Successful.
*/
int SetFont(TXT_RENDERER_T *ptHandle, const FONT_INFO_T* ptFontInfo);
/**
* @brief Function to set the font color.
*
* @param[in] ptHandle The pointer of information structure about the font.
* @param[in] dwFontColor font color.
* @param[in] dwBorderColor font border color.
* @param[in] dwBackColor font background color.
* @return Negative value: Failed. Zero: Successful.
*/
int SetFontcolor(TXT_RENDERER_T *ptHandle, const unsigned int dwFontColor, const unsigned int dwBorderColor, const unsigned int dwBackColor);
/**
* @brief Function to set the font backgroundcolor.
*
* @param[in] ptHandle The pointer of information structure about the font.
* @param[in] font background color.
* @return Negative value: Failed. Zero: Successful.
*/
int SetFontBGcolor(TXT_RENDERER_T *ptHandle, const unsigned int font_bg_color);
/**
* @brief Function to get the font info.
*
* @param[in] ptHandle The pointer of information structure about the font.
* @return NULL: Failed. Others: Successful.
*/
FONT_INFO_T* GetFontInfo(TXT_RENDERER_T *ptHandle);
/**
* @brief Function to generate the drawing information of one string.
*
* @param[in] ptHandle The pointer of information structure about the font.
* @param[in] str The string needs to be generated the drawing information about it.
* @param[in,out] draw_infos The output drawing information about the input character (It needs to be released by ReleaseDrawInfo function).
* @see ReleaseDrawInfo(DRAW_INFO_T **, size_t *)
* @param[in,out] num_of_draw_info The number of drawing information in the draw_infos.
* @return Negative value: Failed. Zero: Successful.
*/
int GenerateDrawInfo(TXT_RENDERER_T *ptHandle, const char *str, DRAW_INFO_T **draw_infos, size_t *num_of_draw_info);
/**
* @brief Function to generate extra the drawing information into text_render for further usage.
*
* @param[in] ptHandle The pointer of information structure about the font.
* @param[in] str The string needs to be generated the drawing information about it.
* @return Negative value: Failed. Zero: Successful.
*/
int SetExtraDrawInfo(TXT_RENDERER_T *ptHandle, const char *str);
/**
* @brief Function to release the resource of the drawing information.
*
* @param[in,out] draw_infos The drawing information needs to be released, it will be reset to NULL after we release it successfully.
* @param[in,out] num_of_draw_info The number of drawing information in the draw_infos, it will be reset to zero after we release it successfully.
*/
void ReleaseDrawInfo(DRAW_INFO_T **draw_infos, size_t *num_of_draw_info);
/**
* @brief Function to draw one string on the surface according to the drawing information.
*
* @param[in] surface The surface needs to be drawn one string on.
* @param[in] draw_infos The drawing information about the string.
* @param[in] num_of_draw_info The number of drawing information in the draw_info.
* @param[in,out] x_offset The x offset of drawing the character (It will be updated to new x offset for drawing next string).
* @param[in,out] y_offset The y offset of drawing the character (It will be updated to new y offset for drawing next string).
* @param[in,out] result Some results after drawing.
*/
void RenderDrawInfo(const TXT_SURFACE_T *ptSurface, const DRAW_INFO_T *draw_infos, const size_t num_of_draw_info,
int* x_offset, int* y_offset, DRAW_RESULT_T *result);
/**
* @brief Function to draw one ASCII string on the surface according to the drawing information.
*
* @param[in] ptHandle The pointer of information structure about the font.
* @param[in] surface The surface needs to be drawn one string on.
* @param[in] str The string needs to be drawn.
* @param[in,out] x_offset The x offset of drawing the character (It will be updated to new x offset for drawing next string).
* @param[in,out] y_offset The y offset of drawing the character (It will be updated to new y offset for drawing next string).
* @param[in,out] result Some results after drawing.
*/
void DrawASCIIText(TXT_RENDERER_T *ptHandle, const TXT_SURFACE_T *ptSurface, const char *str, int* x_offset, int * y_offset, DRAW_RESULT_T *result);
/**
* @brief Function to get the width and height from the ASCII text.
*
* @param[in] ptHandle The pointer of information structure about the font.
* @param[in] str The string needs to be calculated.
* @param[in] str_len The length of input string.
* @param[out] width The width of the drawing information for one string.
* @param[out] height The max height of the drawing information for one string.
*/
void ASCIITextGeometric(TXT_RENDERER_T *ptHandle, const char *str, size_t str_len, int *width, int *height);
/**
* @brief Function to get the width and height from the UTF8 text.
*
* @param[in] ptHandle The pointer of information structure about the font.
* @param[in] str The UTF8 string needs to be calculated.
* @param[out] width The width of the drawing information for one string.
* @param[out] height The max height of the drawing information for one string.
*/
void UTF8TextGeometric(TXT_RENDERER_T *ptHandle, const char *str, int *width, int *height);
/**
* @brief Function to get the width and height from the drawing information.
*
* @param[in] draw_info The drawing information about the string.
* @param[in] num_of_draw_info The number of drawing information in the draw_info.
* @param[out] width The width of the drawing information for one string.
* @param[out] height The max height of the drawing information for one string.
*/
void DrawInfoGeometric(const DRAW_INFO_T *draw_infos, size_t num_of_draw_info, int *width, int *height);
/**
* @brief Function to get the max width of the range of ASCII code or specified ASCII code.
*
* @param[in] ptHandle The pointer of information structure about the font.
* @param[in] range_idx_array The array for the range of ASCII code ( ex: {min1, max1, min2, max2} = {48, 57, 97, 100}; // 0~9, a~d ).
* @param[in] range_idx_array_size The number of elements in the range_idx_array.
* @param[in] idx_array The array for the ASCII codes ( ex: {75, 68, 81}; // K, D, Q ).
* @param[in] idx_array_size The number of elements in the idx_array.
* @return The max width of all specified ASCII texts (-1: Failed).
*/
int GetASCIITextMaxWidth(TXT_RENDERER_T *ptHandle, const size_t *range_idx_array, size_t range_idx_array_size,
const size_t *idx_array, size_t idx_array_size);
/**
* @brief Function to get the max height of the range of ASCII code or specified ASCII code.
*
* @param[in] ptHandle The pointer of information structure about the font.
* @param[in] range_idx_array The array for the range of ASCII code ( ex: {min1, max1, min2, max2} = {48, 57, 97, 100}; // 0~9, a~d ).
* @param[in] range_idx_array_size The number of elements in the range_idx_array.
* @param[in] idx_array The array for the ASCII codes ( ex: {75, 68, 81}; // K, D, Q ).
* @param[in] idx_array_size The number of elements in the idx_array.
* @return The max height of all specified ASCII texts (-1: Failed).
*/
int GetASCIITextMaxHeight(TXT_RENDERER_T *ptHandle, const size_t *range_idx_array, size_t range_idx_array_size,
const size_t *idx_array, size_t idx_array_size);
/**
* @brief Function to create a bitmap buf and draw one ASCII string on this buffer.
*
* @param[in] ptHandle The pointer of information structure about the font.
* @param[in] str The string needs to be drawn.
*/
void CreateASCIIBitmap(TXT_RENDERER_T *ptHandle, const char *str);
/**
* @brief Function to draw one ASCII string on the surface according to the drawing information.
*
* @param[in] ptHandle The pointer of information structure about the font.
* @param[in] surface The surface needs to be drawn one string on.
* @param[in] x The x offset of drawing the bitmap.
* @param[in] y The y offset of drawing the bitmap.
*/
void DrawBitmap(TXT_RENDERER_T *ptHandle, const TXT_SURFACE_T *ptSurface, int x, int y);
/**
* @brief Function to create an alpha mask and draw one string on this mask according to the drawing information.
*
* @param[in] ptHandle The pointer of information structure about the font.
* @param[in] surface The surface needs to be drawn one string on.
* @param[in] draw_infos The drawing information about the string.
* @param[in] num_of_draw_info The number of drawing information in the draw_info.
* @param[in,out] x_offset The x offset of drawing the character (It will be updated to new x offset for drawing next string).
* @param[in,out] y_offset The y offset of drawing the character (It will be updated to new y offset for drawing next string).
* @param[in] extra_space Extra space between characters.
*/
void RenderMask(TXT_RENDERER_T *ptHandle, const TXT_SURFACE_T *ptSurface, const DRAW_INFO_T *draw_infos,
size_t num_of_draw_info, int* x_offset, int* y_offset, int extra_space);
/**
* @brief Function to draw one ASCII string on this mask. (with user defined color input).
*
* @param[in] ptHandle The pointer of information structure about the font.
* @param[in] surface The surface needs to be drawn one string on.
* @param[in] color_info Assigned color for mask.
* @param[in] str The string needs to be drawn.
* @param[in,out] x_offset The x offset of drawing the character (It will be updated to new x offset for drawing next string).
* @param[in,out] y_offset The y offset of drawing the character (It will be updated to new y offset for drawing next string).
* @param[in] extra_space Extra space between characters.
*/
void DrawASCIIMask(TXT_RENDERER_T *ptHandle, const TXT_SURFACE_T *ptSurface, FONT_COLOR_T* ptColorInfo,
const char *str, int* x_offset, int* y_offset, int extra_space);
/**
* @brief Function to draw one UTF8 string on this mask. (with user defined color input).
*
* @param[in] ptHandle The pointer of information structure about the font.
* @param[in] ptSurface The surface needs to be drawn one string on.
* @param[in] color_info Assigned color for mask.
* @param[in] str The string needs to be drawn.
* @param[in,out] x_offset The x offset of drawing the character (It will be updated to new x offset for drawing next string).
* @param[in,out] y_offset The y offset of drawing the character (It will be updated to new y offset for drawing next string).
* @param[in,out] result Some results after drawing.
*/
void DrawUTF8Mask(TXT_RENDERER_T *ptHandle, const TXT_SURFACE_T *ptSurface, FONT_COLOR_T* ptColorInfo,
const char *str, int* x_offset, int* y_offset);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -0,0 +1,81 @@
/*
*******************************************************************************
* Copyright (c) 2010-2022 VATICS(KNERON) Inc. All rights reserved.
*
* +-----------------------------------------------------------------+
* | THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED |
* | AND COPIED IN ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH |
* | A LICENSE AND WITH THE INCLUSION OF THE THIS COPY RIGHT NOTICE. |
* | THIS SOFTWARE OR ANY OTHER COPIES OF THIS SOFTWARE MAY NOT BE |
* | PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. THE |
* | OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. |
* | |
* | THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT |
* | ANY PRIOR NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY |
* | VATICS(KNERON) INC. |
* +-----------------------------------------------------------------+
*
*******************************************************************************
*/
#ifndef __AVI_PARSER_H__
#define __AVI_PARSER_H__
#ifdef __cplusplus
extern "C" {
#endif
#include <avi_reader/avi_types.h>
#include <string.h>
typedef struct
{
list_header_t strl_list_header;
avi_stream_header_t avi_stream_header;
bitmap_info_header_t *bitmap_info_header;
wave_format_ex_t *wave_format_ex;
/* We do not handle or store the strd and strn etc. */
} strl_t;
typedef struct
{
strl_t *array;
size_t size;
} strl_array;
typedef struct avi_headers_info_struct
{
riff_header_t riff_header;
list_header_t hdrl_list_header;
avi_main_header_t avi_main_header;
strl_array strl;
list_header_t movi_list_header;
long movi_first_chunk_offset;
chunk_header_t idx1_header;
long idx1_first_entry_offset;
} avi_headers_info_t;
typedef struct
{
avi_index_1_entry_t *array;
size_t size;
} avi_index_1_entry_array;
typedef enum { UncompressedVideo = 0, CompressedVideo, PaletteChange, Audio, Unknown } ChunkInfo;
void AVIParser_InitializeAVIHeadersInfo(avi_headers_info_t *avi_header_info);
void AVIParser_ReleaseAVIHeadersInfo(avi_headers_info_t *avi_header_info);
void AVIParser_FourCC2StreamNumChunkInfo(FOURCC code, int *stream_num, ChunkInfo *chunk_info);
int AVIParser_Start(int fd, avi_headers_info_t *avi_info);
void AVIParser_PrintAVIInfo(const avi_headers_info_t *avi_info);
int AVIParser_ReadAllIndexEntries(int fd, const avi_headers_info_t *avi_info, avi_index_1_entry_array *idx1_entries);
void AVIParser_ReleaseIndexEntries(avi_index_1_entry_array *idx1_entries);
void AVIParser_PrintIndexEntries(const avi_index_1_entry_array *idx1_entries);
int AVIParser_PrintAllMoviChunk(int fd, const avi_headers_info_t *avi_info);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -0,0 +1,48 @@
/*
*******************************************************************************
* Copyright (c) 2010-2022 VATICS(KNERON) Inc. All rights reserved.
*
* +-----------------------------------------------------------------+
* | THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED |
* | AND COPIED IN ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH |
* | A LICENSE AND WITH THE INCLUSION OF THE THIS COPY RIGHT NOTICE. |
* | THIS SOFTWARE OR ANY OTHER COPIES OF THIS SOFTWARE MAY NOT BE |
* | PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. THE |
* | OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. |
* | |
* | THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT |
* | ANY PRIOR NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY |
* | VATICS(KNERON) INC. |
* +-----------------------------------------------------------------+
*
*******************************************************************************
*/
#ifndef __AVI_READER_H__
#define __AVI_READER_H__
#ifdef __cplusplus
extern "C" {
#endif
#include <stddef.h>
#include <avi_reader/avi_parser.h>
typedef struct avi_reader_handle_t
{
int fd_; /**< The file descriptor of AVI file. */
size_t current_movi_chunk_index_; /**< The index to point one movi chunk. */
avi_headers_info_t *avi_info_; /**< The pointer to point the AVI information structure. */
avi_index_1_entry_array idx1_entries_; /**< The queue to store the entries of AVI 1.0 index. */
} avi_reader_handle_t;
void AVIReader_Init(avi_reader_handle_t *);
void AVIReader_Release(avi_reader_handle_t *);
int AVIReader_LoadAVIFile(avi_reader_handle_t *, const char* filename);
int AVIReader_GetSample(avi_reader_handle_t *, char* buf, size_t buf_len, size_t *data_len, int *stream_num, ChunkInfo *chunk_info);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -0,0 +1,179 @@
/*
*******************************************************************************
* Copyright (c) 2010-2022 VATICS(KNERON) Inc. All rights reserved.
*
* +-----------------------------------------------------------------+
* | THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED |
* | AND COPIED IN ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH |
* | A LICENSE AND WITH THE INCLUSION OF THE THIS COPY RIGHT NOTICE. |
* | THIS SOFTWARE OR ANY OTHER COPIES OF THIS SOFTWARE MAY NOT BE |
* | PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. THE |
* | OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. |
* | |
* | THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT |
* | ANY PRIOR NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY |
* | VATICS(KNERON) INC. |
* +-----------------------------------------------------------------+
*
*******************************************************************************
*/
#ifndef __AVI_TYPES_H__
#define __AVI_TYPES_H__
#ifdef __cplusplus
extern "C" {
#endif
#include <avi_reader/avi_utils.h>
#include <stdint.h>
#define PACKED_STRUCT __attribute__((__packed__))
#define FOURCC_RIFF (MAKEFOURCC('R','I','F','F'))
#define FOURCC_LIST (MAKEFOURCC('L','I','S','T')) /* list structure */
#define FOURCC_AVI_ (MAKEFOURCC('A','V','I',' '))
#define FOURCC_hdrl (MAKEFOURCC('h','d','r','l')) /* avih and several strl */
#define FOURCC_avih (MAKEFOURCC('a','v','i','h')) /* avi common feature */
#define FOURCC_strl (MAKEFOURCC('s','t','r','l')) /* stream header + stream format */
#define FOURCC_strh (MAKEFOURCC('s','t','r','h')) /* stream header */
#define FOURCC_strf (MAKEFOURCC('s','t','r','f')) /* stream format */
#define FOURCC_movi (MAKEFOURCC('m','o','v','i')) /* media data */
#define FOURCC_idx1 (MAKEFOURCC('i','d','x','1')) /* index, record the position and size in the file for every data */
#define FOURCC_JUNK (MAKEFOURCC('J','U','N','K')) /* player will ignore it, we use it for timestamp */
#define FOURCC_vids (MAKEFOURCC('v','i','d','s')) /* video */
#define FOURCC_auds (MAKEFOURCC('a','u','d','s')) /* audio */
#define FOURCC_BI_RGB 0x00000000
#define FOURCC_BI_BITFIELDS 0x00000003
#define AVIF_COPYRIGHTED 0x00020000
#define AVIF_HASINDEX 0x00000010 /* Index at end of file? */
#define AVIF_ISINTERLEAVED 0x00000100
#define AVIF_MUSTUSEINDEX 0x00000020
#define AVIF_TRUSTCKTYPE 0x00000800 /* Use CKType to find key frames? */
#define AVIF_WASCAPTUREFILE 0x00010000
#define AVISF_DISABLED 0x00000001
#define AVISF_VIDEO_PALCHANGES 0x00010000
#define WAVE_FORMAT_PCM 0x0001 /* PCM */
#define WAVE_FORMAT_MPEG 0x0050 /* MPEG Layer 1,2 */
#define WAVE_FORMAT_MPEGLAYER3 0x0055 /* MPEG Layer 3 */
#define WAVE_FORMAT_EXTENSIBLE 0xFFFE /* SubFormat */
#define AVIIF_LIST 0x00000001
#define AVIIF_KEYFRAME 0x00000010
#define AVIIF_NO_TIME 0x00000100
#define AVIIF_COMPRESSOR 0x0FFF0000
typedef uint32_t FOURCC;
typedef uint32_t DWORD;
typedef uint16_t WORD;
typedef int32_t SDWORD;
typedef int16_t SHORT;
typedef struct
{
FOURCC fcc; /* RIFF */
DWORD dwRiffSize;
DWORD dwFileType;
} riff_header_t;
typedef struct
{
FOURCC fcc; /* LIST */
DWORD dwListSize;
DWORD dwListType;
} list_header_t;
typedef struct
{
FOURCC fcc;
DWORD dwChunkSize;
} chunk_header_t;
typedef struct
{
FOURCC fcc;
DWORD dwChunkByte;
DWORD dwMicroSecPerFrame;
DWORD dwMaxBytesPerSec;
DWORD dwPaddingGranularity;
DWORD dwFlags;
DWORD dwTotalFrames;
DWORD dwInitialFrames;
DWORD dwStreams;
DWORD dwSuggestedBufferSize;
DWORD dwWidth;
DWORD dwHeight;
DWORD dwReserved[4];
} avi_main_header_t;
typedef struct
{
FOURCC fcc;
DWORD dwChunkByte;
FOURCC fccType;
FOURCC fccHandler;
DWORD dwFlags;
WORD wPriority;
WORD wLanguage;
DWORD dwInitialFrames;
DWORD dwScale;
DWORD dwRate;
DWORD dwStart;
DWORD dwLength;
DWORD dwSuggestedBufferSize;
SDWORD dwQuality;
DWORD dwSampleSize;
struct {
SHORT left;
SHORT top;
SHORT right;
SHORT bottom;
} rcFrame;
} avi_stream_header_t;
typedef struct
{
FOURCC fcc;
DWORD dwChunkByte;
DWORD biSize;
SDWORD biWidth;
SDWORD biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
SDWORD biXPelsPerMeter;
SDWORD biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} bitmap_info_header_t;
typedef struct {
FOURCC fcc;
DWORD dwChunkByte;
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
WORD cbSize;
} PACKED_STRUCT wave_format_ex_t;
typedef struct {
DWORD dwChunkId;
DWORD dwFlags;
DWORD dwOffset;
DWORD dwSize;
} avi_index_1_entry_t;
#ifdef __cplusplus
}
#endif
#endif

View File

@ -0,0 +1,53 @@
/*
*******************************************************************************
* Copyright (c) 2010-2022 VATICS(KNERON) Inc. All rights reserved.
*
* +-----------------------------------------------------------------+
* | THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED |
* | AND COPIED IN ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH |
* | A LICENSE AND WITH THE INCLUSION OF THE THIS COPY RIGHT NOTICE. |
* | THIS SOFTWARE OR ANY OTHER COPIES OF THIS SOFTWARE MAY NOT BE |
* | PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. THE |
* | OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. |
* | |
* | THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT |
* | ANY PRIOR NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY |
* | VATICS(KNERON) INC. |
* +-----------------------------------------------------------------+
*
*******************************************************************************
*/
#ifndef __AVI_UTILS_H__
#define __AVI_UTILS_H__
#if 0
#include <endian.h>
#ifdef __BYTE_ORDER
#if __BYTE_ORDER == __BIG_ENDIAN
# define MAKEFOURCC(a,b,c,d) ((((uint32_t)a)<<24) | (((uint32_t)b)<<16) | \
(((uint32_t)c)<< 8) | ((uint32_t)d))
#elif __BYTE_ORDER == __LITTLE_ENDIAN
# define MAKEFOURCC(a,b,c,d) (((uint32_t)a) | (((uint32_t)b)<<8) | \
(((uint32_t)c)<<16) | (((uint32_t)d)<<24))
#elif __BYTE_ORDER == __PDP_ENDIAN
# define MAKEFOURCC(a,b,c,d) ((((uint32_t)a)<<16) | (((uint32_t)b)<<24) | \
((uint32_t)c) | (((uint32_t)d)<<8))
#else
#error "Endian determination failed"
#endif
#endif
#endif
#ifndef MAKEFOURCC
#define MAKEFOURCC(a,b,c,d) (((uint32_t)a) | (((uint32_t)b)<<8) | \
(((uint32_t)c)<<16) | (((uint32_t)d)<<24))
#endif
#ifndef PRINT_FOURCC
#define PRINT_FOURCC(S) *((char*)&(S)),*(((char*)&(S))+1),*(((char*)&(S))+2),*(((char*)&(S))+3)
#endif
#endif

View File

@ -0,0 +1,152 @@
/*
*******************************************************************************
* Copyright (c) 2010-2022 VATICS(KNERON) Inc. All rights reserved.
*
* +-----------------------------------------------------------------+
* | THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED |
* | AND COPIED IN ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH |
* | A LICENSE AND WITH THE INCLUSION OF THE THIS COPY RIGHT NOTICE. |
* | THIS SOFTWARE OR ANY OTHER COPIES OF THIS SOFTWARE MAY NOT BE |
* | PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. THE |
* | OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. |
* | |
* | THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT |
* | ANY PRIOR NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY |
* | VATICS(KNERON) INC. |
* +-----------------------------------------------------------------+
*
*******************************************************************************
*/
#ifndef _AVICONTAINER_H_
#define _AVICONTAINER_H_
/*
The data format of config info
Video codecs (H264, JPEG)
FOURCC_type (FOURCC_H264 or FOURCC_JPEG, 4 bytes)
width (4 bytes)
height (4 bytes)
G711:
FOURCC_G711 (4 bytes)
compression_format (FOURCC_ULAW or FOURCC_ALAW, 4bytes)
G726:
FOURCC_G726 (4 bytes)
dwCodewordBits (bitrate/sample rate, 4 bytes)
GAMR:
FOURCC_GAMR (4 bytes)
AAC4
FOURCC_AAC4 (4 bytes)
sameple rate (4 bytes)
channel num (4 bytes)
*/
#define AVIC_PADDING_SIZE 2
#define AVIC_KEYFRAME 0x00000010
#define AVIC_NONE 0x00000000
//#define BLOCK_ALIGNMENT
typedef struct
{
char *szAVIFile; /**< file name */
unsigned int dwVideoTrackNum; /**< The total number of track */
unsigned char* ptVideoTrackBufInfo[2]; /**< The video config info array */
unsigned int dwAudioTrackNum; /**< total audio number of track */
unsigned char* ptAudioTrackBufInfo[2]; /**< The audio config info array */
unsigned int dwAviCreateHeader; /**< create avi header when creating file*/
#ifdef AVIv2
unsigned int dwRecLen; /**< Record length in Seconds*/
unsigned int dwFrameToUpdate; /**< Number of frames to trigger SuperIdx Update*/
#endif
} AVICCreateOptions;
typedef struct AVICHandle AVICHandle;
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Function to initialize AVI container.
*
* @return The handle of AVI container
*/
AVICHandle* AVIC_Init();
/**
* @brief Function to release AVI container.
*
* @param[in] handle The handle of AVI container.
*/
void AVIC_Release(AVICHandle* handle);
/**
* @brief Function to create an AVI file.
*
* @param[in] handle The handle of AVI container.
* @param[in] option The AVI container's configuration.
* @return Success: 0 Fail: negative integer.
*/
int AVIC_CreateFile(AVICHandle* handle, const AVICCreateOptions* option);
typedef struct
{
unsigned int dwFlags;
unsigned char* data;
} avic_sample_info_t;
/**
* @brief Add a sample into an AVI file.
*
* @param[in] handle The handle of AVI container.
* @param[in] dwTrackID The AVI track id for written data.
* @param[in] pbyRawData The pointer to a sample.
* @param[in] dwSampleSz the size of a sample.
* @return Success: 0 Fail: negative integer.
*/
int AVIC_AddSample(AVICHandle* handle, unsigned int dwTrackID, const avic_sample_info_t* sample);
/**
* @brief Function to cloase an AVI file.
*
* @param[in] handle The handle of AVI container.
* @param[in] video_duration_ms The video data's duration (in msec).
* @return Success: 0 Fail: negative integer.
*/
int AVIC_CloseFile(AVICHandle* handle, unsigned int video_duration_ms);
/**
* @brief Start/Notify to sync data into disk (Non-Blocking).
*
* @param[in] handle The handle of AVI container.
* @return Success: 0 Fail: negative integer.
*/
int AVIC_CommitData(AVICHandle* handle);
/**
* @brief Flush I/O cache and sync data into disk.
*
* @param[in] handle The handle of AVI container.
* @return Success: 0 Fail: negative integer.
*/
int AVIC_FlushCache(AVICHandle* handle);
#ifdef AVIv2
/**
* @brief Avi 2.0, Update SuperIndx and standard index
*
* @param[in] handle The handle of AVI container.
* @return Success: 0 Fail: negative integer.
*/
int AVIC_UpdateFile(AVICHandle* handle, int duration_ms);
#endif
#ifdef __cplusplus
}
#endif
#endif // _AVICONTAINER_H_

View File

@ -0,0 +1,64 @@
/*
*******************************************************************************
* Copyright (c) 2010-2022 VATICS(KNERON) Inc. All rights reserved.
*
* +-----------------------------------------------------------------+
* | THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED |
* | AND COPIED IN ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH |
* | A LICENSE AND WITH THE INCLUSION OF THE THIS COPY RIGHT NOTICE. |
* | THIS SOFTWARE OR ANY OTHER COPIES OF THIS SOFTWARE MAY NOT BE |
* | PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. THE |
* | OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. |
* | |
* | THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT |
* | ANY PRIOR NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY |
* | VATICS(KNERON) INC. |
* +-----------------------------------------------------------------+
*
*******************************************************************************
*/
#ifndef __DOUBLY_LINKED_LIST_H__
#define __DOUBLY_LINKED_LIST_H__
#ifdef __cplusplus
extern "C" {
#endif
#include <stdlib.h>
/* Doubly-linked lists. */
typedef struct dnode_s
{
void *data; /**< The data of one node in the doubly-linked lists. */
struct dnode_s *prev; /**< The pointer to point the previous node in the doubly-linked lists. */
struct dnode_s *next; /**< The pointer to point the next node in the doubly-linked lists. */
} dnode_t;
typedef struct dlinked_list
{
size_t count; /**< The number of node in the doubly-linked lists. */
dnode_t *front; /**< The pointer to point the first node in the doubly-linked lists. */
dnode_t *rear; /**< The pointer to point the last node in the doubly-linked lists. */
} dlinked_list_t;
typedef int (*COMP_FUNC_PTR)(const void* data1, const void* data2);
#define DLIST_FOR_EACH(node_ptr, list_ptr) \
for((node_ptr) = (list_ptr)->front; (node_ptr); (node_ptr) = (node_ptr)->next)
void InitDList(dlinked_list_t *list);
dnode_t* CreateDListNode(void *data);
void* DestroyDListNode(dnode_t **node);
void DListInsertAfter(dlinked_list_t *list, dnode_t *node, dnode_t *new_node);
void DListInsertBefore(dlinked_list_t *list, dnode_t *node, dnode_t *new_node);
void DListPushFront(dlinked_list_t *list, dnode_t *new_node);
void DListPushBack(dlinked_list_t *list, dnode_t *new_node);
void DListRemove(dlinked_list_t *list, dnode_t *node);
void DListPushBackSort(dlinked_list_t *dlist, dnode_t *new_node, COMP_FUNC_PTR compare_func);
void DListSplice(dlinked_list_t *dest_dlist, dlinked_list_t *src_dlist);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -0,0 +1,105 @@
/*
*******************************************************************************
* Copyright (c) 2010-2022 VATICS(KNERON) Inc. All rights reserved.
*
* +-----------------------------------------------------------------+
* | THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED |
* | AND COPIED IN ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH |
* | A LICENSE AND WITH THE INCLUSION OF THE THIS COPY RIGHT NOTICE. |
* | THIS SOFTWARE OR ANY OTHER COPIES OF THIS SOFTWARE MAY NOT BE |
* | PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. THE |
* | OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. |
* | |
* | THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT |
* | ANY PRIOR NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY |
* | VATICS(KNERON) INC. |
* +-----------------------------------------------------------------+
*
*******************************************************************************
*/
#ifndef VMF_FRAME_INFO_H
#define VMF_FRAME_INFO_H
#ifdef __cplusplus
extern "C" {
#endif
/*! Make from four character codes to one 32-bits DWORD */
#ifndef VMF_MAKEFOURCC
#define VMF_MAKEFOURCC(ch0, ch1, ch2, ch3) ((unsigned int)(unsigned char)(ch0) | ((unsigned int)(unsigned char)(ch1) << 8) | ((unsigned int)(unsigned char)(ch2) << 16) | ((unsigned int)(unsigned char)(ch3) << 24 ))
#endif //defined(VMF_MAKEFOURCC)
/*! FOURCC for video conf */
#ifndef VMF_FOURCC_CONF
#define VMF_FOURCC_CONF (VMF_MAKEFOURCC('C','O','N','F'))
#endif
/*! FOURCC for H264 video codec */
#ifndef VMF_FOURCC_H264
#define VMF_FOURCC_H264 (VMF_MAKEFOURCC('H','2','6','4'))
#endif
/*! FOURCC for H265 video codec */
#ifndef VMF_FOURCC_H265
#define VMF_FOURCC_H265 (VMF_MAKEFOURCC('H','2','6','5'))
#endif
/*! FOURCC for JPEG image codec */
#ifndef VMF_FOURCC_JPEG
#define VMF_FOURCC_JPEG (VMF_MAKEFOURCC('J','P','E','G'))
#endif
/*
* A data Structure for HW Device ID
*/
typedef enum
{
VMF_HW_VIC = 0,
VMF_HW_IFP,
VMF_HW_AE,
VMF_HW_AWB,
VMF_HW_ASC,
VMF_HW_ISP
} VMF_HW_DEVICE_ID;
/*
* A data Structure for Frame Info
*/
typedef struct
{
//! A data for seconds
unsigned int dwSec;
//! A data for microseconds
unsigned int dwUSec;
} vmf_frame_info_t;
typedef vmf_frame_info_t VMF_FRAME_INFO_T;
/*
* A data Structure for VMF Buffer
*/
typedef struct
{
//! A data for position X
unsigned int dwPosX;
//! A data for position Y
unsigned int dwPosY;
//! A data for stride
unsigned int dwStride;
//! A data for height
unsigned int dwHeight;
} vmf_buf_alloc_t;
typedef vmf_buf_alloc_t VMF_BUF_ALLOC_T;
#ifdef __cplusplus
}
#endif
#endif

View File

@ -0,0 +1,203 @@
/*
*******************************************************************************
* Copyright (c) 2010-2022 VATICS(KNERON) Inc. All rights reserved.
*
* +-----------------------------------------------------------------+
* | THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED |
* | AND COPIED IN ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH |
* | A LICENSE AND WITH THE INCLUSION OF THE THIS COPY RIGHT NOTICE. |
* | THIS SOFTWARE OR ANY OTHER COPIES OF THIS SOFTWARE MAY NOT BE |
* | PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. THE |
* | OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. |
* | |
* | THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT |
* | ANY PRIOR NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY |
* | VATICS(KNERON) INC. |
* +-----------------------------------------------------------------+
*
*******************************************************************************
*/
#ifndef VMF_VIDEO_BUF_H
#define VMF_VIDEO_BUF_H
#define VMF_MAX_SSM_HEADER_SIZE 256
#define VMF_MAX_SSM_NAME_SIZE 32
#define VMF_MAX_SSM_NAME_PREFIX 10
#define VMF_MAX_PATH_LENGTH 256
#define VMF_MAX_INPUT_LINE_LENGTH 256
#define VMF_MAX_RESIZE_NUM 4
#define VMF_RESOURCE_IFP_SUBDIR "IFPE/"
#define VMF_RESOURCE_ISP_SUBDIR "ISP/"
#define VMF_RESOURCE_AE_SUBDIR "AE/"
#define VMF_RESOURCE_AWB_SUBDIR "AWB/"
#define VMF_RESOURCE_ASC_SUBDIR "AutoScene/"
#define VMF_8_ALIGN(a) (((a) + 7) & (~7))
#define VMF_16_ALIGN(a) (((a) + 15) & (~15))
#define VMF_32_ALIGN(a) (((a) + 31) & (~31))
#define VMF_64_ALIGN(a) (((a) + 63) & (~63))
#define VMF_128_ALIGN(a) (((a) + 127) & (~127))
#define VMF_256_ALIGN(a) (((a) + 255) & (~255))
#define ENC_DEFAULT_FPS 30
#define ENC_MAX_FPS 120
#define ENC_DEFAULT_GOP 30
#define ENC_MAX_GOP 1200
#define DEFAULT_QP 25
#define MIN_QP 10
#define MAX_QP 45
#define H265_MIN_QP 0
#define H265_MAX_QP 51
/*
* Video signal format flag enumeration
*/
typedef enum
{
VMF_VIDEO_SIGNAL_FREQUENCY_50HZ = 1,
VMF_VIDEO_SIGNAL_FREQUENCY_60HZ = 2,
VMF_VIDEO_SIGNAL_FREQUENCY_24HZ = 3,
VMF_VIDEO_SIGNAL_FREQUENCY_30HZ = 4
} VMF_VIDEO_SIGNAL_FREQUENCY;
/*
* Video format flag enumeration
*/
typedef enum
{
VMF_FRAME_FORMAT_MONO = 1,
VMF_FRAME_FORMAT_NORMAL_BAY = 11,
VMF_FRAME_FORMAT_NORMAL_YUV422 = 12,
VMF_FRAME_FORMAT_NORMAL_RGBIr = 13,
VMF_FRAME_FORMAT_NORMAL_YUV420 = 14,
VMF_FRAME_FORMAT_NORMAL_YUV444 = 15,
VMF_FRAME_FORMAT_DECOMPANDING_BAY = 21,
VMF_FRAME_FORMAT_DECOMPANDING_YUV422 = 22,
VMF_FRAME_FORMAT_DECOMPANDING_RGBIr = 23,
VMF_FRAME_FORMAT_DECOMPANDING_YUV420 = 24,
VMF_FRAME_FORMAT_FUSION_BAY = 31,
VMF_FRAME_FORMAT_FUSION_YUV422 = 32,
VMF_FRAME_FORMAT_FUSION_RGBIr = 33,
VMF_FRAME_FORMAT_FUSION_YUV420 = 34,
VMF_FRAME_FORMAT_NORMAL_14BIT = 999 //! Specical mode
} VMF_VIDEO_FORMAT;
/*
* A data structure for vmf video buffer
*/
typedef struct
{
//! A data for Video format
VMF_VIDEO_FORMAT eVideoFormat;
//! A data for input and output Width
unsigned int dwWidth;
//! A data for input and output Height
unsigned int dwHeight;
//! A data for input and output stride
unsigned int adwStride[4];
//! A data for exchanging information between hardware engines.
unsigned int adwHWInfo[12];
//! A data for input virtual address
unsigned char *apbyVirtAddr[4];
//! A data for input physical address
unsigned char *apbyPhysAddr[4];
} VMF_VIDEO_BUF_T;
/*
* A data structure for vmf frame buffer
*/
typedef struct
{
//! A data for frame buffer
unsigned char* apdwData[4];
} VMF_FRAME_BUF_T;
/*
* A data structure for vmf canvas
*/
typedef struct
{
//! A data for Width
unsigned int dwWidth;
//! A data for Height
unsigned int dwHeight;
//! A data for Start X
unsigned int dwAlignedStartX;
//! A data for Start X, Y offset should match the hardware restriction
unsigned int dwStartX;
//! A data for Start Y
unsigned int dwStartY;
} VMF_CANVAS_T;
/*
* A data structure for vmf layout
*/
typedef struct
{
//! A data for Canvas Width
unsigned int dwCanvasWidth;
//! A data for Canvas Height
unsigned int dwCanvasHeight;
//! A data for Video Positon X
unsigned int dwVideoPosX;
//! A data for Video Positon Y
unsigned int dwVideoPosY;
//! A data for Video Width
unsigned int dwVideoWidth;
//! A data for Video Height
unsigned int dwVideoHeight;
} VMF_LAYOUT_T;
/*
* A data structure for venc input info
*/
typedef struct
{
//! A data for checkin physical address
unsigned int bIsPhyAddress;
//! A data for seconds
unsigned int dwSec;
//! A data for microseconds
unsigned int dwUsec;
//! A data for Frame Buffer
VMF_FRAME_BUF_T tFrameBuf;
//! A data for Frame Buffer Physical adddress
VMF_FRAME_BUF_T tFrameBufPhys;
//! A data for Map Info
void* pMapInfo;
//! A data for VSRC Output Info
void* pVsrcOutputInfo;
} VMF_VENC_INPUT_INFO_T;
/*
* A data structure for venc output info
*/
typedef struct
{
//! A data for destination buffer virtual address
unsigned char* pbyDstVirtBuf;
//! A data for destination buffer phisical address
unsigned char* pbyDstPhysBuf;
//! A data for destination buffer size limit
unsigned int dwBufSize;
//! A data for watermark string NULL: no watermark, Others: watermark string
const char* pszWatermarkStr;
} VMF_VENC_OUTPUT_INFO_T;
/**
* A structure for point
*/
typedef struct
{
//! A data for point x
unsigned int dwX;
//! A data for point y
unsigned int dwY;
}VMF_POINT_T;
#endif //! VMTK_FRAME_H

View File

@ -0,0 +1,68 @@
/*
*******************************************************************************
* Copyright (c) 2010-2022 VATICS(KNERON) Inc. All rights reserved.
*
* +-----------------------------------------------------------------+
* | THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED |
* | AND COPIED IN ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH |
* | A LICENSE AND WITH THE INCLUSION OF THE THIS COPY RIGHT NOTICE. |
* | THIS SOFTWARE OR ANY OTHER COPIES OF THIS SOFTWARE MAY NOT BE |
* | PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. THE |
* | OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. |
* | |
* | THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT |
* | ANY PRIOR NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY |
* | VATICS(KNERON) INC. |
* +-----------------------------------------------------------------+
*
*******************************************************************************
*/
#ifndef __COMM_VMF_LOG_H__
#define __COMM_VMF_LOG_H__
#include <stdio.h>
#ifdef __cplusplus
extern "C" {
#endif
#define VMF_DML_ERROR 0x01
#define VMF_DML_WARNING 0x02
#define VMF_DML_INFO 0x04
#define VMF_DML_DEBUG 0x08
#define VMF_DML_TRACE 0x10
#define VMF_DML_PROFILE 0x20
#define VMF_DML_PROFILE2 0x40
#define DEFAULT_DEBUG_MESSAGE_LEVEL 0x0F
extern int vmfDebugMessageLevel;
void VMF_SetDebugMessageLevel(int level);
int VMF_GetGodshandTimer( char * description );
#define LogE(tag, fmt, ...) \
if (vmfDebugMessageLevel & VMF_DML_ERROR) do { printf("E/[%s] " fmt, tag, ##__VA_ARGS__); } while (0)
#define LogW(tag, fmt, ...) \
if (vmfDebugMessageLevel & VMF_DML_WARNING) do { printf("W/[%s] " fmt, tag, ##__VA_ARGS__); } while (0)
#define LogI(tag, fmt, ...) \
if (vmfDebugMessageLevel & VMF_DML_INFO) do { printf("I/[%s] " fmt, tag, ##__VA_ARGS__); } while (0)
#define LogD(tag, fmt, ...) \
if (vmfDebugMessageLevel & VMF_DML_DEBUG) do { printf("D/[%s] " fmt, tag, ##__VA_ARGS__); } while (0)
#define LogT(tag, fmt, ...) \
if (vmfDebugMessageLevel & VMF_DML_TRACE) do { printf("T/[%s] " fmt, tag, ##__VA_ARGS__); } while (0)
#define LogP(tag, fmt, ...) \
if (vmfDebugMessageLevel & VMF_DML_PROFILE) do { printf("P1/[%s] " fmt, tag, ##__VA_ARGS__); } while (0)
#define LogP2(tag, fmt, ...) \
if (vmfDebugMessageLevel & VMF_DML_PROFILE2) do { printf("P2/[%s] " fmt, tag, ##__VA_ARGS__); } while (0)
#ifdef __cplusplus
}
#endif
#endif //__COMM_VMF_LOG_H__

View File

@ -0,0 +1,207 @@
/*
*******************************************************************************
* Copyright (c) 2010-2022 VATICS(KNERON) Inc. All rights reserved.
*
* +-----------------------------------------------------------------+
* | THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED |
* | AND COPIED IN ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH |
* | A LICENSE AND WITH THE INCLUSION OF THE THIS COPY RIGHT NOTICE. |
* | THIS SOFTWARE OR ANY OTHER COPIES OF THIS SOFTWARE MAY NOT BE |
* | PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. THE |
* | OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. |
* | |
* | THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT |
* | ANY PRIOR NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY |
* | VATICS(KNERON) INC. |
* +-----------------------------------------------------------------+
*
*******************************************************************************
*/
#ifndef DATA_CRYPTO
#define DATA_CRYPTO
#ifdef __cplusplus
extern "C" {
#endif
/*
* DataCrypto operation flag
*/
typedef enum vmf_dce_op_flags
{
VMF_DCE_OP_ENCRYPT = 0,
VMF_DCE_OP_DECRYPT = 1,
VMF_DCE_OP_HASH = 2
} VMF_DCE_OP_FLAG;
/*
* DataCrypto encrypto mode flag
*/
typedef enum vmf_dce_encrypt_mode
{
VMF_ENCRYPT_MODE_EBC = 0,
VMF_ENCRYPT_MODE_CBC = 1,
VMF_ENCRYPT_MODE_CFB = 2,
VMF_ENCRYPT_MODE_OFB = 3,
VMF_ENCRYPT_MODE_CTR = 4
} VMF_DCE_ENCRYPT_MODE;
/*
* DataCrypto encrypto type flag
*/
typedef enum vmf_dce_encrypt_type
{
VMF_ENCRYPT_TYPE_AES = 0,
VMF_ENCRYPT_TYPE_TDES = 1,
VMF_ENCRYPT_TYPE_DES = 2
} VMF_DCE_ENCRYPT_TYPE;
/*
* DataCrypto hash type flag
*/
typedef enum vmf_dce_hash_type
{
VMF_DCE_HASH_TYPE_SHA_1 = 0,
VMF_DCE_HASH_TYPE_SHA_256 = 2,
VMF_DCE_HASH_TYPE_SHA_224 = 3,
VMF_DCE_HASH_TYPE_SHA_512 = 4,
VMF_DCE_HASH_TYPE_SHA_384 = 5
} VMF_DCE_HASH_TYPE;
/*
* DataCrypto hash mode flag
*/
typedef enum vmf_dce_hash_mode
{
VMF_DCE_HASH_MODE_HASHING_ONLY = 0,
VMF_DCE_HASH_MODE_HMAC = 1
} VMF_DCE_HASH_MODE;
/*
* DataCrypto hash stat flag
*/
typedef enum vmf_dce_hash_stat
{
VMF_DCE_HASH_STAT_BEGIN = 0,
VMF_DCE_HASH_STAT_END = 1,
VMF_DCE_HASH_STAT_MID = 2
} VMF_DCE_HASH_STAT;
/*
* A data structure for cipher
*/
typedef struct vmf_dce_cipher_t
{
//!encrypto type flag: NCRYPT_AES, ENCRYPT_TDES, ENCRYPT_DES
VMF_DCE_ENCRYPT_TYPE eCryptoType;
//!encrypto mode flag: EBC_MODE, CBC_MODE, CFB_MODE, OFB_MODE, CTR_MODE
VMF_DCE_ENCRYPT_MODE eCryptoMode;
//! A data for key size
unsigned int dwKeySize;
}VMF_DCE_CIPHER_T;
/*
* A data structure for hash
*/
typedef struct vmf_dce_hash_t
{
//!hash type flag: HASH_SHA_1, HASH_SHA_256, HASH_SHA_224, HASH_SHA_512, HASH_SHA_384
VMF_DCE_HASH_TYPE eHashType;
//!hash mode flag: HASHING_ONLY, HMAC
VMF_DCE_HASH_MODE eHashMode;
//!hash stat flag: HASH_BEGIN, HASH_END, HASH_MIDDLE
VMF_DCE_HASH_STAT eHashStat;
//! A data for Hash size
unsigned int dwHashSize;
}VMF_DCE_HASH_T;
/*
* A data structure for DataCrypto
*/
typedef struct vmf_dce_state_t
{
//!operation flag: OP_ENCRYPTION, OP_DECRYPTION, OP_HASH
VMF_DCE_OP_FLAG eOpMode;
//! A data for text size
unsigned int dwTextSize;
//! A data for DCE data info (VMF_DCE_CIPHER_T or VMF_DCE_HASH_T)
void* ptDceInfo;
} VMF_DCE_STATE_T;
typedef struct vmf_dce_handle_t VMF_DCE_HANDLE_T;
typedef struct vmf_dce_initopt_t {
//! A data for key virtual buffer, 128byte alignment
unsigned char *pbyKeyVirtBuff;
//! A data for initialization vector buffer, 16byte alignment
unsigned char *pbyInitVectorVirtBuff;
//! A data for input virtual buffer, 128byte alignment
unsigned char *pbyInputVirtBuff;
//! A data for outoput virtual buffer, 128byte alignment
unsigned char *pbyOutputVirtBuff;
} VMF_DCE_INITOPT_T;
typedef struct vmf_encryption_info_t {
//! A data for plain text buffer, 16byte alignment
unsigned char* ptPlainText;
//! A data for cipher text buffer, 16byte alignment
unsigned char *ptCipherText;
//! A data for plain text length, 16 alignment
unsigned int dwTextLength;
} VMF_ENCRYPTION_INFO_T;
/**
* @brief Function to initialize datacrypto handle.
*
* @param[in] ptInitOpt Initial options for DCE handle.
* @return The handle of DCE handle.
*/
VMF_DCE_HANDLE_T* VMF_DCE_Init(const VMF_DCE_INITOPT_T* ptInitOpt);
/**
* @brief Function to release datacrypto handle.
*
* @param[in] ptHandle The datacrypto handle.
* @return Success: 0 Fail: negative integer.
*/
int VMF_DCE_Release(VMF_DCE_HANDLE_T* ptHandle);
/**
* @brief Function to process datacrypto one frame.
*
* @param[in] pHandle The handle of datacrypto.
* @param[in] pState The state of datacrypto.
* @return Success: 0 Fail: negative integer.
*/
int VMF_DCE_ProcessOneFrame(VMF_DCE_HANDLE_T* ptHandle, VMF_DCE_STATE_T *pState);
/**
* @brief Function to process datacrypto on customer key.
*
* @param[in] ptEncryptionInfo The point of encryptin information.
* @return Success: 0 Fail: -1.
*/
int VMF_Customer_Key_Encryption(VMF_ENCRYPTION_INFO_T* ptEncryptionInfo);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -0,0 +1,515 @@
/* ftconfig.h. Generated from ftconfig.in by configure. */
/***************************************************************************/
/* */
/* ftconfig.in */
/* */
/* UNIX-specific configuration file (specification only). */
/* */
/* Copyright 1996-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
/*************************************************************************/
/* */
/* This header file contains a number of macro definitions that are used */
/* by the rest of the engine. Most of the macros here are automatically */
/* determined at compile time, and you should not need to change it to */
/* port FreeType, except to compile the library with a non-ANSI */
/* compiler. */
/* */
/* Note however that if some specific modifications are needed, we */
/* advise you to place a modified copy in your build directory. */
/* */
/* The build directory is usually `builds/<system>', and contains */
/* system-specific files that are always included first when building */
/* the library. */
/* */
/*************************************************************************/
#ifndef FTCONFIG_H_
#define FTCONFIG_H_
#include <ft2build.h>
#include FT_CONFIG_OPTIONS_H
#include FT_CONFIG_STANDARD_LIBRARY_H
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* PLATFORM-SPECIFIC CONFIGURATION MACROS */
/* */
/* These macros can be toggled to suit a specific system. The current */
/* ones are defaults used to compile FreeType in an ANSI C environment */
/* (16bit compilers are also supported). Copy this file to your own */
/* `builds/<system>' directory, and edit it to port the engine. */
/* */
/*************************************************************************/
#define HAVE_UNISTD_H 1
#define HAVE_FCNTL_H 1
#define HAVE_STDINT_H 1
/* There are systems (like the Texas Instruments 'C54x) where a `char' */
/* has 16 bits. ANSI C says that sizeof(char) is always 1. Since an */
/* `int' has 16 bits also for this system, sizeof(int) gives 1 which */
/* is probably unexpected. */
/* */
/* `CHAR_BIT' (defined in limits.h) gives the number of bits in a */
/* `char' type. */
#ifndef FT_CHAR_BIT
#define FT_CHAR_BIT CHAR_BIT
#endif
/* #undef FT_USE_AUTOCONF_SIZEOF_TYPES */
#ifdef FT_USE_AUTOCONF_SIZEOF_TYPES
#define SIZEOF_INT 4
#define SIZEOF_LONG 4
#define FT_SIZEOF_INT SIZEOF_INT
#define FT_SIZEOF_LONG SIZEOF_LONG
#else /* !FT_USE_AUTOCONF_SIZEOF_TYPES */
/* Following cpp computation of the bit length of int and long */
/* is copied from default include/freetype/config/ftconfig.h. */
/* If any improvement is required for this file, it should be */
/* applied to the original header file for the builders that */
/* do not use configure script. */
/* The size of an `int' type. */
#if FT_UINT_MAX == 0xFFFFUL
#define FT_SIZEOF_INT (16 / FT_CHAR_BIT)
#elif FT_UINT_MAX == 0xFFFFFFFFUL
#define FT_SIZEOF_INT (32 / FT_CHAR_BIT)
#elif FT_UINT_MAX > 0xFFFFFFFFUL && FT_UINT_MAX == 0xFFFFFFFFFFFFFFFFUL
#define FT_SIZEOF_INT (64 / FT_CHAR_BIT)
#else
#error "Unsupported size of `int' type!"
#endif
/* The size of a `long' type. A five-byte `long' (as used e.g. on the */
/* DM642) is recognized but avoided. */
#if FT_ULONG_MAX == 0xFFFFFFFFUL
#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT)
#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFUL
#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT)
#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFFFFFFFUL
#define FT_SIZEOF_LONG (64 / FT_CHAR_BIT)
#else
#error "Unsupported size of `long' type!"
#endif
#endif /* !FT_USE_AUTOCONF_SIZEOF_TYPES */
/* FT_UNUSED is a macro used to indicate that a given parameter is not */
/* used -- this is only used to get rid of unpleasant compiler warnings */
#ifndef FT_UNUSED
#define FT_UNUSED( arg ) ( (arg) = (arg) )
#endif
/*************************************************************************/
/* */
/* AUTOMATIC CONFIGURATION MACROS */
/* */
/* These macros are computed from the ones defined above. Don't touch */
/* their definition, unless you know precisely what you are doing. No */
/* porter should need to mess with them. */
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/* Mac support */
/* */
/* This is the only necessary change, so it is defined here instead */
/* providing a new configuration file. */
/* */
#if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) )
/* no Carbon frameworks for 64bit 10.4.x */
/* AvailabilityMacros.h is available since Mac OS X 10.2, */
/* so guess the system version by maximum errno before inclusion */
#include <errno.h>
#ifdef ECANCELED /* defined since 10.2 */
#include "AvailabilityMacros.h"
#endif
#if defined( __LP64__ ) && \
( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 )
#undef FT_MACINTOSH
#endif
#elif defined( __SC__ ) || defined( __MRC__ )
/* Classic MacOS compilers */
#include "ConditionalMacros.h"
#if TARGET_OS_MAC
#define FT_MACINTOSH 1
#endif
#endif
/* Fix compiler warning with sgi compiler */
#if defined( __sgi ) && !defined( __GNUC__ )
#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 )
#pragma set woff 3505
#endif
#endif
/*************************************************************************/
/* */
/* <Section> */
/* basic_types */
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/* <Type> */
/* FT_Int16 */
/* */
/* <Description> */
/* A typedef for a 16bit signed integer type. */
/* */
typedef signed short FT_Int16;
/*************************************************************************/
/* */
/* <Type> */
/* FT_UInt16 */
/* */
/* <Description> */
/* A typedef for a 16bit unsigned integer type. */
/* */
typedef unsigned short FT_UInt16;
/* */
/* this #if 0 ... #endif clause is for documentation purposes */
#if 0
/*************************************************************************/
/* */
/* <Type> */
/* FT_Int32 */
/* */
/* <Description> */
/* A typedef for a 32bit signed integer type. The size depends on */
/* the configuration. */
/* */
typedef signed XXX FT_Int32;
/*************************************************************************/
/* */
/* <Type> */
/* FT_UInt32 */
/* */
/* A typedef for a 32bit unsigned integer type. The size depends on */
/* the configuration. */
/* */
typedef unsigned XXX FT_UInt32;
/*************************************************************************/
/* */
/* <Type> */
/* FT_Int64 */
/* */
/* A typedef for a 64bit signed integer type. The size depends on */
/* the configuration. Only defined if there is real 64bit support; */
/* otherwise, it gets emulated with a structure (if necessary). */
/* */
typedef signed XXX FT_Int64;
/*************************************************************************/
/* */
/* <Type> */
/* FT_UInt64 */
/* */
/* A typedef for a 64bit unsigned integer type. The size depends on */
/* the configuration. Only defined if there is real 64bit support; */
/* otherwise, it gets emulated with a structure (if necessary). */
/* */
typedef unsigned XXX FT_UInt64;
/* */
#endif
#if FT_SIZEOF_INT == 4
typedef signed int FT_Int32;
typedef unsigned int FT_UInt32;
#elif FT_SIZEOF_LONG == 4
typedef signed long FT_Int32;
typedef unsigned long FT_UInt32;
#else
#error "no 32bit type found -- please check your configuration files"
#endif
/* look up an integer type that is at least 32 bits */
#if FT_SIZEOF_INT >= 4
typedef int FT_Fast;
typedef unsigned int FT_UFast;
#elif FT_SIZEOF_LONG >= 4
typedef long FT_Fast;
typedef unsigned long FT_UFast;
#endif
/* determine whether we have a 64-bit int type */
/* (mostly for environments without `autoconf') */
#if FT_SIZEOF_LONG == 8
/* FT_LONG64 must be defined if a 64-bit type is available */
#define FT_LONG64
#define FT_INT64 long
#define FT_UINT64 unsigned long
/* we handle the LLP64 scheme separately for GCC and clang, */
/* suppressing the `long long' warning */
#elif ( FT_SIZEOF_LONG == 4 ) && \
defined( HAVE_LONG_LONG_INT ) && \
defined( __GNUC__ )
#pragma GCC diagnostic ignored "-Wlong-long"
#define FT_LONG64
#define FT_INT64 long long int
#define FT_UINT64 unsigned long long int
/*************************************************************************/
/* */
/* A 64-bit data type may create compilation problems if you compile */
/* in strict ANSI mode. To avoid them, we disable other 64-bit data */
/* types if __STDC__ is defined. You can however ignore this rule */
/* by defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */
/* */
#elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 )
#if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L
#define FT_LONG64
#define FT_INT64 long long int
#define FT_UINT64 unsigned long long int
#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
/* this compiler provides the __int64 type */
#define FT_LONG64
#define FT_INT64 __int64
#define FT_UINT64 unsigned __int64
#elif defined( __BORLANDC__ ) /* Borland C++ */
/* XXXX: We should probably check the value of __BORLANDC__ in order */
/* to test the compiler version. */
/* this compiler provides the __int64 type */
#define FT_LONG64
#define FT_INT64 __int64
#define FT_UINT64 unsigned __int64
#elif defined( __WATCOMC__ ) /* Watcom C++ */
/* Watcom doesn't provide 64-bit data types */
#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */
#define FT_LONG64
#define FT_INT64 long long int
#define FT_UINT64 unsigned long long int
#elif defined( __GNUC__ )
/* GCC provides the `long long' type */
#define FT_LONG64
#define FT_INT64 long long int
#define FT_UINT64 unsigned long long int
#endif /* __STDC_VERSION__ >= 199901L */
#endif /* FT_SIZEOF_LONG == 8 */
#ifdef FT_LONG64
typedef FT_INT64 FT_Int64;
typedef FT_UINT64 FT_UInt64;
#endif
/*************************************************************************/
/* */
/* miscellaneous */
/* */
/*************************************************************************/
#define FT_BEGIN_STMNT do {
#define FT_END_STMNT } while ( 0 )
#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
/* typeof condition taken from gnulib's `intprops.h' header file */
#if ( ( defined( __GNUC__ ) && __GNUC__ >= 2 ) || \
( defined( __IBMC__ ) && __IBMC__ >= 1210 && \
defined( __IBM__TYPEOF__ ) ) || \
( defined( __SUNPRO_C ) && __SUNPRO_C >= 0x5110 && !__STDC__ ) )
#define FT_TYPEOF( type ) ( __typeof__ ( type ) )
#else
#define FT_TYPEOF( type ) /* empty */
#endif
#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
#define FT_LOCAL( x ) static x
#define FT_LOCAL_DEF( x ) static x
#else
#ifdef __cplusplus
#define FT_LOCAL( x ) extern "C" x
#define FT_LOCAL_DEF( x ) extern "C" x
#else
#define FT_LOCAL( x ) extern x
#define FT_LOCAL_DEF( x ) x
#endif
#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
#define FT_LOCAL_ARRAY( x ) extern const x
#define FT_LOCAL_ARRAY_DEF( x ) const x
#ifndef FT_BASE
#ifdef __cplusplus
#define FT_BASE( x ) extern "C" x
#else
#define FT_BASE( x ) extern x
#endif
#endif /* !FT_BASE */
#ifndef FT_BASE_DEF
#ifdef __cplusplus
#define FT_BASE_DEF( x ) x
#else
#define FT_BASE_DEF( x ) x
#endif
#endif /* !FT_BASE_DEF */
#ifndef FT_EXPORT
#ifdef __cplusplus
#define FT_EXPORT( x ) extern "C" x
#else
#define FT_EXPORT( x ) extern x
#endif
#endif /* !FT_EXPORT */
#ifndef FT_EXPORT_DEF
#ifdef __cplusplus
#define FT_EXPORT_DEF( x ) extern "C" x
#else
#define FT_EXPORT_DEF( x ) extern x
#endif
#endif /* !FT_EXPORT_DEF */
#ifndef FT_EXPORT_VAR
#ifdef __cplusplus
#define FT_EXPORT_VAR( x ) extern "C" x
#else
#define FT_EXPORT_VAR( x ) extern x
#endif
#endif /* !FT_EXPORT_VAR */
/* The following macros are needed to compile the library with a */
/* C++ compiler and with 16bit compilers. */
/* */
/* This is special. Within C++, you must specify `extern "C"' for */
/* functions which are used via function pointers, and you also */
/* must do that for structures which contain function pointers to */
/* assure C linkage -- it's not possible to have (local) anonymous */
/* functions which are accessed by (global) function pointers. */
/* */
/* */
/* FT_CALLBACK_DEF is used to _define_ a callback function. */
/* */
/* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
/* contains pointers to callback functions. */
/* */
/* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */
/* that contains pointers to callback functions. */
/* */
/* */
/* Some 16bit compilers have to redefine these macros to insert */
/* the infamous `_cdecl' or `__fastcall' declarations. */
/* */
#ifndef FT_CALLBACK_DEF
#ifdef __cplusplus
#define FT_CALLBACK_DEF( x ) extern "C" x
#else
#define FT_CALLBACK_DEF( x ) static x
#endif
#endif /* FT_CALLBACK_DEF */
#ifndef FT_CALLBACK_TABLE
#ifdef __cplusplus
#define FT_CALLBACK_TABLE extern "C"
#define FT_CALLBACK_TABLE_DEF extern "C"
#else
#define FT_CALLBACK_TABLE extern
#define FT_CALLBACK_TABLE_DEF /* nothing */
#endif
#endif /* FT_CALLBACK_TABLE */
FT_END_HEADER
#endif /* FTCONFIG_H_ */
/* END */

View File

@ -0,0 +1,833 @@
/***************************************************************************/
/* */
/* ftheader.h */
/* */
/* Build macros of the FreeType 2 library. */
/* */
/* Copyright 1996-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTHEADER_H_
#define FTHEADER_H_
/*@***********************************************************************/
/* */
/* <Macro> */
/* FT_BEGIN_HEADER */
/* */
/* <Description> */
/* This macro is used in association with @FT_END_HEADER in header */
/* files to ensure that the declarations within are properly */
/* encapsulated in an `extern "C" { .. }' block when included from a */
/* C++ compiler. */
/* */
#ifdef __cplusplus
#define FT_BEGIN_HEADER extern "C" {
#else
#define FT_BEGIN_HEADER /* nothing */
#endif
/*@***********************************************************************/
/* */
/* <Macro> */
/* FT_END_HEADER */
/* */
/* <Description> */
/* This macro is used in association with @FT_BEGIN_HEADER in header */
/* files to ensure that the declarations within are properly */
/* encapsulated in an `extern "C" { .. }' block when included from a */
/* C++ compiler. */
/* */
#ifdef __cplusplus
#define FT_END_HEADER }
#else
#define FT_END_HEADER /* nothing */
#endif
/*************************************************************************/
/* */
/* Aliases for the FreeType 2 public and configuration files. */
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/* <Section> */
/* header_file_macros */
/* */
/* <Title> */
/* Header File Macros */
/* */
/* <Abstract> */
/* Macro definitions used to #include specific header files. */
/* */
/* <Description> */
/* The following macros are defined to the name of specific */
/* FreeType~2 header files. They can be used directly in #include */
/* statements as in: */
/* */
/* { */
/* #include FT_FREETYPE_H */
/* #include FT_MULTIPLE_MASTERS_H */
/* #include FT_GLYPH_H */
/* } */
/* */
/* There are several reasons why we are now using macros to name */
/* public header files. The first one is that such macros are not */
/* limited to the infamous 8.3~naming rule required by DOS (and */
/* `FT_MULTIPLE_MASTERS_H' is a lot more meaningful than `ftmm.h'). */
/* */
/* The second reason is that it allows for more flexibility in the */
/* way FreeType~2 is installed on a given system. */
/* */
/*************************************************************************/
/* configuration files */
/*************************************************************************
*
* @macro:
* FT_CONFIG_CONFIG_H
*
* @description:
* A macro used in #include statements to name the file containing
* FreeType~2 configuration data.
*
*/
#ifndef FT_CONFIG_CONFIG_H
#define FT_CONFIG_CONFIG_H <freetype/config/ftconfig.h>
#endif
/*************************************************************************
*
* @macro:
* FT_CONFIG_STANDARD_LIBRARY_H
*
* @description:
* A macro used in #include statements to name the file containing
* FreeType~2 interface to the standard C library functions.
*
*/
#ifndef FT_CONFIG_STANDARD_LIBRARY_H
#define FT_CONFIG_STANDARD_LIBRARY_H <freetype/config/ftstdlib.h>
#endif
/*************************************************************************
*
* @macro:
* FT_CONFIG_OPTIONS_H
*
* @description:
* A macro used in #include statements to name the file containing
* FreeType~2 project-specific configuration options.
*
*/
#ifndef FT_CONFIG_OPTIONS_H
#define FT_CONFIG_OPTIONS_H <freetype/config/ftoption.h>
#endif
/*************************************************************************
*
* @macro:
* FT_CONFIG_MODULES_H
*
* @description:
* A macro used in #include statements to name the file containing the
* list of FreeType~2 modules that are statically linked to new library
* instances in @FT_Init_FreeType.
*
*/
#ifndef FT_CONFIG_MODULES_H
#define FT_CONFIG_MODULES_H <freetype/config/ftmodule.h>
#endif
/* */
/* public headers */
/*************************************************************************
*
* @macro:
* FT_FREETYPE_H
*
* @description:
* A macro used in #include statements to name the file containing the
* base FreeType~2 API.
*
*/
#define FT_FREETYPE_H <freetype/freetype.h>
/*************************************************************************
*
* @macro:
* FT_ERRORS_H
*
* @description:
* A macro used in #include statements to name the file containing the
* list of FreeType~2 error codes (and messages).
*
* It is included by @FT_FREETYPE_H.
*
*/
#define FT_ERRORS_H <freetype/fterrors.h>
/*************************************************************************
*
* @macro:
* FT_MODULE_ERRORS_H
*
* @description:
* A macro used in #include statements to name the file containing the
* list of FreeType~2 module error offsets (and messages).
*
*/
#define FT_MODULE_ERRORS_H <freetype/ftmoderr.h>
/*************************************************************************
*
* @macro:
* FT_SYSTEM_H
*
* @description:
* A macro used in #include statements to name the file containing the
* FreeType~2 interface to low-level operations (i.e., memory management
* and stream i/o).
*
* It is included by @FT_FREETYPE_H.
*
*/
#define FT_SYSTEM_H <freetype/ftsystem.h>
/*************************************************************************
*
* @macro:
* FT_IMAGE_H
*
* @description:
* A macro used in #include statements to name the file containing type
* definitions related to glyph images (i.e., bitmaps, outlines,
* scan-converter parameters).
*
* It is included by @FT_FREETYPE_H.
*
*/
#define FT_IMAGE_H <freetype/ftimage.h>
/*************************************************************************
*
* @macro:
* FT_TYPES_H
*
* @description:
* A macro used in #include statements to name the file containing the
* basic data types defined by FreeType~2.
*
* It is included by @FT_FREETYPE_H.
*
*/
#define FT_TYPES_H <freetype/fttypes.h>
/*************************************************************************
*
* @macro:
* FT_LIST_H
*
* @description:
* A macro used in #include statements to name the file containing the
* list management API of FreeType~2.
*
* (Most applications will never need to include this file.)
*
*/
#define FT_LIST_H <freetype/ftlist.h>
/*************************************************************************
*
* @macro:
* FT_OUTLINE_H
*
* @description:
* A macro used in #include statements to name the file containing the
* scalable outline management API of FreeType~2.
*
*/
#define FT_OUTLINE_H <freetype/ftoutln.h>
/*************************************************************************
*
* @macro:
* FT_SIZES_H
*
* @description:
* A macro used in #include statements to name the file containing the
* API which manages multiple @FT_Size objects per face.
*
*/
#define FT_SIZES_H <freetype/ftsizes.h>
/*************************************************************************
*
* @macro:
* FT_MODULE_H
*
* @description:
* A macro used in #include statements to name the file containing the
* module management API of FreeType~2.
*
*/
#define FT_MODULE_H <freetype/ftmodapi.h>
/*************************************************************************
*
* @macro:
* FT_RENDER_H
*
* @description:
* A macro used in #include statements to name the file containing the
* renderer module management API of FreeType~2.
*
*/
#define FT_RENDER_H <freetype/ftrender.h>
/*************************************************************************
*
* @macro:
* FT_AUTOHINTER_H
*
* @description:
* A macro used in #include statements to name the file containing
* structures and macros related to the auto-hinting module.
*
*/
#define FT_AUTOHINTER_H <freetype/ftautoh.h>
/*************************************************************************
*
* @macro:
* FT_CFF_DRIVER_H
*
* @description:
* A macro used in #include statements to name the file containing
* structures and macros related to the CFF driver module.
*
*/
#define FT_CFF_DRIVER_H <freetype/ftcffdrv.h>
/*************************************************************************
*
* @macro:
* FT_TRUETYPE_DRIVER_H
*
* @description:
* A macro used in #include statements to name the file containing
* structures and macros related to the TrueType driver module.
*
*/
#define FT_TRUETYPE_DRIVER_H <freetype/ftttdrv.h>
/*************************************************************************
*
* @macro:
* FT_TYPE1_TABLES_H
*
* @description:
* A macro used in #include statements to name the file containing the
* types and API specific to the Type~1 format.
*
*/
#define FT_TYPE1_TABLES_H <freetype/t1tables.h>
/*************************************************************************
*
* @macro:
* FT_TRUETYPE_IDS_H
*
* @description:
* A macro used in #include statements to name the file containing the
* enumeration values which identify name strings, languages, encodings,
* etc. This file really contains a _large_ set of constant macro
* definitions, taken from the TrueType and OpenType specifications.
*
*/
#define FT_TRUETYPE_IDS_H <freetype/ttnameid.h>
/*************************************************************************
*
* @macro:
* FT_TRUETYPE_TABLES_H
*
* @description:
* A macro used in #include statements to name the file containing the
* types and API specific to the TrueType (as well as OpenType) format.
*
*/
#define FT_TRUETYPE_TABLES_H <freetype/tttables.h>
/*************************************************************************
*
* @macro:
* FT_TRUETYPE_TAGS_H
*
* @description:
* A macro used in #include statements to name the file containing the
* definitions of TrueType four-byte `tags' which identify blocks in
* SFNT-based font formats (i.e., TrueType and OpenType).
*
*/
#define FT_TRUETYPE_TAGS_H <freetype/tttags.h>
/*************************************************************************
*
* @macro:
* FT_BDF_H
*
* @description:
* A macro used in #include statements to name the file containing the
* definitions of an API which accesses BDF-specific strings from a
* face.
*
*/
#define FT_BDF_H <freetype/ftbdf.h>
/*************************************************************************
*
* @macro:
* FT_CID_H
*
* @description:
* A macro used in #include statements to name the file containing the
* definitions of an API which access CID font information from a
* face.
*
*/
#define FT_CID_H <freetype/ftcid.h>
/*************************************************************************
*
* @macro:
* FT_GZIP_H
*
* @description:
* A macro used in #include statements to name the file containing the
* definitions of an API which supports gzip-compressed files.
*
*/
#define FT_GZIP_H <freetype/ftgzip.h>
/*************************************************************************
*
* @macro:
* FT_LZW_H
*
* @description:
* A macro used in #include statements to name the file containing the
* definitions of an API which supports LZW-compressed files.
*
*/
#define FT_LZW_H <freetype/ftlzw.h>
/*************************************************************************
*
* @macro:
* FT_BZIP2_H
*
* @description:
* A macro used in #include statements to name the file containing the
* definitions of an API which supports bzip2-compressed files.
*
*/
#define FT_BZIP2_H <freetype/ftbzip2.h>
/*************************************************************************
*
* @macro:
* FT_WINFONTS_H
*
* @description:
* A macro used in #include statements to name the file containing the
* definitions of an API which supports Windows FNT files.
*
*/
#define FT_WINFONTS_H <freetype/ftwinfnt.h>
/*************************************************************************
*
* @macro:
* FT_GLYPH_H
*
* @description:
* A macro used in #include statements to name the file containing the
* API of the optional glyph management component.
*
*/
#define FT_GLYPH_H <freetype/ftglyph.h>
/*************************************************************************
*
* @macro:
* FT_BITMAP_H
*
* @description:
* A macro used in #include statements to name the file containing the
* API of the optional bitmap conversion component.
*
*/
#define FT_BITMAP_H <freetype/ftbitmap.h>
/*************************************************************************
*
* @macro:
* FT_BBOX_H
*
* @description:
* A macro used in #include statements to name the file containing the
* API of the optional exact bounding box computation routines.
*
*/
#define FT_BBOX_H <freetype/ftbbox.h>
/*************************************************************************
*
* @macro:
* FT_CACHE_H
*
* @description:
* A macro used in #include statements to name the file containing the
* API of the optional FreeType~2 cache sub-system.
*
*/
#define FT_CACHE_H <freetype/ftcache.h>
/*************************************************************************
*
* @macro:
* FT_CACHE_IMAGE_H
*
* @description:
* A macro used in #include statements to name the file containing the
* `glyph image' API of the FreeType~2 cache sub-system.
*
* It is used to define a cache for @FT_Glyph elements. You can also
* use the API defined in @FT_CACHE_SMALL_BITMAPS_H if you only need to
* store small glyph bitmaps, as it will use less memory.
*
* This macro is deprecated. Simply include @FT_CACHE_H to have all
* glyph image-related cache declarations.
*
*/
#define FT_CACHE_IMAGE_H FT_CACHE_H
/*************************************************************************
*
* @macro:
* FT_CACHE_SMALL_BITMAPS_H
*
* @description:
* A macro used in #include statements to name the file containing the
* `small bitmaps' API of the FreeType~2 cache sub-system.
*
* It is used to define a cache for small glyph bitmaps in a relatively
* memory-efficient way. You can also use the API defined in
* @FT_CACHE_IMAGE_H if you want to cache arbitrary glyph images,
* including scalable outlines.
*
* This macro is deprecated. Simply include @FT_CACHE_H to have all
* small bitmaps-related cache declarations.
*
*/
#define FT_CACHE_SMALL_BITMAPS_H FT_CACHE_H
/*************************************************************************
*
* @macro:
* FT_CACHE_CHARMAP_H
*
* @description:
* A macro used in #include statements to name the file containing the
* `charmap' API of the FreeType~2 cache sub-system.
*
* This macro is deprecated. Simply include @FT_CACHE_H to have all
* charmap-based cache declarations.
*
*/
#define FT_CACHE_CHARMAP_H FT_CACHE_H
/*************************************************************************
*
* @macro:
* FT_MAC_H
*
* @description:
* A macro used in #include statements to name the file containing the
* Macintosh-specific FreeType~2 API. The latter is used to access
* fonts embedded in resource forks.
*
* This header file must be explicitly included by client applications
* compiled on the Mac (note that the base API still works though).
*
*/
#define FT_MAC_H <freetype/ftmac.h>
/*************************************************************************
*
* @macro:
* FT_MULTIPLE_MASTERS_H
*
* @description:
* A macro used in #include statements to name the file containing the
* optional multiple-masters management API of FreeType~2.
*
*/
#define FT_MULTIPLE_MASTERS_H <freetype/ftmm.h>
/*************************************************************************
*
* @macro:
* FT_SFNT_NAMES_H
*
* @description:
* A macro used in #include statements to name the file containing the
* optional FreeType~2 API which accesses embedded `name' strings in
* SFNT-based font formats (i.e., TrueType and OpenType).
*
*/
#define FT_SFNT_NAMES_H <freetype/ftsnames.h>
/*************************************************************************
*
* @macro:
* FT_OPENTYPE_VALIDATE_H
*
* @description:
* A macro used in #include statements to name the file containing the
* optional FreeType~2 API which validates OpenType tables (BASE, GDEF,
* GPOS, GSUB, JSTF).
*
*/
#define FT_OPENTYPE_VALIDATE_H <freetype/ftotval.h>
/*************************************************************************
*
* @macro:
* FT_GX_VALIDATE_H
*
* @description:
* A macro used in #include statements to name the file containing the
* optional FreeType~2 API which validates TrueTypeGX/AAT tables (feat,
* mort, morx, bsln, just, kern, opbd, trak, prop).
*
*/
#define FT_GX_VALIDATE_H <freetype/ftgxval.h>
/*************************************************************************
*
* @macro:
* FT_PFR_H
*
* @description:
* A macro used in #include statements to name the file containing the
* FreeType~2 API which accesses PFR-specific data.
*
*/
#define FT_PFR_H <freetype/ftpfr.h>
/*************************************************************************
*
* @macro:
* FT_STROKER_H
*
* @description:
* A macro used in #include statements to name the file containing the
* FreeType~2 API which provides functions to stroke outline paths.
*/
#define FT_STROKER_H <freetype/ftstroke.h>
/*************************************************************************
*
* @macro:
* FT_SYNTHESIS_H
*
* @description:
* A macro used in #include statements to name the file containing the
* FreeType~2 API which performs artificial obliquing and emboldening.
*/
#define FT_SYNTHESIS_H <freetype/ftsynth.h>
/*************************************************************************
*
* @macro:
* FT_FONT_FORMATS_H
*
* @description:
* A macro used in #include statements to name the file containing the
* FreeType~2 API which provides functions specific to font formats.
*/
#define FT_FONT_FORMATS_H <freetype/ftfntfmt.h>
/* deprecated */
#define FT_XFREE86_H FT_FONT_FORMATS_H
/*************************************************************************
*
* @macro:
* FT_TRIGONOMETRY_H
*
* @description:
* A macro used in #include statements to name the file containing the
* FreeType~2 API which performs trigonometric computations (e.g.,
* cosines and arc tangents).
*/
#define FT_TRIGONOMETRY_H <freetype/fttrigon.h>
/*************************************************************************
*
* @macro:
* FT_LCD_FILTER_H
*
* @description:
* A macro used in #include statements to name the file containing the
* FreeType~2 API which performs color filtering for subpixel rendering.
*/
#define FT_LCD_FILTER_H <freetype/ftlcdfil.h>
/*************************************************************************
*
* @macro:
* FT_UNPATENTED_HINTING_H
*
* @description:
* Deprecated.
*/
#define FT_UNPATENTED_HINTING_H <freetype/ttunpat.h>
/*************************************************************************
*
* @macro:
* FT_INCREMENTAL_H
*
* @description:
* A macro used in #include statements to name the file containing the
* FreeType~2 API which performs incremental glyph loading.
*/
#define FT_INCREMENTAL_H <freetype/ftincrem.h>
/*************************************************************************
*
* @macro:
* FT_GASP_H
*
* @description:
* A macro used in #include statements to name the file containing the
* FreeType~2 API which returns entries from the TrueType GASP table.
*/
#define FT_GASP_H <freetype/ftgasp.h>
/*************************************************************************
*
* @macro:
* FT_ADVANCES_H
*
* @description:
* A macro used in #include statements to name the file containing the
* FreeType~2 API which returns individual and ranged glyph advances.
*/
#define FT_ADVANCES_H <freetype/ftadvanc.h>
/* */
#define FT_ERROR_DEFINITIONS_H <freetype/fterrdef.h>
/* The internals of the cache sub-system are no longer exposed. We */
/* default to FT_CACHE_H at the moment just in case, but we know of */
/* no rogue client that uses them. */
/* */
#define FT_CACHE_MANAGER_H <freetype/ftcache.h>
#define FT_CACHE_INTERNAL_MRU_H <freetype/ftcache.h>
#define FT_CACHE_INTERNAL_MANAGER_H <freetype/ftcache.h>
#define FT_CACHE_INTERNAL_CACHE_H <freetype/ftcache.h>
#define FT_CACHE_INTERNAL_GLYPH_H <freetype/ftcache.h>
#define FT_CACHE_INTERNAL_IMAGE_H <freetype/ftcache.h>
#define FT_CACHE_INTERNAL_SBITS_H <freetype/ftcache.h>
#define FT_INCREMENTAL_H <freetype/ftincrem.h>
#define FT_TRUETYPE_UNPATENTED_H <freetype/ttunpat.h>
/*
* Include internal headers definitions from <internal/...>
* only when building the library.
*/
#ifdef FT2_BUILD_LIBRARY
#define FT_INTERNAL_INTERNAL_H <freetype/internal/internal.h>
#include FT_INTERNAL_INTERNAL_H
#endif /* FT2_BUILD_LIBRARY */
#endif /* FTHEADER_H_ */
/* END */

View File

@ -0,0 +1,20 @@
/* This is a generated file. */
FT_USE_MODULE( FT_Driver_ClassRec, tt_driver_class )
FT_USE_MODULE( FT_Driver_ClassRec, t1_driver_class )
FT_USE_MODULE( FT_Driver_ClassRec, cff_driver_class )
FT_USE_MODULE( FT_Driver_ClassRec, t1cid_driver_class )
FT_USE_MODULE( FT_Driver_ClassRec, pfr_driver_class )
FT_USE_MODULE( FT_Driver_ClassRec, t42_driver_class )
FT_USE_MODULE( FT_Driver_ClassRec, winfnt_driver_class )
FT_USE_MODULE( FT_Driver_ClassRec, pcf_driver_class )
FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class )
FT_USE_MODULE( FT_Module_Class, sfnt_module_class )
FT_USE_MODULE( FT_Module_Class, autofit_module_class )
FT_USE_MODULE( FT_Module_Class, pshinter_module_class )
FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_class )
FT_USE_MODULE( FT_Renderer_Class, ft_smooth_renderer_class )
FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcd_renderer_class )
FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcdv_renderer_class )
FT_USE_MODULE( FT_Module_Class, psaux_module_class )
FT_USE_MODULE( FT_Module_Class, psnames_module_class )
/* EOF */

View File

@ -0,0 +1,933 @@
/***************************************************************************/
/* */
/* ftoption.h */
/* */
/* User-selectable configuration macros (specification only). */
/* */
/* Copyright 1996-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTOPTION_H_
#define FTOPTION_H_
#include <ft2build.h>
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* USER-SELECTABLE CONFIGURATION MACROS */
/* */
/* This file contains the default configuration macro definitions for */
/* a standard build of the FreeType library. There are three ways to */
/* use this file to build project-specific versions of the library: */
/* */
/* - You can modify this file by hand, but this is not recommended in */
/* cases where you would like to build several versions of the */
/* library from a single source directory. */
/* */
/* - You can put a copy of this file in your build directory, more */
/* precisely in `$BUILD/freetype/config/ftoption.h', where `$BUILD' */
/* is the name of a directory that is included _before_ the FreeType */
/* include path during compilation. */
/* */
/* The default FreeType Makefiles and Jamfiles use the build */
/* directory `builds/<system>' by default, but you can easily change */
/* that for your own projects. */
/* */
/* - Copy the file <ft2build.h> to `$BUILD/ft2build.h' and modify it */
/* slightly to pre-define the macro FT_CONFIG_OPTIONS_H used to */
/* locate this file during the build. For example, */
/* */
/* #define FT_CONFIG_OPTIONS_H <myftoptions.h> */
/* #include <freetype/config/ftheader.h> */
/* */
/* will use `$BUILD/myftoptions.h' instead of this file for macro */
/* definitions. */
/* */
/* Note also that you can similarly pre-define the macro */
/* FT_CONFIG_MODULES_H used to locate the file listing of the modules */
/* that are statically linked to the library at compile time. By */
/* default, this file is <freetype/config/ftmodule.h>. */
/* */
/* We highly recommend using the third method whenever possible. */
/* */
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/**** ****/
/**** G E N E R A L F R E E T Y P E 2 C O N F I G U R A T I O N ****/
/**** ****/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/* */
/* If you enable this configuration option, FreeType recognizes an */
/* environment variable called `FREETYPE_PROPERTIES', which can be used */
/* to control the various font drivers and modules. The controllable */
/* properties are listed in the section `Controlling FreeType Modules' */
/* in the reference's table of contents; currently there are properties */
/* for the auto-hinter (file `ftautoh.h'), CFF (file `ftcffdrv.h'), and */
/* TrueType (file `ftttdrv.h'). */
/* */
/* `FREETYPE_PROPERTIES' has the following syntax form (broken here into */
/* multiple lines for better readability). */
/* */
/* <optional whitespace> */
/* <module-name1> ':' */
/* <property-name1> '=' <property-value1> */
/* <whitespace> */
/* <module-name2> ':' */
/* <property-name2> '=' <property-value2> */
/* ... */
/* */
/* Example: */
/* */
/* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ */
/* cff:no-stem-darkening=1 \ */
/* autofitter:warping=1 */
/* */
#define FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
/*************************************************************************/
/* */
/* Uncomment the line below if you want to activate sub-pixel rendering */
/* (a.k.a. LCD rendering, or ClearType) in this build of the library. */
/* */
/* Note that this feature is covered by several Microsoft patents */
/* and should not be activated in any default build of the library. */
/* */
/* This macro has no impact on the FreeType API, only on its */
/* _implementation_. For example, using FT_RENDER_MODE_LCD when calling */
/* FT_Render_Glyph still generates a bitmap that is 3 times wider than */
/* the original size in case this macro isn't defined; however, each */
/* triplet of subpixels has R=G=B. */
/* */
/* This is done to allow FreeType clients to run unmodified, forcing */
/* them to display normal gray-level anti-aliased glyphs. */
/* */
/* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
/*************************************************************************/
/* */
/* Many compilers provide a non-ANSI 64-bit data type that can be used */
/* by FreeType to speed up some computations. However, this will create */
/* some problems when compiling the library in strict ANSI mode. */
/* */
/* For this reason, the use of 64-bit integers is normally disabled when */
/* the __STDC__ macro is defined. You can however disable this by */
/* defining the macro FT_CONFIG_OPTION_FORCE_INT64 here. */
/* */
/* For most compilers, this will only create compilation warnings when */
/* building the library. */
/* */
/* ObNote: The compiler-specific 64-bit integers are detected in the */
/* file `ftconfig.h' either statically or through the */
/* `configure' script on supported platforms. */
/* */
#undef FT_CONFIG_OPTION_FORCE_INT64
/*************************************************************************/
/* */
/* If this macro is defined, do not try to use an assembler version of */
/* performance-critical functions (e.g. FT_MulFix). You should only do */
/* that to verify that the assembler function works properly, or to */
/* execute benchmark tests of the various implementations. */
/* #define FT_CONFIG_OPTION_NO_ASSEMBLER */
/*************************************************************************/
/* */
/* If this macro is defined, try to use an inlined assembler version of */
/* the `FT_MulFix' function, which is a `hotspot' when loading and */
/* hinting glyphs, and which should be executed as fast as possible. */
/* */
/* Note that if your compiler or CPU is not supported, this will default */
/* to the standard and portable implementation found in `ftcalc.c'. */
/* */
#define FT_CONFIG_OPTION_INLINE_MULFIX
/*************************************************************************/
/* */
/* LZW-compressed file support. */
/* */
/* FreeType now handles font files that have been compressed with the */
/* `compress' program. This is mostly used to parse many of the PCF */
/* files that come with various X11 distributions. The implementation */
/* uses NetBSD's `zopen' to partially uncompress the file on the fly */
/* (see src/lzw/ftgzip.c). */
/* */
/* Define this macro if you want to enable this `feature'. */
/* */
#define FT_CONFIG_OPTION_USE_LZW
/*************************************************************************/
/* */
/* Gzip-compressed file support. */
/* */
/* FreeType now handles font files that have been compressed with the */
/* `gzip' program. This is mostly used to parse many of the PCF files */
/* that come with XFree86. The implementation uses `zlib' to */
/* partially uncompress the file on the fly (see src/gzip/ftgzip.c). */
/* */
/* Define this macro if you want to enable this `feature'. See also */
/* the macro FT_CONFIG_OPTION_SYSTEM_ZLIB below. */
/* */
#define FT_CONFIG_OPTION_USE_ZLIB
/*************************************************************************/
/* */
/* ZLib library selection */
/* */
/* This macro is only used when FT_CONFIG_OPTION_USE_ZLIB is defined. */
/* It allows FreeType's `ftgzip' component to link to the system's */
/* installation of the ZLib library. This is useful on systems like */
/* Unix or VMS where it generally is already available. */
/* */
/* If you let it undefined, the component will use its own copy */
/* of the zlib sources instead. These have been modified to be */
/* included directly within the component and *not* export external */
/* function names. This allows you to link any program with FreeType */
/* _and_ ZLib without linking conflicts. */
/* */
/* Do not #undef this macro here since the build system might define */
/* it for certain configurations only. */
/* */
/* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */
/*************************************************************************/
/* */
/* Bzip2-compressed file support. */
/* */
/* FreeType now handles font files that have been compressed with the */
/* `bzip2' program. This is mostly used to parse many of the PCF */
/* files that come with XFree86. The implementation uses `libbz2' to */
/* partially uncompress the file on the fly (see src/bzip2/ftbzip2.c). */
/* Contrary to gzip, bzip2 currently is not included and need to use */
/* the system available bzip2 implementation. */
/* */
/* Define this macro if you want to enable this `feature'. */
/* */
/* #define FT_CONFIG_OPTION_USE_BZIP2 */
/*************************************************************************/
/* */
/* Define to disable the use of file stream functions and types, FILE, */
/* fopen() etc. Enables the use of smaller system libraries on embedded */
/* systems that have multiple system libraries, some with or without */
/* file stream support, in the cases where file stream support is not */
/* necessary such as memory loading of font files. */
/* */
/* #define FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */
/*************************************************************************/
/* */
/* PNG bitmap support. */
/* */
/* FreeType now handles loading color bitmap glyphs in the PNG format. */
/* This requires help from the external libpng library. Uncompressed */
/* color bitmaps do not need any external libraries and will be */
/* supported regardless of this configuration. */
/* */
/* Define this macro if you want to enable this `feature'. */
/* */
/* #define FT_CONFIG_OPTION_USE_PNG */
/*************************************************************************/
/* */
/* HarfBuzz support. */
/* */
/* FreeType uses the HarfBuzz library to improve auto-hinting of */
/* OpenType fonts. If available, many glyphs not directly addressable */
/* by a font's character map will be hinted also. */
/* */
/* Define this macro if you want to enable this `feature'. */
/* */
/* #define FT_CONFIG_OPTION_USE_HARFBUZZ */
/*************************************************************************/
/* */
/* DLL export compilation */
/* */
/* When compiling FreeType as a DLL, some systems/compilers need a */
/* special keyword in front OR after the return type of function */
/* declarations. */
/* */
/* Two macros are used within the FreeType source code to define */
/* exported library functions: FT_EXPORT and FT_EXPORT_DEF. */
/* */
/* FT_EXPORT( return_type ) */
/* */
/* is used in a function declaration, as in */
/* */
/* FT_EXPORT( FT_Error ) */
/* FT_Init_FreeType( FT_Library* alibrary ); */
/* */
/* */
/* FT_EXPORT_DEF( return_type ) */
/* */
/* is used in a function definition, as in */
/* */
/* FT_EXPORT_DEF( FT_Error ) */
/* FT_Init_FreeType( FT_Library* alibrary ) */
/* { */
/* ... some code ... */
/* return FT_Err_Ok; */
/* } */
/* */
/* You can provide your own implementation of FT_EXPORT and */
/* FT_EXPORT_DEF here if you want. If you leave them undefined, they */
/* will be later automatically defined as `extern return_type' to */
/* allow normal compilation. */
/* */
/* Do not #undef these macros here since the build system might define */
/* them for certain configurations only. */
/* */
/* #define FT_EXPORT(x) extern x */
/* #define FT_EXPORT_DEF(x) x */
/*************************************************************************/
/* */
/* Glyph Postscript Names handling */
/* */
/* By default, FreeType 2 is compiled with the `psnames' module. This */
/* module is in charge of converting a glyph name string into a */
/* Unicode value, or return a Macintosh standard glyph name for the */
/* use with the TrueType `post' table. */
/* */
/* Undefine this macro if you do not want `psnames' compiled in your */
/* build of FreeType. This has the following effects: */
/* */
/* - The TrueType driver will provide its own set of glyph names, */
/* if you build it to support postscript names in the TrueType */
/* `post' table. */
/* */
/* - The Type 1 driver will not be able to synthesize a Unicode */
/* charmap out of the glyphs found in the fonts. */
/* */
/* You would normally undefine this configuration macro when building */
/* a version of FreeType that doesn't contain a Type 1 or CFF driver. */
/* */
#define FT_CONFIG_OPTION_POSTSCRIPT_NAMES
/*************************************************************************/
/* */
/* Postscript Names to Unicode Values support */
/* */
/* By default, FreeType 2 is built with the `PSNames' module compiled */
/* in. Among other things, the module is used to convert a glyph name */
/* into a Unicode value. This is especially useful in order to */
/* synthesize on the fly a Unicode charmap from the CFF/Type 1 driver */
/* through a big table named the `Adobe Glyph List' (AGL). */
/* */
/* Undefine this macro if you do not want the Adobe Glyph List */
/* compiled in your `PSNames' module. The Type 1 driver will not be */
/* able to synthesize a Unicode charmap out of the glyphs found in the */
/* fonts. */
/* */
#define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
/*************************************************************************/
/* */
/* Support for Mac fonts */
/* */
/* Define this macro if you want support for outline fonts in Mac */
/* format (mac dfont, mac resource, macbinary containing a mac */
/* resource) on non-Mac platforms. */
/* */
/* Note that the `FOND' resource isn't checked. */
/* */
#define FT_CONFIG_OPTION_MAC_FONTS
/*************************************************************************/
/* */
/* Guessing methods to access embedded resource forks */
/* */
/* Enable extra Mac fonts support on non-Mac platforms (e.g. */
/* GNU/Linux). */
/* */
/* Resource forks which include fonts data are stored sometimes in */
/* locations which users or developers don't expected. In some cases, */
/* resource forks start with some offset from the head of a file. In */
/* other cases, the actual resource fork is stored in file different */
/* from what the user specifies. If this option is activated, */
/* FreeType tries to guess whether such offsets or different file */
/* names must be used. */
/* */
/* Note that normal, direct access of resource forks is controlled via */
/* the FT_CONFIG_OPTION_MAC_FONTS option. */
/* */
#ifdef FT_CONFIG_OPTION_MAC_FONTS
#define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
#endif
/*************************************************************************/
/* */
/* Allow the use of FT_Incremental_Interface to load typefaces that */
/* contain no glyph data, but supply it via a callback function. */
/* This is required by clients supporting document formats which */
/* supply font data incrementally as the document is parsed, such */
/* as the Ghostscript interpreter for the PostScript language. */
/* */
#define FT_CONFIG_OPTION_INCREMENTAL
/*************************************************************************/
/* */
/* The size in bytes of the render pool used by the scan-line converter */
/* to do all of its work. */
/* */
#define FT_RENDER_POOL_SIZE 16384L
/*************************************************************************/
/* */
/* FT_MAX_MODULES */
/* */
/* The maximum number of modules that can be registered in a single */
/* FreeType library object. 32 is the default. */
/* */
#define FT_MAX_MODULES 32
/*************************************************************************/
/* */
/* Debug level */
/* */
/* FreeType can be compiled in debug or trace mode. In debug mode, */
/* errors are reported through the `ftdebug' component. In trace */
/* mode, additional messages are sent to the standard output during */
/* execution. */
/* */
/* Define FT_DEBUG_LEVEL_ERROR to build the library in debug mode. */
/* Define FT_DEBUG_LEVEL_TRACE to build it in trace mode. */
/* */
/* Don't define any of these macros to compile in `release' mode! */
/* */
/* Do not #undef these macros here since the build system might define */
/* them for certain configurations only. */
/* */
/* #define FT_DEBUG_LEVEL_ERROR */
/* #define FT_DEBUG_LEVEL_TRACE */
/*************************************************************************/
/* */
/* Autofitter debugging */
/* */
/* If FT_DEBUG_AUTOFIT is defined, FreeType provides some means to */
/* control the autofitter behaviour for debugging purposes with global */
/* boolean variables (consequently, you should *never* enable this */
/* while compiling in `release' mode): */
/* */
/* _af_debug_disable_horz_hints */
/* _af_debug_disable_vert_hints */
/* _af_debug_disable_blue_hints */
/* */
/* Additionally, the following functions provide dumps of various */
/* internal autofit structures to stdout (using `printf'): */
/* */
/* af_glyph_hints_dump_points */
/* af_glyph_hints_dump_segments */
/* af_glyph_hints_dump_edges */
/* af_glyph_hints_get_num_segments */
/* af_glyph_hints_get_segment_offset */
/* */
/* As an argument, they use another global variable: */
/* */
/* _af_debug_hints */
/* */
/* Please have a look at the `ftgrid' demo program to see how those */
/* variables and macros should be used. */
/* */
/* Do not #undef these macros here since the build system might define */
/* them for certain configurations only. */
/* */
/* #define FT_DEBUG_AUTOFIT */
/*************************************************************************/
/* */
/* Memory Debugging */
/* */
/* FreeType now comes with an integrated memory debugger that is */
/* capable of detecting simple errors like memory leaks or double */
/* deletes. To compile it within your build of the library, you */
/* should define FT_DEBUG_MEMORY here. */
/* */
/* Note that the memory debugger is only activated at runtime when */
/* when the _environment_ variable `FT2_DEBUG_MEMORY' is defined also! */
/* */
/* Do not #undef this macro here since the build system might define */
/* it for certain configurations only. */
/* */
/* #define FT_DEBUG_MEMORY */
/*************************************************************************/
/* */
/* Module errors */
/* */
/* If this macro is set (which is _not_ the default), the higher byte */
/* of an error code gives the module in which the error has occurred, */
/* while the lower byte is the real error code. */
/* */
/* Setting this macro makes sense for debugging purposes only, since */
/* it would break source compatibility of certain programs that use */
/* FreeType 2. */
/* */
/* More details can be found in the files ftmoderr.h and fterrors.h. */
/* */
#undef FT_CONFIG_OPTION_USE_MODULE_ERRORS
/*************************************************************************/
/* */
/* Position Independent Code */
/* */
/* If this macro is set (which is _not_ the default), FreeType2 will */
/* avoid creating constants that require address fixups. Instead the */
/* constants will be moved into a struct and additional intialization */
/* code will be used. */
/* */
/* Setting this macro is needed for systems that prohibit address */
/* fixups, such as BREW. [Note that standard compilers like gcc or */
/* clang handle PIC generation automatically; you don't have to set */
/* FT_CONFIG_OPTION_PIC, which is only necessary for very special */
/* compilers.] */
/* */
/* Note that FT_CONFIG_OPTION_PIC support is not available for all */
/* modules (see `modules.cfg' for a complete list). For building with */
/* FT_CONFIG_OPTION_PIC support, do the following. */
/* */
/* 0. Clone the repository. */
/* 1. Define FT_CONFIG_OPTION_PIC. */
/* 2. Remove all subdirectories in `src' that don't have */
/* FT_CONFIG_OPTION_PIC support. */
/* 3. Comment out the corresponding modules in `modules.cfg'. */
/* 4. Compile. */
/* */
/* #define FT_CONFIG_OPTION_PIC */
/*************************************************************************/
/*************************************************************************/
/**** ****/
/**** S F N T D R I V E R C O N F I G U R A T I O N ****/
/**** ****/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/* */
/* Define TT_CONFIG_OPTION_EMBEDDED_BITMAPS if you want to support */
/* embedded bitmaps in all formats using the SFNT module (namely */
/* TrueType & OpenType). */
/* */
#define TT_CONFIG_OPTION_EMBEDDED_BITMAPS
/*************************************************************************/
/* */
/* Define TT_CONFIG_OPTION_POSTSCRIPT_NAMES if you want to be able to */
/* load and enumerate the glyph Postscript names in a TrueType or */
/* OpenType file. */
/* */
/* Note that when you do not compile the `PSNames' module by undefining */
/* the above FT_CONFIG_OPTION_POSTSCRIPT_NAMES, the `sfnt' module will */
/* contain additional code used to read the PS Names table from a font. */
/* */
/* (By default, the module uses `PSNames' to extract glyph names.) */
/* */
#define TT_CONFIG_OPTION_POSTSCRIPT_NAMES
/*************************************************************************/
/* */
/* Define TT_CONFIG_OPTION_SFNT_NAMES if your applications need to */
/* access the internal name table in a SFNT-based format like TrueType */
/* or OpenType. The name table contains various strings used to */
/* describe the font, like family name, copyright, version, etc. It */
/* does not contain any glyph name though. */
/* */
/* Accessing SFNT names is done through the functions declared in */
/* `ftsnames.h'. */
/* */
#define TT_CONFIG_OPTION_SFNT_NAMES
/*************************************************************************/
/* */
/* TrueType CMap support */
/* */
/* Here you can fine-tune which TrueType CMap table format shall be */
/* supported. */
#define TT_CONFIG_CMAP_FORMAT_0
#define TT_CONFIG_CMAP_FORMAT_2
#define TT_CONFIG_CMAP_FORMAT_4
#define TT_CONFIG_CMAP_FORMAT_6
#define TT_CONFIG_CMAP_FORMAT_8
#define TT_CONFIG_CMAP_FORMAT_10
#define TT_CONFIG_CMAP_FORMAT_12
#define TT_CONFIG_CMAP_FORMAT_13
#define TT_CONFIG_CMAP_FORMAT_14
/*************************************************************************/
/*************************************************************************/
/**** ****/
/**** T R U E T Y P E D R I V E R C O N F I G U R A T I O N ****/
/**** ****/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/* */
/* Define TT_CONFIG_OPTION_BYTECODE_INTERPRETER if you want to compile */
/* a bytecode interpreter in the TrueType driver. */
/* */
/* By undefining this, you will only compile the code necessary to load */
/* TrueType glyphs without hinting. */
/* */
/* Do not #undef this macro here, since the build system might */
/* define it for certain configurations only. */
/* */
#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
/*************************************************************************/
/* */
/* Define TT_CONFIG_OPTION_SUBPIXEL_HINTING if you want to compile */
/* subpixel hinting support into the TrueType driver. This modifies the */
/* TrueType hinting mechanism when anything but FT_RENDER_MODE_MONO is */
/* requested. */
/* */
/* In particular, it modifies the bytecode interpreter to interpret (or */
/* not) instructions in a certain way so that all TrueType fonts look */
/* like they do in a Windows ClearType (DirectWrite) environment. See */
/* [1] for a technical overview on what this means. See `ttinterp.h' */
/* for more details on the LEAN option. */
/* */
/* There are three options. */
/* */
/* 1. This option is associated with the `Infinality' moniker. */
/* Contributed by an individual nicknamed Infinality with the goal of */
/* making TrueType fonts render better than on Windows. A high */
/* amount of configurability and flexibility, down to rules for */
/* single glyphs in fonts, but also very slow. Its experimental and */
/* slow nature and the original developer losing interest meant that */
/* this option was never enabled in default builds. */
/* */
/* 2. The new default mode for the TrueType driver. The Infinality code */
/* base was stripped to the bare minimum and all configurability */
/* removed in the name of speed and simplicity. The configurability */
/* was mainly aimed at legacy fonts like Arial, Times New Roman, or */
/* Courier. Legacy fonts are fonts that modify vertical stems to */
/* achieve clean black-and-white bitmaps. The new mode focuses on */
/* applying a minimal set of rules to all fonts indiscriminately so */
/* that modern and web fonts render well while legacy fonts render */
/* okay. */
/* */
/* 3. Compile both. */
/* */
/* By undefining these, you get rendering behavior like on Windows */
/* without ClearType, i.e., Windows XP without ClearType enabled and */
/* Win9x (interpreter version v35). Or not, depending on how much */
/* hinting blood and testing tears the font designer put into a given */
/* font. If you define one or both subpixel hinting options, you can */
/* switch between between v35 and the ones you define. */
/* */
/* This option requires TT_CONFIG_OPTION_BYTECODE_INTERPRETER to be */
/* defined. */
/* */
/* [1] http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx */
/* */
/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 1 */
#define TT_CONFIG_OPTION_SUBPIXEL_HINTING 2
/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING ( 1 | 2 ) */
/*************************************************************************/
/* */
/* Define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED to compile the */
/* TrueType glyph loader to use Apple's definition of how to handle */
/* component offsets in composite glyphs. */
/* */
/* Apple and MS disagree on the default behavior of component offsets */
/* in composites. Apple says that they should be scaled by the scaling */
/* factors in the transformation matrix (roughly, it's more complex) */
/* while MS says they should not. OpenType defines two bits in the */
/* composite flags array which can be used to disambiguate, but old */
/* fonts will not have them. */
/* */
/* http://www.microsoft.com/typography/otspec/glyf.htm */
/* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html */
/* */
#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
/*************************************************************************/
/* */
/* Define TT_CONFIG_OPTION_GX_VAR_SUPPORT if you want to include */
/* support for Apple's distortable font technology (fvar, gvar, cvar, */
/* and avar tables). This has many similarities to Type 1 Multiple */
/* Masters support. */
/* */
#define TT_CONFIG_OPTION_GX_VAR_SUPPORT
/*************************************************************************/
/* */
/* Define TT_CONFIG_OPTION_BDF if you want to include support for */
/* an embedded `BDF ' table within SFNT-based bitmap formats. */
/* */
#define TT_CONFIG_OPTION_BDF
/*************************************************************************/
/* */
/* Option TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES controls the maximum */
/* number of bytecode instructions executed for a single run of the */
/* bytecode interpreter, needed to prevent infinite loops. You don't */
/* want to change this except for very special situations (e.g., making */
/* a library fuzzer spend less time to handle broken fonts). */
/* */
/* It is not expected that this value is ever modified by a configuring */
/* script; instead, it gets surrounded with #ifndef ... #endif so that */
/* the value can be set as a preprocessor option on the compiler's */
/* command line. */
/* */
#ifndef TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES
#define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES 1000000L
#endif
/*************************************************************************/
/*************************************************************************/
/**** ****/
/**** T Y P E 1 D R I V E R C O N F I G U R A T I O N ****/
/**** ****/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/* */
/* T1_MAX_DICT_DEPTH is the maximum depth of nest dictionaries and */
/* arrays in the Type 1 stream (see t1load.c). A minimum of 4 is */
/* required. */
/* */
#define T1_MAX_DICT_DEPTH 5
/*************************************************************************/
/* */
/* T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine */
/* calls during glyph loading. */
/* */
#define T1_MAX_SUBRS_CALLS 16
/*************************************************************************/
/* */
/* T1_MAX_CHARSTRING_OPERANDS is the charstring stack's capacity. A */
/* minimum of 16 is required. */
/* */
/* The Chinese font MingTiEG-Medium (CNS 11643 character set) needs 256. */
/* */
#define T1_MAX_CHARSTRINGS_OPERANDS 256
/*************************************************************************/
/* */
/* Define this configuration macro if you want to prevent the */
/* compilation of `t1afm', which is in charge of reading Type 1 AFM */
/* files into an existing face. Note that if set, the T1 driver will be */
/* unable to produce kerning distances. */
/* */
#undef T1_CONFIG_OPTION_NO_AFM
/*************************************************************************/
/* */
/* Define this configuration macro if you want to prevent the */
/* compilation of the Multiple Masters font support in the Type 1 */
/* driver. */
/* */
#undef T1_CONFIG_OPTION_NO_MM_SUPPORT
/*************************************************************************/
/*************************************************************************/
/**** ****/
/**** C F F D R I V E R C O N F I G U R A T I O N ****/
/**** ****/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/* */
/* Using CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4} it is */
/* possible to set up the default values of the four control points that */
/* define the stem darkening behaviour of the (new) CFF engine. For */
/* more details please read the documentation of the */
/* `darkening-parameters' property of the cff driver module (file */
/* `ftcffdrv.h'), which allows the control at run-time. */
/* */
/* Do *not* undefine these macros! */
/* */
#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 500
#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 400
#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 1000
#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 275
#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 1667
#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 275
#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 2333
#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 0
/*************************************************************************/
/* */
/* CFF_CONFIG_OPTION_OLD_ENGINE controls whether the pre-Adobe CFF */
/* engine gets compiled into FreeType. If defined, it is possible to */
/* switch between the two engines using the `hinting-engine' property of */
/* the cff driver module. */
/* */
/* #define CFF_CONFIG_OPTION_OLD_ENGINE */
/*************************************************************************/
/*************************************************************************/
/**** ****/
/**** A U T O F I T M O D U L E C O N F I G U R A T I O N ****/
/**** ****/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/* */
/* Compile autofit module with CJK (Chinese, Japanese, Korean) script */
/* support. */
/* */
#define AF_CONFIG_OPTION_CJK
/*************************************************************************/
/* */
/* Compile autofit module with Indic script support. */
/* */
#define AF_CONFIG_OPTION_INDIC
/*************************************************************************/
/* */
/* Compile autofit module with warp hinting. The idea of the warping */
/* code is to slightly scale and shift a glyph within a single dimension */
/* so that as much of its segments are aligned (more or less) on the */
/* grid. To find out the optimal scaling and shifting value, various */
/* parameter combinations are tried and scored. */
/* */
/* This experimental option is active only if the rendering mode is */
/* FT_RENDER_MODE_LIGHT; you can switch warping on and off with the */
/* `warping' property of the auto-hinter (see file `ftautoh.h' for more */
/* information; by default it is switched off). */
/* */
#define AF_CONFIG_OPTION_USE_WARPER
/* */
/*
* This macro is obsolete. Support has been removed in FreeType
* version 2.5.
*/
/* #define FT_CONFIG_OPTION_OLD_INTERNALS */
/*
* This macro is defined if native TrueType hinting is requested by the
* definitions above.
*/
#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
#define TT_USE_BYTECODE_INTERPRETER
#if TT_CONFIG_OPTION_SUBPIXEL_HINTING & 1
#define TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
#endif
#if TT_CONFIG_OPTION_SUBPIXEL_HINTING & 2
#define TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
#endif
#endif
/*
* Check CFF darkening parameters. The checks are the same as in function
* `cff_property_set' in file `cffdrivr.c'.
*/
#if CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 < 0 || \
CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 < 0 || \
CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 < 0 || \
CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 < 0 || \
\
CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 < 0 || \
CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 < 0 || \
CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 < 0 || \
CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 < 0 || \
\
CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 > \
CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 || \
CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 > \
CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 || \
CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 > \
CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 || \
\
CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 > 500 || \
CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 > 500 || \
CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 > 500 || \
CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 > 500
#error "Invalid CFF darkening parameters!"
#endif
FT_END_HEADER
#endif /* FTOPTION_H_ */
/* END */

View File

@ -0,0 +1,175 @@
/***************************************************************************/
/* */
/* ftstdlib.h */
/* */
/* ANSI-specific library and header configuration file (specification */
/* only). */
/* */
/* Copyright 2002-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
/*************************************************************************/
/* */
/* This file is used to group all #includes to the ANSI C library that */
/* FreeType normally requires. It also defines macros to rename the */
/* standard functions within the FreeType source code. */
/* */
/* Load a file which defines FTSTDLIB_H_ before this one to override it. */
/* */
/*************************************************************************/
#ifndef FTSTDLIB_H_
#define FTSTDLIB_H_
#include <stddef.h>
#define ft_ptrdiff_t ptrdiff_t
/**********************************************************************/
/* */
/* integer limits */
/* */
/* UINT_MAX and ULONG_MAX are used to automatically compute the size */
/* of `int' and `long' in bytes at compile-time. So far, this works */
/* for all platforms the library has been tested on. */
/* */
/* Note that on the extremely rare platforms that do not provide */
/* integer types that are _exactly_ 16 and 32 bits wide (e.g. some */
/* old Crays where `int' is 36 bits), we do not make any guarantee */
/* about the correct behaviour of FT2 with all fonts. */
/* */
/* In these case, `ftconfig.h' will refuse to compile anyway with a */
/* message like `couldn't find 32-bit type' or something similar. */
/* */
/**********************************************************************/
#include <limits.h>
#define FT_CHAR_BIT CHAR_BIT
#define FT_USHORT_MAX USHRT_MAX
#define FT_INT_MAX INT_MAX
#define FT_INT_MIN INT_MIN
#define FT_UINT_MAX UINT_MAX
#define FT_LONG_MIN LONG_MIN
#define FT_LONG_MAX LONG_MAX
#define FT_ULONG_MAX ULONG_MAX
/**********************************************************************/
/* */
/* character and string processing */
/* */
/**********************************************************************/
#include <string.h>
#define ft_memchr memchr
#define ft_memcmp memcmp
#define ft_memcpy memcpy
#define ft_memmove memmove
#define ft_memset memset
#define ft_strcat strcat
#define ft_strcmp strcmp
#define ft_strcpy strcpy
#define ft_strlen strlen
#define ft_strncmp strncmp
#define ft_strncpy strncpy
#define ft_strrchr strrchr
#define ft_strstr strstr
/**********************************************************************/
/* */
/* file handling */
/* */
/**********************************************************************/
#include <stdio.h>
#define FT_FILE FILE
#define ft_fclose fclose
#define ft_fopen fopen
#define ft_fread fread
#define ft_fseek fseek
#define ft_ftell ftell
#define ft_sprintf sprintf
/**********************************************************************/
/* */
/* sorting */
/* */
/**********************************************************************/
#include <stdlib.h>
#define ft_qsort qsort
/**********************************************************************/
/* */
/* memory allocation */
/* */
/**********************************************************************/
#define ft_scalloc calloc
#define ft_sfree free
#define ft_smalloc malloc
#define ft_srealloc realloc
/**********************************************************************/
/* */
/* miscellaneous */
/* */
/**********************************************************************/
#define ft_strtol strtol
#define ft_getenv getenv
/**********************************************************************/
/* */
/* execution control */
/* */
/**********************************************************************/
#include <setjmp.h>
#define ft_jmp_buf jmp_buf /* note: this cannot be a typedef since */
/* jmp_buf is defined as a macro */
/* on certain platforms */
#define ft_longjmp longjmp
#define ft_setjmp( b ) setjmp( *(ft_jmp_buf*) &(b) ) /* same thing here */
/* the following is only used for debugging purposes, i.e., if */
/* FT_DEBUG_LEVEL_ERROR or FT_DEBUG_LEVEL_TRACE are defined */
#include <stdarg.h>
#endif /* FTSTDLIB_H_ */
/* END */

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,187 @@
/***************************************************************************/
/* */
/* ftadvanc.h */
/* */
/* Quick computation of advance widths (specification only). */
/* */
/* Copyright 2008-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTADVANC_H_
#define FTADVANC_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/**************************************************************************
*
* @section:
* quick_advance
*
* @title:
* Quick retrieval of advance values
*
* @abstract:
* Retrieve horizontal and vertical advance values without processing
* glyph outlines, if possible.
*
* @description:
* This section contains functions to quickly extract advance values
* without handling glyph outlines, if possible.
*
* @order:
* FT_Get_Advance
* FT_Get_Advances
*
*/
/*************************************************************************/
/* */
/* <Const> */
/* FT_ADVANCE_FLAG_FAST_ONLY */
/* */
/* <Description> */
/* A bit-flag to be OR-ed with the `flags' parameter of the */
/* @FT_Get_Advance and @FT_Get_Advances functions. */
/* */
/* If set, it indicates that you want these functions to fail if the */
/* corresponding hinting mode or font driver doesn't allow for very */
/* quick advance computation. */
/* */
/* Typically, glyphs that are either unscaled, unhinted, bitmapped, */
/* or light-hinted can have their advance width computed very */
/* quickly. */
/* */
/* Normal and bytecode hinted modes that require loading, scaling, */
/* and hinting of the glyph outline, are extremely slow by */
/* comparison. */
/* */
#define FT_ADVANCE_FLAG_FAST_ONLY 0x20000000L
/*************************************************************************/
/* */
/* <Function> */
/* FT_Get_Advance */
/* */
/* <Description> */
/* Retrieve the advance value of a given glyph outline in an */
/* @FT_Face. */
/* */
/* <Input> */
/* face :: The source @FT_Face handle. */
/* */
/* gindex :: The glyph index. */
/* */
/* load_flags :: A set of bit flags similar to those used when */
/* calling @FT_Load_Glyph, used to determine what kind */
/* of advances you need. */
/* <Output> */
/* padvance :: The advance value. If scaling is performed (based on */
/* the value of `load_flags'), the advance value is in */
/* 16.16 format. Otherwise, it is in font units. */
/* */
/* If @FT_LOAD_VERTICAL_LAYOUT is set, this is the */
/* vertical advance corresponding to a vertical layout. */
/* Otherwise, it is the horizontal advance in a */
/* horizontal layout. */
/* */
/* <Return> */
/* FreeType error code. 0 means success. */
/* */
/* <Note> */
/* This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and */
/* if the corresponding font backend doesn't have a quick way to */
/* retrieve the advances. */
/* */
/* A scaled advance is returned in 16.16 format but isn't transformed */
/* by the affine transformation specified by @FT_Set_Transform. */
/* */
FT_EXPORT( FT_Error )
FT_Get_Advance( FT_Face face,
FT_UInt gindex,
FT_Int32 load_flags,
FT_Fixed *padvance );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Get_Advances */
/* */
/* <Description> */
/* Retrieve the advance values of several glyph outlines in an */
/* @FT_Face. */
/* */
/* <Input> */
/* face :: The source @FT_Face handle. */
/* */
/* start :: The first glyph index. */
/* */
/* count :: The number of advance values you want to retrieve. */
/* */
/* load_flags :: A set of bit flags similar to those used when */
/* calling @FT_Load_Glyph. */
/* */
/* <Output> */
/* padvance :: The advance values. This array, to be provided by the */
/* caller, must contain at least `count' elements. */
/* */
/* If scaling is performed (based on the value of */
/* `load_flags'), the advance values are in 16.16 format. */
/* Otherwise, they are in font units. */
/* */
/* If @FT_LOAD_VERTICAL_LAYOUT is set, these are the */
/* vertical advances corresponding to a vertical layout. */
/* Otherwise, they are the horizontal advances in a */
/* horizontal layout. */
/* */
/* <Return> */
/* FreeType error code. 0 means success. */
/* */
/* <Note> */
/* This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and */
/* if the corresponding font backend doesn't have a quick way to */
/* retrieve the advances. */
/* */
/* Scaled advances are returned in 16.16 format but aren't */
/* transformed by the affine transformation specified by */
/* @FT_Set_Transform. */
/* */
FT_EXPORT( FT_Error )
FT_Get_Advances( FT_Face face,
FT_UInt start,
FT_UInt count,
FT_Int32 load_flags,
FT_Fixed *padvances );
/* */
FT_END_HEADER
#endif /* FTADVANC_H_ */
/* END */

View File

@ -0,0 +1,511 @@
/***************************************************************************/
/* */
/* ftautoh.h */
/* */
/* FreeType API for controlling the auto-hinter (specification only). */
/* */
/* Copyright 2012-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTAUTOH_H_
#define FTAUTOH_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/**************************************************************************
*
* @section:
* auto_hinter
*
* @title:
* The auto-hinter
*
* @abstract:
* Controlling the auto-hinting module.
*
* @description:
* While FreeType's auto-hinter doesn't expose API functions by itself,
* it is possible to control its behaviour with @FT_Property_Set and
* @FT_Property_Get. The following lists the available properties
* together with the necessary macros and structures.
*
* Note that the auto-hinter's module name is `autofitter' for
* historical reasons.
*
*/
/**************************************************************************
*
* @property:
* glyph-to-script-map
*
* @description:
* *Experimental* *only*
*
* The auto-hinter provides various script modules to hint glyphs.
* Examples of supported scripts are Latin or CJK. Before a glyph is
* auto-hinted, the Unicode character map of the font gets examined, and
* the script is then determined based on Unicode character ranges, see
* below.
*
* OpenType fonts, however, often provide much more glyphs than
* character codes (small caps, superscripts, ligatures, swashes, etc.),
* to be controlled by so-called `features'. Handling OpenType features
* can be quite complicated and thus needs a separate library on top of
* FreeType.
*
* The mapping between glyph indices and scripts (in the auto-hinter
* sense, see the @FT_AUTOHINTER_SCRIPT_XXX values) is stored as an
* array with `num_glyphs' elements, as found in the font's @FT_Face
* structure. The `glyph-to-script-map' property returns a pointer to
* this array, which can be modified as needed. Note that the
* modification should happen before the first glyph gets processed by
* the auto-hinter so that the global analysis of the font shapes
* actually uses the modified mapping.
*
* The following example code demonstrates how to access it (omitting
* the error handling).
*
* {
* FT_Library library;
* FT_Face face;
* FT_Prop_GlyphToScriptMap prop;
*
*
* FT_Init_FreeType( &library );
* FT_New_Face( library, "foo.ttf", 0, &face );
*
* prop.face = face;
*
* FT_Property_Get( library, "autofitter",
* "glyph-to-script-map", &prop );
*
* // adjust `prop.map' as needed right here
*
* FT_Load_Glyph( face, ..., FT_LOAD_FORCE_AUTOHINT );
* }
*
*/
/**************************************************************************
*
* @enum:
* FT_AUTOHINTER_SCRIPT_XXX
*
* @description:
* *Experimental* *only*
*
* A list of constants used for the @glyph-to-script-map property to
* specify the script submodule the auto-hinter should use for hinting a
* particular glyph.
*
* @values:
* FT_AUTOHINTER_SCRIPT_NONE ::
* Don't auto-hint this glyph.
*
* FT_AUTOHINTER_SCRIPT_LATIN ::
* Apply the latin auto-hinter. For the auto-hinter, `latin' is a
* very broad term, including Cyrillic and Greek also since characters
* from those scripts share the same design constraints.
*
* By default, characters from the following Unicode ranges are
* assigned to this submodule.
*
* {
* U+0020 - U+007F // Basic Latin (no control characters)
* U+00A0 - U+00FF // Latin-1 Supplement (no control characters)
* U+0100 - U+017F // Latin Extended-A
* U+0180 - U+024F // Latin Extended-B
* U+0250 - U+02AF // IPA Extensions
* U+02B0 - U+02FF // Spacing Modifier Letters
* U+0300 - U+036F // Combining Diacritical Marks
* U+0370 - U+03FF // Greek and Coptic
* U+0400 - U+04FF // Cyrillic
* U+0500 - U+052F // Cyrillic Supplement
* U+1D00 - U+1D7F // Phonetic Extensions
* U+1D80 - U+1DBF // Phonetic Extensions Supplement
* U+1DC0 - U+1DFF // Combining Diacritical Marks Supplement
* U+1E00 - U+1EFF // Latin Extended Additional
* U+1F00 - U+1FFF // Greek Extended
* U+2000 - U+206F // General Punctuation
* U+2070 - U+209F // Superscripts and Subscripts
* U+20A0 - U+20CF // Currency Symbols
* U+2150 - U+218F // Number Forms
* U+2460 - U+24FF // Enclosed Alphanumerics
* U+2C60 - U+2C7F // Latin Extended-C
* U+2DE0 - U+2DFF // Cyrillic Extended-A
* U+2E00 - U+2E7F // Supplemental Punctuation
* U+A640 - U+A69F // Cyrillic Extended-B
* U+A720 - U+A7FF // Latin Extended-D
* U+FB00 - U+FB06 // Alphab. Present. Forms (Latin Ligatures)
* U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols
* U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement
* }
*
* FT_AUTOHINTER_SCRIPT_CJK ::
* Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old
* Vietnamese, and some other scripts.
*
* By default, characters from the following Unicode ranges are
* assigned to this submodule.
*
* {
* U+1100 - U+11FF // Hangul Jamo
* U+2E80 - U+2EFF // CJK Radicals Supplement
* U+2F00 - U+2FDF // Kangxi Radicals
* U+2FF0 - U+2FFF // Ideographic Description Characters
* U+3000 - U+303F // CJK Symbols and Punctuation
* U+3040 - U+309F // Hiragana
* U+30A0 - U+30FF // Katakana
* U+3100 - U+312F // Bopomofo
* U+3130 - U+318F // Hangul Compatibility Jamo
* U+3190 - U+319F // Kanbun
* U+31A0 - U+31BF // Bopomofo Extended
* U+31C0 - U+31EF // CJK Strokes
* U+31F0 - U+31FF // Katakana Phonetic Extensions
* U+3200 - U+32FF // Enclosed CJK Letters and Months
* U+3300 - U+33FF // CJK Compatibility
* U+3400 - U+4DBF // CJK Unified Ideographs Extension A
* U+4DC0 - U+4DFF // Yijing Hexagram Symbols
* U+4E00 - U+9FFF // CJK Unified Ideographs
* U+A960 - U+A97F // Hangul Jamo Extended-A
* U+AC00 - U+D7AF // Hangul Syllables
* U+D7B0 - U+D7FF // Hangul Jamo Extended-B
* U+F900 - U+FAFF // CJK Compatibility Ideographs
* U+FE10 - U+FE1F // Vertical forms
* U+FE30 - U+FE4F // CJK Compatibility Forms
* U+FF00 - U+FFEF // Halfwidth and Fullwidth Forms
* U+1B000 - U+1B0FF // Kana Supplement
* U+1D300 - U+1D35F // Tai Xuan Hing Symbols
* U+1F200 - U+1F2FF // Enclosed Ideographic Supplement
* U+20000 - U+2A6DF // CJK Unified Ideographs Extension B
* U+2A700 - U+2B73F // CJK Unified Ideographs Extension C
* U+2B740 - U+2B81F // CJK Unified Ideographs Extension D
* U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement
* }
*
* FT_AUTOHINTER_SCRIPT_INDIC ::
* Apply the indic auto-hinter, covering all major scripts from the
* Indian sub-continent and some other related scripts like Thai, Lao,
* or Tibetan.
*
* By default, characters from the following Unicode ranges are
* assigned to this submodule.
*
* {
* U+0900 - U+0DFF // Indic Range
* U+0F00 - U+0FFF // Tibetan
* U+1900 - U+194F // Limbu
* U+1B80 - U+1BBF // Sundanese
* U+A800 - U+A82F // Syloti Nagri
* U+ABC0 - U+ABFF // Meetei Mayek
* U+11800 - U+118DF // Sharada
* }
*
* Note that currently Indic support is rudimentary only, missing blue
* zone support.
*
*/
#define FT_AUTOHINTER_SCRIPT_NONE 0
#define FT_AUTOHINTER_SCRIPT_LATIN 1
#define FT_AUTOHINTER_SCRIPT_CJK 2
#define FT_AUTOHINTER_SCRIPT_INDIC 3
/**************************************************************************
*
* @struct:
* FT_Prop_GlyphToScriptMap
*
* @description:
* *Experimental* *only*
*
* The data exchange structure for the @glyph-to-script-map property.
*
*/
typedef struct FT_Prop_GlyphToScriptMap_
{
FT_Face face;
FT_UShort* map;
} FT_Prop_GlyphToScriptMap;
/**************************************************************************
*
* @property:
* fallback-script
*
* @description:
* *Experimental* *only*
*
* If no auto-hinter script module can be assigned to a glyph, a
* fallback script gets assigned to it (see also the
* @glyph-to-script-map property). By default, this is
* @FT_AUTOHINTER_SCRIPT_CJK. Using the `fallback-script' property,
* this fallback value can be changed.
*
* {
* FT_Library library;
* FT_UInt fallback_script = FT_AUTOHINTER_SCRIPT_NONE;
*
*
* FT_Init_FreeType( &library );
*
* FT_Property_Set( library, "autofitter",
* "fallback-script", &fallback_script );
* }
*
* @note:
* This property can be used with @FT_Property_Get also.
*
* It's important to use the right timing for changing this value: The
* creation of the glyph-to-script map that eventually uses the
* fallback script value gets triggered either by setting or reading a
* face-specific property like @glyph-to-script-map, or by auto-hinting
* any glyph from that face. In particular, if you have already created
* an @FT_Face structure but not loaded any glyph (using the
* auto-hinter), a change of the fallback script will affect this face.
*
*/
/**************************************************************************
*
* @property:
* default-script
*
* @description:
* *Experimental* *only*
*
* If FreeType gets compiled with FT_CONFIG_OPTION_USE_HARFBUZZ to make
* the HarfBuzz library access OpenType features for getting better
* glyph coverages, this property sets the (auto-fitter) script to be
* used for the default (OpenType) script data of a font's GSUB table.
* Features for the default script are intended for all scripts not
* explicitly handled in GSUB; an example is a `dlig' feature,
* containing the combination of the characters `T', `E', and `L' to
* form a `TEL' ligature.
*
* By default, this is @FT_AUTOHINTER_SCRIPT_LATIN. Using the
* `default-script' property, this default value can be changed.
*
* {
* FT_Library library;
* FT_UInt default_script = FT_AUTOHINTER_SCRIPT_NONE;
*
*
* FT_Init_FreeType( &library );
*
* FT_Property_Set( library, "autofitter",
* "default-script", &default_script );
* }
*
* @note:
* This property can be used with @FT_Property_Get also.
*
* It's important to use the right timing for changing this value: The
* creation of the glyph-to-script map that eventually uses the
* default script value gets triggered either by setting or reading a
* face-specific property like @glyph-to-script-map, or by auto-hinting
* any glyph from that face. In particular, if you have already created
* an @FT_Face structure but not loaded any glyph (using the
* auto-hinter), a change of the default script will affect this face.
*
*/
/**************************************************************************
*
* @property:
* increase-x-height
*
* @description:
* For ppem values in the range 6~<= ppem <= `increase-x-height', round
* up the font's x~height much more often than normally. If the value
* is set to~0, which is the default, this feature is switched off. Use
* this property to improve the legibility of small font sizes if
* necessary.
*
* {
* FT_Library library;
* FT_Face face;
* FT_Prop_IncreaseXHeight prop;
*
*
* FT_Init_FreeType( &library );
* FT_New_Face( library, "foo.ttf", 0, &face );
* FT_Set_Char_Size( face, 10 * 64, 0, 72, 0 );
*
* prop.face = face;
* prop.limit = 14;
*
* FT_Property_Set( library, "autofitter",
* "increase-x-height", &prop );
* }
*
* @note:
* This property can be used with @FT_Property_Get also.
*
* Set this value right after calling @FT_Set_Char_Size, but before
* loading any glyph (using the auto-hinter).
*
*/
/**************************************************************************
*
* @struct:
* FT_Prop_IncreaseXHeight
*
* @description:
* The data exchange structure for the @increase-x-height property.
*
*/
typedef struct FT_Prop_IncreaseXHeight_
{
FT_Face face;
FT_UInt limit;
} FT_Prop_IncreaseXHeight;
/**************************************************************************
*
* @property:
* warping
*
* @description:
* *Experimental* *only*
*
* If FreeType gets compiled with option AF_CONFIG_OPTION_USE_WARPER to
* activate the warp hinting code in the auto-hinter, this property
* switches warping on and off.
*
* Warping only works in `light' auto-hinting mode. The idea of the
* code is to slightly scale and shift a glyph along the non-hinted
* dimension (which is usually the horizontal axis) so that as much of
* its segments are aligned (more or less) to the grid. To find out a
* glyph's optimal scaling and shifting value, various parameter
* combinations are tried and scored.
*
* By default, warping is off. The example below shows how to switch on
* warping (omitting the error handling).
*
* {
* FT_Library library;
* FT_Bool warping = 1;
*
*
* FT_Init_FreeType( &library );
*
* FT_Property_Set( library, "autofitter",
* "warping", &warping );
* }
*
* @note:
* This property can be used with @FT_Property_Get also.
*
* This property can be set via the `FREETYPE_PROPERTIES' environment
* variable (using values 1 and 0 for `on' and `off', respectively).
*
* The warping code can also change advance widths. Have a look at the
* `lsb_delta' and `rsb_delta' fields in the @FT_GlyphSlotRec structure
* for details on improving inter-glyph distances while rendering.
*
* Since warping is a global property of the auto-hinter it is best to
* change its value before rendering any face. Otherwise, you should
* reload all faces that get auto-hinted in `light' hinting mode.
*
*/
/**************************************************************************
*
* @property:
* no-stem-darkening[autofit]
*
* @description:
* *Experimental* *only,* *requires* *linear* *alpha* *blending* *and*
* *gamma* *correction*
*
* Stem darkening emboldens glyphs at smaller sizes to make them more
* readable on common low-DPI screens when using linear alpha blending
* and gamma correction, see @FT_Render_Glyph. When not using linear
* alpha blending and gamma correction, glyphs will appear heavy and
* fuzzy!
*
* Gamma correction essentially lightens fonts since shades of grey are
* shifted to higher pixel values (=~higher brightness) to match the
* original intention to the reality of our screens. The side-effect is
* that glyphs `thin out'. Mac OS~X and Adobe's proprietary font
* rendering library implement a counter-measure: stem darkening at
* smaller sizes where shades of gray dominate. By emboldening a glyph
* slightly in relation to its pixel size, individual pixels get higher
* coverage of filled-in outlines and are therefore `blacker'. This
* counteracts the `thinning out' of glyphs, making text remain readable
* at smaller sizes. All glyphs that pass through the auto-hinter will
* be emboldened unless this property is set to TRUE.
*
* See the description of the CFF driver for algorithmic details. Total
* consistency with the CFF driver is currently not achieved because the
* emboldening method differs and glyphs must be scaled down on the
* Y-axis to keep outline points inside their precomputed blue zones.
* The smaller the size (especially 9ppem and down), the higher the loss
* of emboldening versus the CFF driver.
*
* This property can be set via the `FREETYPE_PROPERTIES' environment
* variable similar to the CFF driver.
*
*/
/**************************************************************************
*
* @property:
* darkening-parameters[autofit]
*
* @description:
* *Experimental* *only*
*
* See the description of the CFF driver for details. This
* implementation appropriates the
* CFF_CONFIG_OPTION_DARKENING_PARAMETER_* #defines for consistency.
* Note the differences described in @no-stem-darkening[autofit].
*
* This property can be set via the `FREETYPE_PROPERTIES' environment
* variable similar to the CFF driver.
*/
/* */
FT_END_HEADER
#endif /* FTAUTOH_H_ */
/* END */

View File

@ -0,0 +1,101 @@
/***************************************************************************/
/* */
/* ftbbox.h */
/* */
/* FreeType exact bbox computation (specification). */
/* */
/* Copyright 1996-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
/*************************************************************************/
/* */
/* This component has a _single_ role: to compute exact outline bounding */
/* boxes. */
/* */
/* It is separated from the rest of the engine for various technical */
/* reasons. It may well be integrated in `ftoutln' later. */
/* */
/*************************************************************************/
#ifndef FTBBOX_H_
#define FTBBOX_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* outline_processing */
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/* <Function> */
/* FT_Outline_Get_BBox */
/* */
/* <Description> */
/* Compute the exact bounding box of an outline. This is slower */
/* than computing the control box. However, it uses an advanced */
/* algorithm that returns _very_ quickly when the two boxes */
/* coincide. Otherwise, the outline Bézier arcs are traversed to */
/* extract their extrema. */
/* */
/* <Input> */
/* outline :: A pointer to the source outline. */
/* */
/* <Output> */
/* abbox :: The outline's exact bounding box. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* If the font is tricky and the glyph has been loaded with */
/* @FT_LOAD_NO_SCALE, the resulting BBox is meaningless. To get */
/* reasonable values for the BBox it is necessary to load the glyph */
/* at a large ppem value (so that the hinting instructions can */
/* properly shift and scale the subglyphs), then extracting the BBox, */
/* which can be eventually converted back to font units. */
/* */
FT_EXPORT( FT_Error )
FT_Outline_Get_BBox( FT_Outline* outline,
FT_BBox *abbox );
/* */
FT_END_HEADER
#endif /* FTBBOX_H_ */
/* END */
/* Local Variables: */
/* coding: utf-8 */
/* End: */

View File

@ -0,0 +1,210 @@
/***************************************************************************/
/* */
/* ftbdf.h */
/* */
/* FreeType API for accessing BDF-specific strings (specification). */
/* */
/* Copyright 2002-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTBDF_H_
#define FTBDF_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* bdf_fonts */
/* */
/* <Title> */
/* BDF and PCF Files */
/* */
/* <Abstract> */
/* BDF and PCF specific API. */
/* */
/* <Description> */
/* This section contains the declaration of functions specific to BDF */
/* and PCF fonts. */
/* */
/*************************************************************************/
/**********************************************************************
*
* @enum:
* BDF_PropertyType
*
* @description:
* A list of BDF property types.
*
* @values:
* BDF_PROPERTY_TYPE_NONE ::
* Value~0 is used to indicate a missing property.
*
* BDF_PROPERTY_TYPE_ATOM ::
* Property is a string atom.
*
* BDF_PROPERTY_TYPE_INTEGER ::
* Property is a 32-bit signed integer.
*
* BDF_PROPERTY_TYPE_CARDINAL ::
* Property is a 32-bit unsigned integer.
*/
typedef enum BDF_PropertyType_
{
BDF_PROPERTY_TYPE_NONE = 0,
BDF_PROPERTY_TYPE_ATOM = 1,
BDF_PROPERTY_TYPE_INTEGER = 2,
BDF_PROPERTY_TYPE_CARDINAL = 3
} BDF_PropertyType;
/**********************************************************************
*
* @type:
* BDF_Property
*
* @description:
* A handle to a @BDF_PropertyRec structure to model a given
* BDF/PCF property.
*/
typedef struct BDF_PropertyRec_* BDF_Property;
/**********************************************************************
*
* @struct:
* BDF_PropertyRec
*
* @description:
* This structure models a given BDF/PCF property.
*
* @fields:
* type ::
* The property type.
*
* u.atom ::
* The atom string, if type is @BDF_PROPERTY_TYPE_ATOM. May be
* NULL, indicating an empty string.
*
* u.integer ::
* A signed integer, if type is @BDF_PROPERTY_TYPE_INTEGER.
*
* u.cardinal ::
* An unsigned integer, if type is @BDF_PROPERTY_TYPE_CARDINAL.
*/
typedef struct BDF_PropertyRec_
{
BDF_PropertyType type;
union {
const char* atom;
FT_Int32 integer;
FT_UInt32 cardinal;
} u;
} BDF_PropertyRec;
/**********************************************************************
*
* @function:
* FT_Get_BDF_Charset_ID
*
* @description:
* Retrieve a BDF font character set identity, according to
* the BDF specification.
*
* @input:
* face ::
* A handle to the input face.
*
* @output:
* acharset_encoding ::
* Charset encoding, as a C~string, owned by the face.
*
* acharset_registry ::
* Charset registry, as a C~string, owned by the face.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* This function only works with BDF faces, returning an error otherwise.
*/
FT_EXPORT( FT_Error )
FT_Get_BDF_Charset_ID( FT_Face face,
const char* *acharset_encoding,
const char* *acharset_registry );
/**********************************************************************
*
* @function:
* FT_Get_BDF_Property
*
* @description:
* Retrieve a BDF property from a BDF or PCF font file.
*
* @input:
* face :: A handle to the input face.
*
* name :: The property name.
*
* @output:
* aproperty :: The property.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* This function works with BDF _and_ PCF fonts. It returns an error
* otherwise. It also returns an error if the property is not in the
* font.
*
* A `property' is a either key-value pair within the STARTPROPERTIES
* ... ENDPROPERTIES block of a BDF font or a key-value pair from the
* `info->props' array within a `FontRec' structure of a PCF font.
*
* Integer properties are always stored as `signed' within PCF fonts;
* consequently, @BDF_PROPERTY_TYPE_CARDINAL is a possible return value
* for BDF fonts only.
*
* In case of error, `aproperty->type' is always set to
* @BDF_PROPERTY_TYPE_NONE.
*/
FT_EXPORT( FT_Error )
FT_Get_BDF_Property( FT_Face face,
const char* prop_name,
BDF_PropertyRec *aproperty );
/* */
FT_END_HEADER
#endif /* FTBDF_H_ */
/* END */

View File

@ -0,0 +1,240 @@
/***************************************************************************/
/* */
/* ftbitmap.h */
/* */
/* FreeType utility functions for bitmaps (specification). */
/* */
/* Copyright 2004-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTBITMAP_H_
#define FTBITMAP_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* bitmap_handling */
/* */
/* <Title> */
/* Bitmap Handling */
/* */
/* <Abstract> */
/* Handling FT_Bitmap objects. */
/* */
/* <Description> */
/* This section contains functions for handling @FT_Bitmap objects. */
/* Note that none of the functions changes the bitmap's `flow' (as */
/* indicated by the sign of the `pitch' field in `FT_Bitmap'). */
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/* <Function> */
/* FT_Bitmap_Init */
/* */
/* <Description> */
/* Initialize a pointer to an @FT_Bitmap structure. */
/* */
/* <InOut> */
/* abitmap :: A pointer to the bitmap structure. */
/* */
/* <Note> */
/* A deprecated name for the same function is `FT_Bitmap_New'. */
/* */
FT_EXPORT( void )
FT_Bitmap_Init( FT_Bitmap *abitmap );
/* deprecated */
FT_EXPORT( void )
FT_Bitmap_New( FT_Bitmap *abitmap );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Bitmap_Copy */
/* */
/* <Description> */
/* Copy a bitmap into another one. */
/* */
/* <Input> */
/* library :: A handle to a library object. */
/* */
/* source :: A handle to the source bitmap. */
/* */
/* <Output> */
/* target :: A handle to the target bitmap. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
FT_EXPORT( FT_Error )
FT_Bitmap_Copy( FT_Library library,
const FT_Bitmap *source,
FT_Bitmap *target);
/*************************************************************************/
/* */
/* <Function> */
/* FT_Bitmap_Embolden */
/* */
/* <Description> */
/* Embolden a bitmap. The new bitmap will be about `xStrength' */
/* pixels wider and `yStrength' pixels higher. The left and bottom */
/* borders are kept unchanged. */
/* */
/* <Input> */
/* library :: A handle to a library object. */
/* */
/* xStrength :: How strong the glyph is emboldened horizontally. */
/* Expressed in 26.6 pixel format. */
/* */
/* yStrength :: How strong the glyph is emboldened vertically. */
/* Expressed in 26.6 pixel format. */
/* */
/* <InOut> */
/* bitmap :: A handle to the target bitmap. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* The current implementation restricts `xStrength' to be less than */
/* or equal to~8 if bitmap is of pixel_mode @FT_PIXEL_MODE_MONO. */
/* */
/* If you want to embolden the bitmap owned by a @FT_GlyphSlotRec, */
/* you should call @FT_GlyphSlot_Own_Bitmap on the slot first. */
/* */
/* Bitmaps in @FT_PIXEL_MODE_GRAY2 and @FT_PIXEL_MODE_GRAY@ format */
/* are converted to @FT_PIXEL_MODE_GRAY format (i.e., 8bpp). */
/* */
FT_EXPORT( FT_Error )
FT_Bitmap_Embolden( FT_Library library,
FT_Bitmap* bitmap,
FT_Pos xStrength,
FT_Pos yStrength );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Bitmap_Convert */
/* */
/* <Description> */
/* Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, 8bpp or 32bpp */
/* to a bitmap object with depth 8bpp, making the number of used */
/* bytes line (a.k.a. the `pitch') a multiple of `alignment'. */
/* */
/* <Input> */
/* library :: A handle to a library object. */
/* */
/* source :: The source bitmap. */
/* */
/* alignment :: The pitch of the bitmap is a multiple of this */
/* parameter. Common values are 1, 2, or 4. */
/* */
/* <Output> */
/* target :: The target bitmap. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* It is possible to call @FT_Bitmap_Convert multiple times without */
/* calling @FT_Bitmap_Done (the memory is simply reallocated). */
/* */
/* Use @FT_Bitmap_Done to finally remove the bitmap object. */
/* */
/* The `library' argument is taken to have access to FreeType's */
/* memory handling functions. */
/* */
FT_EXPORT( FT_Error )
FT_Bitmap_Convert( FT_Library library,
const FT_Bitmap *source,
FT_Bitmap *target,
FT_Int alignment );
/*************************************************************************/
/* */
/* <Function> */
/* FT_GlyphSlot_Own_Bitmap */
/* */
/* <Description> */
/* Make sure that a glyph slot owns `slot->bitmap'. */
/* */
/* <Input> */
/* slot :: The glyph slot. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* This function is to be used in combination with */
/* @FT_Bitmap_Embolden. */
/* */
FT_EXPORT( FT_Error )
FT_GlyphSlot_Own_Bitmap( FT_GlyphSlot slot );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Bitmap_Done */
/* */
/* <Description> */
/* Destroy a bitmap object initialized with @FT_Bitmap_Init. */
/* */
/* <Input> */
/* library :: A handle to a library object. */
/* */
/* bitmap :: The bitmap object to be freed. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* The `library' argument is taken to have access to FreeType's */
/* memory handling functions. */
/* */
FT_EXPORT( FT_Error )
FT_Bitmap_Done( FT_Library library,
FT_Bitmap *bitmap );
/* */
FT_END_HEADER
#endif /* FTBITMAP_H_ */
/* END */

View File

@ -0,0 +1,102 @@
/***************************************************************************/
/* */
/* ftbzip2.h */
/* */
/* Bzip2-compressed stream support. */
/* */
/* Copyright 2010-2016 by */
/* Joel Klinghed. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTBZIP2_H_
#define FTBZIP2_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* bzip2 */
/* */
/* <Title> */
/* BZIP2 Streams */
/* */
/* <Abstract> */
/* Using bzip2-compressed font files. */
/* */
/* <Description> */
/* This section contains the declaration of Bzip2-specific functions. */
/* */
/*************************************************************************/
/************************************************************************
*
* @function:
* FT_Stream_OpenBzip2
*
* @description:
* Open a new stream to parse bzip2-compressed font files. This is
* mainly used to support the compressed `*.pcf.bz2' fonts that come
* with XFree86.
*
* @input:
* stream ::
* The target embedding stream.
*
* source ::
* The source stream.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* The source stream must be opened _before_ calling this function.
*
* Calling the internal function `FT_Stream_Close' on the new stream will
* *not* call `FT_Stream_Close' on the source stream. None of the stream
* objects will be released to the heap.
*
* The stream implementation is very basic and resets the decompression
* process each time seeking backwards is needed within the stream.
*
* In certain builds of the library, bzip2 compression recognition is
* automatically handled when calling @FT_New_Face or @FT_Open_Face.
* This means that if no font driver is capable of handling the raw
* compressed file, the library will try to open a bzip2 compressed stream
* from it and re-open the face with it.
*
* This function may return `FT_Err_Unimplemented_Feature' if your build
* of FreeType was not compiled with bzip2 support.
*/
FT_EXPORT( FT_Error )
FT_Stream_OpenBzip2( FT_Stream stream,
FT_Stream source );
/* */
FT_END_HEADER
#endif /* FTBZIP2_H_ */
/* END */

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,275 @@
/***************************************************************************/
/* */
/* ftcffdrv.h */
/* */
/* FreeType API for controlling the CFF driver (specification only). */
/* */
/* Copyright 2013-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTCFFDRV_H_
#define FTCFFDRV_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/**************************************************************************
*
* @section:
* cff_driver
*
* @title:
* The CFF driver
*
* @abstract:
* Controlling the CFF driver module.
*
* @description:
* While FreeType's CFF driver doesn't expose API functions by itself,
* it is possible to control its behaviour with @FT_Property_Set and
* @FT_Property_Get. The list below gives the available properties
* together with the necessary macros and structures.
*
* The CFF driver's module name is `cff'.
*
* *Hinting* *and* *antialiasing* *principles* *of* *the* *new* *engine*
*
* The rasterizer is positioning horizontal features (e.g., ascender
* height & x-height, or crossbars) on the pixel grid and minimizing the
* amount of antialiasing applied to them, while placing vertical
* features (vertical stems) on the pixel grid without hinting, thus
* representing the stem position and weight accurately. Sometimes the
* vertical stems may be only partially black. In this context,
* `antialiasing' means that stems are not positioned exactly on pixel
* borders, causing a fuzzy appearance.
*
* There are two principles behind this approach.
*
* 1) No hinting in the horizontal direction: Unlike `superhinted'
* TrueType, which changes glyph widths to accommodate regular
* inter-glyph spacing, Adobe's approach is `faithful to the design' in
* representing both the glyph width and the inter-glyph spacing
* designed for the font. This makes the screen display as close as it
* can be to the result one would get with infinite resolution, while
* preserving what is considered the key characteristics of each glyph.
* Note that the distances between unhinted and grid-fitted positions at
* small sizes are comparable to kerning values and thus would be
* noticeable (and distracting) while reading if hinting were applied.
*
* One of the reasons to not hint horizontally is antialiasing for LCD
* screens: The pixel geometry of modern displays supplies three
* vertical sub-pixels as the eye moves horizontally across each visible
* pixel. On devices where we can be certain this characteristic is
* present a rasterizer can take advantage of the sub-pixels to add
* increments of weight. In Western writing systems this turns out to
* be the more critical direction anyway; the weights and spacing of
* vertical stems (see above) are central to Armenian, Cyrillic, Greek,
* and Latin type designs. Even when the rasterizer uses greyscale
* antialiasing instead of color (a necessary compromise when one
* doesn't know the screen characteristics), the unhinted vertical
* features preserve the design's weight and spacing much better than
* aliased type would.
*
* 2) Alignment in the vertical direction: Weights and spacing along the
* y~axis are less critical; what is much more important is the visual
* alignment of related features (like cap-height and x-height). The
* sense of alignment for these is enhanced by the sharpness of grid-fit
* edges, while the cruder vertical resolution (full pixels instead of
* 1/3 pixels) is less of a problem.
*
* On the technical side, horizontal alignment zones for ascender,
* x-height, and other important height values (traditionally called
* `blue zones') as defined in the font are positioned independently,
* each being rounded to the nearest pixel edge, taking care of
* overshoot suppression at small sizes, stem darkening, and scaling.
*
* Hstems (this is, hint values defined in the font to help align
* horizontal features) that fall within a blue zone are said to be
* `captured' and are aligned to that zone. Uncaptured stems are moved
* in one of four ways, top edge up or down, bottom edge up or down.
* Unless there are conflicting hstems, the smallest movement is taken
* to minimize distortion.
*
* @order:
* hinting-engine[cff]
* no-stem-darkening[cff]
* darkening-parameters[cff]
*
*/
/**************************************************************************
*
* @property:
* hinting-engine[cff]
*
* @description:
* Thanks to Adobe, which contributed a new hinting (and parsing)
* engine, an application can select between `freetype' and `adobe' if
* compiled with CFF_CONFIG_OPTION_OLD_ENGINE. If this configuration
* macro isn't defined, `hinting-engine' does nothing.
*
* The default engine is `freetype' if CFF_CONFIG_OPTION_OLD_ENGINE is
* defined, and `adobe' otherwise.
*
* The following example code demonstrates how to select Adobe's hinting
* engine (omitting the error handling).
*
* {
* FT_Library library;
* FT_UInt hinting_engine = FT_CFF_HINTING_ADOBE;
*
*
* FT_Init_FreeType( &library );
*
* FT_Property_Set( library, "cff",
* "hinting-engine", &hinting_engine );
* }
*
* @note:
* This property can be used with @FT_Property_Get also.
*
* This property can be set via the `FREETYPE_PROPERTIES' environment
* variable (using values `adobe' or `freetype').
*/
/**************************************************************************
*
* @enum:
* FT_CFF_HINTING_XXX
*
* @description:
* A list of constants used for the @hinting-engine[cff] property to
* select the hinting engine for CFF fonts.
*
* @values:
* FT_CFF_HINTING_FREETYPE ::
* Use the old FreeType hinting engine.
*
* FT_CFF_HINTING_ADOBE ::
* Use the hinting engine contributed by Adobe.
*
*/
#define FT_CFF_HINTING_FREETYPE 0
#define FT_CFF_HINTING_ADOBE 1
/**************************************************************************
*
* @property:
* no-stem-darkening[cff]
*
* @description:
* By default, the Adobe CFF engine darkens stems at smaller sizes,
* regardless of hinting, to enhance contrast. This feature requires
* a rendering system with proper gamma correction. Setting this
* property, stem darkening gets switched off.
*
* Note that stem darkening is never applied if @FT_LOAD_NO_SCALE is set.
*
* {
* FT_Library library;
* FT_Bool no_stem_darkening = TRUE;
*
*
* FT_Init_FreeType( &library );
*
* FT_Property_Set( library, "cff",
* "no-stem-darkening", &no_stem_darkening );
* }
*
* @note:
* This property can be used with @FT_Property_Get also.
*
* This property can be set via the `FREETYPE_PROPERTIES' environment
* variable (using values 1 and 0 for `on' and `off', respectively).
*
*/
/**************************************************************************
*
* @property:
* darkening-parameters[cff]
*
* @description:
* By default, the Adobe CFF engine darkens stems as follows (if the
* `no-stem-darkening' property isn't set):
*
* {
* stem width <= 0.5px: darkening amount = 0.4px
* stem width = 1px: darkening amount = 0.275px
* stem width = 1.667px: darkening amount = 0.275px
* stem width >= 2.333px: darkening amount = 0px
* }
*
* and piecewise linear in-between. At configuration time, these four
* control points can be set with the macro
* `CFF_CONFIG_OPTION_DARKENING_PARAMETERS'. At runtime, the control
* points can be changed using the `darkening-parameters' property, as
* the following example demonstrates.
*
* {
* FT_Library library;
* FT_Int darken_params[8] = { 500, 300, // x1, y1
* 1000, 200, // x2, y2
* 1500, 100, // x3, y3
* 2000, 0 }; // x4, y4
*
*
* FT_Init_FreeType( &library );
*
* FT_Property_Set( library, "cff",
* "darkening-parameters", darken_params );
* }
*
* The x~values give the stem width, and the y~values the darkening
* amount. The unit is 1000th of pixels. All coordinate values must be
* positive; the x~values must be monotonically increasing; the
* y~values must be monotonically decreasing and smaller than or
* equal to 500 (corresponding to half a pixel); the slope of each
* linear piece must be shallower than -1 (e.g., -.4).
*
* @note:
* This property can be used with @FT_Property_Get also.
*
* This property can be set via the `FREETYPE_PROPERTIES' environment
* variable, using eight comma-separated integers without spaces. Here
* the above example, using `\' to break the line for readability.
*
* {
* FREETYPE_PROPERTIES=\
* cff:darkening-parameters=500,300,1000,200,1500,100,2000,0
* }
*/
/* */
FT_END_HEADER
#endif /* FTCFFDRV_H_ */
/* END */

View File

@ -0,0 +1,135 @@
/***************************************************************************/
/* */
/* This file defines the structure of the FreeType reference. */
/* It is used by the python script that generates the HTML files. */
/* */
/***************************************************************************/
/***************************************************************************/
/* */
/* <Chapter> */
/* general_remarks */
/* */
/* <Title> */
/* General Remarks */
/* */
/* <Sections> */
/* header_inclusion */
/* user_allocation */
/* */
/***************************************************************************/
/***************************************************************************/
/* */
/* <Chapter> */
/* core_api */
/* */
/* <Title> */
/* Core API */
/* */
/* <Sections> */
/* version */
/* basic_types */
/* base_interface */
/* glyph_variants */
/* glyph_management */
/* mac_specific */
/* sizes_management */
/* header_file_macros */
/* */
/***************************************************************************/
/***************************************************************************/
/* */
/* <Chapter> */
/* format_specific */
/* */
/* <Title> */
/* Format-Specific API */
/* */
/* <Sections> */
/* multiple_masters */
/* truetype_tables */
/* type1_tables */
/* sfnt_names */
/* bdf_fonts */
/* cid_fonts */
/* pfr_fonts */
/* winfnt_fonts */
/* font_formats */
/* gasp_table */
/* */
/***************************************************************************/
/***************************************************************************/
/* */
/* <Chapter> */
/* module_specific */
/* */
/* <Title> */
/* Controlling FreeType Modules */
/* */
/* <Sections> */
/* auto_hinter */
/* cff_driver */
/* tt_driver */
/* */
/***************************************************************************/
/***************************************************************************/
/* */
/* <Chapter> */
/* cache_subsystem */
/* */
/* <Title> */
/* Cache Sub-System */
/* */
/* <Sections> */
/* cache_subsystem */
/* */
/***************************************************************************/
/***************************************************************************/
/* */
/* <Chapter> */
/* support_api */
/* */
/* <Title> */
/* Support API */
/* */
/* <Sections> */
/* computations */
/* list_processing */
/* outline_processing */
/* quick_advance */
/* bitmap_handling */
/* raster */
/* glyph_stroker */
/* system_interface */
/* module_management */
/* gzip */
/* lzw */
/* bzip2 */
/* lcd_filtering */
/* */
/***************************************************************************/
/***************************************************************************/
/* */
/* <Chapter> */
/* error_codes */
/* */
/* <Title> */
/* Error Codes */
/* */
/* <Sections> */
/* error_enumerations */
/* error_code_values */
/* */
/***************************************************************************/

View File

@ -0,0 +1,168 @@
/***************************************************************************/
/* */
/* ftcid.h */
/* */
/* FreeType API for accessing CID font information (specification). */
/* */
/* Copyright 2007-2016 by */
/* Dereg Clegg and Michael Toftdal. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTCID_H_
#define FTCID_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* cid_fonts */
/* */
/* <Title> */
/* CID Fonts */
/* */
/* <Abstract> */
/* CID-keyed font specific API. */
/* */
/* <Description> */
/* This section contains the declaration of CID-keyed font specific */
/* functions. */
/* */
/*************************************************************************/
/**********************************************************************
*
* @function:
* FT_Get_CID_Registry_Ordering_Supplement
*
* @description:
* Retrieve the Registry/Ordering/Supplement triple (also known as the
* "R/O/S") from a CID-keyed font.
*
* @input:
* face ::
* A handle to the input face.
*
* @output:
* registry ::
* The registry, as a C~string, owned by the face.
*
* ordering ::
* The ordering, as a C~string, owned by the face.
*
* supplement ::
* The supplement.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* This function only works with CID faces, returning an error
* otherwise.
*
* @since:
* 2.3.6
*/
FT_EXPORT( FT_Error )
FT_Get_CID_Registry_Ordering_Supplement( FT_Face face,
const char* *registry,
const char* *ordering,
FT_Int *supplement);
/**********************************************************************
*
* @function:
* FT_Get_CID_Is_Internally_CID_Keyed
*
* @description:
* Retrieve the type of the input face, CID keyed or not. In
* contrast to the @FT_IS_CID_KEYED macro this function returns
* successfully also for CID-keyed fonts in an SFNT wrapper.
*
* @input:
* face ::
* A handle to the input face.
*
* @output:
* is_cid ::
* The type of the face as an @FT_Bool.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* This function only works with CID faces and OpenType fonts,
* returning an error otherwise.
*
* @since:
* 2.3.9
*/
FT_EXPORT( FT_Error )
FT_Get_CID_Is_Internally_CID_Keyed( FT_Face face,
FT_Bool *is_cid );
/**********************************************************************
*
* @function:
* FT_Get_CID_From_Glyph_Index
*
* @description:
* Retrieve the CID of the input glyph index.
*
* @input:
* face ::
* A handle to the input face.
*
* glyph_index ::
* The input glyph index.
*
* @output:
* cid ::
* The CID as an @FT_UInt.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* This function only works with CID faces and OpenType fonts,
* returning an error otherwise.
*
* @since:
* 2.3.9
*/
FT_EXPORT( FT_Error )
FT_Get_CID_From_Glyph_Index( FT_Face face,
FT_UInt glyph_index,
FT_UInt *cid );
/* */
FT_END_HEADER
#endif /* FTCID_H_ */
/* END */

View File

@ -0,0 +1,276 @@
/***************************************************************************/
/* */
/* fterrdef.h */
/* */
/* FreeType error codes (specification). */
/* */
/* Copyright 2002-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
/*************************************************************************/
/* */
/* <Section> */
/* error_code_values */
/* */
/* <Title> */
/* Error Code Values */
/* */
/* <Abstract> */
/* All possible error codes returned by FreeType functions. */
/* */
/* <Description> */
/* The list below is taken verbatim from the file `fterrdef.h' */
/* (loaded automatically by including `FT_FREETYPE_H'). The first */
/* argument of the `FT_ERROR_DEF_' macro is the error label; by */
/* default, the prefix `FT_Err_' gets added so that you get error */
/* names like `FT_Err_Cannot_Open_Resource'. The second argument is */
/* the error code, and the last argument an error string, which is not */
/* used by FreeType. */
/* */
/* Within your application you should *only* use error names and */
/* *never* its numeric values! The latter might (and actually do) */
/* change in forthcoming FreeType versions. */
/* */
/* Macro `FT_NOERRORDEF_' defines `FT_Err_Ok', which is always zero. */
/* See the `Error Enumerations' subsection how to automatically */
/* generate a list of error strings. */
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/* <Enum> */
/* FT_Err_XXX */
/* */
/*************************************************************************/
/* generic errors */
FT_NOERRORDEF_( Ok, 0x00,
"no error" )
FT_ERRORDEF_( Cannot_Open_Resource, 0x01,
"cannot open resource" )
FT_ERRORDEF_( Unknown_File_Format, 0x02,
"unknown file format" )
FT_ERRORDEF_( Invalid_File_Format, 0x03,
"broken file" )
FT_ERRORDEF_( Invalid_Version, 0x04,
"invalid FreeType version" )
FT_ERRORDEF_( Lower_Module_Version, 0x05,
"module version is too low" )
FT_ERRORDEF_( Invalid_Argument, 0x06,
"invalid argument" )
FT_ERRORDEF_( Unimplemented_Feature, 0x07,
"unimplemented feature" )
FT_ERRORDEF_( Invalid_Table, 0x08,
"broken table" )
FT_ERRORDEF_( Invalid_Offset, 0x09,
"broken offset within table" )
FT_ERRORDEF_( Array_Too_Large, 0x0A,
"array allocation size too large" )
FT_ERRORDEF_( Missing_Module, 0x0B,
"missing module" )
FT_ERRORDEF_( Missing_Property, 0x0C,
"missing property" )
/* glyph/character errors */
FT_ERRORDEF_( Invalid_Glyph_Index, 0x10,
"invalid glyph index" )
FT_ERRORDEF_( Invalid_Character_Code, 0x11,
"invalid character code" )
FT_ERRORDEF_( Invalid_Glyph_Format, 0x12,
"unsupported glyph image format" )
FT_ERRORDEF_( Cannot_Render_Glyph, 0x13,
"cannot render this glyph format" )
FT_ERRORDEF_( Invalid_Outline, 0x14,
"invalid outline" )
FT_ERRORDEF_( Invalid_Composite, 0x15,
"invalid composite glyph" )
FT_ERRORDEF_( Too_Many_Hints, 0x16,
"too many hints" )
FT_ERRORDEF_( Invalid_Pixel_Size, 0x17,
"invalid pixel size" )
/* handle errors */
FT_ERRORDEF_( Invalid_Handle, 0x20,
"invalid object handle" )
FT_ERRORDEF_( Invalid_Library_Handle, 0x21,
"invalid library handle" )
FT_ERRORDEF_( Invalid_Driver_Handle, 0x22,
"invalid module handle" )
FT_ERRORDEF_( Invalid_Face_Handle, 0x23,
"invalid face handle" )
FT_ERRORDEF_( Invalid_Size_Handle, 0x24,
"invalid size handle" )
FT_ERRORDEF_( Invalid_Slot_Handle, 0x25,
"invalid glyph slot handle" )
FT_ERRORDEF_( Invalid_CharMap_Handle, 0x26,
"invalid charmap handle" )
FT_ERRORDEF_( Invalid_Cache_Handle, 0x27,
"invalid cache manager handle" )
FT_ERRORDEF_( Invalid_Stream_Handle, 0x28,
"invalid stream handle" )
/* driver errors */
FT_ERRORDEF_( Too_Many_Drivers, 0x30,
"too many modules" )
FT_ERRORDEF_( Too_Many_Extensions, 0x31,
"too many extensions" )
/* memory errors */
FT_ERRORDEF_( Out_Of_Memory, 0x40,
"out of memory" )
FT_ERRORDEF_( Unlisted_Object, 0x41,
"unlisted object" )
/* stream errors */
FT_ERRORDEF_( Cannot_Open_Stream, 0x51,
"cannot open stream" )
FT_ERRORDEF_( Invalid_Stream_Seek, 0x52,
"invalid stream seek" )
FT_ERRORDEF_( Invalid_Stream_Skip, 0x53,
"invalid stream skip" )
FT_ERRORDEF_( Invalid_Stream_Read, 0x54,
"invalid stream read" )
FT_ERRORDEF_( Invalid_Stream_Operation, 0x55,
"invalid stream operation" )
FT_ERRORDEF_( Invalid_Frame_Operation, 0x56,
"invalid frame operation" )
FT_ERRORDEF_( Nested_Frame_Access, 0x57,
"nested frame access" )
FT_ERRORDEF_( Invalid_Frame_Read, 0x58,
"invalid frame read" )
/* raster errors */
FT_ERRORDEF_( Raster_Uninitialized, 0x60,
"raster uninitialized" )
FT_ERRORDEF_( Raster_Corrupted, 0x61,
"raster corrupted" )
FT_ERRORDEF_( Raster_Overflow, 0x62,
"raster overflow" )
FT_ERRORDEF_( Raster_Negative_Height, 0x63,
"negative height while rastering" )
/* cache errors */
FT_ERRORDEF_( Too_Many_Caches, 0x70,
"too many registered caches" )
/* TrueType and SFNT errors */
FT_ERRORDEF_( Invalid_Opcode, 0x80,
"invalid opcode" )
FT_ERRORDEF_( Too_Few_Arguments, 0x81,
"too few arguments" )
FT_ERRORDEF_( Stack_Overflow, 0x82,
"stack overflow" )
FT_ERRORDEF_( Code_Overflow, 0x83,
"code overflow" )
FT_ERRORDEF_( Bad_Argument, 0x84,
"bad argument" )
FT_ERRORDEF_( Divide_By_Zero, 0x85,
"division by zero" )
FT_ERRORDEF_( Invalid_Reference, 0x86,
"invalid reference" )
FT_ERRORDEF_( Debug_OpCode, 0x87,
"found debug opcode" )
FT_ERRORDEF_( ENDF_In_Exec_Stream, 0x88,
"found ENDF opcode in execution stream" )
FT_ERRORDEF_( Nested_DEFS, 0x89,
"nested DEFS" )
FT_ERRORDEF_( Invalid_CodeRange, 0x8A,
"invalid code range" )
FT_ERRORDEF_( Execution_Too_Long, 0x8B,
"execution context too long" )
FT_ERRORDEF_( Too_Many_Function_Defs, 0x8C,
"too many function definitions" )
FT_ERRORDEF_( Too_Many_Instruction_Defs, 0x8D,
"too many instruction definitions" )
FT_ERRORDEF_( Table_Missing, 0x8E,
"SFNT font table missing" )
FT_ERRORDEF_( Horiz_Header_Missing, 0x8F,
"horizontal header (hhea) table missing" )
FT_ERRORDEF_( Locations_Missing, 0x90,
"locations (loca) table missing" )
FT_ERRORDEF_( Name_Table_Missing, 0x91,
"name table missing" )
FT_ERRORDEF_( CMap_Table_Missing, 0x92,
"character map (cmap) table missing" )
FT_ERRORDEF_( Hmtx_Table_Missing, 0x93,
"horizontal metrics (hmtx) table missing" )
FT_ERRORDEF_( Post_Table_Missing, 0x94,
"PostScript (post) table missing" )
FT_ERRORDEF_( Invalid_Horiz_Metrics, 0x95,
"invalid horizontal metrics" )
FT_ERRORDEF_( Invalid_CharMap_Format, 0x96,
"invalid character map (cmap) format" )
FT_ERRORDEF_( Invalid_PPem, 0x97,
"invalid ppem value" )
FT_ERRORDEF_( Invalid_Vert_Metrics, 0x98,
"invalid vertical metrics" )
FT_ERRORDEF_( Could_Not_Find_Context, 0x99,
"could not find context" )
FT_ERRORDEF_( Invalid_Post_Table_Format, 0x9A,
"invalid PostScript (post) table format" )
FT_ERRORDEF_( Invalid_Post_Table, 0x9B,
"invalid PostScript (post) table" )
/* CFF, CID, and Type 1 errors */
FT_ERRORDEF_( Syntax_Error, 0xA0,
"opcode syntax error" )
FT_ERRORDEF_( Stack_Underflow, 0xA1,
"argument stack underflow" )
FT_ERRORDEF_( Ignore, 0xA2,
"ignore" )
FT_ERRORDEF_( No_Unicode_Glyph_Name, 0xA3,
"no Unicode glyph name found" )
FT_ERRORDEF_( Glyph_Too_Big, 0xA4,
"glyph too big for hinting" )
/* BDF errors */
FT_ERRORDEF_( Missing_Startfont_Field, 0xB0,
"`STARTFONT' field missing" )
FT_ERRORDEF_( Missing_Font_Field, 0xB1,
"`FONT' field missing" )
FT_ERRORDEF_( Missing_Size_Field, 0xB2,
"`SIZE' field missing" )
FT_ERRORDEF_( Missing_Fontboundingbox_Field, 0xB3,
"`FONTBOUNDINGBOX' field missing" )
FT_ERRORDEF_( Missing_Chars_Field, 0xB4,
"`CHARS' field missing" )
FT_ERRORDEF_( Missing_Startchar_Field, 0xB5,
"`STARTCHAR' field missing" )
FT_ERRORDEF_( Missing_Encoding_Field, 0xB6,
"`ENCODING' field missing" )
FT_ERRORDEF_( Missing_Bbx_Field, 0xB7,
"`BBX' field missing" )
FT_ERRORDEF_( Bbx_Too_Big, 0xB8,
"`BBX' too big" )
FT_ERRORDEF_( Corrupted_Font_Header, 0xB9,
"Font header corrupted or missing fields" )
FT_ERRORDEF_( Corrupted_Font_Glyphs, 0xBA,
"Font glyphs corrupted or missing fields" )
/* */
/* END */

View File

@ -0,0 +1,226 @@
/***************************************************************************/
/* */
/* fterrors.h */
/* */
/* FreeType error code handling (specification). */
/* */
/* Copyright 1996-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
/*************************************************************************/
/* */
/* <Section> */
/* error_enumerations */
/* */
/* <Title> */
/* Error Enumerations */
/* */
/* <Abstract> */
/* How to handle errors and error strings. */
/* */
/* <Description> */
/* The header file `fterrors.h' (which is automatically included by */
/* `freetype.h' defines the handling of FreeType's enumeration */
/* constants. It can also be used to generate error message strings */
/* with a small macro trick explained below. */
/* */
/* *Error* *Formats* */
/* */
/* The configuration macro FT_CONFIG_OPTION_USE_MODULE_ERRORS can be */
/* defined in `ftoption.h' in order to make the higher byte indicate */
/* the module where the error has happened (this is not compatible */
/* with standard builds of FreeType&nbsp;2, however). See the file */
/* `ftmoderr.h' for more details. */
/* */
/* *Error* *Message* *Strings* */
/* */
/* Error definitions are set up with special macros that allow client */
/* applications to build a table of error message strings. The */
/* strings are not included in a normal build of FreeType&nbsp;2 to */
/* save space (most client applications do not use them). */
/* */
/* To do so, you have to define the following macros before including */
/* this file. */
/* */
/* { */
/* FT_ERROR_START_LIST */
/* } */
/* */
/* This macro is called before anything else to define the start of */
/* the error list. It is followed by several FT_ERROR_DEF calls. */
/* */
/* { */
/* FT_ERROR_DEF( e, v, s ) */
/* } */
/* */
/* This macro is called to define one single error. `e' is the error */
/* code identifier (e.g., `Invalid_Argument'), `v' is the error's */
/* numerical value, and `s' is the corresponding error string. */
/* */
/* { */
/* FT_ERROR_END_LIST */
/* } */
/* */
/* This macro ends the list. */
/* */
/* Additionally, you have to undefine `FTERRORS_H_' before #including */
/* this file. */
/* */
/* Here is a simple example. */
/* */
/* { */
/* #undef FTERRORS_H_ */
/* #define FT_ERRORDEF( e, v, s ) { e, s }, */
/* #define FT_ERROR_START_LIST { */
/* #define FT_ERROR_END_LIST { 0, NULL } }; */
/* */
/* const struct */
/* { */
/* int err_code; */
/* const char* err_msg; */
/* } ft_errors[] = */
/* */
/* #include FT_ERRORS_H */
/* } */
/* */
/* Note that `FT_Err_Ok' is _not_ defined with `FT_ERRORDEF' but with */
/* `FT_NOERRORDEF'; it is always zero. */
/* */
/*************************************************************************/
/* */
/* In previous FreeType versions we used `__FTERRORS_H__'. However, */
/* using two successive underscores in a non-system symbol name */
/* violates the C (and C++) standard, so it was changed to the */
/* current form. In spite of this, we have to make */
/* */
/* #undefine __FTERRORS_H__ */
/* */
/* work for backwards compatibility. */
/* */
#if !( defined( FTERRORS_H_ ) && defined ( __FTERRORS_H__ ) )
#define FTERRORS_H_
#define __FTERRORS_H__
/* include module base error codes */
#include FT_MODULE_ERRORS_H
/*******************************************************************/
/*******************************************************************/
/***** *****/
/***** SETUP MACROS *****/
/***** *****/
/*******************************************************************/
/*******************************************************************/
#undef FT_NEED_EXTERN_C
/* FT_ERR_PREFIX is used as a prefix for error identifiers. */
/* By default, we use `FT_Err_'. */
/* */
#ifndef FT_ERR_PREFIX
#define FT_ERR_PREFIX FT_Err_
#endif
/* FT_ERR_BASE is used as the base for module-specific errors. */
/* */
#ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS
#ifndef FT_ERR_BASE
#define FT_ERR_BASE FT_Mod_Err_Base
#endif
#else
#undef FT_ERR_BASE
#define FT_ERR_BASE 0
#endif /* FT_CONFIG_OPTION_USE_MODULE_ERRORS */
/* If FT_ERRORDEF is not defined, we need to define a simple */
/* enumeration type. */
/* */
#ifndef FT_ERRORDEF
#define FT_ERRORDEF( e, v, s ) e = v,
#define FT_ERROR_START_LIST enum {
#define FT_ERROR_END_LIST FT_ERR_CAT( FT_ERR_PREFIX, Max ) };
#ifdef __cplusplus
#define FT_NEED_EXTERN_C
extern "C" {
#endif
#endif /* !FT_ERRORDEF */
/* this macro is used to define an error */
#define FT_ERRORDEF_( e, v, s ) \
FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v + FT_ERR_BASE, s )
/* this is only used for <module>_Err_Ok, which must be 0! */
#define FT_NOERRORDEF_( e, v, s ) \
FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v, s )
#ifdef FT_ERROR_START_LIST
FT_ERROR_START_LIST
#endif
/* now include the error codes */
#include FT_ERROR_DEFINITIONS_H
#ifdef FT_ERROR_END_LIST
FT_ERROR_END_LIST
#endif
/*******************************************************************/
/*******************************************************************/
/***** *****/
/***** SIMPLE CLEANUP *****/
/***** *****/
/*******************************************************************/
/*******************************************************************/
#ifdef FT_NEED_EXTERN_C
}
#endif
#undef FT_ERROR_START_LIST
#undef FT_ERROR_END_LIST
#undef FT_ERRORDEF
#undef FT_ERRORDEF_
#undef FT_NOERRORDEF_
#undef FT_NEED_EXTERN_C
#undef FT_ERR_BASE
/* FT_ERR_PREFIX is needed internally */
#ifndef FT2_BUILD_LIBRARY
#undef FT_ERR_PREFIX
#endif
#endif /* !(FTERRORS_H_ && __FTERRORS_H__) */
/* END */

View File

@ -0,0 +1,95 @@
/***************************************************************************/
/* */
/* ftfntfmt.h */
/* */
/* Support functions for font formats. */
/* */
/* Copyright 2002-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTFNTFMT_H_
#define FTFNTFMT_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* font_formats */
/* */
/* <Title> */
/* Font Formats */
/* */
/* <Abstract> */
/* Getting the font format. */
/* */
/* <Description> */
/* The single function in this section can be used to get the font */
/* format. Note that this information is not needed normally; */
/* however, there are special cases (like in PDF devices) where it is */
/* important to differentiate, in spite of FreeType's uniform API. */
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/* <Function> */
/* FT_Get_Font_Format */
/* */
/* <Description> */
/* Return a string describing the format of a given face. Possible */
/* values are `TrueType', `Type~1', `BDF', `PCF', `Type~42', */
/* `CID~Type~1', `CFF', `PFR', and `Windows~FNT'. */
/* */
/* The return value is suitable to be used as an X11 FONT_PROPERTY. */
/* */
/* <Input> */
/* face :: */
/* Input face handle. */
/* */
/* <Return> */
/* Font format string. NULL in case of error. */
/* */
/* <Note> */
/* A deprecated name for the same function is */
/* `FT_Get_X11_Font_Format'. */
/* */
FT_EXPORT( const char* )
FT_Get_Font_Format( FT_Face face );
/* deprecated */
FT_EXPORT( const char* )
FT_Get_X11_Font_Format( FT_Face face );
/* */
FT_END_HEADER
#endif /* FTFNTFMT_H_ */
/* END */

View File

@ -0,0 +1,129 @@
/***************************************************************************/
/* */
/* ftgasp.h */
/* */
/* Access of TrueType's `gasp' table (specification). */
/* */
/* Copyright 2007-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTGASP_H_
#define FTGASP_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
/***************************************************************************
*
* @section:
* gasp_table
*
* @title:
* Gasp Table
*
* @abstract:
* Retrieving TrueType `gasp' table entries.
*
* @description:
* The function @FT_Get_Gasp can be used to query a TrueType or OpenType
* font for specific entries in its `gasp' table, if any. This is
* mainly useful when implementing native TrueType hinting with the
* bytecode interpreter to duplicate the Windows text rendering results.
*/
/*************************************************************************
*
* @enum:
* FT_GASP_XXX
*
* @description:
* A list of values and/or bit-flags returned by the @FT_Get_Gasp
* function.
*
* @values:
* FT_GASP_NO_TABLE ::
* This special value means that there is no GASP table in this face.
* It is up to the client to decide what to do.
*
* FT_GASP_DO_GRIDFIT ::
* Grid-fitting and hinting should be performed at the specified ppem.
* This *really* means TrueType bytecode interpretation. If this bit
* is not set, no hinting gets applied.
*
* FT_GASP_DO_GRAY ::
* Anti-aliased rendering should be performed at the specified ppem.
* If not set, do monochrome rendering.
*
* FT_GASP_SYMMETRIC_SMOOTHING ::
* If set, smoothing along multiple axes must be used with ClearType.
*
* FT_GASP_SYMMETRIC_GRIDFIT ::
* Grid-fitting must be used with ClearType's symmetric smoothing.
*
* @note:
* The bit-flags `FT_GASP_DO_GRIDFIT' and `FT_GASP_DO_GRAY' are to be
* used for standard font rasterization only. Independently of that,
* `FT_GASP_SYMMETRIC_SMOOTHING' and `FT_GASP_SYMMETRIC_GRIDFIT' are to
* be used if ClearType is enabled (and `FT_GASP_DO_GRIDFIT' and
* `FT_GASP_DO_GRAY' are consequently ignored).
*
* `ClearType' is Microsoft's implementation of LCD rendering, partly
* protected by patents.
*
* @since:
* 2.3.0
*/
#define FT_GASP_NO_TABLE -1
#define FT_GASP_DO_GRIDFIT 0x01
#define FT_GASP_DO_GRAY 0x02
#define FT_GASP_SYMMETRIC_SMOOTHING 0x08
#define FT_GASP_SYMMETRIC_GRIDFIT 0x10
/*************************************************************************
*
* @func:
* FT_Get_Gasp
*
* @description:
* Read the `gasp' table from a TrueType or OpenType font file and
* return the entry corresponding to a given character pixel size.
*
* @input:
* face :: The source face handle.
* ppem :: The vertical character pixel size.
*
* @return:
* Bit flags (see @FT_GASP_XXX), or @FT_GASP_NO_TABLE if there is no
* `gasp' table in the face.
*
* @since:
* 2.3.0
*/
FT_EXPORT( FT_Int )
FT_Get_Gasp( FT_Face face,
FT_UInt ppem );
/* */
#endif /* FTGASP_H_ */
/* END */

View File

@ -0,0 +1,605 @@
/***************************************************************************/
/* */
/* ftglyph.h */
/* */
/* FreeType convenience functions to handle glyphs (specification). */
/* */
/* Copyright 1996-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
/*************************************************************************/
/* */
/* This file contains the definition of several convenience functions */
/* that can be used by client applications to easily retrieve glyph */
/* bitmaps and outlines from a given face. */
/* */
/* These functions should be optional if you are writing a font server */
/* or text layout engine on top of FreeType. However, they are pretty */
/* handy for many other simple uses of the library. */
/* */
/*************************************************************************/
#ifndef FTGLYPH_H_
#define FTGLYPH_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* glyph_management */
/* */
/* <Title> */
/* Glyph Management */
/* */
/* <Abstract> */
/* Generic interface to manage individual glyph data. */
/* */
/* <Description> */
/* This section contains definitions used to manage glyph data */
/* through generic FT_Glyph objects. Each of them can contain a */
/* bitmap, a vector outline, or even images in other formats. */
/* */
/*************************************************************************/
/* forward declaration to a private type */
typedef struct FT_Glyph_Class_ FT_Glyph_Class;
/*************************************************************************/
/* */
/* <Type> */
/* FT_Glyph */
/* */
/* <Description> */
/* Handle to an object used to model generic glyph images. It is a */
/* pointer to the @FT_GlyphRec structure and can contain a glyph */
/* bitmap or pointer. */
/* */
/* <Note> */
/* Glyph objects are not owned by the library. You must thus release */
/* them manually (through @FT_Done_Glyph) _before_ calling */
/* @FT_Done_FreeType. */
/* */
typedef struct FT_GlyphRec_* FT_Glyph;
/*************************************************************************/
/* */
/* <Struct> */
/* FT_GlyphRec */
/* */
/* <Description> */
/* The root glyph structure contains a given glyph image plus its */
/* advance width in 16.16 fixed-point format. */
/* */
/* <Fields> */
/* library :: A handle to the FreeType library object. */
/* */
/* clazz :: A pointer to the glyph's class. Private. */
/* */
/* format :: The format of the glyph's image. */
/* */
/* advance :: A 16.16 vector that gives the glyph's advance width. */
/* */
typedef struct FT_GlyphRec_
{
FT_Library library;
const FT_Glyph_Class* clazz;
FT_Glyph_Format format;
FT_Vector advance;
} FT_GlyphRec;
/*************************************************************************/
/* */
/* <Type> */
/* FT_BitmapGlyph */
/* */
/* <Description> */
/* A handle to an object used to model a bitmap glyph image. This is */
/* a sub-class of @FT_Glyph, and a pointer to @FT_BitmapGlyphRec. */
/* */
typedef struct FT_BitmapGlyphRec_* FT_BitmapGlyph;
/*************************************************************************/
/* */
/* <Struct> */
/* FT_BitmapGlyphRec */
/* */
/* <Description> */
/* A structure used for bitmap glyph images. This really is a */
/* `sub-class' of @FT_GlyphRec. */
/* */
/* <Fields> */
/* root :: The root @FT_Glyph fields. */
/* */
/* left :: The left-side bearing, i.e., the horizontal distance */
/* from the current pen position to the left border of the */
/* glyph bitmap. */
/* */
/* top :: The top-side bearing, i.e., the vertical distance from */
/* the current pen position to the top border of the glyph */
/* bitmap. This distance is positive for upwards~y! */
/* */
/* bitmap :: A descriptor for the bitmap. */
/* */
/* <Note> */
/* You can typecast an @FT_Glyph to @FT_BitmapGlyph if you have */
/* `glyph->format == FT_GLYPH_FORMAT_BITMAP'. This lets you access */
/* the bitmap's contents easily. */
/* */
/* The corresponding pixel buffer is always owned by @FT_BitmapGlyph */
/* and is thus created and destroyed with it. */
/* */
typedef struct FT_BitmapGlyphRec_
{
FT_GlyphRec root;
FT_Int left;
FT_Int top;
FT_Bitmap bitmap;
} FT_BitmapGlyphRec;
/*************************************************************************/
/* */
/* <Type> */
/* FT_OutlineGlyph */
/* */
/* <Description> */
/* A handle to an object used to model an outline glyph image. This */
/* is a sub-class of @FT_Glyph, and a pointer to @FT_OutlineGlyphRec. */
/* */
typedef struct FT_OutlineGlyphRec_* FT_OutlineGlyph;
/*************************************************************************/
/* */
/* <Struct> */
/* FT_OutlineGlyphRec */
/* */
/* <Description> */
/* A structure used for outline (vectorial) glyph images. This */
/* really is a `sub-class' of @FT_GlyphRec. */
/* */
/* <Fields> */
/* root :: The root @FT_Glyph fields. */
/* */
/* outline :: A descriptor for the outline. */
/* */
/* <Note> */
/* You can typecast an @FT_Glyph to @FT_OutlineGlyph if you have */
/* `glyph->format == FT_GLYPH_FORMAT_OUTLINE'. This lets you access */
/* the outline's content easily. */
/* */
/* As the outline is extracted from a glyph slot, its coordinates are */
/* expressed normally in 26.6 pixels, unless the flag */
/* @FT_LOAD_NO_SCALE was used in @FT_Load_Glyph() or @FT_Load_Char(). */
/* */
/* The outline's tables are always owned by the object and are */
/* destroyed with it. */
/* */
typedef struct FT_OutlineGlyphRec_
{
FT_GlyphRec root;
FT_Outline outline;
} FT_OutlineGlyphRec;
/*************************************************************************/
/* */
/* <Function> */
/* FT_Get_Glyph */
/* */
/* <Description> */
/* A function used to extract a glyph image from a slot. Note that */
/* the created @FT_Glyph object must be released with @FT_Done_Glyph. */
/* */
/* <Input> */
/* slot :: A handle to the source glyph slot. */
/* */
/* <Output> */
/* aglyph :: A handle to the glyph object. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
FT_EXPORT( FT_Error )
FT_Get_Glyph( FT_GlyphSlot slot,
FT_Glyph *aglyph );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Glyph_Copy */
/* */
/* <Description> */
/* A function used to copy a glyph image. Note that the created */
/* @FT_Glyph object must be released with @FT_Done_Glyph. */
/* */
/* <Input> */
/* source :: A handle to the source glyph object. */
/* */
/* <Output> */
/* target :: A handle to the target glyph object. 0~in case of */
/* error. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
FT_EXPORT( FT_Error )
FT_Glyph_Copy( FT_Glyph source,
FT_Glyph *target );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Glyph_Transform */
/* */
/* <Description> */
/* Transform a glyph image if its format is scalable. */
/* */
/* <InOut> */
/* glyph :: A handle to the target glyph object. */
/* */
/* <Input> */
/* matrix :: A pointer to a 2x2 matrix to apply. */
/* */
/* delta :: A pointer to a 2d vector to apply. Coordinates are */
/* expressed in 1/64th of a pixel. */
/* */
/* <Return> */
/* FreeType error code (if not 0, the glyph format is not scalable). */
/* */
/* <Note> */
/* The 2x2 transformation matrix is also applied to the glyph's */
/* advance vector. */
/* */
FT_EXPORT( FT_Error )
FT_Glyph_Transform( FT_Glyph glyph,
FT_Matrix* matrix,
FT_Vector* delta );
/*************************************************************************/
/* */
/* <Enum> */
/* FT_Glyph_BBox_Mode */
/* */
/* <Description> */
/* The mode how the values of @FT_Glyph_Get_CBox are returned. */
/* */
/* <Values> */
/* FT_GLYPH_BBOX_UNSCALED :: */
/* Return unscaled font units. */
/* */
/* FT_GLYPH_BBOX_SUBPIXELS :: */
/* Return unfitted 26.6 coordinates. */
/* */
/* FT_GLYPH_BBOX_GRIDFIT :: */
/* Return grid-fitted 26.6 coordinates. */
/* */
/* FT_GLYPH_BBOX_TRUNCATE :: */
/* Return coordinates in integer pixels. */
/* */
/* FT_GLYPH_BBOX_PIXELS :: */
/* Return grid-fitted pixel coordinates. */
/* */
typedef enum FT_Glyph_BBox_Mode_
{
FT_GLYPH_BBOX_UNSCALED = 0,
FT_GLYPH_BBOX_SUBPIXELS = 0,
FT_GLYPH_BBOX_GRIDFIT = 1,
FT_GLYPH_BBOX_TRUNCATE = 2,
FT_GLYPH_BBOX_PIXELS = 3
} FT_Glyph_BBox_Mode;
/* these constants are deprecated; use the corresponding */
/* `FT_Glyph_BBox_Mode' values instead */
#define ft_glyph_bbox_unscaled FT_GLYPH_BBOX_UNSCALED
#define ft_glyph_bbox_subpixels FT_GLYPH_BBOX_SUBPIXELS
#define ft_glyph_bbox_gridfit FT_GLYPH_BBOX_GRIDFIT
#define ft_glyph_bbox_truncate FT_GLYPH_BBOX_TRUNCATE
#define ft_glyph_bbox_pixels FT_GLYPH_BBOX_PIXELS
/*************************************************************************/
/* */
/* <Function> */
/* FT_Glyph_Get_CBox */
/* */
/* <Description> */
/* Return a glyph's `control box'. The control box encloses all the */
/* outline's points, including Bézier control points. Though it */
/* coincides with the exact bounding box for most glyphs, it can be */
/* slightly larger in some situations (like when rotating an outline */
/* that contains Bézier outside arcs). */
/* */
/* Computing the control box is very fast, while getting the bounding */
/* box can take much more time as it needs to walk over all segments */
/* and arcs in the outline. To get the latter, you can use the */
/* `ftbbox' component, which is dedicated to this single task. */
/* */
/* <Input> */
/* glyph :: A handle to the source glyph object. */
/* */
/* mode :: The mode that indicates how to interpret the returned */
/* bounding box values. */
/* */
/* <Output> */
/* acbox :: The glyph coordinate bounding box. Coordinates are */
/* expressed in 1/64th of pixels if it is grid-fitted. */
/* */
/* <Note> */
/* Coordinates are relative to the glyph origin, using the y~upwards */
/* convention. */
/* */
/* If the glyph has been loaded with @FT_LOAD_NO_SCALE, `bbox_mode' */
/* must be set to @FT_GLYPH_BBOX_UNSCALED to get unscaled font */
/* units in 26.6 pixel format. The value @FT_GLYPH_BBOX_SUBPIXELS */
/* is another name for this constant. */
/* */
/* If the font is tricky and the glyph has been loaded with */
/* @FT_LOAD_NO_SCALE, the resulting CBox is meaningless. To get */
/* reasonable values for the CBox it is necessary to load the glyph */
/* at a large ppem value (so that the hinting instructions can */
/* properly shift and scale the subglyphs), then extracting the CBox, */
/* which can be eventually converted back to font units. */
/* */
/* Note that the maximum coordinates are exclusive, which means that */
/* one can compute the width and height of the glyph image (be it in */
/* integer or 26.6 pixels) as: */
/* */
/* { */
/* width = bbox.xMax - bbox.xMin; */
/* height = bbox.yMax - bbox.yMin; */
/* } */
/* */
/* Note also that for 26.6 coordinates, if `bbox_mode' is set to */
/* @FT_GLYPH_BBOX_GRIDFIT, the coordinates will also be grid-fitted, */
/* which corresponds to: */
/* */
/* { */
/* bbox.xMin = FLOOR(bbox.xMin); */
/* bbox.yMin = FLOOR(bbox.yMin); */
/* bbox.xMax = CEILING(bbox.xMax); */
/* bbox.yMax = CEILING(bbox.yMax); */
/* } */
/* */
/* To get the bbox in pixel coordinates, set `bbox_mode' to */
/* @FT_GLYPH_BBOX_TRUNCATE. */
/* */
/* To get the bbox in grid-fitted pixel coordinates, set `bbox_mode' */
/* to @FT_GLYPH_BBOX_PIXELS. */
/* */
FT_EXPORT( void )
FT_Glyph_Get_CBox( FT_Glyph glyph,
FT_UInt bbox_mode,
FT_BBox *acbox );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Glyph_To_Bitmap */
/* */
/* <Description> */
/* Convert a given glyph object to a bitmap glyph object. */
/* */
/* <InOut> */
/* the_glyph :: A pointer to a handle to the target glyph. */
/* */
/* <Input> */
/* render_mode :: An enumeration that describes how the data is */
/* rendered. */
/* */
/* origin :: A pointer to a vector used to translate the glyph */
/* image before rendering. Can be~0 (if no */
/* translation). The origin is expressed in */
/* 26.6 pixels. */
/* */
/* destroy :: A boolean that indicates that the original glyph */
/* image should be destroyed by this function. It is */
/* never destroyed in case of error. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* This function does nothing if the glyph format isn't scalable. */
/* */
/* The glyph image is translated with the `origin' vector before */
/* rendering. */
/* */
/* The first parameter is a pointer to an @FT_Glyph handle, that will */
/* be _replaced_ by this function (with newly allocated data). */
/* Typically, you would use (omitting error handling): */
/* */
/* */
/* { */
/* FT_Glyph glyph; */
/* FT_BitmapGlyph glyph_bitmap; */
/* */
/* */
/* // load glyph */
/* error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAUT ); */
/* */
/* // extract glyph image */
/* error = FT_Get_Glyph( face->glyph, &glyph ); */
/* */
/* // convert to a bitmap (default render mode + destroying old) */
/* if ( glyph->format != FT_GLYPH_FORMAT_BITMAP ) */
/* { */
/* error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL, */
/* 0, 1 ); */
/* if ( error ) // `glyph' unchanged */
/* ... */
/* } */
/* */
/* // access bitmap content by typecasting */
/* glyph_bitmap = (FT_BitmapGlyph)glyph; */
/* */
/* // do funny stuff with it, like blitting/drawing */
/* ... */
/* */
/* // discard glyph image (bitmap or not) */
/* FT_Done_Glyph( glyph ); */
/* } */
/* */
/* */
/* Here another example, again without error handling: */
/* */
/* */
/* { */
/* FT_Glyph glyphs[MAX_GLYPHS] */
/* */
/* */
/* ... */
/* */
/* for ( idx = 0; i < MAX_GLYPHS; i++ ) */
/* error = FT_Load_Glyph( face, idx, FT_LOAD_DEFAULT ) || */
/* FT_Get_Glyph ( face->glyph, &glyph[idx] ); */
/* */
/* ... */
/* */
/* for ( idx = 0; i < MAX_GLYPHS; i++ ) */
/* { */
/* FT_Glyph bitmap = glyphs[idx]; */
/* */
/* */
/* ... */
/* */
/* // after this call, `bitmap' no longer points into */
/* // the `glyphs' array (and the old value isn't destroyed) */
/* FT_Glyph_To_Bitmap( &bitmap, FT_RENDER_MODE_MONO, 0, 0 ); */
/* */
/* ... */
/* */
/* FT_Done_Glyph( bitmap ); */
/* } */
/* */
/* ... */
/* */
/* for ( idx = 0; i < MAX_GLYPHS; i++ ) */
/* FT_Done_Glyph( glyphs[idx] ); */
/* } */
/* */
FT_EXPORT( FT_Error )
FT_Glyph_To_Bitmap( FT_Glyph* the_glyph,
FT_Render_Mode render_mode,
FT_Vector* origin,
FT_Bool destroy );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Done_Glyph */
/* */
/* <Description> */
/* Destroy a given glyph. */
/* */
/* <Input> */
/* glyph :: A handle to the target glyph object. */
/* */
FT_EXPORT( void )
FT_Done_Glyph( FT_Glyph glyph );
/* */
/* other helpful functions */
/*************************************************************************/
/* */
/* <Section> */
/* computations */
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/* <Function> */
/* FT_Matrix_Multiply */
/* */
/* <Description> */
/* Perform the matrix operation `b = a*b'. */
/* */
/* <Input> */
/* a :: A pointer to matrix `a'. */
/* */
/* <InOut> */
/* b :: A pointer to matrix `b'. */
/* */
/* <Note> */
/* The result is undefined if either `a' or `b' is zero. */
/* */
FT_EXPORT( void )
FT_Matrix_Multiply( const FT_Matrix* a,
FT_Matrix* b );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Matrix_Invert */
/* */
/* <Description> */
/* Invert a 2x2 matrix. Return an error if it can't be inverted. */
/* */
/* <InOut> */
/* matrix :: A pointer to the target matrix. Remains untouched in */
/* case of error. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
FT_EXPORT( FT_Error )
FT_Matrix_Invert( FT_Matrix* matrix );
/* */
FT_END_HEADER
#endif /* FTGLYPH_H_ */
/* END */
/* Local Variables: */
/* coding: utf-8 */
/* End: */

View File

@ -0,0 +1,357 @@
/***************************************************************************/
/* */
/* ftgxval.h */
/* */
/* FreeType API for validating TrueTypeGX/AAT tables (specification). */
/* */
/* Copyright 2004-2016 by */
/* Masatake YAMATO, Redhat K.K, */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
/***************************************************************************/
/* */
/* gxvalid is derived from both gxlayout module and otvalid module. */
/* Development of gxlayout is supported by the Information-technology */
/* Promotion Agency(IPA), Japan. */
/* */
/***************************************************************************/
#ifndef FTGXVAL_H_
#define FTGXVAL_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* gx_validation */
/* */
/* <Title> */
/* TrueTypeGX/AAT Validation */
/* */
/* <Abstract> */
/* An API to validate TrueTypeGX/AAT tables. */
/* */
/* <Description> */
/* This section contains the declaration of functions to validate */
/* some TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, */
/* trak, prop, lcar). */
/* */
/* <Order> */
/* FT_TrueTypeGX_Validate */
/* FT_TrueTypeGX_Free */
/* */
/* FT_ClassicKern_Validate */
/* FT_ClassicKern_Free */
/* */
/* FT_VALIDATE_GX_LENGTH */
/* FT_VALIDATE_GXXXX */
/* FT_VALIDATE_CKERNXXX */
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/* */
/* Warning: Use FT_VALIDATE_XXX to validate a table. */
/* Following definitions are for gxvalid developers. */
/* */
/* */
/*************************************************************************/
#define FT_VALIDATE_feat_INDEX 0
#define FT_VALIDATE_mort_INDEX 1
#define FT_VALIDATE_morx_INDEX 2
#define FT_VALIDATE_bsln_INDEX 3
#define FT_VALIDATE_just_INDEX 4
#define FT_VALIDATE_kern_INDEX 5
#define FT_VALIDATE_opbd_INDEX 6
#define FT_VALIDATE_trak_INDEX 7
#define FT_VALIDATE_prop_INDEX 8
#define FT_VALIDATE_lcar_INDEX 9
#define FT_VALIDATE_GX_LAST_INDEX FT_VALIDATE_lcar_INDEX
/*************************************************************************
*
* @macro:
* FT_VALIDATE_GX_LENGTH
*
* @description:
* The number of tables checked in this module. Use it as a parameter
* for the `table-length' argument of function @FT_TrueTypeGX_Validate.
*/
#define FT_VALIDATE_GX_LENGTH (FT_VALIDATE_GX_LAST_INDEX + 1)
/* */
/* Up to 0x1000 is used by otvalid.
Ox2xxx is reserved for feature OT extension. */
#define FT_VALIDATE_GX_START 0x4000
#define FT_VALIDATE_GX_BITFIELD( tag ) \
( FT_VALIDATE_GX_START << FT_VALIDATE_##tag##_INDEX )
/**********************************************************************
*
* @enum:
* FT_VALIDATE_GXXXX
*
* @description:
* A list of bit-field constants used with @FT_TrueTypeGX_Validate to
* indicate which TrueTypeGX/AAT Type tables should be validated.
*
* @values:
* FT_VALIDATE_feat ::
* Validate `feat' table.
*
* FT_VALIDATE_mort ::
* Validate `mort' table.
*
* FT_VALIDATE_morx ::
* Validate `morx' table.
*
* FT_VALIDATE_bsln ::
* Validate `bsln' table.
*
* FT_VALIDATE_just ::
* Validate `just' table.
*
* FT_VALIDATE_kern ::
* Validate `kern' table.
*
* FT_VALIDATE_opbd ::
* Validate `opbd' table.
*
* FT_VALIDATE_trak ::
* Validate `trak' table.
*
* FT_VALIDATE_prop ::
* Validate `prop' table.
*
* FT_VALIDATE_lcar ::
* Validate `lcar' table.
*
* FT_VALIDATE_GX ::
* Validate all TrueTypeGX tables (feat, mort, morx, bsln, just, kern,
* opbd, trak, prop and lcar).
*
*/
#define FT_VALIDATE_feat FT_VALIDATE_GX_BITFIELD( feat )
#define FT_VALIDATE_mort FT_VALIDATE_GX_BITFIELD( mort )
#define FT_VALIDATE_morx FT_VALIDATE_GX_BITFIELD( morx )
#define FT_VALIDATE_bsln FT_VALIDATE_GX_BITFIELD( bsln )
#define FT_VALIDATE_just FT_VALIDATE_GX_BITFIELD( just )
#define FT_VALIDATE_kern FT_VALIDATE_GX_BITFIELD( kern )
#define FT_VALIDATE_opbd FT_VALIDATE_GX_BITFIELD( opbd )
#define FT_VALIDATE_trak FT_VALIDATE_GX_BITFIELD( trak )
#define FT_VALIDATE_prop FT_VALIDATE_GX_BITFIELD( prop )
#define FT_VALIDATE_lcar FT_VALIDATE_GX_BITFIELD( lcar )
#define FT_VALIDATE_GX ( FT_VALIDATE_feat | \
FT_VALIDATE_mort | \
FT_VALIDATE_morx | \
FT_VALIDATE_bsln | \
FT_VALIDATE_just | \
FT_VALIDATE_kern | \
FT_VALIDATE_opbd | \
FT_VALIDATE_trak | \
FT_VALIDATE_prop | \
FT_VALIDATE_lcar )
/**********************************************************************
*
* @function:
* FT_TrueTypeGX_Validate
*
* @description:
* Validate various TrueTypeGX tables to assure that all offsets and
* indices are valid. The idea is that a higher-level library that
* actually does the text layout can access those tables without
* error checking (which can be quite time consuming).
*
* @input:
* face ::
* A handle to the input face.
*
* validation_flags ::
* A bit field that specifies the tables to be validated. See
* @FT_VALIDATE_GXXXX for possible values.
*
* table_length ::
* The size of the `tables' array. Normally, @FT_VALIDATE_GX_LENGTH
* should be passed.
*
* @output:
* tables ::
* The array where all validated sfnt tables are stored.
* The array itself must be allocated by a client.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* This function only works with TrueTypeGX fonts, returning an error
* otherwise.
*
* After use, the application should deallocate the buffers pointed to by
* each `tables' element, by calling @FT_TrueTypeGX_Free. A NULL value
* indicates that the table either doesn't exist in the font, the
* application hasn't asked for validation, or the validator doesn't have
* the ability to validate the sfnt table.
*/
FT_EXPORT( FT_Error )
FT_TrueTypeGX_Validate( FT_Face face,
FT_UInt validation_flags,
FT_Bytes tables[FT_VALIDATE_GX_LENGTH],
FT_UInt table_length );
/**********************************************************************
*
* @function:
* FT_TrueTypeGX_Free
*
* @description:
* Free the buffer allocated by TrueTypeGX validator.
*
* @input:
* face ::
* A handle to the input face.
*
* table ::
* The pointer to the buffer allocated by
* @FT_TrueTypeGX_Validate.
*
* @note:
* This function must be used to free the buffer allocated by
* @FT_TrueTypeGX_Validate only.
*/
FT_EXPORT( void )
FT_TrueTypeGX_Free( FT_Face face,
FT_Bytes table );
/**********************************************************************
*
* @enum:
* FT_VALIDATE_CKERNXXX
*
* @description:
* A list of bit-field constants used with @FT_ClassicKern_Validate
* to indicate the classic kern dialect or dialects. If the selected
* type doesn't fit, @FT_ClassicKern_Validate regards the table as
* invalid.
*
* @values:
* FT_VALIDATE_MS ::
* Handle the `kern' table as a classic Microsoft kern table.
*
* FT_VALIDATE_APPLE ::
* Handle the `kern' table as a classic Apple kern table.
*
* FT_VALIDATE_CKERN ::
* Handle the `kern' as either classic Apple or Microsoft kern table.
*/
#define FT_VALIDATE_MS ( FT_VALIDATE_GX_START << 0 )
#define FT_VALIDATE_APPLE ( FT_VALIDATE_GX_START << 1 )
#define FT_VALIDATE_CKERN ( FT_VALIDATE_MS | FT_VALIDATE_APPLE )
/**********************************************************************
*
* @function:
* FT_ClassicKern_Validate
*
* @description:
* Validate classic (16-bit format) kern table to assure that the offsets
* and indices are valid. The idea is that a higher-level library that
* actually does the text layout can access those tables without error
* checking (which can be quite time consuming).
*
* The `kern' table validator in @FT_TrueTypeGX_Validate deals with both
* the new 32-bit format and the classic 16-bit format, while
* FT_ClassicKern_Validate only supports the classic 16-bit format.
*
* @input:
* face ::
* A handle to the input face.
*
* validation_flags ::
* A bit field that specifies the dialect to be validated. See
* @FT_VALIDATE_CKERNXXX for possible values.
*
* @output:
* ckern_table ::
* A pointer to the kern table.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* After use, the application should deallocate the buffers pointed to by
* `ckern_table', by calling @FT_ClassicKern_Free. A NULL value
* indicates that the table doesn't exist in the font.
*/
FT_EXPORT( FT_Error )
FT_ClassicKern_Validate( FT_Face face,
FT_UInt validation_flags,
FT_Bytes *ckern_table );
/**********************************************************************
*
* @function:
* FT_ClassicKern_Free
*
* @description:
* Free the buffer allocated by classic Kern validator.
*
* @input:
* face ::
* A handle to the input face.
*
* table ::
* The pointer to the buffer that is allocated by
* @FT_ClassicKern_Validate.
*
* @note:
* This function must be used to free the buffer allocated by
* @FT_ClassicKern_Validate only.
*/
FT_EXPORT( void )
FT_ClassicKern_Free( FT_Face face,
FT_Bytes table );
/* */
FT_END_HEADER
#endif /* FTGXVAL_H_ */
/* END */

View File

@ -0,0 +1,148 @@
/***************************************************************************/
/* */
/* ftgzip.h */
/* */
/* Gzip-compressed stream support. */
/* */
/* Copyright 2002-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTGZIP_H_
#define FTGZIP_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* gzip */
/* */
/* <Title> */
/* GZIP Streams */
/* */
/* <Abstract> */
/* Using gzip-compressed font files. */
/* */
/* <Description> */
/* This section contains the declaration of Gzip-specific functions. */
/* */
/*************************************************************************/
/************************************************************************
*
* @function:
* FT_Stream_OpenGzip
*
* @description:
* Open a new stream to parse gzip-compressed font files. This is
* mainly used to support the compressed `*.pcf.gz' fonts that come
* with XFree86.
*
* @input:
* stream ::
* The target embedding stream.
*
* source ::
* The source stream.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* The source stream must be opened _before_ calling this function.
*
* Calling the internal function `FT_Stream_Close' on the new stream will
* *not* call `FT_Stream_Close' on the source stream. None of the stream
* objects will be released to the heap.
*
* The stream implementation is very basic and resets the decompression
* process each time seeking backwards is needed within the stream.
*
* In certain builds of the library, gzip compression recognition is
* automatically handled when calling @FT_New_Face or @FT_Open_Face.
* This means that if no font driver is capable of handling the raw
* compressed file, the library will try to open a gzipped stream from
* it and re-open the face with it.
*
* This function may return `FT_Err_Unimplemented_Feature' if your build
* of FreeType was not compiled with zlib support.
*/
FT_EXPORT( FT_Error )
FT_Stream_OpenGzip( FT_Stream stream,
FT_Stream source );
/************************************************************************
*
* @function:
* FT_Gzip_Uncompress
*
* @description:
* Decompress a zipped input buffer into an output buffer. This function
* is modeled after zlib's `uncompress' function.
*
* @input:
* memory ::
* A FreeType memory handle.
*
* input ::
* The input buffer.
*
* input_len ::
* The length of the input buffer.
*
* @output:
* output::
* The output buffer.
*
* @inout:
* output_len ::
* Before calling the function, this is the total size of the output
* buffer, which must be large enough to hold the entire uncompressed
* data (so the size of the uncompressed data must be known in
* advance). After calling the function, `output_len' is the size of
* the used data in `output'.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* This function may return `FT_Err_Unimplemented_Feature' if your build
* of FreeType was not compiled with zlib support.
*/
FT_EXPORT( FT_Error )
FT_Gzip_Uncompress( FT_Memory memory,
FT_Byte* output,
FT_ULong* output_len,
const FT_Byte* input,
FT_ULong input_len );
/* */
FT_END_HEADER
#endif /* FTGZIP_H_ */
/* END */

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,354 @@
/***************************************************************************/
/* */
/* ftincrem.h */
/* */
/* FreeType incremental loading (specification). */
/* */
/* Copyright 2002-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTINCREM_H_
#define FTINCREM_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/***************************************************************************
*
* @section:
* incremental
*
* @title:
* Incremental Loading
*
* @abstract:
* Custom Glyph Loading.
*
* @description:
* This section contains various functions used to perform so-called
* `incremental' glyph loading. This is a mode where all glyphs loaded
* from a given @FT_Face are provided by the client application.
*
* Apart from that, all other tables are loaded normally from the font
* file. This mode is useful when FreeType is used within another
* engine, e.g., a PostScript Imaging Processor.
*
* To enable this mode, you must use @FT_Open_Face, passing an
* @FT_Parameter with the @FT_PARAM_TAG_INCREMENTAL tag and an
* @FT_Incremental_Interface value. See the comments for
* @FT_Incremental_InterfaceRec for an example.
*
*/
/***************************************************************************
*
* @type:
* FT_Incremental
*
* @description:
* An opaque type describing a user-provided object used to implement
* `incremental' glyph loading within FreeType. This is used to support
* embedded fonts in certain environments (e.g., PostScript interpreters),
* where the glyph data isn't in the font file, or must be overridden by
* different values.
*
* @note:
* It is up to client applications to create and implement @FT_Incremental
* objects, as long as they provide implementations for the methods
* @FT_Incremental_GetGlyphDataFunc, @FT_Incremental_FreeGlyphDataFunc
* and @FT_Incremental_GetGlyphMetricsFunc.
*
* See the description of @FT_Incremental_InterfaceRec to understand how
* to use incremental objects with FreeType.
*
*/
typedef struct FT_IncrementalRec_* FT_Incremental;
/***************************************************************************
*
* @struct:
* FT_Incremental_MetricsRec
*
* @description:
* A small structure used to contain the basic glyph metrics returned
* by the @FT_Incremental_GetGlyphMetricsFunc method.
*
* @fields:
* bearing_x ::
* Left bearing, in font units.
*
* bearing_y ::
* Top bearing, in font units.
*
* advance ::
* Horizontal component of glyph advance, in font units.
*
* advance_v ::
* Vertical component of glyph advance, in font units.
*
* @note:
* These correspond to horizontal or vertical metrics depending on the
* value of the `vertical' argument to the function
* @FT_Incremental_GetGlyphMetricsFunc.
*
*/
typedef struct FT_Incremental_MetricsRec_
{
FT_Long bearing_x;
FT_Long bearing_y;
FT_Long advance;
FT_Long advance_v; /* since 2.3.12 */
} FT_Incremental_MetricsRec;
/***************************************************************************
*
* @struct:
* FT_Incremental_Metrics
*
* @description:
* A handle to an @FT_Incremental_MetricsRec structure.
*
*/
typedef struct FT_Incremental_MetricsRec_* FT_Incremental_Metrics;
/***************************************************************************
*
* @type:
* FT_Incremental_GetGlyphDataFunc
*
* @description:
* A function called by FreeType to access a given glyph's data bytes
* during @FT_Load_Glyph or @FT_Load_Char if incremental loading is
* enabled.
*
* Note that the format of the glyph's data bytes depends on the font
* file format. For TrueType, it must correspond to the raw bytes within
* the `glyf' table. For PostScript formats, it must correspond to the
* *unencrypted* charstring bytes, without any `lenIV' header. It is
* undefined for any other format.
*
* @input:
* incremental ::
* Handle to an opaque @FT_Incremental handle provided by the client
* application.
*
* glyph_index ::
* Index of relevant glyph.
*
* @output:
* adata ::
* A structure describing the returned glyph data bytes (which will be
* accessed as a read-only byte block).
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* If this function returns successfully the method
* @FT_Incremental_FreeGlyphDataFunc will be called later to release
* the data bytes.
*
* Nested calls to @FT_Incremental_GetGlyphDataFunc can happen for
* compound glyphs.
*
*/
typedef FT_Error
(*FT_Incremental_GetGlyphDataFunc)( FT_Incremental incremental,
FT_UInt glyph_index,
FT_Data* adata );
/***************************************************************************
*
* @type:
* FT_Incremental_FreeGlyphDataFunc
*
* @description:
* A function used to release the glyph data bytes returned by a
* successful call to @FT_Incremental_GetGlyphDataFunc.
*
* @input:
* incremental ::
* A handle to an opaque @FT_Incremental handle provided by the client
* application.
*
* data ::
* A structure describing the glyph data bytes (which will be accessed
* as a read-only byte block).
*
*/
typedef void
(*FT_Incremental_FreeGlyphDataFunc)( FT_Incremental incremental,
FT_Data* data );
/***************************************************************************
*
* @type:
* FT_Incremental_GetGlyphMetricsFunc
*
* @description:
* A function used to retrieve the basic metrics of a given glyph index
* before accessing its data. This is necessary because, in certain
* formats like TrueType, the metrics are stored in a different place from
* the glyph images proper.
*
* @input:
* incremental ::
* A handle to an opaque @FT_Incremental handle provided by the client
* application.
*
* glyph_index ::
* Index of relevant glyph.
*
* vertical ::
* If true, return vertical metrics.
*
* ametrics ::
* This parameter is used for both input and output.
* The original glyph metrics, if any, in font units. If metrics are
* not available all the values must be set to zero.
*
* @output:
* ametrics ::
* The replacement glyph metrics in font units.
*
*/
typedef FT_Error
(*FT_Incremental_GetGlyphMetricsFunc)
( FT_Incremental incremental,
FT_UInt glyph_index,
FT_Bool vertical,
FT_Incremental_MetricsRec *ametrics );
/**************************************************************************
*
* @struct:
* FT_Incremental_FuncsRec
*
* @description:
* A table of functions for accessing fonts that load data
* incrementally. Used in @FT_Incremental_InterfaceRec.
*
* @fields:
* get_glyph_data ::
* The function to get glyph data. Must not be null.
*
* free_glyph_data ::
* The function to release glyph data. Must not be null.
*
* get_glyph_metrics ::
* The function to get glyph metrics. May be null if the font does
* not provide overriding glyph metrics.
*
*/
typedef struct FT_Incremental_FuncsRec_
{
FT_Incremental_GetGlyphDataFunc get_glyph_data;
FT_Incremental_FreeGlyphDataFunc free_glyph_data;
FT_Incremental_GetGlyphMetricsFunc get_glyph_metrics;
} FT_Incremental_FuncsRec;
/***************************************************************************
*
* @struct:
* FT_Incremental_InterfaceRec
*
* @description:
* A structure to be used with @FT_Open_Face to indicate that the user
* wants to support incremental glyph loading. You should use it with
* @FT_PARAM_TAG_INCREMENTAL as in the following example:
*
* {
* FT_Incremental_InterfaceRec inc_int;
* FT_Parameter parameter;
* FT_Open_Args open_args;
*
*
* // set up incremental descriptor
* inc_int.funcs = my_funcs;
* inc_int.object = my_object;
*
* // set up optional parameter
* parameter.tag = FT_PARAM_TAG_INCREMENTAL;
* parameter.data = &inc_int;
*
* // set up FT_Open_Args structure
* open_args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS;
* open_args.pathname = my_font_pathname;
* open_args.num_params = 1;
* open_args.params = &parameter; // we use one optional argument
*
* // open the font
* error = FT_Open_Face( library, &open_args, index, &face );
* ...
* }
*
*/
typedef struct FT_Incremental_InterfaceRec_
{
const FT_Incremental_FuncsRec* funcs;
FT_Incremental object;
} FT_Incremental_InterfaceRec;
/***************************************************************************
*
* @type:
* FT_Incremental_Interface
*
* @description:
* A pointer to an @FT_Incremental_InterfaceRec structure.
*
*/
typedef FT_Incremental_InterfaceRec* FT_Incremental_Interface;
/***************************************************************************
*
* @constant:
* FT_PARAM_TAG_INCREMENTAL
*
* @description:
* A constant used as the tag of @FT_Parameter structures to indicate
* an incremental loading object to be used by FreeType.
*
*/
#define FT_PARAM_TAG_INCREMENTAL FT_MAKE_TAG( 'i', 'n', 'c', 'r' )
/* */
FT_END_HEADER
#endif /* FTINCREM_H_ */
/* END */

View File

@ -0,0 +1,286 @@
/***************************************************************************/
/* */
/* ftlcdfil.h */
/* */
/* FreeType API for color filtering of subpixel bitmap glyphs */
/* (specification). */
/* */
/* Copyright 2006-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTLCDFIL_H_
#define FTLCDFIL_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/***************************************************************************
*
* @section:
* lcd_filtering
*
* @title:
* LCD Filtering
*
* @abstract:
* Reduce color fringes of subpixel-rendered bitmaps.
*
* @description:
* Subpixel rendering exploits the color-striped structure of LCD
* pixels, increasing the available resolution in the direction of the
* stripe (usually horizontal RGB) by a factor of~3. Since these
* subpixels are color pixels, using them unfiltered creates severe
* color fringes. Use the @FT_Library_SetLcdFilter API to specify a
* low-pass filter, which is then applied to subpixel-rendered bitmaps
* generated through @FT_Render_Glyph. The filter sacrifices some of
* the higher resolution to reduce color fringes, making the glyph image
* slightly blurrier. Positional improvements will remain.
*
* Note that no filter is active by default, and that this function is
* *not* implemented in default builds of the library. You need to
* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your `ftoption.h' file
* in order to activate it and explicitly call @FT_Library_SetLcdFilter
* to enable it.
*
* A filter should have two properties:
*
* 1) It should be normalized, meaning the sum of the 5~components
* should be 256 (0x100). It is possible to go above or under this
* target sum, however: going under means tossing out contrast, going
* over means invoking clamping and thereby non-linearities that
* increase contrast somewhat at the expense of greater distortion
* and color-fringing. Contrast is better enhanced through stem
* darkening.
*
* 2) It should be color-balanced, meaning a filter `{~a, b, c, b, a~}'
* where a~+ b~=~c. It distributes the computed coverage for one
* subpixel to all subpixels equally, sacrificing some won resolution
* but drastically reducing color-fringing. Positioning improvements
* remain! Note that color-fringing can only really be minimized
* when using a color-balanced filter and alpha-blending the glyph
* onto a surface in linear space; see @FT_Render_Glyph.
*
* Regarding the form, a filter can be a `boxy' filter or a `beveled'
* filter. Boxy filters are sharper but are less forgiving of non-ideal
* gamma curves of a screen (viewing angles!), beveled filters are
* fuzzier but more tolerant.
*
* Examples:
*
* - [0x10 0x40 0x70 0x40 0x10] is beveled and neither balanced nor
* normalized.
*
* - [0x1A 0x33 0x4D 0x33 0x1A] is beveled and balanced but not
* normalized.
*
* - [0x19 0x33 0x66 0x4c 0x19] is beveled and normalized but not
* balanced.
*
* - [0x00 0x4c 0x66 0x4c 0x00] is boxily beveled and normalized but not
* balanced.
*
* - [0x00 0x55 0x56 0x55 0x00] is boxy, normalized, and almost
* balanced.
*
* - [0x08 0x4D 0x56 0x4D 0x08] is beveled, normalized and, almost
* balanced.
*
* The filter affects glyph bitmaps rendered through @FT_Render_Glyph,
* @FT_Load_Glyph, and @FT_Load_Char. It does _not_ affect the output
* of @FT_Outline_Render and @FT_Outline_Get_Bitmap.
*
* If this feature is activated, the dimensions of LCD glyph bitmaps are
* either wider or taller than the dimensions of the corresponding
* outline with regard to the pixel grid. For example, for
* @FT_RENDER_MODE_LCD, the filter adds 3~subpixels to the left, and
* 3~subpixels to the right. The bitmap offset values are adjusted
* accordingly, so clients shouldn't need to modify their layout and
* glyph positioning code when enabling the filter.
*
* It is important to understand that linear alpha blending and gamma
* correction is critical for correctly rendering glyphs onto surfaces
* without artifacts and even more critical when subpixel rendering is
* involved.
*
* Each of the 3~alpha values (subpixels) is independently used to blend
* one color channel. That is, red alpha blends the red channel of the
* text color with the red channel of the background pixel. The
* distribution of density values by the color-balanced filter assumes
* alpha blending is done in linear space; only then color artifacts
* cancel out.
*/
/****************************************************************************
*
* @enum:
* FT_LcdFilter
*
* @description:
* A list of values to identify various types of LCD filters.
*
* @values:
* FT_LCD_FILTER_NONE ::
* Do not perform filtering. When used with subpixel rendering, this
* results in sometimes severe color fringes.
*
* FT_LCD_FILTER_DEFAULT ::
* The default filter reduces color fringes considerably, at the cost
* of a slight blurriness in the output.
*
* It is a beveled, normalized, and color-balanced five-tap filter
* that is more forgiving to screens with non-ideal gamma curves and
* viewing angles. Note that while color-fringing is reduced, it can
* only be minimized by using linear alpha blending and gamma
* correction to render glyphs onto surfaces. The default filter
* weights are [0x08 0x4D 0x56 0x4D 0x08].
*
* FT_LCD_FILTER_LIGHT ::
* The light filter is a variant that is sharper at the cost of
* slightly more color fringes than the default one.
*
* It is a boxy, normalized, and color-balanced three-tap filter that
* is less forgiving to screens with non-ideal gamma curves and
* viewing angles. This filter works best when the rendering system
* uses linear alpha blending and gamma correction to render glyphs
* onto surfaces. The light filter weights are
* [0x00 0x55 0x56 0x55 0x00].
*
* FT_LCD_FILTER_LEGACY ::
* This filter corresponds to the original libXft color filter. It
* provides high contrast output but can exhibit really bad color
* fringes if glyphs are not extremely well hinted to the pixel grid.
* In other words, it only works well if the TrueType bytecode
* interpreter is enabled *and* high-quality hinted fonts are used.
*
* This filter is only provided for comparison purposes, and might be
* disabled or stay unsupported in the future.
*
* FT_LCD_FILTER_LEGACY1 ::
* For historical reasons, the FontConfig library returns a different
* enumeration value for legacy LCD filtering. To make code work that
* (incorrectly) forwards FontConfig's enumeration value to
* @FT_Library_SetLcdFilter without proper mapping, it is thus easiest
* to have another enumeration value, which is completely equal to
* `FT_LCD_FILTER_LEGACY'.
*
* @since:
* 2.3.0 (`FT_LCD_FILTER_LEGACY1' since 2.6.2)
*/
typedef enum FT_LcdFilter_
{
FT_LCD_FILTER_NONE = 0,
FT_LCD_FILTER_DEFAULT = 1,
FT_LCD_FILTER_LIGHT = 2,
FT_LCD_FILTER_LEGACY1 = 3,
FT_LCD_FILTER_LEGACY = 16,
FT_LCD_FILTER_MAX /* do not remove */
} FT_LcdFilter;
/**************************************************************************
*
* @func:
* FT_Library_SetLcdFilter
*
* @description:
* This function is used to apply color filtering to LCD decimated
* bitmaps, like the ones used when calling @FT_Render_Glyph with
* @FT_RENDER_MODE_LCD or @FT_RENDER_MODE_LCD_V.
*
* @input:
* library ::
* A handle to the target library instance.
*
* filter ::
* The filter type.
*
* You can use @FT_LCD_FILTER_NONE here to disable this feature, or
* @FT_LCD_FILTER_DEFAULT to use a default filter that should work
* well on most LCD screens.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* This feature is always disabled by default. Clients must make an
* explicit call to this function with a `filter' value other than
* @FT_LCD_FILTER_NONE in order to enable it.
*
* Due to *PATENTS* covering subpixel rendering, this function doesn't
* do anything except returning `FT_Err_Unimplemented_Feature' if the
* configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
* defined in your build of the library, which should correspond to all
* default builds of FreeType.
*
* @since:
* 2.3.0
*/
FT_EXPORT( FT_Error )
FT_Library_SetLcdFilter( FT_Library library,
FT_LcdFilter filter );
/**************************************************************************
*
* @func:
* FT_Library_SetLcdFilterWeights
*
* @description:
* This function can be used to enable LCD filter with custom weights,
* instead of using presets in @FT_Library_SetLcdFilter.
*
* @input:
* library ::
* A handle to the target library instance.
*
* weights ::
* A pointer to an array; the function copies the first five bytes and
* uses them to specify the filter weights.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* Due to *PATENTS* covering subpixel rendering, this function doesn't
* do anything except returning `FT_Err_Unimplemented_Feature' if the
* configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
* defined in your build of the library, which should correspond to all
* default builds of FreeType.
*
* @since:
* 2.4.0
*/
FT_EXPORT( FT_Error )
FT_Library_SetLcdFilterWeights( FT_Library library,
unsigned char *weights );
/* */
FT_END_HEADER
#endif /* FTLCDFIL_H_ */
/* END */

View File

@ -0,0 +1,276 @@
/***************************************************************************/
/* */
/* ftlist.h */
/* */
/* Generic list support for FreeType (specification). */
/* */
/* Copyright 1996-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
/*************************************************************************/
/* */
/* This file implements functions relative to list processing. Its */
/* data structures are defined in `freetype.h'. */
/* */
/*************************************************************************/
#ifndef FTLIST_H_
#define FTLIST_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* list_processing */
/* */
/* <Title> */
/* List Processing */
/* */
/* <Abstract> */
/* Simple management of lists. */
/* */
/* <Description> */
/* This section contains various definitions related to list */
/* processing using doubly-linked nodes. */
/* */
/* <Order> */
/* FT_List */
/* FT_ListNode */
/* FT_ListRec */
/* FT_ListNodeRec */
/* */
/* FT_List_Add */
/* FT_List_Insert */
/* FT_List_Find */
/* FT_List_Remove */
/* FT_List_Up */
/* FT_List_Iterate */
/* FT_List_Iterator */
/* FT_List_Finalize */
/* FT_List_Destructor */
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/* <Function> */
/* FT_List_Find */
/* */
/* <Description> */
/* Find the list node for a given listed object. */
/* */
/* <Input> */
/* list :: A pointer to the parent list. */
/* data :: The address of the listed object. */
/* */
/* <Return> */
/* List node. NULL if it wasn't found. */
/* */
FT_EXPORT( FT_ListNode )
FT_List_Find( FT_List list,
void* data );
/*************************************************************************/
/* */
/* <Function> */
/* FT_List_Add */
/* */
/* <Description> */
/* Append an element to the end of a list. */
/* */
/* <InOut> */
/* list :: A pointer to the parent list. */
/* node :: The node to append. */
/* */
FT_EXPORT( void )
FT_List_Add( FT_List list,
FT_ListNode node );
/*************************************************************************/
/* */
/* <Function> */
/* FT_List_Insert */
/* */
/* <Description> */
/* Insert an element at the head of a list. */
/* */
/* <InOut> */
/* list :: A pointer to parent list. */
/* node :: The node to insert. */
/* */
FT_EXPORT( void )
FT_List_Insert( FT_List list,
FT_ListNode node );
/*************************************************************************/
/* */
/* <Function> */
/* FT_List_Remove */
/* */
/* <Description> */
/* Remove a node from a list. This function doesn't check whether */
/* the node is in the list! */
/* */
/* <Input> */
/* node :: The node to remove. */
/* */
/* <InOut> */
/* list :: A pointer to the parent list. */
/* */
FT_EXPORT( void )
FT_List_Remove( FT_List list,
FT_ListNode node );
/*************************************************************************/
/* */
/* <Function> */
/* FT_List_Up */
/* */
/* <Description> */
/* Move a node to the head/top of a list. Used to maintain LRU */
/* lists. */
/* */
/* <InOut> */
/* list :: A pointer to the parent list. */
/* node :: The node to move. */
/* */
FT_EXPORT( void )
FT_List_Up( FT_List list,
FT_ListNode node );
/*************************************************************************/
/* */
/* <FuncType> */
/* FT_List_Iterator */
/* */
/* <Description> */
/* An FT_List iterator function that is called during a list parse */
/* by @FT_List_Iterate. */
/* */
/* <Input> */
/* node :: The current iteration list node. */
/* */
/* user :: A typeless pointer passed to @FT_List_Iterate. */
/* Can be used to point to the iteration's state. */
/* */
typedef FT_Error
(*FT_List_Iterator)( FT_ListNode node,
void* user );
/*************************************************************************/
/* */
/* <Function> */
/* FT_List_Iterate */
/* */
/* <Description> */
/* Parse a list and calls a given iterator function on each element. */
/* Note that parsing is stopped as soon as one of the iterator calls */
/* returns a non-zero value. */
/* */
/* <Input> */
/* list :: A handle to the list. */
/* iterator :: An iterator function, called on each node of the list. */
/* user :: A user-supplied field that is passed as the second */
/* argument to the iterator. */
/* */
/* <Return> */
/* The result (a FreeType error code) of the last iterator call. */
/* */
FT_EXPORT( FT_Error )
FT_List_Iterate( FT_List list,
FT_List_Iterator iterator,
void* user );
/*************************************************************************/
/* */
/* <FuncType> */
/* FT_List_Destructor */
/* */
/* <Description> */
/* An @FT_List iterator function that is called during a list */
/* finalization by @FT_List_Finalize to destroy all elements in a */
/* given list. */
/* */
/* <Input> */
/* system :: The current system object. */
/* */
/* data :: The current object to destroy. */
/* */
/* user :: A typeless pointer passed to @FT_List_Iterate. It can */
/* be used to point to the iteration's state. */
/* */
typedef void
(*FT_List_Destructor)( FT_Memory memory,
void* data,
void* user );
/*************************************************************************/
/* */
/* <Function> */
/* FT_List_Finalize */
/* */
/* <Description> */
/* Destroy all elements in the list as well as the list itself. */
/* */
/* <Input> */
/* list :: A handle to the list. */
/* */
/* destroy :: A list destructor that will be applied to each element */
/* of the list. Set this to NULL if not needed. */
/* */
/* memory :: The current memory object that handles deallocation. */
/* */
/* user :: A user-supplied field that is passed as the last */
/* argument to the destructor. */
/* */
/* <Note> */
/* This function expects that all nodes added by @FT_List_Add or */
/* @FT_List_Insert have been dynamically allocated. */
/* */
FT_EXPORT( void )
FT_List_Finalize( FT_List list,
FT_List_Destructor destroy,
FT_Memory memory,
void* user );
/* */
FT_END_HEADER
#endif /* FTLIST_H_ */
/* END */

View File

@ -0,0 +1,99 @@
/***************************************************************************/
/* */
/* ftlzw.h */
/* */
/* LZW-compressed stream support. */
/* */
/* Copyright 2004-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTLZW_H_
#define FTLZW_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* lzw */
/* */
/* <Title> */
/* LZW Streams */
/* */
/* <Abstract> */
/* Using LZW-compressed font files. */
/* */
/* <Description> */
/* This section contains the declaration of LZW-specific functions. */
/* */
/*************************************************************************/
/************************************************************************
*
* @function:
* FT_Stream_OpenLZW
*
* @description:
* Open a new stream to parse LZW-compressed font files. This is
* mainly used to support the compressed `*.pcf.Z' fonts that come
* with XFree86.
*
* @input:
* stream :: The target embedding stream.
*
* source :: The source stream.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* The source stream must be opened _before_ calling this function.
*
* Calling the internal function `FT_Stream_Close' on the new stream will
* *not* call `FT_Stream_Close' on the source stream. None of the stream
* objects will be released to the heap.
*
* The stream implementation is very basic and resets the decompression
* process each time seeking backwards is needed within the stream
*
* In certain builds of the library, LZW compression recognition is
* automatically handled when calling @FT_New_Face or @FT_Open_Face.
* This means that if no font driver is capable of handling the raw
* compressed file, the library will try to open a LZW stream from it
* and re-open the face with it.
*
* This function may return `FT_Err_Unimplemented_Feature' if your build
* of FreeType was not compiled with LZW support.
*/
FT_EXPORT( FT_Error )
FT_Stream_OpenLZW( FT_Stream stream,
FT_Stream source );
/* */
FT_END_HEADER
#endif /* FTLZW_H_ */
/* END */

View File

@ -0,0 +1,274 @@
/***************************************************************************/
/* */
/* ftmac.h */
/* */
/* Additional Mac-specific API. */
/* */
/* Copyright 1996-2016 by */
/* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
/***************************************************************************/
/* */
/* NOTE: Include this file after FT_FREETYPE_H and after any */
/* Mac-specific headers (because this header uses Mac types such as */
/* Handle, FSSpec, FSRef, etc.) */
/* */
/***************************************************************************/
#ifndef FTMAC_H_
#define FTMAC_H_
#include <ft2build.h>
FT_BEGIN_HEADER
/* gcc-3.4.1 and later can warn about functions tagged as deprecated */
#ifndef FT_DEPRECATED_ATTRIBUTE
#if defined(__GNUC__) && \
((__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)))
#define FT_DEPRECATED_ATTRIBUTE __attribute__((deprecated))
#else
#define FT_DEPRECATED_ATTRIBUTE
#endif
#endif
/*************************************************************************/
/* */
/* <Section> */
/* mac_specific */
/* */
/* <Title> */
/* Mac Specific Interface */
/* */
/* <Abstract> */
/* Only available on the Macintosh. */
/* */
/* <Description> */
/* The following definitions are only available if FreeType is */
/* compiled on a Macintosh. */
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/* <Function> */
/* FT_New_Face_From_FOND */
/* */
/* <Description> */
/* Create a new face object from a FOND resource. */
/* */
/* <InOut> */
/* library :: A handle to the library resource. */
/* */
/* <Input> */
/* fond :: A FOND resource. */
/* */
/* face_index :: Only supported for the -1 `sanity check' special */
/* case. */
/* */
/* <Output> */
/* aface :: A handle to a new face object. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Notes> */
/* This function can be used to create @FT_Face objects from fonts */
/* that are installed in the system as follows. */
/* */
/* { */
/* fond = GetResource( 'FOND', fontName ); */
/* error = FT_New_Face_From_FOND( library, fond, 0, &face ); */
/* } */
/* */
FT_EXPORT( FT_Error )
FT_New_Face_From_FOND( FT_Library library,
Handle fond,
FT_Long face_index,
FT_Face *aface )
FT_DEPRECATED_ATTRIBUTE;
/*************************************************************************/
/* */
/* <Function> */
/* FT_GetFile_From_Mac_Name */
/* */
/* <Description> */
/* Return an FSSpec for the disk file containing the named font. */
/* */
/* <Input> */
/* fontName :: Mac OS name of the font (e.g., Times New Roman */
/* Bold). */
/* */
/* <Output> */
/* pathSpec :: FSSpec to the file. For passing to */
/* @FT_New_Face_From_FSSpec. */
/* */
/* face_index :: Index of the face. For passing to */
/* @FT_New_Face_From_FSSpec. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
FT_EXPORT( FT_Error )
FT_GetFile_From_Mac_Name( const char* fontName,
FSSpec* pathSpec,
FT_Long* face_index )
FT_DEPRECATED_ATTRIBUTE;
/*************************************************************************/
/* */
/* <Function> */
/* FT_GetFile_From_Mac_ATS_Name */
/* */
/* <Description> */
/* Return an FSSpec for the disk file containing the named font. */
/* */
/* <Input> */
/* fontName :: Mac OS name of the font in ATS framework. */
/* */
/* <Output> */
/* pathSpec :: FSSpec to the file. For passing to */
/* @FT_New_Face_From_FSSpec. */
/* */
/* face_index :: Index of the face. For passing to */
/* @FT_New_Face_From_FSSpec. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
FT_EXPORT( FT_Error )
FT_GetFile_From_Mac_ATS_Name( const char* fontName,
FSSpec* pathSpec,
FT_Long* face_index )
FT_DEPRECATED_ATTRIBUTE;
/*************************************************************************/
/* */
/* <Function> */
/* FT_GetFilePath_From_Mac_ATS_Name */
/* */
/* <Description> */
/* Return a pathname of the disk file and face index for given font */
/* name that is handled by ATS framework. */
/* */
/* <Input> */
/* fontName :: Mac OS name of the font in ATS framework. */
/* */
/* <Output> */
/* path :: Buffer to store pathname of the file. For passing */
/* to @FT_New_Face. The client must allocate this */
/* buffer before calling this function. */
/* */
/* maxPathSize :: Lengths of the buffer `path' that client allocated. */
/* */
/* face_index :: Index of the face. For passing to @FT_New_Face. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
FT_EXPORT( FT_Error )
FT_GetFilePath_From_Mac_ATS_Name( const char* fontName,
UInt8* path,
UInt32 maxPathSize,
FT_Long* face_index )
FT_DEPRECATED_ATTRIBUTE;
/*************************************************************************/
/* */
/* <Function> */
/* FT_New_Face_From_FSSpec */
/* */
/* <Description> */
/* Create a new face object from a given resource and typeface index */
/* using an FSSpec to the font file. */
/* */
/* <InOut> */
/* library :: A handle to the library resource. */
/* */
/* <Input> */
/* spec :: FSSpec to the font file. */
/* */
/* face_index :: The index of the face within the resource. The */
/* first face has index~0. */
/* <Output> */
/* aface :: A handle to a new face object. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* @FT_New_Face_From_FSSpec is identical to @FT_New_Face except */
/* it accepts an FSSpec instead of a path. */
/* */
FT_EXPORT( FT_Error )
FT_New_Face_From_FSSpec( FT_Library library,
const FSSpec *spec,
FT_Long face_index,
FT_Face *aface )
FT_DEPRECATED_ATTRIBUTE;
/*************************************************************************/
/* */
/* <Function> */
/* FT_New_Face_From_FSRef */
/* */
/* <Description> */
/* Create a new face object from a given resource and typeface index */
/* using an FSRef to the font file. */
/* */
/* <InOut> */
/* library :: A handle to the library resource. */
/* */
/* <Input> */
/* spec :: FSRef to the font file. */
/* */
/* face_index :: The index of the face within the resource. The */
/* first face has index~0. */
/* <Output> */
/* aface :: A handle to a new face object. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* @FT_New_Face_From_FSRef is identical to @FT_New_Face except */
/* it accepts an FSRef instead of a path. */
/* */
FT_EXPORT( FT_Error )
FT_New_Face_From_FSRef( FT_Library library,
const FSRef *ref,
FT_Long face_index,
FT_Face *aface )
FT_DEPRECATED_ATTRIBUTE;
/* */
FT_END_HEADER
#endif /* FTMAC_H_ */
/* END */

View File

@ -0,0 +1,461 @@
/***************************************************************************/
/* */
/* ftmm.h */
/* */
/* FreeType Multiple Master font interface (specification). */
/* */
/* Copyright 1996-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTMM_H_
#define FTMM_H_
#include <ft2build.h>
#include FT_TYPE1_TABLES_H
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* multiple_masters */
/* */
/* <Title> */
/* Multiple Masters */
/* */
/* <Abstract> */
/* How to manage Multiple Masters fonts. */
/* */
/* <Description> */
/* The following types and functions are used to manage Multiple */
/* Master fonts, i.e., the selection of specific design instances by */
/* setting design axis coordinates. */
/* */
/* George Williams has extended this interface to make it work with */
/* both Type~1 Multiple Masters fonts and GX distortable (var) */
/* fonts. Some of these routines only work with MM fonts, others */
/* will work with both types. They are similar enough that a */
/* consistent interface makes sense. */
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/* <Struct> */
/* FT_MM_Axis */
/* */
/* <Description> */
/* A simple structure used to model a given axis in design space for */
/* Multiple Masters fonts. */
/* */
/* This structure can't be used for GX var fonts. */
/* */
/* <Fields> */
/* name :: The axis's name. */
/* */
/* minimum :: The axis's minimum design coordinate. */
/* */
/* maximum :: The axis's maximum design coordinate. */
/* */
typedef struct FT_MM_Axis_
{
FT_String* name;
FT_Long minimum;
FT_Long maximum;
} FT_MM_Axis;
/*************************************************************************/
/* */
/* <Struct> */
/* FT_Multi_Master */
/* */
/* <Description> */
/* A structure used to model the axes and space of a Multiple Masters */
/* font. */
/* */
/* This structure can't be used for GX var fonts. */
/* */
/* <Fields> */
/* num_axis :: Number of axes. Cannot exceed~4. */
/* */
/* num_designs :: Number of designs; should be normally 2^num_axis */
/* even though the Type~1 specification strangely */
/* allows for intermediate designs to be present. */
/* This number cannot exceed~16. */
/* */
/* axis :: A table of axis descriptors. */
/* */
typedef struct FT_Multi_Master_
{
FT_UInt num_axis;
FT_UInt num_designs;
FT_MM_Axis axis[T1_MAX_MM_AXIS];
} FT_Multi_Master;
/*************************************************************************/
/* */
/* <Struct> */
/* FT_Var_Axis */
/* */
/* <Description> */
/* A simple structure used to model a given axis in design space for */
/* Multiple Masters and GX var fonts. */
/* */
/* <Fields> */
/* name :: The axis's name. */
/* Not always meaningful for GX. */
/* */
/* minimum :: The axis's minimum design coordinate. */
/* */
/* def :: The axis's default design coordinate. */
/* FreeType computes meaningful default values for MM; it */
/* is then an integer value, not in 16.16 format. */
/* */
/* maximum :: The axis's maximum design coordinate. */
/* */
/* tag :: The axis's tag (the GX equivalent to `name'). */
/* FreeType provides default values for MM if possible. */
/* */
/* strid :: The entry in `name' table (another GX version of */
/* `name'). */
/* Not meaningful for MM. */
/* */
typedef struct FT_Var_Axis_
{
FT_String* name;
FT_Fixed minimum;
FT_Fixed def;
FT_Fixed maximum;
FT_ULong tag;
FT_UInt strid;
} FT_Var_Axis;
/*************************************************************************/
/* */
/* <Struct> */
/* FT_Var_Named_Style */
/* */
/* <Description> */
/* A simple structure used to model a named style in a GX var font. */
/* */
/* This structure can't be used for MM fonts. */
/* */
/* <Fields> */
/* coords :: The design coordinates for this style. */
/* This is an array with one entry for each axis. */
/* */
/* strid :: The entry in `name' table identifying this style. */
/* */
typedef struct FT_Var_Named_Style_
{
FT_Fixed* coords;
FT_UInt strid;
FT_UInt psid; /* since 2.7.1 */
} FT_Var_Named_Style;
/*************************************************************************/
/* */
/* <Struct> */
/* FT_MM_Var */
/* */
/* <Description> */
/* A structure used to model the axes and space of a Multiple Masters */
/* or GX var distortable font. */
/* */
/* Some fields are specific to one format and not to the other. */
/* */
/* <Fields> */
/* num_axis :: The number of axes. The maximum value is~4 for */
/* MM; no limit in GX. */
/* */
/* num_designs :: The number of designs; should be normally */
/* 2^num_axis for MM fonts. Not meaningful for GX */
/* (where every glyph could have a different */
/* number of designs). */
/* */
/* num_namedstyles :: The number of named styles; a `named style' is */
/* a tuple of design coordinates that has a string */
/* ID (in the `name' table) associated with it. */
/* The font can tell the user that, for example, */
/* [Weight=1.5,Width=1.1] is `Bold'. */
/* */
/* For Type 1 Multiple Masters fonts, this value */
/* is always zero because the format does not */
/* support named styles. */
/* */
/* axis :: An axis descriptor table. */
/* GX fonts contain slightly more data than MM. */
/* Memory management of this pointer is done */
/* internally by FreeType. */
/* */
/* namedstyle :: A named style table. */
/* Only meaningful with GX. */
/* Memory management of this pointer is done */
/* internally by FreeType. */
/* */
typedef struct FT_MM_Var_
{
FT_UInt num_axis;
FT_UInt num_designs;
FT_UInt num_namedstyles;
FT_Var_Axis* axis;
FT_Var_Named_Style* namedstyle;
} FT_MM_Var;
/*************************************************************************/
/* */
/* <Function> */
/* FT_Get_Multi_Master */
/* */
/* <Description> */
/* Retrieve the Multiple Master descriptor of a given font. */
/* */
/* This function can't be used with GX fonts. */
/* */
/* <Input> */
/* face :: A handle to the source face. */
/* */
/* <Output> */
/* amaster :: The Multiple Masters descriptor. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
FT_EXPORT( FT_Error )
FT_Get_Multi_Master( FT_Face face,
FT_Multi_Master *amaster );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Get_MM_Var */
/* */
/* <Description> */
/* Retrieve the Multiple Master/GX var descriptor of a given font. */
/* */
/* <Input> */
/* face :: A handle to the source face. */
/* */
/* <Output> */
/* amaster :: The Multiple Masters/GX var descriptor. */
/* Allocates a data structure, which the user must */
/* deallocate with `free' after use. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
FT_EXPORT( FT_Error )
FT_Get_MM_Var( FT_Face face,
FT_MM_Var* *amaster );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Set_MM_Design_Coordinates */
/* */
/* <Description> */
/* For Multiple Masters fonts, choose an interpolated font design */
/* through design coordinates. */
/* */
/* This function can't be used with GX fonts. */
/* */
/* <InOut> */
/* face :: A handle to the source face. */
/* */
/* <Input> */
/* num_coords :: The number of available design coordinates. If it */
/* is larger than the number of axes, ignore the excess */
/* values. If it is smaller than the number of axes, */
/* use default values for the remaining axes. */
/* */
/* coords :: An array of design coordinates. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
FT_EXPORT( FT_Error )
FT_Set_MM_Design_Coordinates( FT_Face face,
FT_UInt num_coords,
FT_Long* coords );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Set_Var_Design_Coordinates */
/* */
/* <Description> */
/* For Multiple Master or GX Var fonts, choose an interpolated font */
/* design through design coordinates. */
/* */
/* <InOut> */
/* face :: A handle to the source face. */
/* */
/* <Input> */
/* num_coords :: The number of available design coordinates. If it */
/* is larger than the number of axes, ignore the excess */
/* values. If it is smaller than the number of axes, */
/* use default values for the remaining axes. */
/* */
/* coords :: An array of design coordinates. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
FT_EXPORT( FT_Error )
FT_Set_Var_Design_Coordinates( FT_Face face,
FT_UInt num_coords,
FT_Fixed* coords );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Get_Var_Design_Coordinates */
/* */
/* <Description> */
/* For Multiple Master and GX Var fonts, get the design coordinates */
/* of the currently selected interpolated font. */
/* */
/* <Input> */
/* face :: A handle to the source face. */
/* */
/* num_coords :: The number of design coordinates to retrieve. If it */
/* is larger than the number of axes, set the excess */
/* values to~0. */
/* */
/* <Output> */
/* coords :: The design coordinates array. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
FT_EXPORT( FT_Error )
FT_Get_Var_Design_Coordinates( FT_Face face,
FT_UInt num_coords,
FT_Fixed* coords );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Set_MM_Blend_Coordinates */
/* */
/* <Description> */
/* For Multiple Masters and GX var fonts, choose an interpolated font */
/* design through normalized blend coordinates. */
/* */
/* <InOut> */
/* face :: A handle to the source face. */
/* */
/* <Input> */
/* num_coords :: The number of available design coordinates. If it */
/* is larger than the number of axes, ignore the excess */
/* values. If it is smaller than the number of axes, */
/* use default values for the remaining axes. */
/* */
/* coords :: The design coordinates array (each element must be */
/* between 0 and 1.0 for MM fonts, and between -1.0 and */
/* 1.0 for GX var fonts). */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
FT_EXPORT( FT_Error )
FT_Set_MM_Blend_Coordinates( FT_Face face,
FT_UInt num_coords,
FT_Fixed* coords );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Get_MM_Blend_Coordinates */
/* */
/* <Description> */
/* For Multiple Masters and GX var fonts, get the normalized blend */
/* coordinates of the currently selected interpolated font. */
/* */
/* <Input> */
/* face :: A handle to the source face. */
/* */
/* num_coords :: The number of normalized blend coordinates to */
/* retrieve. If it is larger than the number of axes, */
/* set the excess values to~0.5 for MM fonts, and to~0 */
/* for GX var fonts. */
/* */
/* <Output> */
/* coords :: The normalized blend coordinates array. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
FT_EXPORT( FT_Error )
FT_Get_MM_Blend_Coordinates( FT_Face face,
FT_UInt num_coords,
FT_Fixed* coords );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Set_Var_Blend_Coordinates */
/* */
/* <Description> */
/* This is another name of @FT_Set_MM_Blend_Coordinates. */
/* */
FT_EXPORT( FT_Error )
FT_Set_Var_Blend_Coordinates( FT_Face face,
FT_UInt num_coords,
FT_Fixed* coords );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Get_Var_Blend_Coordinates */
/* */
/* <Description> */
/* This is another name of @FT_Get_MM_Blend_Coordinates. */
/* */
FT_EXPORT( FT_Error )
FT_Get_Var_Blend_Coordinates( FT_Face face,
FT_UInt num_coords,
FT_Fixed* coords );
/* */
FT_END_HEADER
#endif /* FTMM_H_ */
/* END */

View File

@ -0,0 +1,667 @@
/***************************************************************************/
/* */
/* ftmodapi.h */
/* */
/* FreeType modules public interface (specification). */
/* */
/* Copyright 1996-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTMODAPI_H_
#define FTMODAPI_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* module_management */
/* */
/* <Title> */
/* Module Management */
/* */
/* <Abstract> */
/* How to add, upgrade, remove, and control modules from FreeType. */
/* */
/* <Description> */
/* The definitions below are used to manage modules within FreeType. */
/* Modules can be added, upgraded, and removed at runtime. */
/* Additionally, some module properties can be controlled also. */
/* */
/* Here is a list of possible values of the `module_name' field in */
/* the @FT_Module_Class structure. */
/* */
/* { */
/* autofitter */
/* bdf */
/* cff */
/* gxvalid */
/* otvalid */
/* pcf */
/* pfr */
/* psaux */
/* pshinter */
/* psnames */
/* raster1 */
/* sfnt */
/* smooth, smooth-lcd, smooth-lcdv */
/* truetype */
/* type1 */
/* type42 */
/* t1cid */
/* winfonts */
/* } */
/* */
/* Note that the FreeType Cache sub-system is not a FreeType module. */
/* */
/* <Order> */
/* FT_Module */
/* FT_Module_Constructor */
/* FT_Module_Destructor */
/* FT_Module_Requester */
/* FT_Module_Class */
/* */
/* FT_Add_Module */
/* FT_Get_Module */
/* FT_Remove_Module */
/* FT_Add_Default_Modules */
/* */
/* FT_Property_Set */
/* FT_Property_Get */
/* */
/* FT_New_Library */
/* FT_Done_Library */
/* FT_Reference_Library */
/* */
/* FT_Renderer */
/* FT_Renderer_Class */
/* */
/* FT_Get_Renderer */
/* FT_Set_Renderer */
/* */
/* FT_Set_Debug_Hook */
/* */
/*************************************************************************/
/* module bit flags */
#define FT_MODULE_FONT_DRIVER 1 /* this module is a font driver */
#define FT_MODULE_RENDERER 2 /* this module is a renderer */
#define FT_MODULE_HINTER 4 /* this module is a glyph hinter */
#define FT_MODULE_STYLER 8 /* this module is a styler */
#define FT_MODULE_DRIVER_SCALABLE 0x100 /* the driver supports */
/* scalable fonts */
#define FT_MODULE_DRIVER_NO_OUTLINES 0x200 /* the driver does not */
/* support vector outlines */
#define FT_MODULE_DRIVER_HAS_HINTER 0x400 /* the driver provides its */
/* own hinter */
#define FT_MODULE_DRIVER_HINTS_LIGHTLY 0x800 /* the driver's hinter */
/* produces LIGHT hints */
/* deprecated values */
#define ft_module_font_driver FT_MODULE_FONT_DRIVER
#define ft_module_renderer FT_MODULE_RENDERER
#define ft_module_hinter FT_MODULE_HINTER
#define ft_module_styler FT_MODULE_STYLER
#define ft_module_driver_scalable FT_MODULE_DRIVER_SCALABLE
#define ft_module_driver_no_outlines FT_MODULE_DRIVER_NO_OUTLINES
#define ft_module_driver_has_hinter FT_MODULE_DRIVER_HAS_HINTER
#define ft_module_driver_hints_lightly FT_MODULE_DRIVER_HINTS_LIGHTLY
typedef FT_Pointer FT_Module_Interface;
/*************************************************************************/
/* */
/* <FuncType> */
/* FT_Module_Constructor */
/* */
/* <Description> */
/* A function used to initialize (not create) a new module object. */
/* */
/* <Input> */
/* module :: The module to initialize. */
/* */
typedef FT_Error
(*FT_Module_Constructor)( FT_Module module );
/*************************************************************************/
/* */
/* <FuncType> */
/* FT_Module_Destructor */
/* */
/* <Description> */
/* A function used to finalize (not destroy) a given module object. */
/* */
/* <Input> */
/* module :: The module to finalize. */
/* */
typedef void
(*FT_Module_Destructor)( FT_Module module );
/*************************************************************************/
/* */
/* <FuncType> */
/* FT_Module_Requester */
/* */
/* <Description> */
/* A function used to query a given module for a specific interface. */
/* */
/* <Input> */
/* module :: The module to be searched. */
/* */
/* name :: The name of the interface in the module. */
/* */
typedef FT_Module_Interface
(*FT_Module_Requester)( FT_Module module,
const char* name );
/*************************************************************************/
/* */
/* <Struct> */
/* FT_Module_Class */
/* */
/* <Description> */
/* The module class descriptor. */
/* */
/* <Fields> */
/* module_flags :: Bit flags describing the module. */
/* */
/* module_size :: The size of one module object/instance in */
/* bytes. */
/* */
/* module_name :: The name of the module. */
/* */
/* module_version :: The version, as a 16.16 fixed number */
/* (major.minor). */
/* */
/* module_requires :: The version of FreeType this module requires, */
/* as a 16.16 fixed number (major.minor). Starts */
/* at version 2.0, i.e., 0x20000. */
/* */
/* module_init :: The initializing function. */
/* */
/* module_done :: The finalizing function. */
/* */
/* get_interface :: The interface requesting function. */
/* */
typedef struct FT_Module_Class_
{
FT_ULong module_flags;
FT_Long module_size;
const FT_String* module_name;
FT_Fixed module_version;
FT_Fixed module_requires;
const void* module_interface;
FT_Module_Constructor module_init;
FT_Module_Destructor module_done;
FT_Module_Requester get_interface;
} FT_Module_Class;
/*************************************************************************/
/* */
/* <Function> */
/* FT_Add_Module */
/* */
/* <Description> */
/* Add a new module to a given library instance. */
/* */
/* <InOut> */
/* library :: A handle to the library object. */
/* */
/* <Input> */
/* clazz :: A pointer to class descriptor for the module. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* An error will be returned if a module already exists by that name, */
/* or if the module requires a version of FreeType that is too great. */
/* */
FT_EXPORT( FT_Error )
FT_Add_Module( FT_Library library,
const FT_Module_Class* clazz );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Get_Module */
/* */
/* <Description> */
/* Find a module by its name. */
/* */
/* <Input> */
/* library :: A handle to the library object. */
/* */
/* module_name :: The module's name (as an ASCII string). */
/* */
/* <Return> */
/* A module handle. 0~if none was found. */
/* */
/* <Note> */
/* FreeType's internal modules aren't documented very well, and you */
/* should look up the source code for details. */
/* */
FT_EXPORT( FT_Module )
FT_Get_Module( FT_Library library,
const char* module_name );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Remove_Module */
/* */
/* <Description> */
/* Remove a given module from a library instance. */
/* */
/* <InOut> */
/* library :: A handle to a library object. */
/* */
/* <Input> */
/* module :: A handle to a module object. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* The module object is destroyed by the function in case of success. */
/* */
FT_EXPORT( FT_Error )
FT_Remove_Module( FT_Library library,
FT_Module module );
/**********************************************************************
*
* @function:
* FT_Property_Set
*
* @description:
* Set a property for a given module.
*
* @input:
* library ::
* A handle to the library the module is part of.
*
* module_name ::
* The module name.
*
* property_name ::
* The property name. Properties are described in the `Synopsis'
* subsection of the module's documentation.
*
* Note that only a few modules have properties.
*
* value ::
* A generic pointer to a variable or structure that gives the new
* value of the property. The exact definition of `value' is
* dependent on the property; see the `Synopsis' subsection of the
* module's documentation.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* If `module_name' isn't a valid module name, or `property_name'
* doesn't specify a valid property, or if `value' doesn't represent a
* valid value for the given property, an error is returned.
*
* The following example sets property `bar' (a simple integer) in
* module `foo' to value~1.
*
* {
* FT_UInt bar;
*
*
* bar = 1;
* FT_Property_Set( library, "foo", "bar", &bar );
* }
*
* Note that the FreeType Cache sub-system doesn't recognize module
* property changes. To avoid glyph lookup confusion within the cache
* you should call @FTC_Manager_Reset to completely flush the cache if
* a module property gets changed after @FTC_Manager_New has been
* called.
*
* It is not possible to set properties of the FreeType Cache
* sub-system itself with FT_Property_Set; use @FTC_Property_Set
* instead.
*
* @since:
* 2.4.11
*
*/
FT_EXPORT( FT_Error )
FT_Property_Set( FT_Library library,
const FT_String* module_name,
const FT_String* property_name,
const void* value );
/**********************************************************************
*
* @function:
* FT_Property_Get
*
* @description:
* Get a module's property value.
*
* @input:
* library ::
* A handle to the library the module is part of.
*
* module_name ::
* The module name.
*
* property_name ::
* The property name. Properties are described in the `Synopsis'
* subsection of the module's documentation.
*
* @inout:
* value ::
* A generic pointer to a variable or structure that gives the
* value of the property. The exact definition of `value' is
* dependent on the property; see the `Synopsis' subsection of the
* module's documentation.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* If `module_name' isn't a valid module name, or `property_name'
* doesn't specify a valid property, or if `value' doesn't represent a
* valid value for the given property, an error is returned.
*
* The following example gets property `baz' (a range) in module `foo'.
*
* {
* typedef range_
* {
* FT_Int32 min;
* FT_Int32 max;
*
* } range;
*
* range baz;
*
*
* FT_Property_Get( library, "foo", "baz", &baz );
* }
*
* It is not possible to retrieve properties of the FreeType Cache
* sub-system with FT_Property_Get; use @FTC_Property_Get instead.
*
* @since:
* 2.4.11
*
*/
FT_EXPORT( FT_Error )
FT_Property_Get( FT_Library library,
const FT_String* module_name,
const FT_String* property_name,
void* value );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Reference_Library */
/* */
/* <Description> */
/* A counter gets initialized to~1 at the time an @FT_Library */
/* structure is created. This function increments the counter. */
/* @FT_Done_Library then only destroys a library if the counter is~1, */
/* otherwise it simply decrements the counter. */
/* */
/* This function helps in managing life-cycles of structures that */
/* reference @FT_Library objects. */
/* */
/* <Input> */
/* library :: A handle to a target library object. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Since> */
/* 2.4.2 */
/* */
FT_EXPORT( FT_Error )
FT_Reference_Library( FT_Library library );
/*************************************************************************/
/* */
/* <Function> */
/* FT_New_Library */
/* */
/* <Description> */
/* This function is used to create a new FreeType library instance */
/* from a given memory object. It is thus possible to use libraries */
/* with distinct memory allocators within the same program. Note, */
/* however, that the used @FT_Memory structure is expected to remain */
/* valid for the life of the @FT_Library object. */
/* */
/* Normally, you would call this function (followed by a call to */
/* @FT_Add_Default_Modules or a series of calls to @FT_Add_Module) */
/* instead of @FT_Init_FreeType to initialize the FreeType library. */
/* */
/* Don't use @FT_Done_FreeType but @FT_Done_Library to destroy a */
/* library instance. */
/* */
/* <Input> */
/* memory :: A handle to the original memory object. */
/* */
/* <Output> */
/* alibrary :: A pointer to handle of a new library object. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* See the discussion of reference counters in the description of */
/* @FT_Reference_Library. */
/* */
FT_EXPORT( FT_Error )
FT_New_Library( FT_Memory memory,
FT_Library *alibrary );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Done_Library */
/* */
/* <Description> */
/* Discard a given library object. This closes all drivers and */
/* discards all resource objects. */
/* */
/* <Input> */
/* library :: A handle to the target library. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* See the discussion of reference counters in the description of */
/* @FT_Reference_Library. */
/* */
FT_EXPORT( FT_Error )
FT_Done_Library( FT_Library library );
/* */
typedef void
(*FT_DebugHook_Func)( void* arg );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Set_Debug_Hook */
/* */
/* <Description> */
/* Set a debug hook function for debugging the interpreter of a font */
/* format. */
/* */
/* <InOut> */
/* library :: A handle to the library object. */
/* */
/* <Input> */
/* hook_index :: The index of the debug hook. You should use the */
/* values defined in `ftobjs.h', e.g., */
/* `FT_DEBUG_HOOK_TRUETYPE'. */
/* */
/* debug_hook :: The function used to debug the interpreter. */
/* */
/* <Note> */
/* Currently, four debug hook slots are available, but only two (for */
/* the TrueType and the Type~1 interpreter) are defined. */
/* */
/* Since the internal headers of FreeType are no longer installed, */
/* the symbol `FT_DEBUG_HOOK_TRUETYPE' isn't available publicly. */
/* This is a bug and will be fixed in a forthcoming release. */
/* */
FT_EXPORT( void )
FT_Set_Debug_Hook( FT_Library library,
FT_UInt hook_index,
FT_DebugHook_Func debug_hook );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Add_Default_Modules */
/* */
/* <Description> */
/* Add the set of default drivers to a given library object. */
/* This is only useful when you create a library object with */
/* @FT_New_Library (usually to plug a custom memory manager). */
/* */
/* <InOut> */
/* library :: A handle to a new library object. */
/* */
FT_EXPORT( void )
FT_Add_Default_Modules( FT_Library library );
/**************************************************************************
*
* @section:
* truetype_engine
*
* @title:
* The TrueType Engine
*
* @abstract:
* TrueType bytecode support.
*
* @description:
* This section contains a function used to query the level of TrueType
* bytecode support compiled in this version of the library.
*
*/
/**************************************************************************
*
* @enum:
* FT_TrueTypeEngineType
*
* @description:
* A list of values describing which kind of TrueType bytecode
* engine is implemented in a given FT_Library instance. It is used
* by the @FT_Get_TrueType_Engine_Type function.
*
* @values:
* FT_TRUETYPE_ENGINE_TYPE_NONE ::
* The library doesn't implement any kind of bytecode interpreter.
*
* FT_TRUETYPE_ENGINE_TYPE_UNPATENTED ::
* Deprecated and removed.
*
* FT_TRUETYPE_ENGINE_TYPE_PATENTED ::
* The library implements a bytecode interpreter that covers
* the full instruction set of the TrueType virtual machine (this
* was governed by patents until May 2010, hence the name).
*
* @since:
* 2.2
*
*/
typedef enum FT_TrueTypeEngineType_
{
FT_TRUETYPE_ENGINE_TYPE_NONE = 0,
FT_TRUETYPE_ENGINE_TYPE_UNPATENTED,
FT_TRUETYPE_ENGINE_TYPE_PATENTED
} FT_TrueTypeEngineType;
/**************************************************************************
*
* @func:
* FT_Get_TrueType_Engine_Type
*
* @description:
* Return an @FT_TrueTypeEngineType value to indicate which level of
* the TrueType virtual machine a given library instance supports.
*
* @input:
* library ::
* A library instance.
*
* @return:
* A value indicating which level is supported.
*
* @since:
* 2.2
*
*/
FT_EXPORT( FT_TrueTypeEngineType )
FT_Get_TrueType_Engine_Type( FT_Library library );
/* */
FT_END_HEADER
#endif /* FTMODAPI_H_ */
/* END */

View File

@ -0,0 +1,194 @@
/***************************************************************************/
/* */
/* ftmoderr.h */
/* */
/* FreeType module error offsets (specification). */
/* */
/* Copyright 2001-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
/*************************************************************************/
/* */
/* This file is used to define the FreeType module error codes. */
/* */
/* If the macro FT_CONFIG_OPTION_USE_MODULE_ERRORS in `ftoption.h' is */
/* set, the lower byte of an error value identifies the error code as */
/* usual. In addition, the higher byte identifies the module. For */
/* example, the error `FT_Err_Invalid_File_Format' has value 0x0003, the */
/* error `TT_Err_Invalid_File_Format' has value 0x1303, the error */
/* `T1_Err_Invalid_File_Format' has value 0x1403, etc. */
/* */
/* Note that `FT_Err_Ok', `TT_Err_Ok', etc. are always equal to zero, */
/* including the high byte. */
/* */
/* If FT_CONFIG_OPTION_USE_MODULE_ERRORS isn't set, the higher byte of */
/* an error value is set to zero. */
/* */
/* To hide the various `XXX_Err_' prefixes in the source code, FreeType */
/* provides some macros in `fttypes.h'. */
/* */
/* FT_ERR( err ) */
/* Add current error module prefix (as defined with the */
/* `FT_ERR_PREFIX' macro) to `err'. For example, in the BDF module */
/* the line */
/* */
/* error = FT_ERR( Invalid_Outline ); */
/* */
/* expands to */
/* */
/* error = BDF_Err_Invalid_Outline; */
/* */
/* For simplicity, you can always use `FT_Err_Ok' directly instead */
/* of `FT_ERR( Ok )'. */
/* */
/* FT_ERR_EQ( errcode, err ) */
/* FT_ERR_NEQ( errcode, err ) */
/* Compare error code `errcode' with the error `err' for equality */
/* and inequality, respectively. Example: */
/* */
/* if ( FT_ERR_EQ( error, Invalid_Outline ) ) */
/* ... */
/* */
/* Using this macro you don't have to think about error prefixes. */
/* Of course, if module errors are not active, the above example is */
/* the same as */
/* */
/* if ( error == FT_Err_Invalid_Outline ) */
/* ... */
/* */
/* FT_ERROR_BASE( errcode ) */
/* FT_ERROR_MODULE( errcode ) */
/* Get base error and module error code, respectively. */
/* */
/* */
/* It can also be used to create a module error message table easily */
/* with something like */
/* */
/* { */
/* #undef FTMODERR_H_ */
/* #define FT_MODERRDEF( e, v, s ) { FT_Mod_Err_ ## e, s }, */
/* #define FT_MODERR_START_LIST { */
/* #define FT_MODERR_END_LIST { 0, 0 } }; */
/* */
/* const struct */
/* { */
/* int mod_err_offset; */
/* const char* mod_err_msg */
/* } ft_mod_errors[] = */
/* */
/* #include FT_MODULE_ERRORS_H */
/* } */
/* */
/*************************************************************************/
#ifndef FTMODERR_H_
#define FTMODERR_H_
/*******************************************************************/
/*******************************************************************/
/***** *****/
/***** SETUP MACROS *****/
/***** *****/
/*******************************************************************/
/*******************************************************************/
#undef FT_NEED_EXTERN_C
#ifndef FT_MODERRDEF
#ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS
#define FT_MODERRDEF( e, v, s ) FT_Mod_Err_ ## e = v,
#else
#define FT_MODERRDEF( e, v, s ) FT_Mod_Err_ ## e = 0,
#endif
#define FT_MODERR_START_LIST enum {
#define FT_MODERR_END_LIST FT_Mod_Err_Max };
#ifdef __cplusplus
#define FT_NEED_EXTERN_C
extern "C" {
#endif
#endif /* !FT_MODERRDEF */
/*******************************************************************/
/*******************************************************************/
/***** *****/
/***** LIST MODULE ERROR BASES *****/
/***** *****/
/*******************************************************************/
/*******************************************************************/
#ifdef FT_MODERR_START_LIST
FT_MODERR_START_LIST
#endif
FT_MODERRDEF( Base, 0x000, "base module" )
FT_MODERRDEF( Autofit, 0x100, "autofitter module" )
FT_MODERRDEF( BDF, 0x200, "BDF module" )
FT_MODERRDEF( Bzip2, 0x300, "Bzip2 module" )
FT_MODERRDEF( Cache, 0x400, "cache module" )
FT_MODERRDEF( CFF, 0x500, "CFF module" )
FT_MODERRDEF( CID, 0x600, "CID module" )
FT_MODERRDEF( Gzip, 0x700, "Gzip module" )
FT_MODERRDEF( LZW, 0x800, "LZW module" )
FT_MODERRDEF( OTvalid, 0x900, "OpenType validation module" )
FT_MODERRDEF( PCF, 0xA00, "PCF module" )
FT_MODERRDEF( PFR, 0xB00, "PFR module" )
FT_MODERRDEF( PSaux, 0xC00, "PS auxiliary module" )
FT_MODERRDEF( PShinter, 0xD00, "PS hinter module" )
FT_MODERRDEF( PSnames, 0xE00, "PS names module" )
FT_MODERRDEF( Raster, 0xF00, "raster module" )
FT_MODERRDEF( SFNT, 0x1000, "SFNT module" )
FT_MODERRDEF( Smooth, 0x1100, "smooth raster module" )
FT_MODERRDEF( TrueType, 0x1200, "TrueType module" )
FT_MODERRDEF( Type1, 0x1300, "Type 1 module" )
FT_MODERRDEF( Type42, 0x1400, "Type 42 module" )
FT_MODERRDEF( Winfonts, 0x1500, "Windows FON/FNT module" )
FT_MODERRDEF( GXvalid, 0x1600, "GX validation module" )
#ifdef FT_MODERR_END_LIST
FT_MODERR_END_LIST
#endif
/*******************************************************************/
/*******************************************************************/
/***** *****/
/***** CLEANUP *****/
/***** *****/
/*******************************************************************/
/*******************************************************************/
#ifdef FT_NEED_EXTERN_C
}
#endif
#undef FT_MODERR_START_LIST
#undef FT_MODERR_END_LIST
#undef FT_MODERRDEF
#undef FT_NEED_EXTERN_C
#endif /* FTMODERR_H_ */
/* END */

View File

@ -0,0 +1,204 @@
/***************************************************************************/
/* */
/* ftotval.h */
/* */
/* FreeType API for validating OpenType tables (specification). */
/* */
/* Copyright 2004-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
/***************************************************************************/
/* */
/* */
/* Warning: This module might be moved to a different library in the */
/* future to avoid a tight dependency between FreeType and the */
/* OpenType specification. */
/* */
/* */
/***************************************************************************/
#ifndef FTOTVAL_H_
#define FTOTVAL_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* ot_validation */
/* */
/* <Title> */
/* OpenType Validation */
/* */
/* <Abstract> */
/* An API to validate OpenType tables. */
/* */
/* <Description> */
/* This section contains the declaration of functions to validate */
/* some OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH). */
/* */
/* <Order> */
/* FT_OpenType_Validate */
/* FT_OpenType_Free */
/* */
/* FT_VALIDATE_OTXXX */
/* */
/*************************************************************************/
/**********************************************************************
*
* @enum:
* FT_VALIDATE_OTXXX
*
* @description:
* A list of bit-field constants used with @FT_OpenType_Validate to
* indicate which OpenType tables should be validated.
*
* @values:
* FT_VALIDATE_BASE ::
* Validate BASE table.
*
* FT_VALIDATE_GDEF ::
* Validate GDEF table.
*
* FT_VALIDATE_GPOS ::
* Validate GPOS table.
*
* FT_VALIDATE_GSUB ::
* Validate GSUB table.
*
* FT_VALIDATE_JSTF ::
* Validate JSTF table.
*
* FT_VALIDATE_MATH ::
* Validate MATH table.
*
* FT_VALIDATE_OT ::
* Validate all OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).
*
*/
#define FT_VALIDATE_BASE 0x0100
#define FT_VALIDATE_GDEF 0x0200
#define FT_VALIDATE_GPOS 0x0400
#define FT_VALIDATE_GSUB 0x0800
#define FT_VALIDATE_JSTF 0x1000
#define FT_VALIDATE_MATH 0x2000
#define FT_VALIDATE_OT ( FT_VALIDATE_BASE | \
FT_VALIDATE_GDEF | \
FT_VALIDATE_GPOS | \
FT_VALIDATE_GSUB | \
FT_VALIDATE_JSTF | \
FT_VALIDATE_MATH )
/**********************************************************************
*
* @function:
* FT_OpenType_Validate
*
* @description:
* Validate various OpenType tables to assure that all offsets and
* indices are valid. The idea is that a higher-level library that
* actually does the text layout can access those tables without
* error checking (which can be quite time consuming).
*
* @input:
* face ::
* A handle to the input face.
*
* validation_flags ::
* A bit field that specifies the tables to be validated. See
* @FT_VALIDATE_OTXXX for possible values.
*
* @output:
* BASE_table ::
* A pointer to the BASE table.
*
* GDEF_table ::
* A pointer to the GDEF table.
*
* GPOS_table ::
* A pointer to the GPOS table.
*
* GSUB_table ::
* A pointer to the GSUB table.
*
* JSTF_table ::
* A pointer to the JSTF table.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* This function only works with OpenType fonts, returning an error
* otherwise.
*
* After use, the application should deallocate the five tables with
* @FT_OpenType_Free. A NULL value indicates that the table either
* doesn't exist in the font, or the application hasn't asked for
* validation.
*/
FT_EXPORT( FT_Error )
FT_OpenType_Validate( FT_Face face,
FT_UInt validation_flags,
FT_Bytes *BASE_table,
FT_Bytes *GDEF_table,
FT_Bytes *GPOS_table,
FT_Bytes *GSUB_table,
FT_Bytes *JSTF_table );
/**********************************************************************
*
* @function:
* FT_OpenType_Free
*
* @description:
* Free the buffer allocated by OpenType validator.
*
* @input:
* face ::
* A handle to the input face.
*
* table ::
* The pointer to the buffer that is allocated by
* @FT_OpenType_Validate.
*
* @note:
* This function must be used to free the buffer allocated by
* @FT_OpenType_Validate only.
*/
FT_EXPORT( void )
FT_OpenType_Free( FT_Face face,
FT_Bytes table );
/* */
FT_END_HEADER
#endif /* FTOTVAL_H_ */
/* END */

View File

@ -0,0 +1,582 @@
/***************************************************************************/
/* */
/* ftoutln.h */
/* */
/* Support for the FT_Outline type used to store glyph shapes of */
/* most scalable font formats (specification). */
/* */
/* Copyright 1996-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTOUTLN_H_
#define FTOUTLN_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* outline_processing */
/* */
/* <Title> */
/* Outline Processing */
/* */
/* <Abstract> */
/* Functions to create, transform, and render vectorial glyph images. */
/* */
/* <Description> */
/* This section contains routines used to create and destroy scalable */
/* glyph images known as `outlines'. These can also be measured, */
/* transformed, and converted into bitmaps and pixmaps. */
/* */
/* <Order> */
/* FT_Outline */
/* FT_Outline_New */
/* FT_Outline_Done */
/* FT_Outline_Copy */
/* FT_Outline_Translate */
/* FT_Outline_Transform */
/* FT_Outline_Embolden */
/* FT_Outline_EmboldenXY */
/* FT_Outline_Reverse */
/* FT_Outline_Check */
/* */
/* FT_Outline_Get_CBox */
/* FT_Outline_Get_BBox */
/* */
/* FT_Outline_Get_Bitmap */
/* FT_Outline_Render */
/* FT_Outline_Decompose */
/* FT_Outline_Funcs */
/* FT_Outline_MoveToFunc */
/* FT_Outline_LineToFunc */
/* FT_Outline_ConicToFunc */
/* FT_Outline_CubicToFunc */
/* */
/* FT_Orientation */
/* FT_Outline_Get_Orientation */
/* */
/* FT_OUTLINE_XXX */
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/* <Function> */
/* FT_Outline_Decompose */
/* */
/* <Description> */
/* Walk over an outline's structure to decompose it into individual */
/* segments and Bézier arcs. This function also emits `move to' */
/* operations to indicate the start of new contours in the outline. */
/* */
/* <Input> */
/* outline :: A pointer to the source target. */
/* */
/* func_interface :: A table of `emitters', i.e., function pointers */
/* called during decomposition to indicate path */
/* operations. */
/* */
/* <InOut> */
/* user :: A typeless pointer that is passed to each */
/* emitter during the decomposition. It can be */
/* used to store the state during the */
/* decomposition. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* A contour that contains a single point only is represented by a */
/* `move to' operation followed by `line to' to the same point. In */
/* most cases, it is best to filter this out before using the */
/* outline for stroking purposes (otherwise it would result in a */
/* visible dot when round caps are used). */
/* */
/* Similarly, the function returns success for an empty outline also */
/* (doing nothing, this is, not calling any emitter); if necessary, */
/* you should filter this out, too. */
/* */
FT_EXPORT( FT_Error )
FT_Outline_Decompose( FT_Outline* outline,
const FT_Outline_Funcs* func_interface,
void* user );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Outline_New */
/* */
/* <Description> */
/* Create a new outline of a given size. */
/* */
/* <Input> */
/* library :: A handle to the library object from where the */
/* outline is allocated. Note however that the new */
/* outline will *not* necessarily be *freed*, when */
/* destroying the library, by @FT_Done_FreeType. */
/* */
/* numPoints :: The maximum number of points within the outline. */
/* Must be smaller than or equal to 0xFFFF (65535). */
/* */
/* numContours :: The maximum number of contours within the outline. */
/* This value must be in the range 0 to `numPoints'. */
/* */
/* <Output> */
/* anoutline :: A handle to the new outline. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* The reason why this function takes a `library' parameter is simply */
/* to use the library's memory allocator. */
/* */
FT_EXPORT( FT_Error )
FT_Outline_New( FT_Library library,
FT_UInt numPoints,
FT_Int numContours,
FT_Outline *anoutline );
FT_EXPORT( FT_Error )
FT_Outline_New_Internal( FT_Memory memory,
FT_UInt numPoints,
FT_Int numContours,
FT_Outline *anoutline );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Outline_Done */
/* */
/* <Description> */
/* Destroy an outline created with @FT_Outline_New. */
/* */
/* <Input> */
/* library :: A handle of the library object used to allocate the */
/* outline. */
/* */
/* outline :: A pointer to the outline object to be discarded. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* If the outline's `owner' field is not set, only the outline */
/* descriptor will be released. */
/* */
/* The reason why this function takes an `library' parameter is */
/* simply to use ft_mem_free(). */
/* */
FT_EXPORT( FT_Error )
FT_Outline_Done( FT_Library library,
FT_Outline* outline );
FT_EXPORT( FT_Error )
FT_Outline_Done_Internal( FT_Memory memory,
FT_Outline* outline );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Outline_Check */
/* */
/* <Description> */
/* Check the contents of an outline descriptor. */
/* */
/* <Input> */
/* outline :: A handle to a source outline. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* An empty outline, or an outline with a single point only is also */
/* valid. */
/* */
FT_EXPORT( FT_Error )
FT_Outline_Check( FT_Outline* outline );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Outline_Get_CBox */
/* */
/* <Description> */
/* Return an outline's `control box'. The control box encloses all */
/* the outline's points, including Bézier control points. Though it */
/* coincides with the exact bounding box for most glyphs, it can be */
/* slightly larger in some situations (like when rotating an outline */
/* that contains Bézier outside arcs). */
/* */
/* Computing the control box is very fast, while getting the bounding */
/* box can take much more time as it needs to walk over all segments */
/* and arcs in the outline. To get the latter, you can use the */
/* `ftbbox' component, which is dedicated to this single task. */
/* */
/* <Input> */
/* outline :: A pointer to the source outline descriptor. */
/* */
/* <Output> */
/* acbox :: The outline's control box. */
/* */
/* <Note> */
/* See @FT_Glyph_Get_CBox for a discussion of tricky fonts. */
/* */
FT_EXPORT( void )
FT_Outline_Get_CBox( const FT_Outline* outline,
FT_BBox *acbox );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Outline_Translate */
/* */
/* <Description> */
/* Apply a simple translation to the points of an outline. */
/* */
/* <InOut> */
/* outline :: A pointer to the target outline descriptor. */
/* */
/* <Input> */
/* xOffset :: The horizontal offset. */
/* */
/* yOffset :: The vertical offset. */
/* */
FT_EXPORT( void )
FT_Outline_Translate( const FT_Outline* outline,
FT_Pos xOffset,
FT_Pos yOffset );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Outline_Copy */
/* */
/* <Description> */
/* Copy an outline into another one. Both objects must have the */
/* same sizes (number of points & number of contours) when this */
/* function is called. */
/* */
/* <Input> */
/* source :: A handle to the source outline. */
/* */
/* <Output> */
/* target :: A handle to the target outline. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
FT_EXPORT( FT_Error )
FT_Outline_Copy( const FT_Outline* source,
FT_Outline *target );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Outline_Transform */
/* */
/* <Description> */
/* Apply a simple 2x2 matrix to all of an outline's points. Useful */
/* for applying rotations, slanting, flipping, etc. */
/* */
/* <InOut> */
/* outline :: A pointer to the target outline descriptor. */
/* */
/* <Input> */
/* matrix :: A pointer to the transformation matrix. */
/* */
/* <Note> */
/* You can use @FT_Outline_Translate if you need to translate the */
/* outline's points. */
/* */
FT_EXPORT( void )
FT_Outline_Transform( const FT_Outline* outline,
const FT_Matrix* matrix );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Outline_Embolden */
/* */
/* <Description> */
/* Embolden an outline. The new outline will be at most 4~times */
/* `strength' pixels wider and higher. You may think of the left and */
/* bottom borders as unchanged. */
/* */
/* Negative `strength' values to reduce the outline thickness are */
/* possible also. */
/* */
/* <InOut> */
/* outline :: A handle to the target outline. */
/* */
/* <Input> */
/* strength :: How strong the glyph is emboldened. Expressed in */
/* 26.6 pixel format. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* The used algorithm to increase or decrease the thickness of the */
/* glyph doesn't change the number of points; this means that certain */
/* situations like acute angles or intersections are sometimes */
/* handled incorrectly. */
/* */
/* If you need `better' metrics values you should call */
/* @FT_Outline_Get_CBox or @FT_Outline_Get_BBox. */
/* */
/* Example call: */
/* */
/* { */
/* FT_Load_Glyph( face, index, FT_LOAD_DEFAULT ); */
/* if ( face->glyph->format == FT_GLYPH_FORMAT_OUTLINE ) */
/* FT_Outline_Embolden( &face->glyph->outline, strength ); */
/* } */
/* */
/* To get meaningful results, font scaling values must be set with */
/* functions like @FT_Set_Char_Size before calling FT_Render_Glyph. */
/* */
FT_EXPORT( FT_Error )
FT_Outline_Embolden( FT_Outline* outline,
FT_Pos strength );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Outline_EmboldenXY */
/* */
/* <Description> */
/* Embolden an outline. The new outline will be `xstrength' pixels */
/* wider and `ystrength' pixels higher. Otherwise, it is similar to */
/* @FT_Outline_Embolden, which uses the same strength in both */
/* directions. */
/* */
FT_EXPORT( FT_Error )
FT_Outline_EmboldenXY( FT_Outline* outline,
FT_Pos xstrength,
FT_Pos ystrength );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Outline_Reverse */
/* */
/* <Description> */
/* Reverse the drawing direction of an outline. This is used to */
/* ensure consistent fill conventions for mirrored glyphs. */
/* */
/* <InOut> */
/* outline :: A pointer to the target outline descriptor. */
/* */
/* <Note> */
/* This function toggles the bit flag @FT_OUTLINE_REVERSE_FILL in */
/* the outline's `flags' field. */
/* */
/* It shouldn't be used by a normal client application, unless it */
/* knows what it is doing. */
/* */
FT_EXPORT( void )
FT_Outline_Reverse( FT_Outline* outline );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Outline_Get_Bitmap */
/* */
/* <Description> */
/* Render an outline within a bitmap. The outline's image is simply */
/* OR-ed to the target bitmap. */
/* */
/* <Input> */
/* library :: A handle to a FreeType library object. */
/* */
/* outline :: A pointer to the source outline descriptor. */
/* */
/* <InOut> */
/* abitmap :: A pointer to the target bitmap descriptor. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* This function does NOT CREATE the bitmap, it only renders an */
/* outline image within the one you pass to it! Consequently, the */
/* various fields in `abitmap' should be set accordingly. */
/* */
/* It will use the raster corresponding to the default glyph format. */
/* */
/* The value of the `num_grays' field in `abitmap' is ignored. If */
/* you select the gray-level rasterizer, and you want less than 256 */
/* gray levels, you have to use @FT_Outline_Render directly. */
/* */
FT_EXPORT( FT_Error )
FT_Outline_Get_Bitmap( FT_Library library,
FT_Outline* outline,
const FT_Bitmap *abitmap );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Outline_Render */
/* */
/* <Description> */
/* Render an outline within a bitmap using the current scan-convert. */
/* This function uses an @FT_Raster_Params structure as an argument, */
/* allowing advanced features like direct composition, translucency, */
/* etc. */
/* */
/* <Input> */
/* library :: A handle to a FreeType library object. */
/* */
/* outline :: A pointer to the source outline descriptor. */
/* */
/* <InOut> */
/* params :: A pointer to an @FT_Raster_Params structure used to */
/* describe the rendering operation. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* You should know what you are doing and how @FT_Raster_Params works */
/* to use this function. */
/* */
/* The field `params.source' will be set to `outline' before the scan */
/* converter is called, which means that the value you give to it is */
/* actually ignored. */
/* */
/* The gray-level rasterizer always uses 256 gray levels. If you */
/* want less gray levels, you have to provide your own span callback. */
/* See the @FT_RASTER_FLAG_DIRECT value of the `flags' field in the */
/* @FT_Raster_Params structure for more details. */
/* */
FT_EXPORT( FT_Error )
FT_Outline_Render( FT_Library library,
FT_Outline* outline,
FT_Raster_Params* params );
/**************************************************************************
*
* @enum:
* FT_Orientation
*
* @description:
* A list of values used to describe an outline's contour orientation.
*
* The TrueType and PostScript specifications use different conventions
* to determine whether outline contours should be filled or unfilled.
*
* @values:
* FT_ORIENTATION_TRUETYPE ::
* According to the TrueType specification, clockwise contours must
* be filled, and counter-clockwise ones must be unfilled.
*
* FT_ORIENTATION_POSTSCRIPT ::
* According to the PostScript specification, counter-clockwise contours
* must be filled, and clockwise ones must be unfilled.
*
* FT_ORIENTATION_FILL_RIGHT ::
* This is identical to @FT_ORIENTATION_TRUETYPE, but is used to
* remember that in TrueType, everything that is to the right of
* the drawing direction of a contour must be filled.
*
* FT_ORIENTATION_FILL_LEFT ::
* This is identical to @FT_ORIENTATION_POSTSCRIPT, but is used to
* remember that in PostScript, everything that is to the left of
* the drawing direction of a contour must be filled.
*
* FT_ORIENTATION_NONE ::
* The orientation cannot be determined. That is, different parts of
* the glyph have different orientation.
*
*/
typedef enum FT_Orientation_
{
FT_ORIENTATION_TRUETYPE = 0,
FT_ORIENTATION_POSTSCRIPT = 1,
FT_ORIENTATION_FILL_RIGHT = FT_ORIENTATION_TRUETYPE,
FT_ORIENTATION_FILL_LEFT = FT_ORIENTATION_POSTSCRIPT,
FT_ORIENTATION_NONE
} FT_Orientation;
/**************************************************************************
*
* @function:
* FT_Outline_Get_Orientation
*
* @description:
* This function analyzes a glyph outline and tries to compute its
* fill orientation (see @FT_Orientation). This is done by integrating
* the total area covered by the outline. The positive integral
* corresponds to the clockwise orientation and @FT_ORIENTATION_POSTSCRIPT
* is returned. The negative integral corresponds to the counter-clockwise
* orientation and @FT_ORIENTATION_TRUETYPE is returned.
*
* Note that this will return @FT_ORIENTATION_TRUETYPE for empty
* outlines.
*
* @input:
* outline ::
* A handle to the source outline.
*
* @return:
* The orientation.
*
*/
FT_EXPORT( FT_Orientation )
FT_Outline_Get_Orientation( FT_Outline* outline );
/* */
FT_END_HEADER
#endif /* FTOUTLN_H_ */
/* END */
/* Local Variables: */
/* coding: utf-8 */
/* End: */

View File

@ -0,0 +1,172 @@
/***************************************************************************/
/* */
/* ftpfr.h */
/* */
/* FreeType API for accessing PFR-specific data (specification only). */
/* */
/* Copyright 2002-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTPFR_H_
#define FTPFR_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* pfr_fonts */
/* */
/* <Title> */
/* PFR Fonts */
/* */
/* <Abstract> */
/* PFR/TrueDoc specific API. */
/* */
/* <Description> */
/* This section contains the declaration of PFR-specific functions. */
/* */
/*************************************************************************/
/**********************************************************************
*
* @function:
* FT_Get_PFR_Metrics
*
* @description:
* Return the outline and metrics resolutions of a given PFR face.
*
* @input:
* face :: Handle to the input face. It can be a non-PFR face.
*
* @output:
* aoutline_resolution ::
* Outline resolution. This is equivalent to `face->units_per_EM'
* for non-PFR fonts. Optional (parameter can be NULL).
*
* ametrics_resolution ::
* Metrics resolution. This is equivalent to `outline_resolution'
* for non-PFR fonts. Optional (parameter can be NULL).
*
* ametrics_x_scale ::
* A 16.16 fixed-point number used to scale distance expressed
* in metrics units to device sub-pixels. This is equivalent to
* `face->size->x_scale', but for metrics only. Optional (parameter
* can be NULL).
*
* ametrics_y_scale ::
* Same as `ametrics_x_scale' but for the vertical direction.
* optional (parameter can be NULL).
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* If the input face is not a PFR, this function will return an error.
* However, in all cases, it will return valid values.
*/
FT_EXPORT( FT_Error )
FT_Get_PFR_Metrics( FT_Face face,
FT_UInt *aoutline_resolution,
FT_UInt *ametrics_resolution,
FT_Fixed *ametrics_x_scale,
FT_Fixed *ametrics_y_scale );
/**********************************************************************
*
* @function:
* FT_Get_PFR_Kerning
*
* @description:
* Return the kerning pair corresponding to two glyphs in a PFR face.
* The distance is expressed in metrics units, unlike the result of
* @FT_Get_Kerning.
*
* @input:
* face :: A handle to the input face.
*
* left :: Index of the left glyph.
*
* right :: Index of the right glyph.
*
* @output:
* avector :: A kerning vector.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* This function always return distances in original PFR metrics
* units. This is unlike @FT_Get_Kerning with the @FT_KERNING_UNSCALED
* mode, which always returns distances converted to outline units.
*
* You can use the value of the `x_scale' and `y_scale' parameters
* returned by @FT_Get_PFR_Metrics to scale these to device sub-pixels.
*/
FT_EXPORT( FT_Error )
FT_Get_PFR_Kerning( FT_Face face,
FT_UInt left,
FT_UInt right,
FT_Vector *avector );
/**********************************************************************
*
* @function:
* FT_Get_PFR_Advance
*
* @description:
* Return a given glyph advance, expressed in original metrics units,
* from a PFR font.
*
* @input:
* face :: A handle to the input face.
*
* gindex :: The glyph index.
*
* @output:
* aadvance :: The glyph advance in metrics units.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* You can use the `x_scale' or `y_scale' results of @FT_Get_PFR_Metrics
* to convert the advance to device sub-pixels (i.e., 1/64th of pixels).
*/
FT_EXPORT( FT_Error )
FT_Get_PFR_Advance( FT_Face face,
FT_UInt gindex,
FT_Pos *aadvance );
/* */
FT_END_HEADER
#endif /* FTPFR_H_ */
/* END */

View File

@ -0,0 +1,233 @@
/***************************************************************************/
/* */
/* ftrender.h */
/* */
/* FreeType renderer modules public interface (specification). */
/* */
/* Copyright 1996-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTRENDER_H_
#define FTRENDER_H_
#include <ft2build.h>
#include FT_MODULE_H
#include FT_GLYPH_H
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* module_management */
/* */
/*************************************************************************/
/* create a new glyph object */
typedef FT_Error
(*FT_Glyph_InitFunc)( FT_Glyph glyph,
FT_GlyphSlot slot );
/* destroys a given glyph object */
typedef void
(*FT_Glyph_DoneFunc)( FT_Glyph glyph );
typedef void
(*FT_Glyph_TransformFunc)( FT_Glyph glyph,
const FT_Matrix* matrix,
const FT_Vector* delta );
typedef void
(*FT_Glyph_GetBBoxFunc)( FT_Glyph glyph,
FT_BBox* abbox );
typedef FT_Error
(*FT_Glyph_CopyFunc)( FT_Glyph source,
FT_Glyph target );
typedef FT_Error
(*FT_Glyph_PrepareFunc)( FT_Glyph glyph,
FT_GlyphSlot slot );
/* deprecated */
#define FT_Glyph_Init_Func FT_Glyph_InitFunc
#define FT_Glyph_Done_Func FT_Glyph_DoneFunc
#define FT_Glyph_Transform_Func FT_Glyph_TransformFunc
#define FT_Glyph_BBox_Func FT_Glyph_GetBBoxFunc
#define FT_Glyph_Copy_Func FT_Glyph_CopyFunc
#define FT_Glyph_Prepare_Func FT_Glyph_PrepareFunc
struct FT_Glyph_Class_
{
FT_Long glyph_size;
FT_Glyph_Format glyph_format;
FT_Glyph_InitFunc glyph_init;
FT_Glyph_DoneFunc glyph_done;
FT_Glyph_CopyFunc glyph_copy;
FT_Glyph_TransformFunc glyph_transform;
FT_Glyph_GetBBoxFunc glyph_bbox;
FT_Glyph_PrepareFunc glyph_prepare;
};
typedef FT_Error
(*FT_Renderer_RenderFunc)( FT_Renderer renderer,
FT_GlyphSlot slot,
FT_UInt mode,
const FT_Vector* origin );
typedef FT_Error
(*FT_Renderer_TransformFunc)( FT_Renderer renderer,
FT_GlyphSlot slot,
const FT_Matrix* matrix,
const FT_Vector* delta );
typedef void
(*FT_Renderer_GetCBoxFunc)( FT_Renderer renderer,
FT_GlyphSlot slot,
FT_BBox* cbox );
typedef FT_Error
(*FT_Renderer_SetModeFunc)( FT_Renderer renderer,
FT_ULong mode_tag,
FT_Pointer mode_ptr );
/* deprecated identifiers */
#define FTRenderer_render FT_Renderer_RenderFunc
#define FTRenderer_transform FT_Renderer_TransformFunc
#define FTRenderer_getCBox FT_Renderer_GetCBoxFunc
#define FTRenderer_setMode FT_Renderer_SetModeFunc
/*************************************************************************/
/* */
/* <Struct> */
/* FT_Renderer_Class */
/* */
/* <Description> */
/* The renderer module class descriptor. */
/* */
/* <Fields> */
/* root :: The root @FT_Module_Class fields. */
/* */
/* glyph_format :: The glyph image format this renderer handles. */
/* */
/* render_glyph :: A method used to render the image that is in a */
/* given glyph slot into a bitmap. */
/* */
/* transform_glyph :: A method used to transform the image that is in */
/* a given glyph slot. */
/* */
/* get_glyph_cbox :: A method used to access the glyph's cbox. */
/* */
/* set_mode :: A method used to pass additional parameters. */
/* */
/* raster_class :: For @FT_GLYPH_FORMAT_OUTLINE renderers only. */
/* This is a pointer to its raster's class. */
/* */
typedef struct FT_Renderer_Class_
{
FT_Module_Class root;
FT_Glyph_Format glyph_format;
FT_Renderer_RenderFunc render_glyph;
FT_Renderer_TransformFunc transform_glyph;
FT_Renderer_GetCBoxFunc get_glyph_cbox;
FT_Renderer_SetModeFunc set_mode;
FT_Raster_Funcs* raster_class;
} FT_Renderer_Class;
/*************************************************************************/
/* */
/* <Function> */
/* FT_Get_Renderer */
/* */
/* <Description> */
/* Retrieve the current renderer for a given glyph format. */
/* */
/* <Input> */
/* library :: A handle to the library object. */
/* */
/* format :: The glyph format. */
/* */
/* <Return> */
/* A renderer handle. 0~if none found. */
/* */
/* <Note> */
/* An error will be returned if a module already exists by that name, */
/* or if the module requires a version of FreeType that is too great. */
/* */
/* To add a new renderer, simply use @FT_Add_Module. To retrieve a */
/* renderer by its name, use @FT_Get_Module. */
/* */
FT_EXPORT( FT_Renderer )
FT_Get_Renderer( FT_Library library,
FT_Glyph_Format format );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Set_Renderer */
/* */
/* <Description> */
/* Set the current renderer to use, and set additional mode. */
/* */
/* <InOut> */
/* library :: A handle to the library object. */
/* */
/* <Input> */
/* renderer :: A handle to the renderer object. */
/* */
/* num_params :: The number of additional parameters. */
/* */
/* parameters :: Additional parameters. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* In case of success, the renderer will be used to convert glyph */
/* images in the renderer's known format into bitmaps. */
/* */
/* This doesn't change the current renderer for other formats. */
/* */
/* Currently, no FreeType renderer module uses `parameters'; you */
/* should thus always pass NULL as the value. */
/* */
FT_EXPORT( FT_Error )
FT_Set_Renderer( FT_Library library,
FT_Renderer renderer,
FT_UInt num_params,
FT_Parameter* parameters );
/* */
FT_END_HEADER
#endif /* FTRENDER_H_ */
/* END */

View File

@ -0,0 +1,159 @@
/***************************************************************************/
/* */
/* ftsizes.h */
/* */
/* FreeType size objects management (specification). */
/* */
/* Copyright 1996-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
/*************************************************************************/
/* */
/* Typical application would normally not need to use these functions. */
/* However, they have been placed in a public API for the rare cases */
/* where they are needed. */
/* */
/*************************************************************************/
#ifndef FTSIZES_H_
#define FTSIZES_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* sizes_management */
/* */
/* <Title> */
/* Size Management */
/* */
/* <Abstract> */
/* Managing multiple sizes per face. */
/* */
/* <Description> */
/* When creating a new face object (e.g., with @FT_New_Face), an */
/* @FT_Size object is automatically created and used to store all */
/* pixel-size dependent information, available in the `face->size' */
/* field. */
/* */
/* It is however possible to create more sizes for a given face, */
/* mostly in order to manage several character pixel sizes of the */
/* same font family and style. See @FT_New_Size and @FT_Done_Size. */
/* */
/* Note that @FT_Set_Pixel_Sizes and @FT_Set_Char_Size only */
/* modify the contents of the current `active' size; you thus need */
/* to use @FT_Activate_Size to change it. */
/* */
/* 99% of applications won't need the functions provided here, */
/* especially if they use the caching sub-system, so be cautious */
/* when using these. */
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/* <Function> */
/* FT_New_Size */
/* */
/* <Description> */
/* Create a new size object from a given face object. */
/* */
/* <Input> */
/* face :: A handle to a parent face object. */
/* */
/* <Output> */
/* asize :: A handle to a new size object. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* You need to call @FT_Activate_Size in order to select the new size */
/* for upcoming calls to @FT_Set_Pixel_Sizes, @FT_Set_Char_Size, */
/* @FT_Load_Glyph, @FT_Load_Char, etc. */
/* */
FT_EXPORT( FT_Error )
FT_New_Size( FT_Face face,
FT_Size* size );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Done_Size */
/* */
/* <Description> */
/* Discard a given size object. Note that @FT_Done_Face */
/* automatically discards all size objects allocated with */
/* @FT_New_Size. */
/* */
/* <Input> */
/* size :: A handle to a target size object. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
FT_EXPORT( FT_Error )
FT_Done_Size( FT_Size size );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Activate_Size */
/* */
/* <Description> */
/* Even though it is possible to create several size objects for a */
/* given face (see @FT_New_Size for details), functions like */
/* @FT_Load_Glyph or @FT_Load_Char only use the one that has been */
/* activated last to determine the `current character pixel size'. */
/* */
/* This function can be used to `activate' a previously created size */
/* object. */
/* */
/* <Input> */
/* size :: A handle to a target size object. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* If `face' is the size's parent face object, this function changes */
/* the value of `face->size' to the input size handle. */
/* */
FT_EXPORT( FT_Error )
FT_Activate_Size( FT_Size size );
/* */
FT_END_HEADER
#endif /* FTSIZES_H_ */
/* END */

View File

@ -0,0 +1,200 @@
/***************************************************************************/
/* */
/* ftsnames.h */
/* */
/* Simple interface to access SFNT name tables (which are used */
/* to hold font names, copyright info, notices, etc.) (specification). */
/* */
/* This is _not_ used to retrieve glyph names! */
/* */
/* Copyright 1996-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTSNAMES_H_
#define FTSNAMES_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* sfnt_names */
/* */
/* <Title> */
/* SFNT Names */
/* */
/* <Abstract> */
/* Access the names embedded in TrueType and OpenType files. */
/* */
/* <Description> */
/* The TrueType and OpenType specifications allow the inclusion of */
/* a special `names table' in font files. This table contains */
/* textual (and internationalized) information regarding the font, */
/* like family name, copyright, version, etc. */
/* */
/* The definitions below are used to access them if available. */
/* */
/* Note that this has nothing to do with glyph names! */
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/* <Struct> */
/* FT_SfntName */
/* */
/* <Description> */
/* A structure used to model an SFNT `name' table entry. */
/* */
/* <Fields> */
/* platform_id :: The platform ID for `string'. */
/* */
/* encoding_id :: The encoding ID for `string'. */
/* */
/* language_id :: The language ID for `string'. */
/* */
/* name_id :: An identifier for `string'. */
/* */
/* string :: The `name' string. Note that its format differs */
/* depending on the (platform,encoding) pair. It can */
/* be a Pascal String, a UTF-16 one, etc. */
/* */
/* Generally speaking, the string is not */
/* zero-terminated. Please refer to the TrueType */
/* specification for details. */
/* */
/* string_len :: The length of `string' in bytes. */
/* */
/* <Note> */
/* Possible values for `platform_id', `encoding_id', `language_id', */
/* and `name_id' are given in the file `ttnameid.h'. For details */
/* please refer to the TrueType or OpenType specification. */
/* */
/* See also @TT_PLATFORM_XXX, @TT_APPLE_ID_XXX, @TT_MAC_ID_XXX, */
/* @TT_ISO_ID_XXX, and @TT_MS_ID_XXX. */
/* */
typedef struct FT_SfntName_
{
FT_UShort platform_id;
FT_UShort encoding_id;
FT_UShort language_id;
FT_UShort name_id;
FT_Byte* string; /* this string is *not* null-terminated! */
FT_UInt string_len; /* in bytes */
} FT_SfntName;
/*************************************************************************/
/* */
/* <Function> */
/* FT_Get_Sfnt_Name_Count */
/* */
/* <Description> */
/* Retrieve the number of name strings in the SFNT `name' table. */
/* */
/* <Input> */
/* face :: A handle to the source face. */
/* */
/* <Return> */
/* The number of strings in the `name' table. */
/* */
FT_EXPORT( FT_UInt )
FT_Get_Sfnt_Name_Count( FT_Face face );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Get_Sfnt_Name */
/* */
/* <Description> */
/* Retrieve a string of the SFNT `name' table for a given index. */
/* */
/* <Input> */
/* face :: A handle to the source face. */
/* */
/* idx :: The index of the `name' string. */
/* */
/* <Output> */
/* aname :: The indexed @FT_SfntName structure. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* The `string' array returned in the `aname' structure is not */
/* null-terminated. The application should deallocate it if it is no */
/* longer in use. */
/* */
/* Use @FT_Get_Sfnt_Name_Count to get the total number of available */
/* `name' table entries, then do a loop until you get the right */
/* platform, encoding, and name ID. */
/* */
FT_EXPORT( FT_Error )
FT_Get_Sfnt_Name( FT_Face face,
FT_UInt idx,
FT_SfntName *aname );
/***************************************************************************
*
* @constant:
* FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY
*
* @description:
* A constant used as the tag of @FT_Parameter structures to make
* FT_Open_Face() ignore preferred family subfamily names in `name'
* table since OpenType version 1.4. For backwards compatibility with
* legacy systems that have a 4-face-per-family restriction.
*
*/
#define FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY FT_MAKE_TAG( 'i', 'g', 'p', 'f' )
/***************************************************************************
*
* @constant:
* FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY
*
* @description:
* A constant used as the tag of @FT_Parameter structures to make
* FT_Open_Face() ignore preferred subfamily names in `name' table since
* OpenType version 1.4. For backwards compatibility with legacy
* systems that have a 4-face-per-family restriction.
*
*/
#define FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY FT_MAKE_TAG( 'i', 'g', 'p', 's' )
/* */
FT_END_HEADER
#endif /* FTSNAMES_H_ */
/* END */

View File

@ -0,0 +1,785 @@
/***************************************************************************/
/* */
/* ftstroke.h */
/* */
/* FreeType path stroker (specification). */
/* */
/* Copyright 2002-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTSTROKE_H_
#define FTSTROKE_H_
#include <ft2build.h>
#include FT_OUTLINE_H
#include FT_GLYPH_H
FT_BEGIN_HEADER
/************************************************************************
*
* @section:
* glyph_stroker
*
* @title:
* Glyph Stroker
*
* @abstract:
* Generating bordered and stroked glyphs.
*
* @description:
* This component generates stroked outlines of a given vectorial
* glyph. It also allows you to retrieve the `outside' and/or the
* `inside' borders of the stroke.
*
* This can be useful to generate `bordered' glyph, i.e., glyphs
* displayed with a coloured (and anti-aliased) border around their
* shape.
*
* @order:
* FT_Stroker
*
* FT_Stroker_LineJoin
* FT_Stroker_LineCap
* FT_StrokerBorder
*
* FT_Outline_GetInsideBorder
* FT_Outline_GetOutsideBorder
*
* FT_Glyph_Stroke
* FT_Glyph_StrokeBorder
*
* FT_Stroker_New
* FT_Stroker_Set
* FT_Stroker_Rewind
* FT_Stroker_ParseOutline
* FT_Stroker_Done
*
* FT_Stroker_BeginSubPath
* FT_Stroker_EndSubPath
*
* FT_Stroker_LineTo
* FT_Stroker_ConicTo
* FT_Stroker_CubicTo
*
* FT_Stroker_GetBorderCounts
* FT_Stroker_ExportBorder
* FT_Stroker_GetCounts
* FT_Stroker_Export
*
*/
/**************************************************************
*
* @type:
* FT_Stroker
*
* @description:
* Opaque handle to a path stroker object.
*/
typedef struct FT_StrokerRec_* FT_Stroker;
/**************************************************************
*
* @enum:
* FT_Stroker_LineJoin
*
* @description:
* These values determine how two joining lines are rendered
* in a stroker.
*
* @values:
* FT_STROKER_LINEJOIN_ROUND ::
* Used to render rounded line joins. Circular arcs are used
* to join two lines smoothly.
*
* FT_STROKER_LINEJOIN_BEVEL ::
* Used to render beveled line joins. The outer corner of
* the joined lines is filled by enclosing the triangular
* region of the corner with a straight line between the
* outer corners of each stroke.
*
* FT_STROKER_LINEJOIN_MITER_FIXED ::
* Used to render mitered line joins, with fixed bevels if the
* miter limit is exceeded. The outer edges of the strokes
* for the two segments are extended until they meet at an
* angle. If the segments meet at too sharp an angle (such
* that the miter would extend from the intersection of the
* segments a distance greater than the product of the miter
* limit value and the border radius), then a bevel join (see
* above) is used instead. This prevents long spikes being
* created. FT_STROKER_LINEJOIN_MITER_FIXED generates a miter
* line join as used in PostScript and PDF.
*
* FT_STROKER_LINEJOIN_MITER_VARIABLE ::
* FT_STROKER_LINEJOIN_MITER ::
* Used to render mitered line joins, with variable bevels if
* the miter limit is exceeded. The intersection of the
* strokes is clipped at a line perpendicular to the bisector
* of the angle between the strokes, at the distance from the
* intersection of the segments equal to the product of the
* miter limit value and the border radius. This prevents
* long spikes being created.
* FT_STROKER_LINEJOIN_MITER_VARIABLE generates a mitered line
* join as used in XPS. FT_STROKER_LINEJOIN_MITER is an alias
* for FT_STROKER_LINEJOIN_MITER_VARIABLE, retained for
* backwards compatibility.
*/
typedef enum FT_Stroker_LineJoin_
{
FT_STROKER_LINEJOIN_ROUND = 0,
FT_STROKER_LINEJOIN_BEVEL = 1,
FT_STROKER_LINEJOIN_MITER_VARIABLE = 2,
FT_STROKER_LINEJOIN_MITER = FT_STROKER_LINEJOIN_MITER_VARIABLE,
FT_STROKER_LINEJOIN_MITER_FIXED = 3
} FT_Stroker_LineJoin;
/**************************************************************
*
* @enum:
* FT_Stroker_LineCap
*
* @description:
* These values determine how the end of opened sub-paths are
* rendered in a stroke.
*
* @values:
* FT_STROKER_LINECAP_BUTT ::
* The end of lines is rendered as a full stop on the last
* point itself.
*
* FT_STROKER_LINECAP_ROUND ::
* The end of lines is rendered as a half-circle around the
* last point.
*
* FT_STROKER_LINECAP_SQUARE ::
* The end of lines is rendered as a square around the
* last point.
*/
typedef enum FT_Stroker_LineCap_
{
FT_STROKER_LINECAP_BUTT = 0,
FT_STROKER_LINECAP_ROUND,
FT_STROKER_LINECAP_SQUARE
} FT_Stroker_LineCap;
/**************************************************************
*
* @enum:
* FT_StrokerBorder
*
* @description:
* These values are used to select a given stroke border
* in @FT_Stroker_GetBorderCounts and @FT_Stroker_ExportBorder.
*
* @values:
* FT_STROKER_BORDER_LEFT ::
* Select the left border, relative to the drawing direction.
*
* FT_STROKER_BORDER_RIGHT ::
* Select the right border, relative to the drawing direction.
*
* @note:
* Applications are generally interested in the `inside' and `outside'
* borders. However, there is no direct mapping between these and the
* `left' and `right' ones, since this really depends on the glyph's
* drawing orientation, which varies between font formats.
*
* You can however use @FT_Outline_GetInsideBorder and
* @FT_Outline_GetOutsideBorder to get these.
*/
typedef enum FT_StrokerBorder_
{
FT_STROKER_BORDER_LEFT = 0,
FT_STROKER_BORDER_RIGHT
} FT_StrokerBorder;
/**************************************************************
*
* @function:
* FT_Outline_GetInsideBorder
*
* @description:
* Retrieve the @FT_StrokerBorder value corresponding to the
* `inside' borders of a given outline.
*
* @input:
* outline ::
* The source outline handle.
*
* @return:
* The border index. @FT_STROKER_BORDER_RIGHT for empty or invalid
* outlines.
*/
FT_EXPORT( FT_StrokerBorder )
FT_Outline_GetInsideBorder( FT_Outline* outline );
/**************************************************************
*
* @function:
* FT_Outline_GetOutsideBorder
*
* @description:
* Retrieve the @FT_StrokerBorder value corresponding to the
* `outside' borders of a given outline.
*
* @input:
* outline ::
* The source outline handle.
*
* @return:
* The border index. @FT_STROKER_BORDER_LEFT for empty or invalid
* outlines.
*/
FT_EXPORT( FT_StrokerBorder )
FT_Outline_GetOutsideBorder( FT_Outline* outline );
/**************************************************************
*
* @function:
* FT_Stroker_New
*
* @description:
* Create a new stroker object.
*
* @input:
* library ::
* FreeType library handle.
*
* @output:
* astroker ::
* A new stroker object handle. NULL in case of error.
*
* @return:
* FreeType error code. 0~means success.
*/
FT_EXPORT( FT_Error )
FT_Stroker_New( FT_Library library,
FT_Stroker *astroker );
/**************************************************************
*
* @function:
* FT_Stroker_Set
*
* @description:
* Reset a stroker object's attributes.
*
* @input:
* stroker ::
* The target stroker handle.
*
* radius ::
* The border radius.
*
* line_cap ::
* The line cap style.
*
* line_join ::
* The line join style.
*
* miter_limit ::
* The miter limit for the FT_STROKER_LINEJOIN_MITER_FIXED and
* FT_STROKER_LINEJOIN_MITER_VARIABLE line join styles,
* expressed as 16.16 fixed-point value.
*
* @note:
* The radius is expressed in the same units as the outline
* coordinates.
*
* This function calls @FT_Stroker_Rewind automatically.
*/
FT_EXPORT( void )
FT_Stroker_Set( FT_Stroker stroker,
FT_Fixed radius,
FT_Stroker_LineCap line_cap,
FT_Stroker_LineJoin line_join,
FT_Fixed miter_limit );
/**************************************************************
*
* @function:
* FT_Stroker_Rewind
*
* @description:
* Reset a stroker object without changing its attributes.
* You should call this function before beginning a new
* series of calls to @FT_Stroker_BeginSubPath or
* @FT_Stroker_EndSubPath.
*
* @input:
* stroker ::
* The target stroker handle.
*/
FT_EXPORT( void )
FT_Stroker_Rewind( FT_Stroker stroker );
/**************************************************************
*
* @function:
* FT_Stroker_ParseOutline
*
* @description:
* A convenience function used to parse a whole outline with
* the stroker. The resulting outline(s) can be retrieved
* later by functions like @FT_Stroker_GetCounts and @FT_Stroker_Export.
*
* @input:
* stroker ::
* The target stroker handle.
*
* outline ::
* The source outline.
*
* opened ::
* A boolean. If~1, the outline is treated as an open path instead
* of a closed one.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* If `opened' is~0 (the default), the outline is treated as a closed
* path, and the stroker generates two distinct `border' outlines.
*
* If `opened' is~1, the outline is processed as an open path, and the
* stroker generates a single `stroke' outline.
*
* This function calls @FT_Stroker_Rewind automatically.
*/
FT_EXPORT( FT_Error )
FT_Stroker_ParseOutline( FT_Stroker stroker,
FT_Outline* outline,
FT_Bool opened );
/**************************************************************
*
* @function:
* FT_Stroker_BeginSubPath
*
* @description:
* Start a new sub-path in the stroker.
*
* @input:
* stroker ::
* The target stroker handle.
*
* to ::
* A pointer to the start vector.
*
* open ::
* A boolean. If~1, the sub-path is treated as an open one.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* This function is useful when you need to stroke a path that is
* not stored as an @FT_Outline object.
*/
FT_EXPORT( FT_Error )
FT_Stroker_BeginSubPath( FT_Stroker stroker,
FT_Vector* to,
FT_Bool open );
/**************************************************************
*
* @function:
* FT_Stroker_EndSubPath
*
* @description:
* Close the current sub-path in the stroker.
*
* @input:
* stroker ::
* The target stroker handle.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* You should call this function after @FT_Stroker_BeginSubPath.
* If the subpath was not `opened', this function `draws' a
* single line segment to the start position when needed.
*/
FT_EXPORT( FT_Error )
FT_Stroker_EndSubPath( FT_Stroker stroker );
/**************************************************************
*
* @function:
* FT_Stroker_LineTo
*
* @description:
* `Draw' a single line segment in the stroker's current sub-path,
* from the last position.
*
* @input:
* stroker ::
* The target stroker handle.
*
* to ::
* A pointer to the destination point.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* You should call this function between @FT_Stroker_BeginSubPath and
* @FT_Stroker_EndSubPath.
*/
FT_EXPORT( FT_Error )
FT_Stroker_LineTo( FT_Stroker stroker,
FT_Vector* to );
/**************************************************************
*
* @function:
* FT_Stroker_ConicTo
*
* @description:
* `Draw' a single quadratic Bézier in the stroker's current sub-path,
* from the last position.
*
* @input:
* stroker ::
* The target stroker handle.
*
* control ::
* A pointer to a Bézier control point.
*
* to ::
* A pointer to the destination point.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* You should call this function between @FT_Stroker_BeginSubPath and
* @FT_Stroker_EndSubPath.
*/
FT_EXPORT( FT_Error )
FT_Stroker_ConicTo( FT_Stroker stroker,
FT_Vector* control,
FT_Vector* to );
/**************************************************************
*
* @function:
* FT_Stroker_CubicTo
*
* @description:
* `Draw' a single cubic Bézier in the stroker's current sub-path,
* from the last position.
*
* @input:
* stroker ::
* The target stroker handle.
*
* control1 ::
* A pointer to the first Bézier control point.
*
* control2 ::
* A pointer to second Bézier control point.
*
* to ::
* A pointer to the destination point.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* You should call this function between @FT_Stroker_BeginSubPath and
* @FT_Stroker_EndSubPath.
*/
FT_EXPORT( FT_Error )
FT_Stroker_CubicTo( FT_Stroker stroker,
FT_Vector* control1,
FT_Vector* control2,
FT_Vector* to );
/**************************************************************
*
* @function:
* FT_Stroker_GetBorderCounts
*
* @description:
* Call this function once you have finished parsing your paths
* with the stroker. It returns the number of points and
* contours necessary to export one of the `border' or `stroke'
* outlines generated by the stroker.
*
* @input:
* stroker ::
* The target stroker handle.
*
* border ::
* The border index.
*
* @output:
* anum_points ::
* The number of points.
*
* anum_contours ::
* The number of contours.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* When an outline, or a sub-path, is `closed', the stroker generates
* two independent `border' outlines, named `left' and `right'.
*
* When the outline, or a sub-path, is `opened', the stroker merges
* the `border' outlines with caps. The `left' border receives all
* points, while the `right' border becomes empty.
*
* Use the function @FT_Stroker_GetCounts instead if you want to
* retrieve the counts associated to both borders.
*/
FT_EXPORT( FT_Error )
FT_Stroker_GetBorderCounts( FT_Stroker stroker,
FT_StrokerBorder border,
FT_UInt *anum_points,
FT_UInt *anum_contours );
/**************************************************************
*
* @function:
* FT_Stroker_ExportBorder
*
* @description:
* Call this function after @FT_Stroker_GetBorderCounts to
* export the corresponding border to your own @FT_Outline
* structure.
*
* Note that this function appends the border points and
* contours to your outline, but does not try to resize its
* arrays.
*
* @input:
* stroker ::
* The target stroker handle.
*
* border ::
* The border index.
*
* outline ::
* The target outline handle.
*
* @note:
* Always call this function after @FT_Stroker_GetBorderCounts to
* get sure that there is enough room in your @FT_Outline object to
* receive all new data.
*
* When an outline, or a sub-path, is `closed', the stroker generates
* two independent `border' outlines, named `left' and `right'.
*
* When the outline, or a sub-path, is `opened', the stroker merges
* the `border' outlines with caps. The `left' border receives all
* points, while the `right' border becomes empty.
*
* Use the function @FT_Stroker_Export instead if you want to
* retrieve all borders at once.
*/
FT_EXPORT( void )
FT_Stroker_ExportBorder( FT_Stroker stroker,
FT_StrokerBorder border,
FT_Outline* outline );
/**************************************************************
*
* @function:
* FT_Stroker_GetCounts
*
* @description:
* Call this function once you have finished parsing your paths
* with the stroker. It returns the number of points and
* contours necessary to export all points/borders from the stroked
* outline/path.
*
* @input:
* stroker ::
* The target stroker handle.
*
* @output:
* anum_points ::
* The number of points.
*
* anum_contours ::
* The number of contours.
*
* @return:
* FreeType error code. 0~means success.
*/
FT_EXPORT( FT_Error )
FT_Stroker_GetCounts( FT_Stroker stroker,
FT_UInt *anum_points,
FT_UInt *anum_contours );
/**************************************************************
*
* @function:
* FT_Stroker_Export
*
* @description:
* Call this function after @FT_Stroker_GetBorderCounts to
* export all borders to your own @FT_Outline structure.
*
* Note that this function appends the border points and
* contours to your outline, but does not try to resize its
* arrays.
*
* @input:
* stroker ::
* The target stroker handle.
*
* outline ::
* The target outline handle.
*/
FT_EXPORT( void )
FT_Stroker_Export( FT_Stroker stroker,
FT_Outline* outline );
/**************************************************************
*
* @function:
* FT_Stroker_Done
*
* @description:
* Destroy a stroker object.
*
* @input:
* stroker ::
* A stroker handle. Can be NULL.
*/
FT_EXPORT( void )
FT_Stroker_Done( FT_Stroker stroker );
/**************************************************************
*
* @function:
* FT_Glyph_Stroke
*
* @description:
* Stroke a given outline glyph object with a given stroker.
*
* @inout:
* pglyph ::
* Source glyph handle on input, new glyph handle on output.
*
* @input:
* stroker ::
* A stroker handle.
*
* destroy ::
* A Boolean. If~1, the source glyph object is destroyed
* on success.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* The source glyph is untouched in case of error.
*
* Adding stroke may yield a significantly wider and taller glyph
* depending on how large of a radius was used to stroke the glyph. You
* may need to manually adjust horizontal and vertical advance amounts
* to account for this added size.
*/
FT_EXPORT( FT_Error )
FT_Glyph_Stroke( FT_Glyph *pglyph,
FT_Stroker stroker,
FT_Bool destroy );
/**************************************************************
*
* @function:
* FT_Glyph_StrokeBorder
*
* @description:
* Stroke a given outline glyph object with a given stroker, but
* only return either its inside or outside border.
*
* @inout:
* pglyph ::
* Source glyph handle on input, new glyph handle on output.
*
* @input:
* stroker ::
* A stroker handle.
*
* inside ::
* A Boolean. If~1, return the inside border, otherwise
* the outside border.
*
* destroy ::
* A Boolean. If~1, the source glyph object is destroyed
* on success.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* The source glyph is untouched in case of error.
*
* Adding stroke may yield a significantly wider and taller glyph
* depending on how large of a radius was used to stroke the glyph. You
* may need to manually adjust horizontal and vertical advance amounts
* to account for this added size.
*/
FT_EXPORT( FT_Error )
FT_Glyph_StrokeBorder( FT_Glyph *pglyph,
FT_Stroker stroker,
FT_Bool inside,
FT_Bool destroy );
/* */
FT_END_HEADER
#endif /* FTSTROKE_H_ */
/* END */
/* Local Variables: */
/* coding: utf-8 */
/* End: */

View File

@ -0,0 +1,84 @@
/***************************************************************************/
/* */
/* ftsynth.h */
/* */
/* FreeType synthesizing code for emboldening and slanting */
/* (specification). */
/* */
/* Copyright 2000-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/********* *********/
/********* WARNING, THIS IS ALPHA CODE! THIS API *********/
/********* IS DUE TO CHANGE UNTIL STRICTLY NOTIFIED BY THE *********/
/********* FREETYPE DEVELOPMENT TEAM *********/
/********* *********/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/* Main reason for not lifting the functions in this module to a */
/* `standard' API is that the used parameters for emboldening and */
/* slanting are not configurable. Consider the functions as a */
/* code resource that should be copied into the application and */
/* adapted to the particular needs. */
#ifndef FTSYNTH_H_
#define FTSYNTH_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/* Embolden a glyph by a `reasonable' value (which is highly a matter of */
/* taste). This function is actually a convenience function, providing */
/* a wrapper for @FT_Outline_Embolden and @FT_Bitmap_Embolden. */
/* */
/* For emboldened outlines the height, width, and advance metrics are */
/* increased by the strength of the emboldening -- this even affects */
/* mono-width fonts! */
/* */
/* You can also call @FT_Outline_Get_CBox to get precise values. */
FT_EXPORT( void )
FT_GlyphSlot_Embolden( FT_GlyphSlot slot );
/* Slant an outline glyph to the right by about 12 degrees. */
FT_EXPORT( void )
FT_GlyphSlot_Oblique( FT_GlyphSlot slot );
/* */
FT_END_HEADER
#endif /* FTSYNTH_H_ */
/* END */

View File

@ -0,0 +1,355 @@
/***************************************************************************/
/* */
/* ftsystem.h */
/* */
/* FreeType low-level system interface definition (specification). */
/* */
/* Copyright 1996-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTSYSTEM_H_
#define FTSYSTEM_H_
#include <ft2build.h>
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* system_interface */
/* */
/* <Title> */
/* System Interface */
/* */
/* <Abstract> */
/* How FreeType manages memory and i/o. */
/* */
/* <Description> */
/* This section contains various definitions related to memory */
/* management and i/o access. You need to understand this */
/* information if you want to use a custom memory manager or you own */
/* i/o streams. */
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/* M E M O R Y M A N A G E M E N T */
/* */
/*************************************************************************/
/*************************************************************************
*
* @type:
* FT_Memory
*
* @description:
* A handle to a given memory manager object, defined with an
* @FT_MemoryRec structure.
*
*/
typedef struct FT_MemoryRec_* FT_Memory;
/*************************************************************************
*
* @functype:
* FT_Alloc_Func
*
* @description:
* A function used to allocate `size' bytes from `memory'.
*
* @input:
* memory ::
* A handle to the source memory manager.
*
* size ::
* The size in bytes to allocate.
*
* @return:
* Address of new memory block. 0~in case of failure.
*
*/
typedef void*
(*FT_Alloc_Func)( FT_Memory memory,
long size );
/*************************************************************************
*
* @functype:
* FT_Free_Func
*
* @description:
* A function used to release a given block of memory.
*
* @input:
* memory ::
* A handle to the source memory manager.
*
* block ::
* The address of the target memory block.
*
*/
typedef void
(*FT_Free_Func)( FT_Memory memory,
void* block );
/*************************************************************************
*
* @functype:
* FT_Realloc_Func
*
* @description:
* A function used to re-allocate a given block of memory.
*
* @input:
* memory ::
* A handle to the source memory manager.
*
* cur_size ::
* The block's current size in bytes.
*
* new_size ::
* The block's requested new size.
*
* block ::
* The block's current address.
*
* @return:
* New block address. 0~in case of memory shortage.
*
* @note:
* In case of error, the old block must still be available.
*
*/
typedef void*
(*FT_Realloc_Func)( FT_Memory memory,
long cur_size,
long new_size,
void* block );
/*************************************************************************
*
* @struct:
* FT_MemoryRec
*
* @description:
* A structure used to describe a given memory manager to FreeType~2.
*
* @fields:
* user ::
* A generic typeless pointer for user data.
*
* alloc ::
* A pointer type to an allocation function.
*
* free ::
* A pointer type to an memory freeing function.
*
* realloc ::
* A pointer type to a reallocation function.
*
*/
struct FT_MemoryRec_
{
void* user;
FT_Alloc_Func alloc;
FT_Free_Func free;
FT_Realloc_Func realloc;
};
/*************************************************************************/
/* */
/* I / O M A N A G E M E N T */
/* */
/*************************************************************************/
/*************************************************************************
*
* @type:
* FT_Stream
*
* @description:
* A handle to an input stream.
*
* @also:
* See @FT_StreamRec for the publicly accessible fields of a given
* stream object.
*
*/
typedef struct FT_StreamRec_* FT_Stream;
/*************************************************************************
*
* @struct:
* FT_StreamDesc
*
* @description:
* A union type used to store either a long or a pointer. This is used
* to store a file descriptor or a `FILE*' in an input stream.
*
*/
typedef union FT_StreamDesc_
{
long value;
void* pointer;
} FT_StreamDesc;
/*************************************************************************
*
* @functype:
* FT_Stream_IoFunc
*
* @description:
* A function used to seek and read data from a given input stream.
*
* @input:
* stream ::
* A handle to the source stream.
*
* offset ::
* The offset of read in stream (always from start).
*
* buffer ::
* The address of the read buffer.
*
* count ::
* The number of bytes to read from the stream.
*
* @return:
* The number of bytes effectively read by the stream.
*
* @note:
* This function might be called to perform a seek or skip operation
* with a `count' of~0. A non-zero return value then indicates an
* error.
*
*/
typedef unsigned long
(*FT_Stream_IoFunc)( FT_Stream stream,
unsigned long offset,
unsigned char* buffer,
unsigned long count );
/*************************************************************************
*
* @functype:
* FT_Stream_CloseFunc
*
* @description:
* A function used to close a given input stream.
*
* @input:
* stream ::
* A handle to the target stream.
*
*/
typedef void
(*FT_Stream_CloseFunc)( FT_Stream stream );
/*************************************************************************
*
* @struct:
* FT_StreamRec
*
* @description:
* A structure used to describe an input stream.
*
* @input:
* base ::
* For memory-based streams, this is the address of the first stream
* byte in memory. This field should always be set to NULL for
* disk-based streams.
*
* size ::
* The stream size in bytes.
*
* In case of compressed streams where the size is unknown before
* actually doing the decompression, the value is set to 0x7FFFFFFF.
* (Note that this size value can occur for normal streams also; it is
* thus just a hint.)
*
* pos ::
* The current position within the stream.
*
* descriptor ::
* This field is a union that can hold an integer or a pointer. It is
* used by stream implementations to store file descriptors or `FILE*'
* pointers.
*
* pathname ::
* This field is completely ignored by FreeType. However, it is often
* useful during debugging to use it to store the stream's filename
* (where available).
*
* read ::
* The stream's input function.
*
* close ::
* The stream's close function.
*
* memory ::
* The memory manager to use to preload frames. This is set
* internally by FreeType and shouldn't be touched by stream
* implementations.
*
* cursor ::
* This field is set and used internally by FreeType when parsing
* frames.
*
* limit ::
* This field is set and used internally by FreeType when parsing
* frames.
*
*/
typedef struct FT_StreamRec_
{
unsigned char* base;
unsigned long size;
unsigned long pos;
FT_StreamDesc descriptor;
FT_StreamDesc pathname;
FT_Stream_IoFunc read;
FT_Stream_CloseFunc close;
FT_Memory memory;
unsigned char* cursor;
unsigned char* limit;
} FT_StreamRec;
/* */
FT_END_HEADER
#endif /* FTSYSTEM_H_ */
/* END */

View File

@ -0,0 +1,350 @@
/***************************************************************************/
/* */
/* fttrigon.h */
/* */
/* FreeType trigonometric functions (specification). */
/* */
/* Copyright 2001-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTTRIGON_H_
#define FTTRIGON_H_
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* computations */
/* */
/*************************************************************************/
/*************************************************************************
*
* @type:
* FT_Angle
*
* @description:
* This type is used to model angle values in FreeType. Note that the
* angle is a 16.16 fixed-point value expressed in degrees.
*
*/
typedef FT_Fixed FT_Angle;
/*************************************************************************
*
* @macro:
* FT_ANGLE_PI
*
* @description:
* The angle pi expressed in @FT_Angle units.
*
*/
#define FT_ANGLE_PI ( 180L << 16 )
/*************************************************************************
*
* @macro:
* FT_ANGLE_2PI
*
* @description:
* The angle 2*pi expressed in @FT_Angle units.
*
*/
#define FT_ANGLE_2PI ( FT_ANGLE_PI * 2 )
/*************************************************************************
*
* @macro:
* FT_ANGLE_PI2
*
* @description:
* The angle pi/2 expressed in @FT_Angle units.
*
*/
#define FT_ANGLE_PI2 ( FT_ANGLE_PI / 2 )
/*************************************************************************
*
* @macro:
* FT_ANGLE_PI4
*
* @description:
* The angle pi/4 expressed in @FT_Angle units.
*
*/
#define FT_ANGLE_PI4 ( FT_ANGLE_PI / 4 )
/*************************************************************************
*
* @function:
* FT_Sin
*
* @description:
* Return the sinus of a given angle in fixed-point format.
*
* @input:
* angle ::
* The input angle.
*
* @return:
* The sinus value.
*
* @note:
* If you need both the sinus and cosinus for a given angle, use the
* function @FT_Vector_Unit.
*
*/
FT_EXPORT( FT_Fixed )
FT_Sin( FT_Angle angle );
/*************************************************************************
*
* @function:
* FT_Cos
*
* @description:
* Return the cosinus of a given angle in fixed-point format.
*
* @input:
* angle ::
* The input angle.
*
* @return:
* The cosinus value.
*
* @note:
* If you need both the sinus and cosinus for a given angle, use the
* function @FT_Vector_Unit.
*
*/
FT_EXPORT( FT_Fixed )
FT_Cos( FT_Angle angle );
/*************************************************************************
*
* @function:
* FT_Tan
*
* @description:
* Return the tangent of a given angle in fixed-point format.
*
* @input:
* angle ::
* The input angle.
*
* @return:
* The tangent value.
*
*/
FT_EXPORT( FT_Fixed )
FT_Tan( FT_Angle angle );
/*************************************************************************
*
* @function:
* FT_Atan2
*
* @description:
* Return the arc-tangent corresponding to a given vector (x,y) in
* the 2d plane.
*
* @input:
* x ::
* The horizontal vector coordinate.
*
* y ::
* The vertical vector coordinate.
*
* @return:
* The arc-tangent value (i.e. angle).
*
*/
FT_EXPORT( FT_Angle )
FT_Atan2( FT_Fixed x,
FT_Fixed y );
/*************************************************************************
*
* @function:
* FT_Angle_Diff
*
* @description:
* Return the difference between two angles. The result is always
* constrained to the ]-PI..PI] interval.
*
* @input:
* angle1 ::
* First angle.
*
* angle2 ::
* Second angle.
*
* @return:
* Constrained value of `value2-value1'.
*
*/
FT_EXPORT( FT_Angle )
FT_Angle_Diff( FT_Angle angle1,
FT_Angle angle2 );
/*************************************************************************
*
* @function:
* FT_Vector_Unit
*
* @description:
* Return the unit vector corresponding to a given angle. After the
* call, the value of `vec.x' will be `cos(angle)', and the value of
* `vec.y' will be `sin(angle)'.
*
* This function is useful to retrieve both the sinus and cosinus of a
* given angle quickly.
*
* @output:
* vec ::
* The address of target vector.
*
* @input:
* angle ::
* The input angle.
*
*/
FT_EXPORT( void )
FT_Vector_Unit( FT_Vector* vec,
FT_Angle angle );
/*************************************************************************
*
* @function:
* FT_Vector_Rotate
*
* @description:
* Rotate a vector by a given angle.
*
* @inout:
* vec ::
* The address of target vector.
*
* @input:
* angle ::
* The input angle.
*
*/
FT_EXPORT( void )
FT_Vector_Rotate( FT_Vector* vec,
FT_Angle angle );
/*************************************************************************
*
* @function:
* FT_Vector_Length
*
* @description:
* Return the length of a given vector.
*
* @input:
* vec ::
* The address of target vector.
*
* @return:
* The vector length, expressed in the same units that the original
* vector coordinates.
*
*/
FT_EXPORT( FT_Fixed )
FT_Vector_Length( FT_Vector* vec );
/*************************************************************************
*
* @function:
* FT_Vector_Polarize
*
* @description:
* Compute both the length and angle of a given vector.
*
* @input:
* vec ::
* The address of source vector.
*
* @output:
* length ::
* The vector length.
*
* angle ::
* The vector angle.
*
*/
FT_EXPORT( void )
FT_Vector_Polarize( FT_Vector* vec,
FT_Fixed *length,
FT_Angle *angle );
/*************************************************************************
*
* @function:
* FT_Vector_From_Polar
*
* @description:
* Compute vector coordinates from a length and angle.
*
* @output:
* vec ::
* The address of source vector.
*
* @input:
* length ::
* The vector length.
*
* angle ::
* The vector angle.
*
*/
FT_EXPORT( void )
FT_Vector_From_Polar( FT_Vector* vec,
FT_Fixed length,
FT_Angle angle );
/* */
FT_END_HEADER
#endif /* FTTRIGON_H_ */
/* END */

View File

@ -0,0 +1,329 @@
/***************************************************************************/
/* */
/* ftttdrv.h */
/* */
/* FreeType API for controlling the TrueType driver */
/* (specification only). */
/* */
/* Copyright 2013-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTTTDRV_H_
#define FTTTDRV_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/**************************************************************************
*
* @section:
* tt_driver
*
* @title:
* The TrueType driver
*
* @abstract:
* Controlling the TrueType driver module.
*
* @description:
* While FreeType's TrueType driver doesn't expose API functions by
* itself, it is possible to control its behaviour with @FT_Property_Set
* and @FT_Property_Get. The following lists the available properties
* together with the necessary macros and structures.
*
* The TrueType driver's module name is `truetype'.
*
* We start with a list of definitions, kindly provided by Greg
* Hitchcock.
*
* _Bi-Level_ _Rendering_
*
* Monochromatic rendering, exclusively used in the early days of
* TrueType by both Apple and Microsoft. Microsoft's GDI interface
* supported hinting of the right-side bearing point, such that the
* advance width could be non-linear. Most often this was done to
* achieve some level of glyph symmetry. To enable reasonable
* performance (e.g., not having to run hinting on all glyphs just to
* get the widths) there was a bit in the head table indicating if the
* side bearing was hinted, and additional tables, `hdmx' and `LTSH', to
* cache hinting widths across multiple sizes and device aspect ratios.
*
* _Font_ _Smoothing_
*
* Microsoft's GDI implementation of anti-aliasing. Not traditional
* anti-aliasing as the outlines were hinted before the sampling. The
* widths matched the bi-level rendering.
*
* _ClearType_ _Rendering_
*
* Technique that uses physical subpixels to improve rendering on LCD
* (and other) displays. Because of the higher resolution, many methods
* of improving symmetry in glyphs through hinting the right-side
* bearing were no longer necessary. This lead to what GDI calls
* `natural widths' ClearType, see
* http://www.beatstamm.com/typography/RTRCh4.htm#Sec21. Since hinting
* has extra resolution, most non-linearity went away, but it is still
* possible for hints to change the advance widths in this mode.
*
* _ClearType_ _Compatible_ _Widths_
*
* One of the earliest challenges with ClearType was allowing the
* implementation in GDI to be selected without requiring all UI and
* documents to reflow. To address this, a compatible method of
* rendering ClearType was added where the font hints are executed once
* to determine the width in bi-level rendering, and then re-run in
* ClearType, with the difference in widths being absorbed in the font
* hints for ClearType (mostly in the white space of hints); see
* http://www.beatstamm.com/typography/RTRCh4.htm#Sec20. Somewhat by
* definition, compatible width ClearType allows for non-linear widths,
* but only when the bi-level version has non-linear widths.
*
* _ClearType_ _Subpixel_ _Positioning_
*
* One of the nice benefits of ClearType is the ability to more crisply
* display fractional widths; unfortunately, the GDI model of integer
* bitmaps did not support this. However, the WPF and Direct Write
* frameworks do support fractional widths. DWrite calls this `natural
* mode', not to be confused with GDI's `natural widths'. Subpixel
* positioning, in the current implementation of Direct Write,
* unfortunately does not support hinted advance widths, see
* http://www.beatstamm.com/typography/RTRCh4.htm#Sec22. Note that the
* TrueType interpreter fully allows the advance width to be adjusted in
* this mode, just the DWrite client will ignore those changes.
*
* _ClearType_ _Backwards_ _Compatibility_
*
* This is a set of exceptions made in the TrueType interpreter to
* minimize hinting techniques that were problematic with the extra
* resolution of ClearType; see
* http://www.beatstamm.com/typography/RTRCh4.htm#Sec1 and
* http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx.
* This technique is not to be confused with ClearType compatible
* widths. ClearType backwards compatibility has no direct impact on
* changing advance widths, but there might be an indirect impact on
* disabling some deltas. This could be worked around in backwards
* compatibility mode.
*
* _Native_ _ClearType_ _Mode_
*
* (Not to be confused with `natural widths'.) This mode removes all
* the exceptions in the TrueType interpreter when running with
* ClearType. Any issues on widths would still apply, though.
*
*/
/**************************************************************************
*
* @property:
* interpreter-version
*
* @description:
* Currently, three versions are available, two representing the
* bytecode interpreter with subpixel hinting support (old `Infinality'
* code and new stripped-down and higher performance `minimal' code) and
* one without, respectively. The default is subpixel support if
* TT_CONFIG_OPTION_SUBPIXEL_HINTING is defined, and no subpixel support
* otherwise (since it isn't available then).
*
* If subpixel hinting is on, many TrueType bytecode instructions behave
* differently compared to B/W or grayscale rendering (except if `native
* ClearType' is selected by the font). Microsoft's main idea is to
* render at a much increased horizontal resolution, then sampling down
* the created output to subpixel precision. However, many older fonts
* are not suited to this and must be specially taken care of by
* applying (hardcoded) tweaks in Microsoft's interpreter.
*
* Details on subpixel hinting and some of the necessary tweaks can be
* found in Greg Hitchcock's whitepaper at
* `http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx'.
* Note that FreeType currently doesn't really `subpixel hint' (6x1, 6x2,
* or 6x5 supersampling) like discussed in the paper. Depending on the
* chosen interpreter, it simply ignores instructions on vertical stems
* to arrive at very similar results.
*
* The following example code demonstrates how to deactivate subpixel
* hinting (omitting the error handling).
*
* {
* FT_Library library;
* FT_Face face;
* FT_UInt interpreter_version = TT_INTERPRETER_VERSION_35;
*
*
* FT_Init_FreeType( &library );
*
* FT_Property_Set( library, "truetype",
* "interpreter-version",
* &interpreter_version );
* }
*
* @note:
* This property can be used with @FT_Property_Get also.
*
* This property can be set via the `FREETYPE_PROPERTIES' environment
* variable (using values `35', `38', or `40').
*/
/**************************************************************************
*
* @enum:
* TT_INTERPRETER_VERSION_XXX
*
* @description:
* A list of constants used for the @interpreter-version property to
* select the hinting engine for Truetype fonts.
*
* The numeric value in the constant names represents the version
* number as returned by the `GETINFO' bytecode instruction.
*
* @values:
* TT_INTERPRETER_VERSION_35 ::
* Version~35 corresponds to MS rasterizer v.1.7 as used e.g. in
* Windows~98; only grayscale and B/W rasterizing is supported.
*
* TT_INTERPRETER_VERSION_38 ::
* Version~38 corresponds to MS rasterizer v.1.9; it is roughly
* equivalent to the hinting provided by DirectWrite ClearType (as can
* be found, for example, in the Internet Explorer~9 running on
* Windows~7). It is used in FreeType to select the `Infinality'
* subpixel hinting code. The code may be removed in a future
* version.
*
* TT_INTERPRETER_VERSION_40 ::
* Version~40 corresponds to MS rasterizer v.2.1; it is roughly
* equivalent to the hinting provided by DirectWrite ClearType (as can
* be found, for example, in Microsoft's Edge Browser on Windows~10).
* It is used in FreeType to select the `minimal' subpixel hinting
* code, a stripped-down and higher performance version of the
* `Infinality' code.
*
* @note:
* This property controls the behaviour of the bytecode interpreter
* and thus how outlines get hinted. It does *not* control how glyph
* get rasterized! In particular, it does not control subpixel color
* filtering.
*
* If FreeType has not been compiled with the configuration option
* FT_CONFIG_OPTION_SUBPIXEL_HINTING, selecting version~38 or~40 causes
* an `FT_Err_Unimplemented_Feature' error.
*
* Depending on the graphics framework, Microsoft uses different
* bytecode and rendering engines. As a consequence, the version
* numbers returned by a call to the `GETINFO' bytecode instruction are
* more convoluted than desired.
*
* Here are two tables that try to shed some light on the possible
* values for the MS rasterizer engine, together with the additional
* features introduced by it.
*
* {
* GETINFO framework version feature
* -------------------------------------------------------------------
* 3 GDI (Win 3.1), v1.0 16-bit, first version
* TrueImage
* 33 GDI (Win NT 3.1), v1.5 32-bit
* HP Laserjet
* 34 GDI (Win 95) v1.6 font smoothing,
* new SCANTYPE opcode
* 35 GDI (Win 98/2000) v1.7 (UN)SCALED_COMPONENT_OFFSET
* bits in composite glyphs
* 36 MGDI (Win CE 2) v1.6+ classic ClearType
* 37 GDI (XP and later), v1.8 ClearType
* GDI+ old (before Vista)
* 38 GDI+ old (Vista, Win 7), v1.9 subpixel ClearType,
* WPF Y-direction ClearType,
* additional error checking
* 39 DWrite (before Win 8) v2.0 subpixel ClearType flags
* in GETINFO opcode,
* bug fixes
* 40 GDI+ (after Win 7), v2.1 Y-direction ClearType flag
* DWrite (Win 8) in GETINFO opcode,
* Gray ClearType
* }
*
* The `version' field gives a rough orientation only, since some
* applications provided certain features much earlier (as an example,
* Microsoft Reader used subpixel and Y-direction ClearType already in
* Windows 2000). Similarly, updates to a given framework might include
* improved hinting support.
*
* {
* version sampling rendering comment
* x y x y
* --------------------------------------------------------------
* v1.0 normal normal B/W B/W bi-level
* v1.6 high high gray gray grayscale
* v1.8 high normal color-filter B/W (GDI) ClearType
* v1.9 high high color-filter gray Color ClearType
* v2.1 high normal gray B/W Gray ClearType
* v2.1 high high gray gray Gray ClearType
* }
*
* Color and Gray ClearType are the two available variants of
* `Y-direction ClearType', meaning grayscale rasterization along the
* Y-direction; the name used in the TrueType specification for this
* feature is `symmetric smoothing'. `Classic ClearType' is the
* original algorithm used before introducing a modified version in
* Win~XP. Another name for v1.6's grayscale rendering is `font
* smoothing', and `Color ClearType' is sometimes also called `DWrite
* ClearType'. To differentiate between today's Color ClearType and the
* earlier ClearType variant with B/W rendering along the vertical axis,
* the latter is sometimes called `GDI ClearType'.
*
* `Normal' and `high' sampling describe the (virtual) resolution to
* access the rasterized outline after the hinting process. `Normal'
* means 1 sample per grid line (i.e., B/W). In the current Microsoft
* implementation, `high' means an extra virtual resolution of 16x16 (or
* 16x1) grid lines per pixel for bytecode instructions like `MIRP'.
* After hinting, these 16 grid lines are mapped to 6x5 (or 6x1) grid
* lines for color filtering if Color ClearType is activated.
*
* Note that `Gray ClearType' is essentially the same as v1.6's
* grayscale rendering. However, the GETINFO instruction handles it
* differently: v1.6 returns bit~12 (hinting for grayscale), while v2.1
* returns bits~13 (hinting for ClearType), 18 (symmetrical smoothing),
* and~19 (Gray ClearType). Also, this mode respects bits 2 and~3 for
* the version~1 gasp table exclusively (like Color ClearType), while
* v1.6 only respects the values of version~0 (bits 0 and~1).
*
* Keep in mind that the features of the above interpreter versions
* might not map exactly to FreeType features or behavior because it is
* a fundamentally different library with different internals.
*
*/
#define TT_INTERPRETER_VERSION_35 35
#define TT_INTERPRETER_VERSION_38 38
#define TT_INTERPRETER_VERSION_40 40
/* */
FT_END_HEADER
#endif /* FTTTDRV_H_ */
/* END */

View File

@ -0,0 +1,602 @@
/***************************************************************************/
/* */
/* fttypes.h */
/* */
/* FreeType simple types definitions (specification only). */
/* */
/* Copyright 1996-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTTYPES_H_
#define FTTYPES_H_
#include <ft2build.h>
#include FT_CONFIG_CONFIG_H
#include FT_SYSTEM_H
#include FT_IMAGE_H
#include <stddef.h>
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* basic_types */
/* */
/* <Title> */
/* Basic Data Types */
/* */
/* <Abstract> */
/* The basic data types defined by the library. */
/* */
/* <Description> */
/* This section contains the basic data types defined by FreeType~2, */
/* ranging from simple scalar types to bitmap descriptors. More */
/* font-specific structures are defined in a different section. */
/* */
/* <Order> */
/* FT_Byte */
/* FT_Bytes */
/* FT_Char */
/* FT_Int */
/* FT_UInt */
/* FT_Int16 */
/* FT_UInt16 */
/* FT_Int32 */
/* FT_UInt32 */
/* FT_Int64 */
/* FT_UInt64 */
/* FT_Short */
/* FT_UShort */
/* FT_Long */
/* FT_ULong */
/* FT_Bool */
/* FT_Offset */
/* FT_PtrDist */
/* FT_String */
/* FT_Tag */
/* FT_Error */
/* FT_Fixed */
/* FT_Pointer */
/* FT_Pos */
/* FT_Vector */
/* FT_BBox */
/* FT_Matrix */
/* FT_FWord */
/* FT_UFWord */
/* FT_F2Dot14 */
/* FT_UnitVector */
/* FT_F26Dot6 */
/* FT_Data */
/* */
/* FT_MAKE_TAG */
/* */
/* FT_Generic */
/* FT_Generic_Finalizer */
/* */
/* FT_Bitmap */
/* FT_Pixel_Mode */
/* FT_Palette_Mode */
/* FT_Glyph_Format */
/* FT_IMAGE_TAG */
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/* <Type> */
/* FT_Bool */
/* */
/* <Description> */
/* A typedef of unsigned char, used for simple booleans. As usual, */
/* values 1 and~0 represent true and false, respectively. */
/* */
typedef unsigned char FT_Bool;
/*************************************************************************/
/* */
/* <Type> */
/* FT_FWord */
/* */
/* <Description> */
/* A signed 16-bit integer used to store a distance in original font */
/* units. */
/* */
typedef signed short FT_FWord; /* distance in FUnits */
/*************************************************************************/
/* */
/* <Type> */
/* FT_UFWord */
/* */
/* <Description> */
/* An unsigned 16-bit integer used to store a distance in original */
/* font units. */
/* */
typedef unsigned short FT_UFWord; /* unsigned distance */
/*************************************************************************/
/* */
/* <Type> */
/* FT_Char */
/* */
/* <Description> */
/* A simple typedef for the _signed_ char type. */
/* */
typedef signed char FT_Char;
/*************************************************************************/
/* */
/* <Type> */
/* FT_Byte */
/* */
/* <Description> */
/* A simple typedef for the _unsigned_ char type. */
/* */
typedef unsigned char FT_Byte;
/*************************************************************************/
/* */
/* <Type> */
/* FT_Bytes */
/* */
/* <Description> */
/* A typedef for constant memory areas. */
/* */
typedef const FT_Byte* FT_Bytes;
/*************************************************************************/
/* */
/* <Type> */
/* FT_Tag */
/* */
/* <Description> */
/* A typedef for 32-bit tags (as used in the SFNT format). */
/* */
typedef FT_UInt32 FT_Tag;
/*************************************************************************/
/* */
/* <Type> */
/* FT_String */
/* */
/* <Description> */
/* A simple typedef for the char type, usually used for strings. */
/* */
typedef char FT_String;
/*************************************************************************/
/* */
/* <Type> */
/* FT_Short */
/* */
/* <Description> */
/* A typedef for signed short. */
/* */
typedef signed short FT_Short;
/*************************************************************************/
/* */
/* <Type> */
/* FT_UShort */
/* */
/* <Description> */
/* A typedef for unsigned short. */
/* */
typedef unsigned short FT_UShort;
/*************************************************************************/
/* */
/* <Type> */
/* FT_Int */
/* */
/* <Description> */
/* A typedef for the int type. */
/* */
typedef signed int FT_Int;
/*************************************************************************/
/* */
/* <Type> */
/* FT_UInt */
/* */
/* <Description> */
/* A typedef for the unsigned int type. */
/* */
typedef unsigned int FT_UInt;
/*************************************************************************/
/* */
/* <Type> */
/* FT_Long */
/* */
/* <Description> */
/* A typedef for signed long. */
/* */
typedef signed long FT_Long;
/*************************************************************************/
/* */
/* <Type> */
/* FT_ULong */
/* */
/* <Description> */
/* A typedef for unsigned long. */
/* */
typedef unsigned long FT_ULong;
/*************************************************************************/
/* */
/* <Type> */
/* FT_F2Dot14 */
/* */
/* <Description> */
/* A signed 2.14 fixed-point type used for unit vectors. */
/* */
typedef signed short FT_F2Dot14;
/*************************************************************************/
/* */
/* <Type> */
/* FT_F26Dot6 */
/* */
/* <Description> */
/* A signed 26.6 fixed-point type used for vectorial pixel */
/* coordinates. */
/* */
typedef signed long FT_F26Dot6;
/*************************************************************************/
/* */
/* <Type> */
/* FT_Fixed */
/* */
/* <Description> */
/* This type is used to store 16.16 fixed-point values, like scaling */
/* values or matrix coefficients. */
/* */
typedef signed long FT_Fixed;
/*************************************************************************/
/* */
/* <Type> */
/* FT_Error */
/* */
/* <Description> */
/* The FreeType error code type. A value of~0 is always interpreted */
/* as a successful operation. */
/* */
typedef int FT_Error;
/*************************************************************************/
/* */
/* <Type> */
/* FT_Pointer */
/* */
/* <Description> */
/* A simple typedef for a typeless pointer. */
/* */
typedef void* FT_Pointer;
/*************************************************************************/
/* */
/* <Type> */
/* FT_Offset */
/* */
/* <Description> */
/* This is equivalent to the ANSI~C `size_t' type, i.e., the largest */
/* _unsigned_ integer type used to express a file size or position, */
/* or a memory block size. */
/* */
typedef size_t FT_Offset;
/*************************************************************************/
/* */
/* <Type> */
/* FT_PtrDist */
/* */
/* <Description> */
/* This is equivalent to the ANSI~C `ptrdiff_t' type, i.e., the */
/* largest _signed_ integer type used to express the distance */
/* between two pointers. */
/* */
typedef ft_ptrdiff_t FT_PtrDist;
/*************************************************************************/
/* */
/* <Struct> */
/* FT_UnitVector */
/* */
/* <Description> */
/* A simple structure used to store a 2D vector unit vector. Uses */
/* FT_F2Dot14 types. */
/* */
/* <Fields> */
/* x :: Horizontal coordinate. */
/* */
/* y :: Vertical coordinate. */
/* */
typedef struct FT_UnitVector_
{
FT_F2Dot14 x;
FT_F2Dot14 y;
} FT_UnitVector;
/*************************************************************************/
/* */
/* <Struct> */
/* FT_Matrix */
/* */
/* <Description> */
/* A simple structure used to store a 2x2 matrix. Coefficients are */
/* in 16.16 fixed-point format. The computation performed is: */
/* */
/* { */
/* x' = x*xx + y*xy */
/* y' = x*yx + y*yy */
/* } */
/* */
/* <Fields> */
/* xx :: Matrix coefficient. */
/* */
/* xy :: Matrix coefficient. */
/* */
/* yx :: Matrix coefficient. */
/* */
/* yy :: Matrix coefficient. */
/* */
typedef struct FT_Matrix_
{
FT_Fixed xx, xy;
FT_Fixed yx, yy;
} FT_Matrix;
/*************************************************************************/
/* */
/* <Struct> */
/* FT_Data */
/* */
/* <Description> */
/* Read-only binary data represented as a pointer and a length. */
/* */
/* <Fields> */
/* pointer :: The data. */
/* */
/* length :: The length of the data in bytes. */
/* */
typedef struct FT_Data_
{
const FT_Byte* pointer;
FT_Int length;
} FT_Data;
/*************************************************************************/
/* */
/* <FuncType> */
/* FT_Generic_Finalizer */
/* */
/* <Description> */
/* Describe a function used to destroy the `client' data of any */
/* FreeType object. See the description of the @FT_Generic type for */
/* details of usage. */
/* */
/* <Input> */
/* The address of the FreeType object that is under finalization. */
/* Its client data is accessed through its `generic' field. */
/* */
typedef void (*FT_Generic_Finalizer)(void* object);
/*************************************************************************/
/* */
/* <Struct> */
/* FT_Generic */
/* */
/* <Description> */
/* Client applications often need to associate their own data to a */
/* variety of FreeType core objects. For example, a text layout API */
/* might want to associate a glyph cache to a given size object. */
/* */
/* Some FreeType object contains a `generic' field, of type */
/* FT_Generic, which usage is left to client applications and font */
/* servers. */
/* */
/* It can be used to store a pointer to client-specific data, as well */
/* as the address of a `finalizer' function, which will be called by */
/* FreeType when the object is destroyed (for example, the previous */
/* client example would put the address of the glyph cache destructor */
/* in the `finalizer' field). */
/* */
/* <Fields> */
/* data :: A typeless pointer to any client-specified data. This */
/* field is completely ignored by the FreeType library. */
/* */
/* finalizer :: A pointer to a `generic finalizer' function, which */
/* will be called when the object is destroyed. If this */
/* field is set to NULL, no code will be called. */
/* */
typedef struct FT_Generic_
{
void* data;
FT_Generic_Finalizer finalizer;
} FT_Generic;
/*************************************************************************/
/* */
/* <Macro> */
/* FT_MAKE_TAG */
/* */
/* <Description> */
/* This macro converts four-letter tags that are used to label */
/* TrueType tables into an unsigned long, to be used within FreeType. */
/* */
/* <Note> */
/* The produced values *must* be 32-bit integers. Don't redefine */
/* this macro. */
/* */
#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
(FT_Tag) \
( ( (FT_ULong)_x1 << 24 ) | \
( (FT_ULong)_x2 << 16 ) | \
( (FT_ULong)_x3 << 8 ) | \
(FT_ULong)_x4 )
/*************************************************************************/
/*************************************************************************/
/* */
/* L I S T M A N A G E M E N T */
/* */
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/* */
/* <Section> */
/* list_processing */
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/* <Type> */
/* FT_ListNode */
/* */
/* <Description> */
/* Many elements and objects in FreeType are listed through an */
/* @FT_List record (see @FT_ListRec). As its name suggests, an */
/* FT_ListNode is a handle to a single list element. */
/* */
typedef struct FT_ListNodeRec_* FT_ListNode;
/*************************************************************************/
/* */
/* <Type> */
/* FT_List */
/* */
/* <Description> */
/* A handle to a list record (see @FT_ListRec). */
/* */
typedef struct FT_ListRec_* FT_List;
/*************************************************************************/
/* */
/* <Struct> */
/* FT_ListNodeRec */
/* */
/* <Description> */
/* A structure used to hold a single list element. */
/* */
/* <Fields> */
/* prev :: The previous element in the list. NULL if first. */
/* */
/* next :: The next element in the list. NULL if last. */
/* */
/* data :: A typeless pointer to the listed object. */
/* */
typedef struct FT_ListNodeRec_
{
FT_ListNode prev;
FT_ListNode next;
void* data;
} FT_ListNodeRec;
/*************************************************************************/
/* */
/* <Struct> */
/* FT_ListRec */
/* */
/* <Description> */
/* A structure used to hold a simple doubly-linked list. These are */
/* used in many parts of FreeType. */
/* */
/* <Fields> */
/* head :: The head (first element) of doubly-linked list. */
/* */
/* tail :: The tail (last element) of doubly-linked list. */
/* */
typedef struct FT_ListRec_
{
FT_ListNode head;
FT_ListNode tail;
} FT_ListRec;
/* */
#define FT_IS_EMPTY( list ) ( (list).head == 0 )
#define FT_BOOL( x ) ( (FT_Bool)( x ) )
/* concatenate C tokens */
#define FT_ERR_XCAT( x, y ) x ## y
#define FT_ERR_CAT( x, y ) FT_ERR_XCAT( x, y )
/* see `ftmoderr.h' for descriptions of the following macros */
#define FT_ERR( e ) FT_ERR_CAT( FT_ERR_PREFIX, e )
#define FT_ERROR_BASE( x ) ( (x) & 0xFF )
#define FT_ERROR_MODULE( x ) ( (x) & 0xFF00U )
#define FT_ERR_EQ( x, e ) \
( FT_ERROR_BASE( x ) == FT_ERROR_BASE( FT_ERR( e ) ) )
#define FT_ERR_NEQ( x, e ) \
( FT_ERROR_BASE( x ) != FT_ERROR_BASE( FT_ERR( e ) ) )
FT_END_HEADER
#endif /* FTTYPES_H_ */
/* END */

View File

@ -0,0 +1,275 @@
/***************************************************************************/
/* */
/* ftwinfnt.h */
/* */
/* FreeType API for accessing Windows fnt-specific data. */
/* */
/* Copyright 2003-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef FTWINFNT_H_
#define FTWINFNT_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* winfnt_fonts */
/* */
/* <Title> */
/* Window FNT Files */
/* */
/* <Abstract> */
/* Windows FNT specific API. */
/* */
/* <Description> */
/* This section contains the declaration of Windows FNT specific */
/* functions. */
/* */
/*************************************************************************/
/*************************************************************************
*
* @enum:
* FT_WinFNT_ID_XXX
*
* @description:
* A list of valid values for the `charset' byte in
* @FT_WinFNT_HeaderRec. Exact mapping tables for the various cpXXXX
* encodings (except for cp1361) can be found at
* ftp://ftp.unicode.org/Public in the MAPPINGS/VENDORS/MICSFT/WINDOWS
* subdirectory. cp1361 is roughly a superset of
* MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT.
*
* @values:
* FT_WinFNT_ID_DEFAULT ::
* This is used for font enumeration and font creation as a
* `don't care' value. Valid font files don't contain this value.
* When querying for information about the character set of the font
* that is currently selected into a specified device context, this
* return value (of the related Windows API) simply denotes failure.
*
* FT_WinFNT_ID_SYMBOL ::
* There is no known mapping table available.
*
* FT_WinFNT_ID_MAC ::
* Mac Roman encoding.
*
* FT_WinFNT_ID_OEM ::
* From Michael Pöttgen <michael@poettgen.de>:
*
* The `Windows Font Mapping' article says that FT_WinFNT_ID_OEM
* is used for the charset of vector fonts, like `modern.fon',
* `roman.fon', and `script.fon' on Windows.
*
* The `CreateFont' documentation says: The FT_WinFNT_ID_OEM value
* specifies a character set that is operating-system dependent.
*
* The `IFIMETRICS' documentation from the `Windows Driver
* Development Kit' says: This font supports an OEM-specific
* character set. The OEM character set is system dependent.
*
* In general OEM, as opposed to ANSI (i.e., cp1252), denotes the
* second default codepage that most international versions of
* Windows have. It is one of the OEM codepages from
*
* https://msdn.microsoft.com/en-us/goglobal/bb964655,
*
* and is used for the `DOS boxes', to support legacy applications.
* A German Windows version for example usually uses ANSI codepage
* 1252 and OEM codepage 850.
*
* FT_WinFNT_ID_CP874 ::
* A superset of Thai TIS 620 and ISO 8859-11.
*
* FT_WinFNT_ID_CP932 ::
* A superset of Japanese Shift-JIS (with minor deviations).
*
* FT_WinFNT_ID_CP936 ::
* A superset of simplified Chinese GB 2312-1980 (with different
* ordering and minor deviations).
*
* FT_WinFNT_ID_CP949 ::
* A superset of Korean Hangul KS~C 5601-1987 (with different
* ordering and minor deviations).
*
* FT_WinFNT_ID_CP950 ::
* A superset of traditional Chinese Big~5 ETen (with different
* ordering and minor deviations).
*
* FT_WinFNT_ID_CP1250 ::
* A superset of East European ISO 8859-2 (with slightly different
* ordering).
*
* FT_WinFNT_ID_CP1251 ::
* A superset of Russian ISO 8859-5 (with different ordering).
*
* FT_WinFNT_ID_CP1252 ::
* ANSI encoding. A superset of ISO 8859-1.
*
* FT_WinFNT_ID_CP1253 ::
* A superset of Greek ISO 8859-7 (with minor modifications).
*
* FT_WinFNT_ID_CP1254 ::
* A superset of Turkish ISO 8859-9.
*
* FT_WinFNT_ID_CP1255 ::
* A superset of Hebrew ISO 8859-8 (with some modifications).
*
* FT_WinFNT_ID_CP1256 ::
* A superset of Arabic ISO 8859-6 (with different ordering).
*
* FT_WinFNT_ID_CP1257 ::
* A superset of Baltic ISO 8859-13 (with some deviations).
*
* FT_WinFNT_ID_CP1258 ::
* For Vietnamese. This encoding doesn't cover all necessary
* characters.
*
* FT_WinFNT_ID_CP1361 ::
* Korean (Johab).
*/
#define FT_WinFNT_ID_CP1252 0
#define FT_WinFNT_ID_DEFAULT 1
#define FT_WinFNT_ID_SYMBOL 2
#define FT_WinFNT_ID_MAC 77
#define FT_WinFNT_ID_CP932 128
#define FT_WinFNT_ID_CP949 129
#define FT_WinFNT_ID_CP1361 130
#define FT_WinFNT_ID_CP936 134
#define FT_WinFNT_ID_CP950 136
#define FT_WinFNT_ID_CP1253 161
#define FT_WinFNT_ID_CP1254 162
#define FT_WinFNT_ID_CP1258 163
#define FT_WinFNT_ID_CP1255 177
#define FT_WinFNT_ID_CP1256 178
#define FT_WinFNT_ID_CP1257 186
#define FT_WinFNT_ID_CP1251 204
#define FT_WinFNT_ID_CP874 222
#define FT_WinFNT_ID_CP1250 238
#define FT_WinFNT_ID_OEM 255
/*************************************************************************/
/* */
/* <Struct> */
/* FT_WinFNT_HeaderRec */
/* */
/* <Description> */
/* Windows FNT Header info. */
/* */
typedef struct FT_WinFNT_HeaderRec_
{
FT_UShort version;
FT_ULong file_size;
FT_Byte copyright[60];
FT_UShort file_type;
FT_UShort nominal_point_size;
FT_UShort vertical_resolution;
FT_UShort horizontal_resolution;
FT_UShort ascent;
FT_UShort internal_leading;
FT_UShort external_leading;
FT_Byte italic;
FT_Byte underline;
FT_Byte strike_out;
FT_UShort weight;
FT_Byte charset;
FT_UShort pixel_width;
FT_UShort pixel_height;
FT_Byte pitch_and_family;
FT_UShort avg_width;
FT_UShort max_width;
FT_Byte first_char;
FT_Byte last_char;
FT_Byte default_char;
FT_Byte break_char;
FT_UShort bytes_per_row;
FT_ULong device_offset;
FT_ULong face_name_offset;
FT_ULong bits_pointer;
FT_ULong bits_offset;
FT_Byte reserved;
FT_ULong flags;
FT_UShort A_space;
FT_UShort B_space;
FT_UShort C_space;
FT_UShort color_table_offset;
FT_ULong reserved1[4];
} FT_WinFNT_HeaderRec;
/*************************************************************************/
/* */
/* <Struct> */
/* FT_WinFNT_Header */
/* */
/* <Description> */
/* A handle to an @FT_WinFNT_HeaderRec structure. */
/* */
typedef struct FT_WinFNT_HeaderRec_* FT_WinFNT_Header;
/**********************************************************************
*
* @function:
* FT_Get_WinFNT_Header
*
* @description:
* Retrieve a Windows FNT font info header.
*
* @input:
* face :: A handle to the input face.
*
* @output:
* aheader :: The WinFNT header.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* This function only works with Windows FNT faces, returning an error
* otherwise.
*/
FT_EXPORT( FT_Error )
FT_Get_WinFNT_Header( FT_Face face,
FT_WinFNT_HeaderRec *aheader );
/* */
FT_END_HEADER
#endif /* FTWINFNT_H_ */
/* END */
/* Local Variables: */
/* coding: utf-8 */
/* End: */

View File

@ -0,0 +1,761 @@
/***************************************************************************/
/* */
/* t1tables.h */
/* */
/* Basic Type 1/Type 2 tables definitions and interface (specification */
/* only). */
/* */
/* Copyright 1996-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef T1TABLES_H_
#define T1TABLES_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* type1_tables */
/* */
/* <Title> */
/* Type 1 Tables */
/* */
/* <Abstract> */
/* Type~1 (PostScript) specific font tables. */
/* */
/* <Description> */
/* This section contains the definition of Type 1-specific tables, */
/* including structures related to other PostScript font formats. */
/* */
/* <Order> */
/* PS_FontInfoRec */
/* PS_FontInfo */
/* PS_PrivateRec */
/* PS_Private */
/* */
/* CID_FaceDictRec */
/* CID_FaceDict */
/* CID_FaceInfoRec */
/* CID_FaceInfo */
/* */
/* FT_Has_PS_Glyph_Names */
/* FT_Get_PS_Font_Info */
/* FT_Get_PS_Font_Private */
/* FT_Get_PS_Font_Value */
/* */
/* T1_Blend_Flags */
/* T1_EncodingType */
/* PS_Dict_Keys */
/* */
/*************************************************************************/
/* Note that we separate font data in PS_FontInfoRec and PS_PrivateRec */
/* structures in order to support Multiple Master fonts. */
/*************************************************************************/
/* */
/* <Struct> */
/* PS_FontInfoRec */
/* */
/* <Description> */
/* A structure used to model a Type~1 or Type~2 FontInfo dictionary. */
/* Note that for Multiple Master fonts, each instance has its own */
/* FontInfo dictionary. */
/* */
typedef struct PS_FontInfoRec_
{
FT_String* version;
FT_String* notice;
FT_String* full_name;
FT_String* family_name;
FT_String* weight;
FT_Long italic_angle;
FT_Bool is_fixed_pitch;
FT_Short underline_position;
FT_UShort underline_thickness;
} PS_FontInfoRec;
/*************************************************************************/
/* */
/* <Struct> */
/* PS_FontInfo */
/* */
/* <Description> */
/* A handle to a @PS_FontInfoRec structure. */
/* */
typedef struct PS_FontInfoRec_* PS_FontInfo;
/*************************************************************************/
/* */
/* <Struct> */
/* T1_FontInfo */
/* */
/* <Description> */
/* This type is equivalent to @PS_FontInfoRec. It is deprecated but */
/* kept to maintain source compatibility between various versions of */
/* FreeType. */
/* */
typedef PS_FontInfoRec T1_FontInfo;
/*************************************************************************/
/* */
/* <Struct> */
/* PS_PrivateRec */
/* */
/* <Description> */
/* A structure used to model a Type~1 or Type~2 private dictionary. */
/* Note that for Multiple Master fonts, each instance has its own */
/* Private dictionary. */
/* */
typedef struct PS_PrivateRec_
{
FT_Int unique_id;
FT_Int lenIV;
FT_Byte num_blue_values;
FT_Byte num_other_blues;
FT_Byte num_family_blues;
FT_Byte num_family_other_blues;
FT_Short blue_values[14];
FT_Short other_blues[10];
FT_Short family_blues [14];
FT_Short family_other_blues[10];
FT_Fixed blue_scale;
FT_Int blue_shift;
FT_Int blue_fuzz;
FT_UShort standard_width[1];
FT_UShort standard_height[1];
FT_Byte num_snap_widths;
FT_Byte num_snap_heights;
FT_Bool force_bold;
FT_Bool round_stem_up;
FT_Short snap_widths [13]; /* including std width */
FT_Short snap_heights[13]; /* including std height */
FT_Fixed expansion_factor;
FT_Long language_group;
FT_Long password;
FT_Short min_feature[2];
} PS_PrivateRec;
/*************************************************************************/
/* */
/* <Struct> */
/* PS_Private */
/* */
/* <Description> */
/* A handle to a @PS_PrivateRec structure. */
/* */
typedef struct PS_PrivateRec_* PS_Private;
/*************************************************************************/
/* */
/* <Struct> */
/* T1_Private */
/* */
/* <Description> */
/* This type is equivalent to @PS_PrivateRec. It is deprecated but */
/* kept to maintain source compatibility between various versions of */
/* FreeType. */
/* */
typedef PS_PrivateRec T1_Private;
/*************************************************************************/
/* */
/* <Enum> */
/* T1_Blend_Flags */
/* */
/* <Description> */
/* A set of flags used to indicate which fields are present in a */
/* given blend dictionary (font info or private). Used to support */
/* Multiple Masters fonts. */
/* */
/* <Values> */
/* T1_BLEND_UNDERLINE_POSITION :: */
/* T1_BLEND_UNDERLINE_THICKNESS :: */
/* T1_BLEND_ITALIC_ANGLE :: */
/* T1_BLEND_BLUE_VALUES :: */
/* T1_BLEND_OTHER_BLUES :: */
/* T1_BLEND_STANDARD_WIDTH :: */
/* T1_BLEND_STANDARD_HEIGHT :: */
/* T1_BLEND_STEM_SNAP_WIDTHS :: */
/* T1_BLEND_STEM_SNAP_HEIGHTS :: */
/* T1_BLEND_BLUE_SCALE :: */
/* T1_BLEND_BLUE_SHIFT :: */
/* T1_BLEND_FAMILY_BLUES :: */
/* T1_BLEND_FAMILY_OTHER_BLUES :: */
/* T1_BLEND_FORCE_BOLD :: */
/* */
typedef enum T1_Blend_Flags_
{
/* required fields in a FontInfo blend dictionary */
T1_BLEND_UNDERLINE_POSITION = 0,
T1_BLEND_UNDERLINE_THICKNESS,
T1_BLEND_ITALIC_ANGLE,
/* required fields in a Private blend dictionary */
T1_BLEND_BLUE_VALUES,
T1_BLEND_OTHER_BLUES,
T1_BLEND_STANDARD_WIDTH,
T1_BLEND_STANDARD_HEIGHT,
T1_BLEND_STEM_SNAP_WIDTHS,
T1_BLEND_STEM_SNAP_HEIGHTS,
T1_BLEND_BLUE_SCALE,
T1_BLEND_BLUE_SHIFT,
T1_BLEND_FAMILY_BLUES,
T1_BLEND_FAMILY_OTHER_BLUES,
T1_BLEND_FORCE_BOLD,
T1_BLEND_MAX /* do not remove */
} T1_Blend_Flags;
/* these constants are deprecated; use the corresponding */
/* `T1_Blend_Flags' values instead */
#define t1_blend_underline_position T1_BLEND_UNDERLINE_POSITION
#define t1_blend_underline_thickness T1_BLEND_UNDERLINE_THICKNESS
#define t1_blend_italic_angle T1_BLEND_ITALIC_ANGLE
#define t1_blend_blue_values T1_BLEND_BLUE_VALUES
#define t1_blend_other_blues T1_BLEND_OTHER_BLUES
#define t1_blend_standard_widths T1_BLEND_STANDARD_WIDTH
#define t1_blend_standard_height T1_BLEND_STANDARD_HEIGHT
#define t1_blend_stem_snap_widths T1_BLEND_STEM_SNAP_WIDTHS
#define t1_blend_stem_snap_heights T1_BLEND_STEM_SNAP_HEIGHTS
#define t1_blend_blue_scale T1_BLEND_BLUE_SCALE
#define t1_blend_blue_shift T1_BLEND_BLUE_SHIFT
#define t1_blend_family_blues T1_BLEND_FAMILY_BLUES
#define t1_blend_family_other_blues T1_BLEND_FAMILY_OTHER_BLUES
#define t1_blend_force_bold T1_BLEND_FORCE_BOLD
#define t1_blend_max T1_BLEND_MAX
/* */
/* maximum number of Multiple Masters designs, as defined in the spec */
#define T1_MAX_MM_DESIGNS 16
/* maximum number of Multiple Masters axes, as defined in the spec */
#define T1_MAX_MM_AXIS 4
/* maximum number of elements in a design map */
#define T1_MAX_MM_MAP_POINTS 20
/* this structure is used to store the BlendDesignMap entry for an axis */
typedef struct PS_DesignMap_
{
FT_Byte num_points;
FT_Long* design_points;
FT_Fixed* blend_points;
} PS_DesignMapRec, *PS_DesignMap;
/* backwards-compatible definition */
typedef PS_DesignMapRec T1_DesignMap;
typedef struct PS_BlendRec_
{
FT_UInt num_designs;
FT_UInt num_axis;
FT_String* axis_names[T1_MAX_MM_AXIS];
FT_Fixed* design_pos[T1_MAX_MM_DESIGNS];
PS_DesignMapRec design_map[T1_MAX_MM_AXIS];
FT_Fixed* weight_vector;
FT_Fixed* default_weight_vector;
PS_FontInfo font_infos[T1_MAX_MM_DESIGNS + 1];
PS_Private privates [T1_MAX_MM_DESIGNS + 1];
FT_ULong blend_bitflags;
FT_BBox* bboxes [T1_MAX_MM_DESIGNS + 1];
/* since 2.3.0 */
/* undocumented, optional: the default design instance; */
/* corresponds to default_weight_vector -- */
/* num_default_design_vector == 0 means it is not present */
/* in the font and associated metrics files */
FT_UInt default_design_vector[T1_MAX_MM_DESIGNS];
FT_UInt num_default_design_vector;
} PS_BlendRec, *PS_Blend;
/* backwards-compatible definition */
typedef PS_BlendRec T1_Blend;
/*************************************************************************/
/* */
/* <Struct> */
/* CID_FaceDictRec */
/* */
/* <Description> */
/* A structure used to represent data in a CID top-level dictionary. */
/* */
typedef struct CID_FaceDictRec_
{
PS_PrivateRec private_dict;
FT_UInt len_buildchar;
FT_Fixed forcebold_threshold;
FT_Pos stroke_width;
FT_Fixed expansion_factor;
FT_Byte paint_type;
FT_Byte font_type;
FT_Matrix font_matrix;
FT_Vector font_offset;
FT_UInt num_subrs;
FT_ULong subrmap_offset;
FT_Int sd_bytes;
} CID_FaceDictRec;
/*************************************************************************/
/* */
/* <Struct> */
/* CID_FaceDict */
/* */
/* <Description> */
/* A handle to a @CID_FaceDictRec structure. */
/* */
typedef struct CID_FaceDictRec_* CID_FaceDict;
/*************************************************************************/
/* */
/* <Struct> */
/* CID_FontDict */
/* */
/* <Description> */
/* This type is equivalent to @CID_FaceDictRec. It is deprecated but */
/* kept to maintain source compatibility between various versions of */
/* FreeType. */
/* */
typedef CID_FaceDictRec CID_FontDict;
/*************************************************************************/
/* */
/* <Struct> */
/* CID_FaceInfoRec */
/* */
/* <Description> */
/* A structure used to represent CID Face information. */
/* */
typedef struct CID_FaceInfoRec_
{
FT_String* cid_font_name;
FT_Fixed cid_version;
FT_Int cid_font_type;
FT_String* registry;
FT_String* ordering;
FT_Int supplement;
PS_FontInfoRec font_info;
FT_BBox font_bbox;
FT_ULong uid_base;
FT_Int num_xuid;
FT_ULong xuid[16];
FT_ULong cidmap_offset;
FT_Int fd_bytes;
FT_Int gd_bytes;
FT_ULong cid_count;
FT_Int num_dicts;
CID_FaceDict font_dicts;
FT_ULong data_offset;
} CID_FaceInfoRec;
/*************************************************************************/
/* */
/* <Struct> */
/* CID_FaceInfo */
/* */
/* <Description> */
/* A handle to a @CID_FaceInfoRec structure. */
/* */
typedef struct CID_FaceInfoRec_* CID_FaceInfo;
/*************************************************************************/
/* */
/* <Struct> */
/* CID_Info */
/* */
/* <Description> */
/* This type is equivalent to @CID_FaceInfoRec. It is deprecated but */
/* kept to maintain source compatibility between various versions of */
/* FreeType. */
/* */
typedef CID_FaceInfoRec CID_Info;
/************************************************************************
*
* @function:
* FT_Has_PS_Glyph_Names
*
* @description:
* Return true if a given face provides reliable PostScript glyph
* names. This is similar to using the @FT_HAS_GLYPH_NAMES macro,
* except that certain fonts (mostly TrueType) contain incorrect
* glyph name tables.
*
* When this function returns true, the caller is sure that the glyph
* names returned by @FT_Get_Glyph_Name are reliable.
*
* @input:
* face ::
* face handle
*
* @return:
* Boolean. True if glyph names are reliable.
*
*/
FT_EXPORT( FT_Int )
FT_Has_PS_Glyph_Names( FT_Face face );
/************************************************************************
*
* @function:
* FT_Get_PS_Font_Info
*
* @description:
* Retrieve the @PS_FontInfoRec structure corresponding to a given
* PostScript font.
*
* @input:
* face ::
* PostScript face handle.
*
* @output:
* afont_info ::
* Output font info structure pointer.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* String pointers within the @PS_FontInfoRec structure are owned by
* the face and don't need to be freed by the caller. Missing entries
* in the font's FontInfo dictionary are represented by NULL pointers.
*
* If the font's format is not PostScript-based, this function will
* return the `FT_Err_Invalid_Argument' error code.
*
*/
FT_EXPORT( FT_Error )
FT_Get_PS_Font_Info( FT_Face face,
PS_FontInfo afont_info );
/************************************************************************
*
* @function:
* FT_Get_PS_Font_Private
*
* @description:
* Retrieve the @PS_PrivateRec structure corresponding to a given
* PostScript font.
*
* @input:
* face ::
* PostScript face handle.
*
* @output:
* afont_private ::
* Output private dictionary structure pointer.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* The string pointers within the @PS_PrivateRec structure are owned by
* the face and don't need to be freed by the caller.
*
* If the font's format is not PostScript-based, this function returns
* the `FT_Err_Invalid_Argument' error code.
*
*/
FT_EXPORT( FT_Error )
FT_Get_PS_Font_Private( FT_Face face,
PS_Private afont_private );
/*************************************************************************/
/* */
/* <Enum> */
/* T1_EncodingType */
/* */
/* <Description> */
/* An enumeration describing the `Encoding' entry in a Type 1 */
/* dictionary. */
/* */
/* <Values> */
/* T1_ENCODING_TYPE_NONE :: */
/* T1_ENCODING_TYPE_ARRAY :: */
/* T1_ENCODING_TYPE_STANDARD :: */
/* T1_ENCODING_TYPE_ISOLATIN1 :: */
/* T1_ENCODING_TYPE_EXPERT :: */
/* */
typedef enum T1_EncodingType_
{
T1_ENCODING_TYPE_NONE = 0,
T1_ENCODING_TYPE_ARRAY,
T1_ENCODING_TYPE_STANDARD,
T1_ENCODING_TYPE_ISOLATIN1,
T1_ENCODING_TYPE_EXPERT
} T1_EncodingType;
/*************************************************************************/
/* */
/* <Enum> */
/* PS_Dict_Keys */
/* */
/* <Description> */
/* An enumeration used in calls to @FT_Get_PS_Font_Value to identify */
/* the Type~1 dictionary entry to retrieve. */
/* */
/* <Values> */
/* PS_DICT_FONT_TYPE :: */
/* PS_DICT_FONT_MATRIX :: */
/* PS_DICT_FONT_BBOX :: */
/* PS_DICT_PAINT_TYPE :: */
/* PS_DICT_FONT_NAME :: */
/* PS_DICT_UNIQUE_ID :: */
/* PS_DICT_NUM_CHAR_STRINGS :: */
/* PS_DICT_CHAR_STRING_KEY :: */
/* PS_DICT_CHAR_STRING :: */
/* PS_DICT_ENCODING_TYPE :: */
/* PS_DICT_ENCODING_ENTRY :: */
/* PS_DICT_NUM_SUBRS :: */
/* PS_DICT_SUBR :: */
/* PS_DICT_STD_HW :: */
/* PS_DICT_STD_VW :: */
/* PS_DICT_NUM_BLUE_VALUES :: */
/* PS_DICT_BLUE_VALUE :: */
/* PS_DICT_BLUE_FUZZ :: */
/* PS_DICT_NUM_OTHER_BLUES :: */
/* PS_DICT_OTHER_BLUE :: */
/* PS_DICT_NUM_FAMILY_BLUES :: */
/* PS_DICT_FAMILY_BLUE :: */
/* PS_DICT_NUM_FAMILY_OTHER_BLUES :: */
/* PS_DICT_FAMILY_OTHER_BLUE :: */
/* PS_DICT_BLUE_SCALE :: */
/* PS_DICT_BLUE_SHIFT :: */
/* PS_DICT_NUM_STEM_SNAP_H :: */
/* PS_DICT_STEM_SNAP_H :: */
/* PS_DICT_NUM_STEM_SNAP_V :: */
/* PS_DICT_STEM_SNAP_V :: */
/* PS_DICT_FORCE_BOLD :: */
/* PS_DICT_RND_STEM_UP :: */
/* PS_DICT_MIN_FEATURE :: */
/* PS_DICT_LEN_IV :: */
/* PS_DICT_PASSWORD :: */
/* PS_DICT_LANGUAGE_GROUP :: */
/* PS_DICT_VERSION :: */
/* PS_DICT_NOTICE :: */
/* PS_DICT_FULL_NAME :: */
/* PS_DICT_FAMILY_NAME :: */
/* PS_DICT_WEIGHT :: */
/* PS_DICT_IS_FIXED_PITCH :: */
/* PS_DICT_UNDERLINE_POSITION :: */
/* PS_DICT_UNDERLINE_THICKNESS :: */
/* PS_DICT_FS_TYPE :: */
/* PS_DICT_ITALIC_ANGLE :: */
/* */
typedef enum PS_Dict_Keys_
{
/* conventionally in the font dictionary */
PS_DICT_FONT_TYPE, /* FT_Byte */
PS_DICT_FONT_MATRIX, /* FT_Fixed */
PS_DICT_FONT_BBOX, /* FT_Fixed */
PS_DICT_PAINT_TYPE, /* FT_Byte */
PS_DICT_FONT_NAME, /* FT_String* */
PS_DICT_UNIQUE_ID, /* FT_Int */
PS_DICT_NUM_CHAR_STRINGS, /* FT_Int */
PS_DICT_CHAR_STRING_KEY, /* FT_String* */
PS_DICT_CHAR_STRING, /* FT_String* */
PS_DICT_ENCODING_TYPE, /* T1_EncodingType */
PS_DICT_ENCODING_ENTRY, /* FT_String* */
/* conventionally in the font Private dictionary */
PS_DICT_NUM_SUBRS, /* FT_Int */
PS_DICT_SUBR, /* FT_String* */
PS_DICT_STD_HW, /* FT_UShort */
PS_DICT_STD_VW, /* FT_UShort */
PS_DICT_NUM_BLUE_VALUES, /* FT_Byte */
PS_DICT_BLUE_VALUE, /* FT_Short */
PS_DICT_BLUE_FUZZ, /* FT_Int */
PS_DICT_NUM_OTHER_BLUES, /* FT_Byte */
PS_DICT_OTHER_BLUE, /* FT_Short */
PS_DICT_NUM_FAMILY_BLUES, /* FT_Byte */
PS_DICT_FAMILY_BLUE, /* FT_Short */
PS_DICT_NUM_FAMILY_OTHER_BLUES, /* FT_Byte */
PS_DICT_FAMILY_OTHER_BLUE, /* FT_Short */
PS_DICT_BLUE_SCALE, /* FT_Fixed */
PS_DICT_BLUE_SHIFT, /* FT_Int */
PS_DICT_NUM_STEM_SNAP_H, /* FT_Byte */
PS_DICT_STEM_SNAP_H, /* FT_Short */
PS_DICT_NUM_STEM_SNAP_V, /* FT_Byte */
PS_DICT_STEM_SNAP_V, /* FT_Short */
PS_DICT_FORCE_BOLD, /* FT_Bool */
PS_DICT_RND_STEM_UP, /* FT_Bool */
PS_DICT_MIN_FEATURE, /* FT_Short */
PS_DICT_LEN_IV, /* FT_Int */
PS_DICT_PASSWORD, /* FT_Long */
PS_DICT_LANGUAGE_GROUP, /* FT_Long */
/* conventionally in the font FontInfo dictionary */
PS_DICT_VERSION, /* FT_String* */
PS_DICT_NOTICE, /* FT_String* */
PS_DICT_FULL_NAME, /* FT_String* */
PS_DICT_FAMILY_NAME, /* FT_String* */
PS_DICT_WEIGHT, /* FT_String* */
PS_DICT_IS_FIXED_PITCH, /* FT_Bool */
PS_DICT_UNDERLINE_POSITION, /* FT_Short */
PS_DICT_UNDERLINE_THICKNESS, /* FT_UShort */
PS_DICT_FS_TYPE, /* FT_UShort */
PS_DICT_ITALIC_ANGLE, /* FT_Long */
PS_DICT_MAX = PS_DICT_ITALIC_ANGLE
} PS_Dict_Keys;
/************************************************************************
*
* @function:
* FT_Get_PS_Font_Value
*
* @description:
* Retrieve the value for the supplied key from a PostScript font.
*
* @input:
* face ::
* PostScript face handle.
*
* key ::
* An enumeration value representing the dictionary key to retrieve.
*
* idx ::
* For array values, this specifies the index to be returned.
*
* value ::
* A pointer to memory into which to write the value.
*
* valen_len ::
* The size, in bytes, of the memory supplied for the value.
*
* @output:
* value ::
* The value matching the above key, if it exists.
*
* @return:
* The amount of memory (in bytes) required to hold the requested
* value (if it exists, -1 otherwise).
*
* @note:
* The values returned are not pointers into the internal structures of
* the face, but are `fresh' copies, so that the memory containing them
* belongs to the calling application. This also enforces the
* `read-only' nature of these values, i.e., this function cannot be
* used to manipulate the face.
*
* `value' is a void pointer because the values returned can be of
* various types.
*
* If either `value' is NULL or `value_len' is too small, just the
* required memory size for the requested entry is returned.
*
* The `idx' parameter is used, not only to retrieve elements of, for
* example, the FontMatrix or FontBBox, but also to retrieve name keys
* from the CharStrings dictionary, and the charstrings themselves. It
* is ignored for atomic values.
*
* PS_DICT_BLUE_SCALE returns a value that is scaled up by 1000. To
* get the value as in the font stream, you need to divide by
* 65536000.0 (to remove the FT_Fixed scale, and the x1000 scale).
*
* IMPORTANT: Only key/value pairs read by the FreeType interpreter can
* be retrieved. So, for example, PostScript procedures such as NP,
* ND, and RD are not available. Arbitrary keys are, obviously, not be
* available either.
*
* If the font's format is not PostScript-based, this function returns
* the `FT_Err_Invalid_Argument' error code.
*
*/
FT_EXPORT( FT_Long )
FT_Get_PS_Font_Value( FT_Face face,
PS_Dict_Keys key,
FT_UInt idx,
void *value,
FT_Long value_len );
/* */
FT_END_HEADER
#endif /* T1TABLES_H_ */
/* END */

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,829 @@
/***************************************************************************/
/* */
/* tttables.h */
/* */
/* Basic SFNT/TrueType tables definitions and interface */
/* (specification only). */
/* */
/* Copyright 1996-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef TTTABLES_H_
#define TTTABLES_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Section> */
/* truetype_tables */
/* */
/* <Title> */
/* TrueType Tables */
/* */
/* <Abstract> */
/* TrueType specific table types and functions. */
/* */
/* <Description> */
/* This section contains the definition of TrueType-specific tables */
/* as well as some routines used to access and process them. */
/* */
/* <Order> */
/* TT_Header */
/* TT_HoriHeader */
/* TT_VertHeader */
/* TT_OS2 */
/* TT_Postscript */
/* TT_PCLT */
/* TT_MaxProfile */
/* */
/* FT_Sfnt_Tag */
/* FT_Get_Sfnt_Table */
/* FT_Load_Sfnt_Table */
/* FT_Sfnt_Table_Info */
/* */
/* FT_Get_CMap_Language_ID */
/* FT_Get_CMap_Format */
/* */
/* FT_PARAM_TAG_UNPATENTED_HINTING */
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/* <Struct> */
/* TT_Header */
/* */
/* <Description> */
/* A structure used to model a TrueType font header table. All */
/* fields follow the TrueType specification. */
/* */
typedef struct TT_Header_
{
FT_Fixed Table_Version;
FT_Fixed Font_Revision;
FT_Long CheckSum_Adjust;
FT_Long Magic_Number;
FT_UShort Flags;
FT_UShort Units_Per_EM;
FT_Long Created [2];
FT_Long Modified[2];
FT_Short xMin;
FT_Short yMin;
FT_Short xMax;
FT_Short yMax;
FT_UShort Mac_Style;
FT_UShort Lowest_Rec_PPEM;
FT_Short Font_Direction;
FT_Short Index_To_Loc_Format;
FT_Short Glyph_Data_Format;
} TT_Header;
/*************************************************************************/
/* */
/* <Struct> */
/* TT_HoriHeader */
/* */
/* <Description> */
/* A structure used to model a TrueType horizontal header, the `hhea' */
/* table, as well as the corresponding horizontal metrics table, */
/* i.e., the `hmtx' table. */
/* */
/* <Fields> */
/* Version :: The table version. */
/* */
/* Ascender :: The font's ascender, i.e., the distance */
/* from the baseline to the top-most of all */
/* glyph points found in the font. */
/* */
/* This value is invalid in many fonts, as */
/* it is usually set by the font designer, */
/* and often reflects only a portion of the */
/* glyphs found in the font (maybe ASCII). */
/* */
/* You should use the `sTypoAscender' field */
/* of the OS/2 table instead if you want */
/* the correct one. */
/* */
/* Descender :: The font's descender, i.e., the distance */
/* from the baseline to the bottom-most of */
/* all glyph points found in the font. It */
/* is negative. */
/* */
/* This value is invalid in many fonts, as */
/* it is usually set by the font designer, */
/* and often reflects only a portion of the */
/* glyphs found in the font (maybe ASCII). */
/* */
/* You should use the `sTypoDescender' */
/* field of the OS/2 table instead if you */
/* want the correct one. */
/* */
/* Line_Gap :: The font's line gap, i.e., the distance */
/* to add to the ascender and descender to */
/* get the BTB, i.e., the */
/* baseline-to-baseline distance for the */
/* font. */
/* */
/* advance_Width_Max :: This field is the maximum of all advance */
/* widths found in the font. It can be */
/* used to compute the maximum width of an */
/* arbitrary string of text. */
/* */
/* min_Left_Side_Bearing :: The minimum left side bearing of all */
/* glyphs within the font. */
/* */
/* min_Right_Side_Bearing :: The minimum right side bearing of all */
/* glyphs within the font. */
/* */
/* xMax_Extent :: The maximum horizontal extent (i.e., the */
/* `width' of a glyph's bounding box) for */
/* all glyphs in the font. */
/* */
/* caret_Slope_Rise :: The rise coefficient of the cursor's */
/* slope of the cursor (slope=rise/run). */
/* */
/* caret_Slope_Run :: The run coefficient of the cursor's */
/* slope. */
/* */
/* Reserved :: 8~reserved bytes. */
/* */
/* metric_Data_Format :: Always~0. */
/* */
/* number_Of_HMetrics :: Number of HMetrics entries in the `hmtx' */
/* table -- this value can be smaller than */
/* the total number of glyphs in the font. */
/* */
/* long_metrics :: A pointer into the `hmtx' table. */
/* */
/* short_metrics :: A pointer into the `hmtx' table. */
/* */
/* <Note> */
/* IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should */
/* be identical except for the names of their fields, */
/* which are different. */
/* */
/* This ensures that a single function in the `ttload' */
/* module is able to read both the horizontal and vertical */
/* headers. */
/* */
typedef struct TT_HoriHeader_
{
FT_Fixed Version;
FT_Short Ascender;
FT_Short Descender;
FT_Short Line_Gap;
FT_UShort advance_Width_Max; /* advance width maximum */
FT_Short min_Left_Side_Bearing; /* minimum left-sb */
FT_Short min_Right_Side_Bearing; /* minimum right-sb */
FT_Short xMax_Extent; /* xmax extents */
FT_Short caret_Slope_Rise;
FT_Short caret_Slope_Run;
FT_Short caret_Offset;
FT_Short Reserved[4];
FT_Short metric_Data_Format;
FT_UShort number_Of_HMetrics;
/* The following fields are not defined by the TrueType specification */
/* but they are used to connect the metrics header to the relevant */
/* `HMTX' table. */
void* long_metrics;
void* short_metrics;
} TT_HoriHeader;
/*************************************************************************/
/* */
/* <Struct> */
/* TT_VertHeader */
/* */
/* <Description> */
/* A structure used to model a TrueType vertical header, the `vhea' */
/* table, as well as the corresponding vertical metrics table, i.e., */
/* the `vmtx' table. */
/* */
/* <Fields> */
/* Version :: The table version. */
/* */
/* Ascender :: The font's ascender, i.e., the distance */
/* from the baseline to the top-most of */
/* all glyph points found in the font. */
/* */
/* This value is invalid in many fonts, as */
/* it is usually set by the font designer, */
/* and often reflects only a portion of */
/* the glyphs found in the font (maybe */
/* ASCII). */
/* */
/* You should use the `sTypoAscender' */
/* field of the OS/2 table instead if you */
/* want the correct one. */
/* */
/* Descender :: The font's descender, i.e., the */
/* distance from the baseline to the */
/* bottom-most of all glyph points found */
/* in the font. It is negative. */
/* */
/* This value is invalid in many fonts, as */
/* it is usually set by the font designer, */
/* and often reflects only a portion of */
/* the glyphs found in the font (maybe */
/* ASCII). */
/* */
/* You should use the `sTypoDescender' */
/* field of the OS/2 table instead if you */
/* want the correct one. */
/* */
/* Line_Gap :: The font's line gap, i.e., the distance */
/* to add to the ascender and descender to */
/* get the BTB, i.e., the */
/* baseline-to-baseline distance for the */
/* font. */
/* */
/* advance_Height_Max :: This field is the maximum of all */
/* advance heights found in the font. It */
/* can be used to compute the maximum */
/* height of an arbitrary string of text. */
/* */
/* min_Top_Side_Bearing :: The minimum top side bearing of all */
/* glyphs within the font. */
/* */
/* min_Bottom_Side_Bearing :: The minimum bottom side bearing of all */
/* glyphs within the font. */
/* */
/* yMax_Extent :: The maximum vertical extent (i.e., the */
/* `height' of a glyph's bounding box) for */
/* all glyphs in the font. */
/* */
/* caret_Slope_Rise :: The rise coefficient of the cursor's */
/* slope of the cursor (slope=rise/run). */
/* */
/* caret_Slope_Run :: The run coefficient of the cursor's */
/* slope. */
/* */
/* caret_Offset :: The cursor's offset for slanted fonts. */
/* This value is `reserved' in vmtx */
/* version 1.0. */
/* */
/* Reserved :: 8~reserved bytes. */
/* */
/* metric_Data_Format :: Always~0. */
/* */
/* number_Of_HMetrics :: Number of VMetrics entries in the */
/* `vmtx' table -- this value can be */
/* smaller than the total number of glyphs */
/* in the font. */
/* */
/* long_metrics :: A pointer into the `vmtx' table. */
/* */
/* short_metrics :: A pointer into the `vmtx' table. */
/* */
/* <Note> */
/* IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should */
/* be identical except for the names of their fields, */
/* which are different. */
/* */
/* This ensures that a single function in the `ttload' */
/* module is able to read both the horizontal and vertical */
/* headers. */
/* */
typedef struct TT_VertHeader_
{
FT_Fixed Version;
FT_Short Ascender;
FT_Short Descender;
FT_Short Line_Gap;
FT_UShort advance_Height_Max; /* advance height maximum */
FT_Short min_Top_Side_Bearing; /* minimum left-sb or top-sb */
FT_Short min_Bottom_Side_Bearing; /* minimum right-sb or bottom-sb */
FT_Short yMax_Extent; /* xmax or ymax extents */
FT_Short caret_Slope_Rise;
FT_Short caret_Slope_Run;
FT_Short caret_Offset;
FT_Short Reserved[4];
FT_Short metric_Data_Format;
FT_UShort number_Of_VMetrics;
/* The following fields are not defined by the TrueType specification */
/* but they're used to connect the metrics header to the relevant */
/* `HMTX' or `VMTX' table. */
void* long_metrics;
void* short_metrics;
} TT_VertHeader;
/*************************************************************************/
/* */
/* <Struct> */
/* TT_OS2 */
/* */
/* <Description> */
/* A structure used to model a TrueType OS/2 table. All fields */
/* comply to the OpenType specification. */
/* */
/* Note that we now support old Mac fonts that do not include an OS/2 */
/* table. In this case, the `version' field is always set to 0xFFFF. */
/* */
typedef struct TT_OS2_
{
FT_UShort version; /* 0x0001 - more or 0xFFFF */
FT_Short xAvgCharWidth;
FT_UShort usWeightClass;
FT_UShort usWidthClass;
FT_UShort fsType;
FT_Short ySubscriptXSize;
FT_Short ySubscriptYSize;
FT_Short ySubscriptXOffset;
FT_Short ySubscriptYOffset;
FT_Short ySuperscriptXSize;
FT_Short ySuperscriptYSize;
FT_Short ySuperscriptXOffset;
FT_Short ySuperscriptYOffset;
FT_Short yStrikeoutSize;
FT_Short yStrikeoutPosition;
FT_Short sFamilyClass;
FT_Byte panose[10];
FT_ULong ulUnicodeRange1; /* Bits 0-31 */
FT_ULong ulUnicodeRange2; /* Bits 32-63 */
FT_ULong ulUnicodeRange3; /* Bits 64-95 */
FT_ULong ulUnicodeRange4; /* Bits 96-127 */
FT_Char achVendID[4];
FT_UShort fsSelection;
FT_UShort usFirstCharIndex;
FT_UShort usLastCharIndex;
FT_Short sTypoAscender;
FT_Short sTypoDescender;
FT_Short sTypoLineGap;
FT_UShort usWinAscent;
FT_UShort usWinDescent;
/* only version 1 and higher: */
FT_ULong ulCodePageRange1; /* Bits 0-31 */
FT_ULong ulCodePageRange2; /* Bits 32-63 */
/* only version 2 and higher: */
FT_Short sxHeight;
FT_Short sCapHeight;
FT_UShort usDefaultChar;
FT_UShort usBreakChar;
FT_UShort usMaxContext;
/* only version 5 and higher: */
FT_UShort usLowerOpticalPointSize; /* in twips (1/20th points) */
FT_UShort usUpperOpticalPointSize; /* in twips (1/20th points) */
} TT_OS2;
/*************************************************************************/
/* */
/* <Struct> */
/* TT_Postscript */
/* */
/* <Description> */
/* A structure used to model a TrueType PostScript table. All fields */
/* comply to the TrueType specification. This structure does not */
/* reference the PostScript glyph names, which can be nevertheless */
/* accessed with the `ttpost' module. */
/* */
typedef struct TT_Postscript_
{
FT_Fixed FormatType;
FT_Fixed italicAngle;
FT_Short underlinePosition;
FT_Short underlineThickness;
FT_ULong isFixedPitch;
FT_ULong minMemType42;
FT_ULong maxMemType42;
FT_ULong minMemType1;
FT_ULong maxMemType1;
/* Glyph names follow in the file, but we don't */
/* load them by default. See the ttpost.c file. */
} TT_Postscript;
/*************************************************************************/
/* */
/* <Struct> */
/* TT_PCLT */
/* */
/* <Description> */
/* A structure used to model a TrueType PCLT table. All fields */
/* comply to the TrueType specification. */
/* */
typedef struct TT_PCLT_
{
FT_Fixed Version;
FT_ULong FontNumber;
FT_UShort Pitch;
FT_UShort xHeight;
FT_UShort Style;
FT_UShort TypeFamily;
FT_UShort CapHeight;
FT_UShort SymbolSet;
FT_Char TypeFace[16];
FT_Char CharacterComplement[8];
FT_Char FileName[6];
FT_Char StrokeWeight;
FT_Char WidthType;
FT_Byte SerifStyle;
FT_Byte Reserved;
} TT_PCLT;
/*************************************************************************/
/* */
/* <Struct> */
/* TT_MaxProfile */
/* */
/* <Description> */
/* The maximum profile is a table containing many max values, which */
/* can be used to pre-allocate arrays. This ensures that no memory */
/* allocation occurs during a glyph load. */
/* */
/* <Fields> */
/* version :: The version number. */
/* */
/* numGlyphs :: The number of glyphs in this TrueType */
/* font. */
/* */
/* maxPoints :: The maximum number of points in a */
/* non-composite TrueType glyph. See also */
/* the structure element */
/* `maxCompositePoints'. */
/* */
/* maxContours :: The maximum number of contours in a */
/* non-composite TrueType glyph. See also */
/* the structure element */
/* `maxCompositeContours'. */
/* */
/* maxCompositePoints :: The maximum number of points in a */
/* composite TrueType glyph. See also the */
/* structure element `maxPoints'. */
/* */
/* maxCompositeContours :: The maximum number of contours in a */
/* composite TrueType glyph. See also the */
/* structure element `maxContours'. */
/* */
/* maxZones :: The maximum number of zones used for */
/* glyph hinting. */
/* */
/* maxTwilightPoints :: The maximum number of points in the */
/* twilight zone used for glyph hinting. */
/* */
/* maxStorage :: The maximum number of elements in the */
/* storage area used for glyph hinting. */
/* */
/* maxFunctionDefs :: The maximum number of function */
/* definitions in the TrueType bytecode for */
/* this font. */
/* */
/* maxInstructionDefs :: The maximum number of instruction */
/* definitions in the TrueType bytecode for */
/* this font. */
/* */
/* maxStackElements :: The maximum number of stack elements used */
/* during bytecode interpretation. */
/* */
/* maxSizeOfInstructions :: The maximum number of TrueType opcodes */
/* used for glyph hinting. */
/* */
/* maxComponentElements :: The maximum number of simple (i.e., non- */
/* composite) glyphs in a composite glyph. */
/* */
/* maxComponentDepth :: The maximum nesting depth of composite */
/* glyphs. */
/* */
/* <Note> */
/* This structure is only used during font loading. */
/* */
typedef struct TT_MaxProfile_
{
FT_Fixed version;
FT_UShort numGlyphs;
FT_UShort maxPoints;
FT_UShort maxContours;
FT_UShort maxCompositePoints;
FT_UShort maxCompositeContours;
FT_UShort maxZones;
FT_UShort maxTwilightPoints;
FT_UShort maxStorage;
FT_UShort maxFunctionDefs;
FT_UShort maxInstructionDefs;
FT_UShort maxStackElements;
FT_UShort maxSizeOfInstructions;
FT_UShort maxComponentElements;
FT_UShort maxComponentDepth;
} TT_MaxProfile;
/*************************************************************************/
/* */
/* <Enum> */
/* FT_Sfnt_Tag */
/* */
/* <Description> */
/* An enumeration used to specify the index of an SFNT table. */
/* Used in the @FT_Get_Sfnt_Table API function. */
/* */
/* <Values> */
/* FT_SFNT_HEAD :: To access the font's @TT_Header structure. */
/* */
/* FT_SFNT_MAXP :: To access the font's @TT_MaxProfile structure. */
/* */
/* FT_SFNT_OS2 :: To access the font's @TT_OS2 structure. */
/* */
/* FT_SFNT_HHEA :: To access the font's @TT_HoriHeader structure. */
/* */
/* FT_SFNT_VHEA :: To access the font's @TT_VertHeader structure. */
/* */
/* FT_SFNT_POST :: To access the font's @TT_Postscript structure. */
/* */
/* FT_SFNT_PCLT :: To access the font's @TT_PCLT structure. */
/* */
typedef enum FT_Sfnt_Tag_
{
FT_SFNT_HEAD,
FT_SFNT_MAXP,
FT_SFNT_OS2,
FT_SFNT_HHEA,
FT_SFNT_VHEA,
FT_SFNT_POST,
FT_SFNT_PCLT,
FT_SFNT_MAX
} FT_Sfnt_Tag;
/* these constants are deprecated; use the corresponding `FT_Sfnt_Tag' */
/* values instead */
#define ft_sfnt_head FT_SFNT_HEAD
#define ft_sfnt_maxp FT_SFNT_MAXP
#define ft_sfnt_os2 FT_SFNT_OS2
#define ft_sfnt_hhea FT_SFNT_HHEA
#define ft_sfnt_vhea FT_SFNT_VHEA
#define ft_sfnt_post FT_SFNT_POST
#define ft_sfnt_pclt FT_SFNT_PCLT
/*************************************************************************/
/* */
/* <Function> */
/* FT_Get_Sfnt_Table */
/* */
/* <Description> */
/* Return a pointer to a given SFNT table within a face. */
/* */
/* <Input> */
/* face :: A handle to the source. */
/* */
/* tag :: The index of the SFNT table. */
/* */
/* <Return> */
/* A type-less pointer to the table. This will be~0 in case of */
/* error, or if the corresponding table was not found *OR* loaded */
/* from the file. */
/* */
/* Use a typecast according to `tag' to access the structure */
/* elements. */
/* */
/* <Note> */
/* The table is owned by the face object and disappears with it. */
/* */
/* This function is only useful to access SFNT tables that are loaded */
/* by the sfnt, truetype, and opentype drivers. See @FT_Sfnt_Tag for */
/* a list. */
/* */
/* Here an example how to access the `vhea' table: */
/* */
/* { */
/* TT_VertHeader* vert_header; */
/* */
/* */
/* vert_header = */
/* (TT_VertHeader*)FT_Get_Sfnt_Table( face, FT_SFNT_VHEA ); */
/* } */
/* */
FT_EXPORT( void* )
FT_Get_Sfnt_Table( FT_Face face,
FT_Sfnt_Tag tag );
/**************************************************************************
*
* @function:
* FT_Load_Sfnt_Table
*
* @description:
* Load any font table into client memory.
*
* @input:
* face ::
* A handle to the source face.
*
* tag ::
* The four-byte tag of the table to load. Use the value~0 if you want
* to access the whole font file. Otherwise, you can use one of the
* definitions found in the @FT_TRUETYPE_TAGS_H file, or forge a new
* one with @FT_MAKE_TAG.
*
* offset ::
* The starting offset in the table (or file if tag == 0).
*
* @output:
* buffer ::
* The target buffer address. The client must ensure that the memory
* array is big enough to hold the data.
*
* @inout:
* length ::
* If the `length' parameter is NULL, then try to load the whole table.
* Return an error code if it fails.
*
* Else, if `*length' is~0, exit immediately while returning the
* table's (or file) full size in it.
*
* Else the number of bytes to read from the table or file, from the
* starting offset.
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* If you need to determine the table's length you should first call this
* function with `*length' set to~0, as in the following example:
*
* {
* FT_ULong length = 0;
*
*
* error = FT_Load_Sfnt_Table( face, tag, 0, NULL, &length );
* if ( error ) { ... table does not exist ... }
*
* buffer = malloc( length );
* if ( buffer == NULL ) { ... not enough memory ... }
*
* error = FT_Load_Sfnt_Table( face, tag, 0, buffer, &length );
* if ( error ) { ... could not load table ... }
* }
*
* Note that structures like @TT_Header or @TT_OS2 can't be used with
* this function; they are limited to @FT_Get_Sfnt_Table. Reason is that
* those structures depend on the processor architecture, with varying
* size (e.g. 32bit vs. 64bit) or order (big endian vs. little endian).
*
*/
FT_EXPORT( FT_Error )
FT_Load_Sfnt_Table( FT_Face face,
FT_ULong tag,
FT_Long offset,
FT_Byte* buffer,
FT_ULong* length );
/**************************************************************************
*
* @function:
* FT_Sfnt_Table_Info
*
* @description:
* Return information on an SFNT table.
*
* @input:
* face ::
* A handle to the source face.
*
* table_index ::
* The index of an SFNT table. The function returns
* FT_Err_Table_Missing for an invalid value.
*
* @inout:
* tag ::
* The name tag of the SFNT table. If the value is NULL, `table_index'
* is ignored, and `length' returns the number of SFNT tables in the
* font.
*
* @output:
* length ::
* The length of the SFNT table (or the number of SFNT tables, depending
* on `tag').
*
* @return:
* FreeType error code. 0~means success.
*
* @note:
* While parsing fonts, FreeType handles SFNT tables with length zero as
* missing.
*
*/
FT_EXPORT( FT_Error )
FT_Sfnt_Table_Info( FT_Face face,
FT_UInt table_index,
FT_ULong *tag,
FT_ULong *length );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Get_CMap_Language_ID */
/* */
/* <Description> */
/* Return TrueType/sfnt specific cmap language ID. Definitions of */
/* language ID values are in `ttnameid.h'. */
/* */
/* <Input> */
/* charmap :: */
/* The target charmap. */
/* */
/* <Return> */
/* The language ID of `charmap'. If `charmap' doesn't belong to a */
/* TrueType/sfnt face, just return~0 as the default value. */
/* */
/* For a format~14 cmap (to access Unicode IVS), the return value is */
/* 0xFFFFFFFF. */
/* */
FT_EXPORT( FT_ULong )
FT_Get_CMap_Language_ID( FT_CharMap charmap );
/*************************************************************************/
/* */
/* <Function> */
/* FT_Get_CMap_Format */
/* */
/* <Description> */
/* Return TrueType/sfnt specific cmap format. */
/* */
/* <Input> */
/* charmap :: */
/* The target charmap. */
/* */
/* <Return> */
/* The format of `charmap'. If `charmap' doesn't belong to a */
/* TrueType/sfnt face, return -1. */
/* */
FT_EXPORT( FT_Long )
FT_Get_CMap_Format( FT_CharMap charmap );
/* */
FT_END_HEADER
#endif /* TTTABLES_H_ */
/* END */

View File

@ -0,0 +1,115 @@
/***************************************************************************/
/* */
/* tttags.h */
/* */
/* Tags for TrueType and OpenType tables (specification only). */
/* */
/* Copyright 1996-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef TTAGS_H_
#define TTAGS_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
#define TTAG_avar FT_MAKE_TAG( 'a', 'v', 'a', 'r' )
#define TTAG_BASE FT_MAKE_TAG( 'B', 'A', 'S', 'E' )
#define TTAG_bdat FT_MAKE_TAG( 'b', 'd', 'a', 't' )
#define TTAG_BDF FT_MAKE_TAG( 'B', 'D', 'F', ' ' )
#define TTAG_bhed FT_MAKE_TAG( 'b', 'h', 'e', 'd' )
#define TTAG_bloc FT_MAKE_TAG( 'b', 'l', 'o', 'c' )
#define TTAG_bsln FT_MAKE_TAG( 'b', 's', 'l', 'n' )
#define TTAG_CBDT FT_MAKE_TAG( 'C', 'B', 'D', 'T' )
#define TTAG_CBLC FT_MAKE_TAG( 'C', 'B', 'L', 'C' )
#define TTAG_CFF FT_MAKE_TAG( 'C', 'F', 'F', ' ' )
#define TTAG_CFF2 FT_MAKE_TAG( 'C', 'F', 'F', '2' )
#define TTAG_CID FT_MAKE_TAG( 'C', 'I', 'D', ' ' )
#define TTAG_cmap FT_MAKE_TAG( 'c', 'm', 'a', 'p' )
#define TTAG_cvar FT_MAKE_TAG( 'c', 'v', 'a', 'r' )
#define TTAG_cvt FT_MAKE_TAG( 'c', 'v', 't', ' ' )
#define TTAG_DSIG FT_MAKE_TAG( 'D', 'S', 'I', 'G' )
#define TTAG_EBDT FT_MAKE_TAG( 'E', 'B', 'D', 'T' )
#define TTAG_EBLC FT_MAKE_TAG( 'E', 'B', 'L', 'C' )
#define TTAG_EBSC FT_MAKE_TAG( 'E', 'B', 'S', 'C' )
#define TTAG_feat FT_MAKE_TAG( 'f', 'e', 'a', 't' )
#define TTAG_FOND FT_MAKE_TAG( 'F', 'O', 'N', 'D' )
#define TTAG_fpgm FT_MAKE_TAG( 'f', 'p', 'g', 'm' )
#define TTAG_fvar FT_MAKE_TAG( 'f', 'v', 'a', 'r' )
#define TTAG_gasp FT_MAKE_TAG( 'g', 'a', 's', 'p' )
#define TTAG_GDEF FT_MAKE_TAG( 'G', 'D', 'E', 'F' )
#define TTAG_glyf FT_MAKE_TAG( 'g', 'l', 'y', 'f' )
#define TTAG_GPOS FT_MAKE_TAG( 'G', 'P', 'O', 'S' )
#define TTAG_GSUB FT_MAKE_TAG( 'G', 'S', 'U', 'B' )
#define TTAG_gvar FT_MAKE_TAG( 'g', 'v', 'a', 'r' )
#define TTAG_HVAR FT_MAKE_TAG( 'H', 'V', 'A', 'R' )
#define TTAG_hdmx FT_MAKE_TAG( 'h', 'd', 'm', 'x' )
#define TTAG_head FT_MAKE_TAG( 'h', 'e', 'a', 'd' )
#define TTAG_hhea FT_MAKE_TAG( 'h', 'h', 'e', 'a' )
#define TTAG_hmtx FT_MAKE_TAG( 'h', 'm', 't', 'x' )
#define TTAG_JSTF FT_MAKE_TAG( 'J', 'S', 'T', 'F' )
#define TTAG_just FT_MAKE_TAG( 'j', 'u', 's', 't' )
#define TTAG_kern FT_MAKE_TAG( 'k', 'e', 'r', 'n' )
#define TTAG_lcar FT_MAKE_TAG( 'l', 'c', 'a', 'r' )
#define TTAG_loca FT_MAKE_TAG( 'l', 'o', 'c', 'a' )
#define TTAG_LTSH FT_MAKE_TAG( 'L', 'T', 'S', 'H' )
#define TTAG_LWFN FT_MAKE_TAG( 'L', 'W', 'F', 'N' )
#define TTAG_MATH FT_MAKE_TAG( 'M', 'A', 'T', 'H' )
#define TTAG_maxp FT_MAKE_TAG( 'm', 'a', 'x', 'p' )
#define TTAG_META FT_MAKE_TAG( 'M', 'E', 'T', 'A' )
#define TTAG_MMFX FT_MAKE_TAG( 'M', 'M', 'F', 'X' )
#define TTAG_MMSD FT_MAKE_TAG( 'M', 'M', 'S', 'D' )
#define TTAG_mort FT_MAKE_TAG( 'm', 'o', 'r', 't' )
#define TTAG_morx FT_MAKE_TAG( 'm', 'o', 'r', 'x' )
#define TTAG_MVAR FT_MAKE_TAG( 'M', 'V', 'A', 'R' )
#define TTAG_name FT_MAKE_TAG( 'n', 'a', 'm', 'e' )
#define TTAG_opbd FT_MAKE_TAG( 'o', 'p', 'b', 'd' )
#define TTAG_OS2 FT_MAKE_TAG( 'O', 'S', '/', '2' )
#define TTAG_OTTO FT_MAKE_TAG( 'O', 'T', 'T', 'O' )
#define TTAG_PCLT FT_MAKE_TAG( 'P', 'C', 'L', 'T' )
#define TTAG_POST FT_MAKE_TAG( 'P', 'O', 'S', 'T' )
#define TTAG_post FT_MAKE_TAG( 'p', 'o', 's', 't' )
#define TTAG_prep FT_MAKE_TAG( 'p', 'r', 'e', 'p' )
#define TTAG_prop FT_MAKE_TAG( 'p', 'r', 'o', 'p' )
#define TTAG_sbix FT_MAKE_TAG( 's', 'b', 'i', 'x' )
#define TTAG_sfnt FT_MAKE_TAG( 's', 'f', 'n', 't' )
#define TTAG_SING FT_MAKE_TAG( 'S', 'I', 'N', 'G' )
#define TTAG_trak FT_MAKE_TAG( 't', 'r', 'a', 'k' )
#define TTAG_true FT_MAKE_TAG( 't', 'r', 'u', 'e' )
#define TTAG_ttc FT_MAKE_TAG( 't', 't', 'c', ' ' )
#define TTAG_ttcf FT_MAKE_TAG( 't', 't', 'c', 'f' )
#define TTAG_TYP1 FT_MAKE_TAG( 'T', 'Y', 'P', '1' )
#define TTAG_typ1 FT_MAKE_TAG( 't', 'y', 'p', '1' )
#define TTAG_VDMX FT_MAKE_TAG( 'V', 'D', 'M', 'X' )
#define TTAG_vhea FT_MAKE_TAG( 'v', 'h', 'e', 'a' )
#define TTAG_vmtx FT_MAKE_TAG( 'v', 'm', 't', 'x' )
#define TTAG_VVAR FT_MAKE_TAG( 'V', 'V', 'A', 'R' )
#define TTAG_wOFF FT_MAKE_TAG( 'w', 'O', 'F', 'F' )
FT_END_HEADER
#endif /* TTAGS_H_ */
/* END */

View File

@ -0,0 +1,63 @@
/***************************************************************************/
/* */
/* ttunpat.h */
/* */
/* Definitions for the unpatented TrueType hinting system. */
/* Obsolete, retained for backwards compatibility. */
/* */
/* Copyright 2003-2016 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* Written by Graham Asher <graham.asher@btinternet.com> */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef TTUNPAT_H_
#define TTUNPAT_H_
#include <ft2build.h>
#include FT_FREETYPE_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
#error "Please fix the directory search order for header files"
#error "so that freetype.h of FreeType 2 is found first."
#endif
FT_BEGIN_HEADER
/***************************************************************************
*
* @constant:
* FT_PARAM_TAG_UNPATENTED_HINTING
*
* @description:
* Deprecated.
*
* Previously: A constant used as the tag of an @FT_Parameter structure to
* indicate that unpatented methods only should be used by the TrueType
* bytecode interpreter for a typeface opened by @FT_Open_Face.
*
*/
#define FT_PARAM_TAG_UNPATENTED_HINTING FT_MAKE_TAG( 'u', 'n', 'p', 'a' )
/* */
FT_END_HEADER
#endif /* TTUNPAT_H_ */
/* END */

Some files were not shown because too many files have changed in this diff Show More