initial commit

This commit is contained in:
2025-08-05 15:53:44 +08:00
commit 09dc02ae52
553 changed files with 137665 additions and 0 deletions

View File

@@ -0,0 +1,390 @@
#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__ */