initial commit
This commit is contained in:
67
mw/media/mw_video.c
Executable file
67
mw/media/mw_video.c
Executable file
@@ -0,0 +1,67 @@
|
||||
/*************************************************
|
||||
File name : mw_video.c
|
||||
Module :
|
||||
Author : amir
|
||||
Version : 0.1
|
||||
Created on : 2024-09-07
|
||||
Description :
|
||||
|
||||
Modify History:
|
||||
1. Date: Author: Modification:
|
||||
*************************************************/
|
||||
#include "mw_video.h"
|
||||
|
||||
/**
|
||||
* 函数:Video_OpenStream
|
||||
* 声明:uint32_t video_openstream(STREAM_CHANNEL Stream, int32_t Channel)
|
||||
* 功能:打开视频流
|
||||
* 入参:STREAM_CHANNEL Stream, 视频流通道
|
||||
VIDEO_FORMAT Format, 视频格式
|
||||
int32_t Channel, 设备通道号
|
||||
* 出参:无
|
||||
* 返回:函数执行指示, uint32_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)
|
||||
{
|
||||
uint32_t ret = hal_video_init(idx);
|
||||
return ret|hal_video_openstream(idx, cb, stream_chn, attr);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 函数:Video_CloseStream
|
||||
* 声明:uint32_t video_close(STREAM_CHANNEL Stream, int32_t Channel)
|
||||
* 功能:关闭视频流
|
||||
* 入参:STREAM_CHANNEL Stream, 视频流通道
|
||||
VIDEO_FORMAT Format, 视频格式
|
||||
int32_t Channel, 设备通道号
|
||||
* 出参:无
|
||||
* 返回:函数执行指示, uint32_t代码值
|
||||
* 0 成功
|
||||
* 非0 失败, 错误码
|
||||
*/
|
||||
uint32_t video_close(hal_video_frame_callback cb)
|
||||
{
|
||||
return hal_video_closestream(cb);
|
||||
}
|
||||
|
||||
|
||||
static uint32_t video_frame_cb(video_frame * frame){
|
||||
hlogi("%s frame:%p", __func__, frame);
|
||||
hv_msleep(2000);
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
||||
void mw_video_test(){
|
||||
video_attr_st attr;
|
||||
video_openstream(0, video_frame_cb, 0, attr);
|
||||
hv_sleep(2);
|
||||
video_close(video_frame_cb);
|
||||
}
|
||||
|
||||
|
||||
|
||||
371
mw/media/mw_video.h
Executable file
371
mw/media/mw_video.h
Executable file
@@ -0,0 +1,371 @@
|
||||
#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__ */
|
||||
Reference in New Issue
Block a user