fusion/hal/hal_video/hal_interface_video.h

391 lines
13 KiB
C
Raw Normal View History

2025-08-05 07:53:44 +00:00
#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__ */