391 lines
13 KiB
C
391 lines
13 KiB
C
|
#ifndef __HAL_INTERFACE_VIDEO_H__
|
|||
|
#define __HAL_INTERFACE_VIDEO_H__
|
|||
|
#include <stdint.h>
|
|||
|
#include <stdio.h>
|
|||
|
#include "hal.h"
|
|||
|
#include "hal_interface_audio.h"
|
|||
|
|
|||
|
|
|||
|
#ifdef __cplusplus
|
|||
|
extern "C"
|
|||
|
{
|
|||
|
#endif /* __cplusplus */
|
|||
|
|
|||
|
////////////////////////////////////////////////////////////
|
|||
|
//
|
|||
|
// 数据类型定义
|
|||
|
//
|
|||
|
////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* 视频回调参数结构定义
|
|||
|
*/
|
|||
|
typedef enum
|
|||
|
{
|
|||
|
VIDEO_FORMAT_H264 = (HAL_AUDIO_MAX + 1),
|
|||
|
VIDEO_FORMAT_H265,
|
|||
|
VIDEO_FORMAT_JPEG,
|
|||
|
VIDEO_FORMAT_MJPEG,
|
|||
|
VIDEO_FORMAT_YV12,
|
|||
|
VIDEO_FORMAT_MAX
|
|||
|
} HAL_VIDEO_FORMAT;
|
|||
|
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
int8_t chn; //视频流通道
|
|||
|
HAL_VIDEO_FORMAT format; //视频格式
|
|||
|
HAL_FRAME_TYPE type; //帧类型
|
|||
|
uint32_t ts; //时间戳
|
|||
|
uint32_t seq; //帧序号
|
|||
|
uint32_t local_time; //本地时间
|
|||
|
uint32_t width; //分辨率宽度
|
|||
|
uint32_t height; //分辨率高度
|
|||
|
uint32_t size; //数据大小
|
|||
|
int8_t data[0]; //视频数据
|
|||
|
} video_frame;
|
|||
|
|
|||
|
#define sizeof_av(_frame) (sizeof(*_frame) + _frame->size)
|
|||
|
|
|||
|
|
|||
|
typedef enum{
|
|||
|
SENSOR_MAIN = 0,
|
|||
|
SENSOR_SEC,
|
|||
|
SENSOR_THR,
|
|||
|
SENSOR_FOUR,
|
|||
|
SENSOR_MAX
|
|||
|
}HAL_SENSOR_IDX;
|
|||
|
|
|||
|
/**
|
|||
|
* hal_video视频流通道常量定义
|
|||
|
*/
|
|||
|
typedef enum
|
|||
|
{
|
|||
|
STREAM_CHANNEL_LIVE = 0, //(0)主码流
|
|||
|
STREAM_CHANNEL_OSS, //(1)子码流
|
|||
|
STREAM_CHANNEL_REC, //(2)第三码流
|
|||
|
STREAM_CHANNEL_AI, //(3)第四码流
|
|||
|
STREAM_CHANNEL_JPEG,
|
|||
|
STREAM_CHANNEL_MAX
|
|||
|
} HAL_STREAM_CHANNEL;
|
|||
|
|
|||
|
/**
|
|||
|
* ISP 工作模式配置,正常模式或夜视模式。
|
|||
|
*/
|
|||
|
typedef enum
|
|||
|
{
|
|||
|
ISP_MODE_DAY = 0, /**< 正常模式 */
|
|||
|
ISP_MODE_NIGHT = 1, /**< 夜视模式 */
|
|||
|
} HAL_ISP_MODE;
|
|||
|
|
|||
|
/**
|
|||
|
* 视频流属性参数数据结构定义
|
|||
|
*/
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
HAL_STREAM_CHANNEL stream_chn; // 流通道
|
|||
|
HAL_VIDEO_FORMAT format; // 流格式: stream format
|
|||
|
uint32_t width; // resolution width, 0为不重复设置
|
|||
|
uint32_t height; // resolution height, 0为不重复设置
|
|||
|
uint32_t bitrate; // 码率: Kbit per second, 0为不重复设置
|
|||
|
uint32_t fps; // 编码帧率
|
|||
|
uint32_t gop;
|
|||
|
} video_attr_st;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
typedef uint32_t(*hal_video_frame_callback)(video_frame * frame);
|
|||
|
typedef uint32_t(*hal_video_status_callback)(uint32_t status);
|
|||
|
|
|||
|
////////////////////////////////////////////////////////////
|
|||
|
//
|
|||
|
// HAL内部接口定义
|
|||
|
//
|
|||
|
////////////////////////////////////////////////////////////
|
|||
|
/**
|
|||
|
* 函数:hal_video_init
|
|||
|
* 声明:int32_t hal_video_init()
|
|||
|
* 功能:视频hal初始化, 构建视频运行所需环境, 在使用视频功能接口前调用
|
|||
|
* 入参:
|
|||
|
* 出参:无
|
|||
|
* 返回:函数执行指示, ERRCODE代码值
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
*/
|
|||
|
uint32_t hal_video_init(HAL_SENSOR_IDX sensor_idx);
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* 函数:hal_video_IsInited
|
|||
|
* 声明:int32_t hal_video_IsInited()
|
|||
|
* 功能:判
|
|||
|
* 入参:
|
|||
|
* 出参:判断视频hal是否已经被初始化
|
|||
|
* 返回:函数执行指示, ERRCODE代码值
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
*/
|
|||
|
uint32_t hal_video_isinited();
|
|||
|
|
|||
|
/**
|
|||
|
* 函数:hal_video_deinit
|
|||
|
* 声明:int32_t hal_video_deinit()
|
|||
|
* 功能:视频HAL去初始化, 释放资源
|
|||
|
* 入参:无
|
|||
|
* 出参:无
|
|||
|
* 返回:函数执行指示, ERRCODE代码值
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
*/
|
|||
|
uint32_t hal_video_deinit();
|
|||
|
|
|||
|
/**
|
|||
|
* 函数:hal_video_OpenStream
|
|||
|
* 声明:int32_t hal_video_OpenStream(HAL_STREAM_CHANNEL stream_chn)
|
|||
|
* 功能:打开视频流, 内部创建pooling线程来获取视频流
|
|||
|
* 入参:HAL_STREAM_CHANNEL stream_chn, 视频流通道
|
|||
|
HAL_VIDEO_FORMAT Format, 视频格式
|
|||
|
uint32_t Channel, 设备通道号
|
|||
|
* 出参:无
|
|||
|
* 返回:函数执行指示, HAL_ERRCODE代码值
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
*/
|
|||
|
uint32_t hal_video_openstream(HAL_SENSOR_IDX idx, hal_video_frame_callback cb, HAL_STREAM_CHANNEL stream_chn, const video_attr_st attr);
|
|||
|
|
|||
|
/**
|
|||
|
* 函数:hal_video_set_attr
|
|||
|
* 声明:int32_t hal_video_Motion_SetParam(HAL_STREAM_CHANNEL stream_chn, const video_attr * pStreamAttr)
|
|||
|
* 功能:设置指定流通道属性参数,无需设置参数项置为-1
|
|||
|
* 入参:HAL_STREAM_CHANNEL stream_chn, 指定的流通道
|
|||
|
* video_attr * pStreamAttr, 属性参数
|
|||
|
* uint32_t Channel, 设备通道号
|
|||
|
* 出参:无
|
|||
|
* 返回:函数执行指示, HAL_ERRCODE代码值
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
* 说明:video_attr参数项不需要设置则置为-1
|
|||
|
*/
|
|||
|
uint32_t hal_video_set_attr(HAL_SENSOR_IDX idx, HAL_STREAM_CHANNEL stream_chn, const video_attr_st * attr);
|
|||
|
|
|||
|
/**
|
|||
|
* 函数:hal_video_CloseStream
|
|||
|
* 声明:int32_t hal_video_CloseStream(HAL_STREAM_CHANNEL stream_chn)
|
|||
|
* 功能:关闭视频流
|
|||
|
* 入参:HAL_STREAM_CHANNEL stream_chn, 视频流通道
|
|||
|
HAL_VIDEO_FORMAT Format, 视频格式
|
|||
|
uint32_t Channel, 设备通道号
|
|||
|
* 出参:无
|
|||
|
* 返回:函数执行指示, HAL_ERRCODE代码值
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
*/
|
|||
|
uint32_t hal_video_closestream(hal_video_frame_callback cb);
|
|||
|
|
|||
|
/**
|
|||
|
* 函数:hal_video_get_jpeg
|
|||
|
* 声明:int32_t hal_video_get_jpeg(int8_t *data, uint32_t *size)
|
|||
|
* 功能:获取编码JPEG数据
|
|||
|
* 入参:data由函数内部申请内存,外部释放, size 内部赋值
|
|||
|
* 出参:无
|
|||
|
* 返回:函数执行指示, HAL_ERRCODE代码值
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
*/
|
|||
|
uint32_t hal_video_get_jpeg(HAL_SENSOR_IDX idx, int8_t **data, uint32_t *size);
|
|||
|
|
|||
|
/**
|
|||
|
* hal_video_getYUVframe
|
|||
|
* 声明:int32_t hal_video_getYUVframe(int8_t *pBuf, uint32_t nBufSize)
|
|||
|
* 功能:获取YUV数据
|
|||
|
* 入参:int32_t Channel, 设备通道号
|
|||
|
* uint32_t nBufSize BufSize
|
|||
|
* 出参:int8_t *pBuf 返回YUVBuf
|
|||
|
* 返回:函数执行指示, HAL_ERRCODE代码值
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
*/
|
|||
|
uint32_t hal_video_getYUVframe(HAL_SENSOR_IDX idx, int8_t *pBuf, uint32_t nBufSize);
|
|||
|
|
|||
|
/**
|
|||
|
* 函数:hal_video_set_nightmode
|
|||
|
* 声明:HAL_ERRCODE hal_video_set_nightmodee(HAL_ISP_MODE mode)
|
|||
|
* 功能:设置ISP工作模式,白天模式或夜视模式,默认为白天模式
|
|||
|
* 入参:HAL_ISP_MODE mode, 运行模式: 0, ISP_RUNNING_MODE_DAY, 白天模式
|
|||
|
1, ISP_RUNNING_MODE_NIGHT,夜视模式
|
|||
|
uint32_t Channel, 设备通道号
|
|||
|
* 出参:无
|
|||
|
* 返回:函数执行指示, HAL_ERRCODE代码值
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
*/
|
|||
|
uint32_t hal_video_set_nightmode(HAL_ISP_MODE mode);
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* 函数:hal_video_set_isp_flip
|
|||
|
* 声明:int32_t hal_video_set_isp_flip(uint32_t flip)
|
|||
|
* 功能:设置ISP图像上下反转效果功能是否使能
|
|||
|
* 入参:int32_t sensor_idx, sensor index
|
|||
|
* uint32_t flip, 反转使能
|
|||
|
|
|||
|
* 出参:无
|
|||
|
* 返回:函数执行指示, HAL_ERRCODE代码值
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
*/
|
|||
|
uint32_t hal_video_set_isp_flip(HAL_SENSOR_IDX idx, uint32_t flip);
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* 函数:hal_video_get_isp_flip
|
|||
|
* 声明:int32_t hal_video_get_isp_flip(uint32_t *flip)
|
|||
|
* 功能:设置ISP图像上下反转效果功能是否使能
|
|||
|
* 入参:无
|
|||
|
* uint32_t sensor_idx, sensor index
|
|||
|
* 出参:uint32_t *flip, 反转使能
|
|||
|
* 返回:函数执行指示, HAL_ERRCODE代码值
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
*/
|
|||
|
uint32_t hal_video_get_isp_flip(HAL_SENSOR_IDX idx, uint32_t * flip);
|
|||
|
|
|||
|
/**
|
|||
|
* 函数:hal_video_get_attr
|
|||
|
* 声明:int32_t hal_video_Motion_GetParam(HAL_STREAM_CHANNEL stream_chn, video_attr * pStreamAttr)
|
|||
|
* 功能:设置指定流通道属性参数,无需设置参数项置为-1
|
|||
|
* 入参:HAL_STREAM_CHANNEL stream_chn, 指定的流通道
|
|||
|
* uint32_t Channel, 设备通道号
|
|||
|
* 出参:video_attr * pStreamAttr, 属性参数
|
|||
|
* 返回:函数执行指示, HAL_ERRCODE代码值
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
* 说明:此函数只适用于H264和H265编码channel
|
|||
|
*/
|
|||
|
uint32_t hal_video_get_attr(HAL_STREAM_CHANNEL stream_chn, video_attr_st * attr);
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* 函数:hal_video_set_bitrate
|
|||
|
* 声明:int32_t hal_video_set_bitrate(HAL_STREAM_CHANNEL stream_chn, uint32_t BitRate)
|
|||
|
* 功能:设置指定编码通道的码率(Kbit/s)
|
|||
|
* 入参:HAL_STREAM_CHANNEL stream_chn, 指定的流通道
|
|||
|
* uint32_t BitRate, 设置的码率
|
|||
|
* uint32_t Channel, 设备通道号
|
|||
|
* 出参:无
|
|||
|
* 返回:函数执行指示, HAL_ERRCODE代码值
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
* 说明:此函数只适用于H264和H265编码channel
|
|||
|
*/
|
|||
|
uint32_t hal_video_set_bitrate(HAL_STREAM_CHANNEL stream_chn, uint32_t BitRate);
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* 函数:hal_video_get_bitrate
|
|||
|
* 声明:int32_t hal_video_get_bitrate(HAL_STREAM_CHANNEL stream_chn, uint32_t * pBitRate)
|
|||
|
* 功能:获取指定码流的码率(Kbit/s)
|
|||
|
* 入参:HAL_STREAM_CHANNEL stream_chn, 指定的流通道
|
|||
|
* uint32_t Channel, 设备通道号
|
|||
|
* 出参:uint32_t * pBitRate, 输出码率
|
|||
|
* 返回:函数执行指示, HAL_ERRCODE代码值
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
* 说明:此函数只适用于H264和H265编码channel
|
|||
|
*/
|
|||
|
uint32_t hal_video_get_bitrate(HAL_STREAM_CHANNEL stream_chn, uint32_t * pBitRate);
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* 函数:hal_video_set_GOP
|
|||
|
* 声明:int32_t hal_video_set_GOP(HAL_STREAM_CHANNEL stream_chn, uint32_t gop)
|
|||
|
* 功能:设置指定码流的GOP(I帧间隔: interval between two key frame = n*fps)
|
|||
|
* 入参:HAL_STREAM_CHANNEL stream_chn, 指定的流通道
|
|||
|
* uint32_t gop, 设置的GOP
|
|||
|
* uint32_t Channel, 设备通道号
|
|||
|
* 出参:无
|
|||
|
* 返回:函数执行指示, HAL_ERRCODE代码值
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
* 说明:此函数只适用于H264和H265编码channel
|
|||
|
*/
|
|||
|
uint32_t hal_video_set_GOP(HAL_STREAM_CHANNEL stream_chn, uint32_t gop);
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* 函数:hal_video_get_GOP
|
|||
|
* 声明:int32_t hal_video_get_GOP(HAL_STREAM_CHANNEL stream_chn, uint32_t * pgop)
|
|||
|
* 功能:获取指定码流GOP值(I帧间隔: interval between two key frame = n*fps)
|
|||
|
* 入参:HAL_STREAM_CHANNEL stream_chn, 指定的流通道
|
|||
|
* uint32_t Channel, 设备通道号
|
|||
|
* 出参:无
|
|||
|
* 返回:函数执行指示, HAL_ERRCODE代码值
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
* 说明:此函数只适用于H264和H265编码channel
|
|||
|
*/
|
|||
|
uint32_t hal_video_get_GOP(HAL_STREAM_CHANNEL stream_chn, uint32_t * pgop);
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* 函数:hal_video_request_IDR
|
|||
|
* 声明:int32_t hal_video_request_IDR(HAL_STREAM_CHANNEL stream_chn)
|
|||
|
* 功能:强制出I帧
|
|||
|
* 入参:HAL_STREAM_CHANNEL stream_chn, 指定的流通道
|
|||
|
* uint32_t Channel, 设备通道号
|
|||
|
* 出参:无
|
|||
|
* 返回:函数执行指示, HAL_ERRCODE代码值
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
* 说明:此函数只适用于H264和H265编码channel
|
|||
|
*/
|
|||
|
uint32_t hal_video_request_IDR(HAL_STREAM_CHANNEL stream_chn);
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* 函数:hal_video_get_sensor_name
|
|||
|
* 声明:int32_t hal_video_get_sensor_name(int8_t *sensor_name)
|
|||
|
* 功能:获取sensor名
|
|||
|
* 入参:int32_t sensor_idx sensor的序号
|
|||
|
* 出参:int8_t *sensor_name, 最长31个字符
|
|||
|
* 返回:函数执行指示, HAL_ERRCODE代码值
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
* 说明:此函数只适用于H264和H265编码channel
|
|||
|
*/
|
|||
|
uint32_t hal_video_get_sensor_name(uint32_t sensor_idx, int8_t *sensor_name);
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* 函数: hal_video_get_frame
|
|||
|
* 声明:int32_t hal_video_get_frame(video_frame *frame)
|
|||
|
* 功能:取一帧视频或图像
|
|||
|
* 入参:无
|
|||
|
* 出参:*frame
|
|||
|
* 返回:函数执行指示
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
*/
|
|||
|
uint32_t hal_video_get_frame(HAL_STREAM_CHANNEL stream_chn, video_frame *frame, uint32_t wait_ms);
|
|||
|
|
|||
|
/**
|
|||
|
* hal_video_set_isp_mode
|
|||
|
* 声明:int32_t hal_video_set_isp_mode(uint32_t sensor_idx, HAL_ISP_MODE mode)
|
|||
|
* 功能:设置ISP工作模式,白天模式或夜视模式,默认为白天模式
|
|||
|
* 入参:int32_t sensor_idx 设定的sensor对象
|
|||
|
* HAL_ISP_MODE mode, 运 行模式: 0, ISP_MODE_DAY, 白天模式(全彩模式)
|
|||
|
* 1, ISP_MODE_NIGHT,夜视模式(黑白模式)
|
|||
|
* 出参:无
|
|||
|
* 返回:函数执行指示, PAL_ERRCODE代码值
|
|||
|
* 0 成功
|
|||
|
* 非0 失败, 错误码
|
|||
|
*/
|
|||
|
uint32_t hal_video_set_isp_mode(uint32_t sensor_idx, HAL_ISP_MODE mode);
|
|||
|
|
|||
|
#ifdef __cplusplus
|
|||
|
}
|
|||
|
#endif /* __cplusplus */
|
|||
|
|
|||
|
#endif /* __HAL_INTERFACE_AUDIO_H__ */
|