#ifndef _YOLOV5M_
#define _YOLOV5M_

#include <stdint.h>

#if 0
#define FEATURE_MAP_SIZE1    20
#define FEATURE_MAP_SIZE2    40
#define FEATURE_MAP_SIZE3    80
#endif 
#if 1
#define FEATURE_MAP_SIZE1    80
#define FEATURE_MAP_SIZE2    40
#define FEATURE_MAP_SIZE3    20
#endif
//#define FEATURE_MAP_CHANNELS 85
#define FEATURE_MAP_CHANNELS 8
#define IMAGE_SIZE           640
#define ANCHORS_NUM          3
#define IOU_THRESHOLD        0.45f
#define CONFIDENCE_THRESHOLD 0.7f
#define MAX_BOXES            100
#define CLASSES_COUNT        3
//#define CLASSES_COUNT        90
#define CONF_CHANNEL_OFFSET  4
#define CLASS_CHANNEL_OFFSET 5
#define YMIN                 0
#define XMIN                 1
#define YMAX                 2
#define XMAX                 3
#define CONFIDENCE           4
#define CLASS_ID             5 

typedef float float32_t; 

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
static uint8_t g_feature_map_size[ANCHORS_NUM] = {FEATURE_MAP_SIZE1, FEATURE_MAP_SIZE2, FEATURE_MAP_SIZE3};
#if 1
static int32_t g_anchors[ANCHORS_NUM][6] = {{10,  13, 16,  30,  33,  23},
											{30,  61, 62,  45,  59,  119},
											{116, 90, 156, 198, 373, 326}};
#endif
#if 0
static int32_t g_anchors[ANCHORS_NUM][6] = {{116, 90, 156, 198, 373, 326},
											{30,  61, 62,  45,  59,  119},
											{10,  13, 16,  30,  33,  23}};
#endif
#pragma GCC diagnostic pop


void extract_boxes(uint8_t *fm, float32_t qp_zp, float32_t qp_scale, uint32_t feature_map_size, 
		   int* anchors, float32_t thr, uint32_t *box_index, float32_t (*box_array)[6]);

float32_t iou_calc_c(float32_t *box_1, float32_t *box_2);
float fix_scale(float32_t input, float32_t qp_scale, float32_t qp_zp);
#endif /* _YOLOV5M_ */