372 lines
12 KiB
C
372 lines
12 KiB
C
|
#ifndef __MW_VIDEO_H__
|
|||
|
#define __MW_VIDEO_H__
|
|||
|
|
|||
|
//#include <stdint.h>
|
|||
|
//#include <stdio.h>
|
|||
|
#include "hal_interface_video.h"
|
|||
|
|
|||
|
|
|||
|
#ifdef __cplusplus
|
|||
|
extern "C"
|
|||
|
{
|
|||
|
#endif /* __cplusplus */
|
|||
|
|
|||
|
////////////////////////////////////////////////////////////
|
|||
|
//
|
|||
|
// 数据类型定义
|
|||
|
//
|
|||
|
////////////////////////////////////////////////////////////
|
|||
|
/**
|
|||
|
* Video视频流通道常量定义, 适用HAL_Video
|
|||
|
*/
|
|||
|
typedef enum
|
|||
|
{
|
|||
|
//1080P 1.2Mbps //720P 0.8Mbps //720P 500kbps
|
|||
|
VIDEO_3M = 3000,
|
|||
|
VIDEO_2_5M = 2500,
|
|||
|
VIDEO_2M = 2000,
|
|||
|
VIDEO_1_5M = 1500,
|
|||
|
VIDEO_1_4M = 1400,
|
|||
|
VIDEO_1_3M = 1300,
|
|||
|
VIDEO_1_2M = 1200,
|
|||
|
VIDEO_1_1M = 1100,
|
|||
|
VIDEO_1M = 1000,
|
|||
|
VIDEO_900k = 900,
|
|||
|
VIDEO_800k = 800,
|
|||
|
VIDEO_700k = 700,
|
|||
|
VIDEO_600k = 600,
|
|||
|
VIDEO_500k = 500,
|
|||
|
VIDEO_400k = 400,
|
|||
|
VIDEO_300k = 300,
|
|||
|
VIDEO_200k = 200,
|
|||
|
VIDEO_100k = 100,
|
|||
|
} VIDEO_BITRATE_E;
|
|||
|
|
|||
|
typedef enum
|
|||
|
{
|
|||
|
VIDEO_LEVEL_1 = 1, //VIDEO_100K
|
|||
|
VIDEO_LEVEL_2, //VIDEO_200k
|
|||
|
VIDEO_LEVEL_3, //VIDEO_300k
|
|||
|
VIDEO_LEVEL_4, //VIDEO_400k
|
|||
|
VIDEO_LEVEL_5, //VIDEO_500k
|
|||
|
VIDEO_LEVEL_6, //VIDEO_600k
|
|||
|
VIDEO_LEVEL_7, //VIDEO_700k
|
|||
|
VIDEO_LEVEL_8, //VIDEO_800k
|
|||
|
VIDEO_LEVEL_9, //VIDEO_900k
|
|||
|
VIDEO_LEVEL_10, //VIDEO_1M
|
|||
|
VIDEO_LEVEL_11, //VIDEO_1_1M
|
|||
|
VIDEO_LEVEL_12, //VIDEO_1_2M
|
|||
|
VIDEO_LEVEL_13, //VIDEO_1_3M
|
|||
|
VIDEO_LEVEL_14, //VIDEO_1_4M
|
|||
|
VIDEO_LEVEL_15, //VIDEO_1_5M
|
|||
|
VIDEO_LEVEL_16, //VIDEO_2M
|
|||
|
VIDEO_LEVEL_17, //VIDEO_2_5M
|
|||
|
VIDEO_LEVEL_18, //VIDEO_3M
|
|||
|
VIDEO_LEVEL_19,
|
|||
|
VIDEO_LEVEL_20
|
|||
|
} VIDEO_BITRATE_LEVEL;
|
|||
|
|
|||
|
typedef enum
|
|||
|
{
|
|||
|
AUTO_QUALITY = 0,
|
|||
|
LOW_QUALITY = 1,
|
|||
|
MEDIUM_QUALITY,
|
|||
|
HIGH_QUALITY,
|
|||
|
} VIDEO_QUALITY_LEVEL;
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
unsigned int bitrate;
|
|||
|
unsigned int width;
|
|||
|
unsigned int height;
|
|||
|
unsigned int videoquality;
|
|||
|
} VIDEO_QUALITY_INFO;
|
|||
|
|
|||
|
|
|||
|
typedef enum
|
|||
|
{
|
|||
|
STREAM_FORM_UNDEF = -1, /**< 未指定 */
|
|||
|
STREAM_FORM_SINGLE = 0, /**< 使能单路流模式 */
|
|||
|
STREAM_FORM_PIP_UPPER_LEFT = 1, /**< 双摄使能画中画模式,画中画图像在左上 */
|
|||
|
STREAM_FORM_PIP_UPPER_RIGHT = 2, /**< 双摄使能画中画模式,画中画图像在右上 */
|
|||
|
STREAM_FORM_PIP_LOWER_LEFT = 3, /**< 双摄使能画中画模式,画中画图像在左下 */
|
|||
|
STREAM_FORM_PIP_LOWER_RIGHT = 4, /**< 双摄使能画中画模式,画中画图像在右下 */
|
|||
|
STREAM_FORM_SPLICE_LEFT = 5, /**< 双摄使能拼接模式,主摄图像在左边 */
|
|||
|
STREAM_FORM_SPLICE_RIGHT = 6, /**< 双摄使能拼接模式,主摄图像在右边 */
|
|||
|
STREAM_FORM_SPLICE_ABOVE = 7, /**< 双摄使能拼接模式,主摄图像在上边 */
|
|||
|
STREAM_FORM_SPLICE_UNDER = 8, /**< 双摄使能拼接模式,主摄图像在下边 */
|
|||
|
STREAM_FORM_MAX
|
|||
|
} STREAM_FORM;
|
|||
|
|
|||
|
/**
|
|||
|
* Video视频抗频闪模式常量定义, 适用HAL_Video
|
|||
|
*/
|
|||
|
typedef enum
|
|||
|
{
|
|||
|
ANTIFLICKER_OFF = 0,
|
|||
|
ANTIFLICKER_50HZ = 50,
|
|||
|
ANTIFLICKER_60HZ = 60,
|
|||
|
} ANTIFLICKER_MODE;
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* ISP运行模式定义
|
|||
|
*/
|
|||
|
typedef enum
|
|||
|
{
|
|||
|
ISP_RUNNING_MODE_DAY = 0, // 白天模式
|
|||
|
ISP_RUNNING_MODE_NIGHT = 1, // 夜视模式
|
|||
|
ISP_RUNNING_MODE_MAX
|
|||
|
} ISP_RUNNING_MODE;
|
|||
|
|
|||
|
/**
|
|||
|
* OSD水印切换模式
|
|||
|
*/
|
|||
|
typedef enum
|
|||
|
{
|
|||
|
LOGO_OSD_SWITCH_OFF = 0, // Logo OSD关闭, 时间戳OSD开启模式
|
|||
|
TIMESTAMP_OSD_SWITCH_OFF = 1, // Logo OSD开启, 时间戳OSD关闭模式
|
|||
|
BOTH_SWITCH_OFF = 2, // Logo OSD关闭, 时间戳OSD关闭模式
|
|||
|
BOTH_SWITCH_ON = 3, // Logo OSD开启, 时间戳OSD开启模式
|
|||
|
} OSD_SWITCH_MODE;
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* OSD遮挡切换模式
|
|||
|
*/
|
|||
|
typedef enum
|
|||
|
{
|
|||
|
BOTH_COVER_OFF = 0, // COVER OSD都关闭
|
|||
|
COVERMAIN_ON_COVERSUB_OFF = 1, // Main cover osd 打开, Sub cover osd 关闭
|
|||
|
COVERMAIN_OFF_COVERSUB_ON = 2, // Main cover osd 关闭, Sub cover osd 打开
|
|||
|
BOTH_COVER_ON = 3, // COVER OSD都打开
|
|||
|
} COVER_OSD_SWITCH_MODE;
|
|||
|
|
|||
|
/**
|
|||
|
* OSD遮挡属性
|
|||
|
*/
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
float Start_Percent_x;
|
|||
|
float Start_Percent_y;
|
|||
|
float End_Percent_x;
|
|||
|
float End_Percent_y;
|
|||
|
uint32_t Color;
|
|||
|
} Video_COVER_OSD;
|
|||
|
|
|||
|
/**
|
|||
|
* 视频流属性参数数据结构定义
|
|||
|
*/
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
HAL_VIDEO_FORMAT Format; // 流格式: stream format
|
|||
|
int32_t nWidth; // resolution width
|
|||
|
int32_t nHeight; // resolution height
|
|||
|
int32_t nBitrate; // 码率: Kbit per second
|
|||
|
//int32_t nFPS; // 帧率: framerate such as 15, 25
|
|||
|
//int32_t nGOP; // I帧间隔: interval between two key frame = n*fps
|
|||
|
HAL_STREAM_CHANNEL FS_Chn; //辅流Framesource channel
|
|||
|
int32_t rectX; //辅流叠加到主流的起始X坐标
|
|||
|
int32_t rectY; //辅流叠加到主流的起始Y坐标
|
|||
|
} Aux_Video_Attr_Param;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* 视频流属性参数数据结构定义
|
|||
|
*/
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
HAL_STREAM_CHANNEL Stream; // 流通道
|
|||
|
HAL_VIDEO_FORMAT Format; // 流格式: stream format
|
|||
|
int32_t nWidth; // resolution width
|
|||
|
int32_t nHeight; // resolution height
|
|||
|
int32_t nBitrate; // 码率: Kbit per second
|
|||
|
int32_t AuxStreamEnable; // 是否开启辅流,以下字段仅在本字段为1时启用
|
|||
|
HAL_STREAM_CHANNEL FS_Chn; // 主流Framesource channel, Add 2021/03/16
|
|||
|
Aux_Video_Attr_Param AuxStreamAttr; // 辅流的视频属性, Add 2021/03/16
|
|||
|
STREAM_FORM StreamForm; // 流形式:单路流,画中画流,拼接流
|
|||
|
} Video_Attr_Param;
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* 视频回调参数结构定义
|
|||
|
*/
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
char *pBuff; //视频数据
|
|||
|
uint32_t nSize; //数据大小
|
|||
|
HAL_STREAM_CHANNEL Stream_Chn; //视频流通道
|
|||
|
HAL_VIDEO_FORMAT Video_Format;//视频格式
|
|||
|
HAL_FRAME_TYPE Frame_Type; //帧类型
|
|||
|
uint32_t nFPS; //帧率
|
|||
|
uint32_t nIR_Mode; //红外模式(0:红外关闭,1:红外开启)
|
|||
|
uint32_t nWidth; //分辨率宽度
|
|||
|
uint32_t nHeight; //分辨率高度
|
|||
|
uint64_t nTimestamp; //时间戳
|
|||
|
uint32_t Frame_Seq; //帧序号
|
|||
|
uint64_t nlocal_Time; //本地时间
|
|||
|
} Video_CallBack_Param;
|
|||
|
|
|||
|
/**
|
|||
|
* motion条件设置
|
|||
|
*/
|
|||
|
typedef enum
|
|||
|
{
|
|||
|
MOTOR_STOP_STATUS = 0, // 马达转动状态
|
|||
|
LIGHT_ON_OFF_CHANGE = 1, // 大灯亮灭
|
|||
|
INVALID_TRIGGER = 3,
|
|||
|
} MOTION_CONDITION_TYPE;
|
|||
|
|
|||
|
/**
|
|||
|
* 视频回调参数, 函数实现者不能发生阻塞, 否则将引起视频数据断片
|
|||
|
* 功能:视频数据输出
|
|||
|
* 入参:Video_CallBack_Param * pVideo_Param, 视频参数
|
|||
|
* uint32_t nChannel, 设备通道号
|
|||
|
* 出参:无
|
|||
|
* 返回:函数执行指示, int32_t代码值
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
*/
|
|||
|
typedef int32_t(*HAL_Video_Callback)(Video_CallBack_Param * pVideo_Param, uint32_t nChannel);
|
|||
|
|
|||
|
|
|||
|
typedef int32_t(*HAL_Video_Motion_callback)(void *pResult);
|
|||
|
|
|||
|
|
|||
|
////////////////////////////////////////////////////////////
|
|||
|
// 移动检测跟踪数据类型定义
|
|||
|
// Motion Detection Tracking
|
|||
|
|
|||
|
#define PERM_MAX_ROI 8
|
|||
|
#define PERM_MAX_RECT 8
|
|||
|
|
|||
|
/*
|
|||
|
* 点的定义
|
|||
|
*/
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
int32_t x; /**< 横向的坐标值 */
|
|||
|
int32_t y; /**< 纵向的坐标值 */
|
|||
|
} MD_Point;
|
|||
|
|
|||
|
/*
|
|||
|
* 矩形框的定义
|
|||
|
*/
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
MD_Point ul; /**< 左上角点坐标 */
|
|||
|
MD_Point br; /**< 右下角点坐标 */
|
|||
|
} MD_Rect;
|
|||
|
|
|||
|
/*
|
|||
|
* 周界信息结构体
|
|||
|
*/
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
MD_Point *p; /**< 周界各个顶点信息,不能有线交叉,最多6个点 */
|
|||
|
int32_t pcnt; /**< 周界顶点数量 */
|
|||
|
uint64_t alarm_last_time; /**< 持续报警时间 */
|
|||
|
} MD_Perm;
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* 移动跟踪算法参数的结构体
|
|||
|
*/
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
int32_t move_sense; /** 检测灵敏度 0-5 ascend */
|
|||
|
int32_t open_flag; /** 总开关: motion detection and motion tracking, 0:close 1:open */
|
|||
|
int32_t perm_start; /** perm开关, 0:close 1:open */
|
|||
|
int32_t mt_start; /** motion tracking 开关, 0:close 1:open */
|
|||
|
|
|||
|
int32_t permcnt; /** 周界个数 */
|
|||
|
MD_Perm perms[PERM_MAX_ROI];/** 周界信息 */
|
|||
|
|
|||
|
int32_t feedback_motor; /** 电机回馈信息 */
|
|||
|
int32_t motor_stop; /** 电机停止状态 */
|
|||
|
} MD_Tracking_Param;
|
|||
|
|
|||
|
/*
|
|||
|
* 移动跟踪算法的输出结构体
|
|||
|
*/
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
int32_t count; /**< 检测到的矩形框目标个数 */
|
|||
|
MD_Rect rect[20]; /**< 检测到的目标矩形框 */
|
|||
|
int32_t dx; /**< 检测到的目标dx */
|
|||
|
int32_t dy; /**< 检测到的目标dy */
|
|||
|
int32_t step; /**< 检测到的目标step */
|
|||
|
int32_t capture_lost; /**< 何种状态下跟踪失效 */
|
|||
|
int32_t tracking; /**< 是否处于跟踪状态 */
|
|||
|
uint64_t timeStamp; /**< 时间戳*/
|
|||
|
|
|||
|
int32_t ret; /**< 是否出现越界 */
|
|||
|
int32_t is_alarmed[PERM_MAX_ROI]; /**< 那个周界出现越界 */
|
|||
|
MD_Rect rects[PERM_MAX_RECT]; /**< 越界物体的矩形信息 */
|
|||
|
int32_t rectcnt; /**< 越界物体的数量 */
|
|||
|
} MD_Tracking_Output;
|
|||
|
|
|||
|
typedef enum
|
|||
|
{
|
|||
|
DUAL_CAM_STREAM_MODE_UNDEF = -1, /* 未指定 */
|
|||
|
DUAL_CAM_STREAM_MODE_SINGLE_MAIN = 0, /*使能单路流,出主摄 */
|
|||
|
DUAL_CAM_STREAM_MODE_SINGLE_SECOND = 1, /*使能单路流,出辅摄 */
|
|||
|
DUAL_CAM_STREAM_MODE_PIP_MAIN_UPPER_LEFT = 2, /* 画中画,辅摄小图左上 */
|
|||
|
DUAL_CAM_STREAM_MODE_PIP_MAIN_UPPER_RIGHT = 3, /*画中画,辅摄小图右上 */
|
|||
|
DUAL_CAM_STREAM_MODE_PIP_MAIN_LOWER_LEFT = 4, /*画中画,辅摄小图左下 */
|
|||
|
DUAL_CAM_STREAM_MODE_PIP_MAIN_LOWER_RIGHT = 5, /* 画中画,辅摄小图右下 */
|
|||
|
DUAL_CAM_STREAM_MODE_PIP_SECOND_UPPER_LEFT = 6, /* 画中画,主摄小图左上 */
|
|||
|
DUAL_CAM_STREAM_MODE_PIP_SECOND_UPPER_RIGHT = 7, /*画中画,主摄小图右上 */
|
|||
|
DUAL_CAM_STREAM_MODE_PIP_SECOND_LOWER_LEFT = 8, /*画中画,主摄小图左下 */
|
|||
|
DUAL_CAM_STREAM_MODE_PIP_SECOND_LOWER_RIGHT = 9, /* 画中画,主摄小图右下 */
|
|||
|
DUAL_CAM_STREAM_MODE_SPLICE_LEFT = 10, /* 拼接模式,主摄图像在左边 */
|
|||
|
DUAL_CAM_STREAM_MODE_SPLICE_RIGHT = 11, /* 拼接模式,主摄图像在右边 */
|
|||
|
DUAL_CAM_STREAM_MODE_SPLICE_ABOVE = 12, /* 拼接模式,主摄图像在上边 */
|
|||
|
DUAL_CAM_STREAM_MODE_SPLICE_UNDER = 13, /* 拼接模式,主摄图像在下边 */
|
|||
|
DUAL_CAM_STREAM_MODE_MAX
|
|||
|
} DUAL_CAM_STREAM_MODE;
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
unsigned char weight[15][15]; //各个区域权重[0-8]
|
|||
|
} ISP_WEIGHT;
|
|||
|
|
|||
|
|
|||
|
// Stream Ops
|
|||
|
/**
|
|||
|
* 函数:Video_OpenStream
|
|||
|
* 声明:int32_t video_openstream(HAL_STREAM_CHANNEL Stream, int32_t Channel)
|
|||
|
* 功能:打开视频流
|
|||
|
* 入参:STREAM_CHANNEL Stream, 视频流通道
|
|||
|
HAL_VIDEO_FORMAT Format, 视频格式
|
|||
|
int32_t Channel, 设备通道号
|
|||
|
* 出参:无
|
|||
|
* 返回:函数执行指示, int32_t代码值
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
*/
|
|||
|
uint32_t video_openstream(HAL_SENSOR_IDX idx, hal_video_frame_callback cb, HAL_STREAM_CHANNEL stream_chn, const video_attr_st attr);
|
|||
|
|
|||
|
/**
|
|||
|
* 函数:Video_CloseStream
|
|||
|
* 声明:int32_t video_close(HAL_STREAM_CHANNEL Stream, int32_t Channel)
|
|||
|
* 功能:关闭视频流
|
|||
|
* 入参:STREAM_CHANNEL Stream, 视频流通道
|
|||
|
HAL_VIDEO_FORMAT Format, 视频格式
|
|||
|
int32_t Channel, 设备通道号
|
|||
|
* 出参:无
|
|||
|
* 返回:函数执行指示, int32_t代码值
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
*/
|
|||
|
uint32_t video_close(hal_video_frame_callback cb);
|
|||
|
|
|||
|
void mw_video_test();
|
|||
|
|
|||
|
#ifdef __cplusplus
|
|||
|
}
|
|||
|
#endif /* __cplusplus */
|
|||
|
|
|||
|
#endif /* __MW_VIDEO_H__ */
|