fusion/mw/media/mw_video.h

372 lines
12 KiB
C
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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__ */