fusion/hal/hal_video/hal_interface_video.h

391 lines
13 KiB
C
Executable File
Raw Permalink 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 __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__ */