Newer
Older
lynxi-plugin / src / util / drawTool.h
#ifndef __SAMPLE_UTIL_H
#define __SAMPLE_UTIL_H

#include "lyn_api.h"

#ifdef __cplusplus
extern "C" {
#endif

typedef enum {
    SAMPLE_DRAW_COLOR_WHITE,
    SAMPLE_DRAW_COLOR_BLACK,
    SAMPLE_DRAW_COLOR_RED,
    SAMPLE_DRAW_COLOR_GREEN,
    SAMPLE_DRAW_COLOR_BLUE,
    SAMPLE_DRAW_COLOR_YELLOW,
    SAMPLE_DARW_COLOR_CYAN
} DrawColor;

typedef enum {
    SAMPLE_DRAW_THICK_2 = 2,
    SAMPLE_DRAW_THICK_4 = 4,
    SAMPLE_DRAW_THICK_6 = 6,
    SAMPLE_DRAW_THICK_8 = 8
} DrawThick;

typedef enum {
    SAMPLE_FONT_SIZE_18 = 18,
    SAMPLE_FONT_SIZE_24 = 24,
    SAMPLE_FONT_SIZE_36 = 36,
    SAMPLE_FONT_SIZE_48 = 48,
    SAMPLE_FONT_SIZE_64 = 64,
    SAMPLE_FONT_SIZE_96 = 96,
    SAMPLE_FONT_SIZE_128 = 128
} FontSize;

typedef struct {
    uint32_t startX;
    uint32_t startY;
    uint32_t boxW;
    uint32_t boxH;
    uint32_t imgW;
    uint32_t imgH;
    DrawThick thickness;
    DrawColor color;
    lynPixelFormat_t imgFmt;
    unsigned char *imgData;
    #if __WORDSIZE == 32
        uint32_t reserve;
    #endif
} __attribute__ ((packed))DrawBoxAttr;

typedef struct {
    uint32_t startX;
    uint32_t startY;
    uint32_t boxW;
    uint32_t boxH;
    uint32_t imgW;
    uint32_t imgH;
    DrawThick thickness;
    uint8_t colorY;
    uint8_t colorU;
    uint8_t colorV;
    lynPixelFormat_t imgFmt;
    unsigned char *imgData;
    #if __WORDSIZE == 32
        uint32_t reserve;
    #endif
} __attribute__ ((packed))CustomColorBoxAttr;

typedef struct {
    uint32_t startX;
    uint32_t startY;
    uint32_t imgW;
    uint32_t imgH;
    lynPixelFormat_t imgFmt;
    FontSize fontSize;
    unsigned char *imgData;
    #if __WORDSIZE == 32
        uint32_t reserve;
    #endif
    char *text;
    #if __WORDSIZE == 32
        uint32_t reserve_1;
    #endif
} __attribute__ ((packed))DrawTextAttr;

typedef struct {
    uint32_t startX;
    uint32_t startY;
    uint32_t imgW;
    uint32_t imgH;
    lynPixelFormat_t imgFmt;
    FontSize fontSize;
    DrawColor color;
    unsigned char *imgData;
    #if __WORDSIZE == 32
        uint32_t reserve;
    #endif
    wchar_t *text;
    #if __WORDSIZE == 32
        uint32_t reserve_1;
    #endif
} __attribute__ ((packed))DrawTextAttrV2;

typedef struct {
    uint32_t x;
    uint32_t y;
} DarwPoint;

typedef struct {
    DarwPoint startPoint;
    DarwPoint endPoint;
    uint32_t imgW;
    uint32_t imgH;
    lynPixelFormat_t imgFmt;
    DrawThick thickness;
    DrawColor color;
    unsigned char *imgData;
    #if __WORDSIZE == 32
        uint32_t reserve;
    #endif
} __attribute__ ((packed))DrawLineAttr;


#define BOX_MAX_NUM 256
#define LABLE_MAX_LEN 64

typedef struct {
    uint32_t xmin;              // box左边横向偏移
    uint32_t ymin;              // box上边纵向偏移
    uint32_t xmax;              // box右边横向偏移
    uint32_t ymax;              // box下边纵向偏移
    float score;                // 置信度分数
    uint32_t id;
    wchar_t lable[LABLE_MAX_LEN];  // 分类标签
    uint8_t alarm;
    wchar_t model_code[LABLE_MAX_LEN];
} lynBox;


typedef struct {
    uint32_t boxesNum;          // box数量
    lynBox boxes[BOX_MAX_NUM];  // box信息
} lynBoxesInfo;

typedef struct {
    lynBoxesInfo *boxesInfo;    // box信息
    uint32_t imgW;              // 图像宽
    uint32_t imgH;              // 图像高
    lynPixelFormat_t imgFmt;    // 图像格式
    void *imgData;              // 图像数据
} lynDrawBoxAndTextPara;



/**
 * @brief draw box on frame
 *
 * @param  attr
 * @return int
 */
int PluginDrawBox(DrawBoxAttr *attr);

/**
 * @brief draw custom color box on frame
 * 
 * @param[in] attr 
 * @return int 
 */
int PluginDrawCustomColorBox(CustomColorBoxAttr *attr);

/**
 * @brief draw text on frame
 *
 * @param  attr
 * @return int
 */
int PluginDrawText(DrawTextAttr *attr);

/**
 * @brief draw wchar text on frame
 *
 * @param  attr
 * @return int
 */
int PluginDrawTextV2(DrawTextAttrV2 *attr);

/**
 * @brief draw line on frame
 *
 * @param  attr
 * @return int
 */
int PluginDrawLine(DrawLineAttr *attr);


/**
 * @brief 画框写字
 *
 * @param  para
 * @return int
 */
int lynDrawBoxAndText(lynDrawBoxAndTextPara *para);


#ifdef __cplusplus
}
#endif

#endif