Files
TAIXIN/sdk/app/algorithm/stream_frame/stream_define.h

460 lines
13 KiB
C
Raw Normal View History

#ifndef __STREAM_DEFINE_H
#define __STREAM_DEFINE_H
// 用于定义各种data的类型枚举
enum
{
DATA_TYPE_ANY,
DATA_TYPE_AUDIO_PDM,
DATA_TYPE_AUDIO_I2S,
DATA_TYPE_AUDIO_ADC,
DATA_TYPE_AUDIO_DAC,
DATA_TYPE_JPEG_VGA,
DATA_TYPE_JPEG_720P,
};
// 定义各种流的名称,R开头代表接收的流,S开头是发送的流,SR代表既要接收又要发送的流
// 名称不能相同
// 没有专门发送和接收,只是流负责管理
#define MANAGE_STREAM_NAME "manage-stream"
// R
#define R_RECORD_AUDIO "record-audio" // 录像的音频
#define R_RECORD_JPEG "record-jpeg" // 录像的音频
#define R_RECORD_H264 "record-h264" // 录像的音频
#define R_PHOTO_JPEG "photo-jpeg" // 录像的音频
#define R_ALK_JPEG "alk-jpeg"
#define R_AUDIO_TEST "audio-test"
#define R_SPEAKER "speaker"
#define R_JPEG_TO_LCD "JPEG-LCD"
#define R_JPEG_DEMO "jpeg_demo"
#define R_USB_AUDIO_MIC "usb-audio-mic"
#define R_RTP_AUDIO "rtp-audio" // 图传的音频
#define R_RTP_AUDIO2 "rtp-audio2" // 图传的音频
#define R_RTP_JPEG "rtp-jpeg" // 图传的视频
#define R_RTP_JPEG_H264 "rtp-jpeg-h264" // 图传的视频
#define R_LVGL_JPEG "lvgl-jpeg" // lvgl接收回放适配
#define R_LVGL_TAKEPHOTO "lvgl_takephoto"
#define R_LOWPOERRESUME_EVENT "LOWPOERRESUME_EVENT"
#define R_AT_SAVE_OSD "AT_OSD"
#define R_AT_SAVE_AUDIO "AT_AUDIO"
#define R_AT_SAVE_PHOTO "AT_PHOTO"
#define R_AT_AVI_AUDIO "AT_AVI_AUDIO" // 录像的音频
#define R_AT_AVI_JPEG "AT_AVI_JPEG" // 录像的音频
#define R_SAVE_STREAM_DATA "stream_data"
#define R_INTERMEDIATE_DATA "R_Intermediate_data"
#define R_AVI_SAVE_VIDEO "AVI_SAVE_VIDEO"
#define R_AVI_SAVE_AUDIO "AVI_SAVE_AUDIO"
#define R_INTERCOM_AUDIO "INTERCOM_SEND"
#define R_PSRAM_JPEG "PSRM-jpeg" // 接收到psram的视频
#define R_USB_SPK "usb_speaker"
#define R_OSD_ENCODE "osd_encode"
#define R_OSD_SHOW "osd_show"
#define R_LCD_OSD "LCD_OSD"
#define R_CSC_VIDEO_P2 "CSC_VIDEO_P2"
#define R_VIDEO_P1 "VIDEO_P1"
#define R_VIDEO_P0 "VIDEO_P0"
#define R_SIM_VIDEO "SIM_VIDEO"
#define R_JPG_TO_RGB "JPG_TO_RGB"
#define R_YUV_TO_JPG "YUV_TO_JPG"
#define R_ZBAR "Zbar"
#define R_PRC "prc"
#define RS_JPG_CONCAT "JPG_CONCAT" // 用于jpg重新组成framebuff
#define RS_JPG_CONCAT1 "JPG_CONCAT1" // 用于jpg1重新组成framebuff
#define R_GEN420_THUMB_JPG "gen420_thumb_jpg"
#define R_GEN420_THUMB_JPG_USB "gen420_thumb_jpg_usb"
#define R_GEN420_THUMB_JPG_OVER_DPI "gen420_thumb_jpg_over_dpi"
#define R_GEN420_JPG_RECODE "gen420_JPG_RECODE"
#define R_SCALE1_JPG_RECODE "scale1_JPG_RECODE"
#define R_DEBUG_STREAM "debug_stream"
#define R_SONIC_PROCESS "r_sonic_process"
#define R_JPG_THUMB "JPG_THUMB"
#define R_JPG_PHOTO_USB "JPG_PHOTO_USB"
#define R_MP4_THUMB "MP4_THUMB"
#define R_AVI_THUMB "AVI_THUMB"
#define R_THUMB "THUMB"
#define R_THUMB_USB "THUMB_USB"
#define R_JPG_SAVE "JPG_SAVE"
#define R_JPG_DECODE_MSG "JPG_DECODE_MSG"
#define R_THUMB_DECODE_MSG "THUMB_DECODE_MSG"
#define R_THUMB_DECODE_MSG_USB "THUMB_DECODE_MSG_USB"
#define R_USBD_VIDEO "usbd_video_msi"
#define R_FILE_MSI "file_msi"
#define R_RTP_H264 "rtp-h264" // 图传的视频
#define R_AVI_ENCODE_MSI "avi_encode_msi"
#define R_CSC_MSI "csc_msi"
// S
#define S_PDM "pdm"
#define S_ADC_AUDIO "adc_audio"
#define S_MP3_AUDIO "mp3_audio"
#define S_AMRNB_AUDIO "amrnb_audio"
#define S_AMRWB_AUDIO "amrwb_audio"
#define S_JPEG "jpeg"
#define S_USB_JPEG "usb-jpeg"
#define S_USB_JPEG_PSRAM "usb-jpeg-psram"
#define S_WEBJPEG "web-jpeg"
#define S_PLAYBACK "playback-jpeg"
#define S_WEBAUDIO "web-audio"
#define S_NET_JPEG "net-jpeg"
#define S_USB_DUAL "usb-dual"
#define S_INTERCOM_AUDIO "INTERCOM_RECV"
#define S_INTERMEDIATE_DATA "S_Intermediate_data"
#define S_USB_MIC "usb_microphone"
#define S_LVGL_OSD "lvgl_osd"
#define S_JPG_DECODE "jpg_decode"
#define S_LVGL_JPG "lvgl_jpg"
#define S_PREVIEW_SCALE3 "preview_scale3"
#define S_SCALE1_STREAM "scale1_stream"
#define S_PREVIEW_ENCODE_QVGA "preview_encode_qvga"
#define S_PREVIEW_ENCODE_QQVGA "preview_encode_qqvga"
#define S_PREVIEW_ENCODE_VPP "preview_encode_vpp"
#define S_SONIC_PROCESS "s_sonic_process"
#define S_NEWPLAYER "newplayer"
#define S_NEWAVI "newavi"
#define S_ZBAR_FROM_SD "zbar_read_sd"
#define S_LVGL_PHOTO "lvgl_photo"
#define S_LVGL_OSD "lvgl_osd"
#define S_SCALE3_OVER_DPI "scale3_over_dpi"
#define S_H264 "h264"
#define S_SCALE3_720P "scale3_720p"
#define S_AVI_PLAYER "avi_player"
#define S_DEBUG_STREAM "s_debug_stream"
// SR
#define SR_OTHER_JPG "other_jpg"
#define SR_OTHER_JPG_USB1 "other_jpg_usb1"
#define SR_OTHER_JPG_USB2 "other_jpg_usb2"
#define SR_OTHER_JPG_USB3 "other_jpg_usb3"
#define SR_USB_RECODE_DEOCDE "usb_recode_decode"
#define SR_YUV_WATERMARK "YUV_watermark"
#define SR_VIDEO_USB "video_usb"
#define SR_ZBAR_JPG "zbar_parse"
#define SR_OVER_DPI_JPG "over_dpi_jpg"
#define SR_OVER_DPI_THUMB_JPG "over_dpi_thumb"
#define SR_GEN420_720P_JPG "GEN420_720P_MJPG"
#define ROUTE_USB "route-usb"
#define AUTO_JPG "auto-jpg"
#define AUTO_JPG1 "auto-jpg1"
#define AUTO_H264 "auto-h264"
// 高16位是大类型(统一宏),低16位是细分类型
#define SET_DATA_TYPE(type1, type2) (type1 << 16 | type2)
#define GET_DATA_TYPE1(type) (type >> 16)
#define GET_DATA_TYPE2(type) (type & 0xffff)
enum data_type1
{
TYPE1_NONE,
JPEG = 1,
SOUND,
H264,
};
// 0保留
enum DATA_TYPE2_RECV_ALL
{
RESEVER_VALUE,
RECV_ALL = RESEVER_VALUE,
};
// 定义mjpeg的类型,最好自己将不同类型归类
enum JPEG_data_type2
{
JPEG_DVP_NODE = RESEVER_VALUE + 1, // 采用特殊的节点方式
JPEG_DVP_FULL, // 采用整张图保存的方式(在空间足够下,采用正常图片形式,正常是带psram才会使用)
JPEG_USB,
JPEG_FILE,
};
// 定义声音的类型
enum SOUND_data_type2
{
SOUND_ALL = RECV_ALL,
SOUND_NONE, // 不接收声音,源头不要产生这个声音就好了
SOUND_MIC,
SOUND_FILE,
SOUND_USB_SPK,
};
// 设置发送的命令,只有type1是在这里定义,type2由各个模块去定义(这个就不再有固定,因为自定义,所以在要自己在各个STREAM_SEND_CMD里面去处理识别)
#define SET_CMD_TYPE(type1, type2) (type1 << 16 | type2)
#define GET_CMD_TYPE1(type) (type >> 16)
#define GET_CMD_TYPE2(type) (type & 0xffff)
enum cmd_type1
{
CMD_NONE,
CMD_AUDIO_DAC,
CMD_JPEG_FILE,
};
struct jpg_node_s
{
uint16_t w, h;
uint32_t jpg_len;
};
struct fb_h264_s
{
uint8_t *pps;
uint8_t *sps;
uint16_t pps_len;
uint16_t sps_len;
uint16_t w;
uint16_t h;
uint8_t count;
uint8_t type; // 0:无效 1:I帧 2:P帧 3:B帧
uint8_t start_len; // 读取实际内容的的起始长度(就是偏移到I帧、P帧、B帧头第一byte)
};
enum YUV_ARG_TYPE
{
YUV_ARG_NONE,
YUV_ARG_NORMAL,
YUV_ARG_DECODE,
YUV_ARG_TAKEPHOTO,
};
// yuv通用参数
struct yuv_arg_s
{
uint32_t type; // 不同类型的yuv代表携带的信息不一致?(暂时没有想到更好方法,暂时通过这个去识别,如果某些模块只要yuv,是可以不识别的)
uint32_t y_size;
uint32_t y_off;
uint32_t uv_off;
uint32_t out_w;
uint32_t out_h;
// 状态位,如果发现要求del,那么接收流就要尽快释放了,不要占用当前节点
uint16_t x, y;
uint8_t *del;
uint32_t dispcnt;
uint32_t magic; // 一个类似随机数?有些msi可以通过识别这个magic来判断是否为自己所需要的数据};
uint8_t video_only; //多屏显示层专用,用于只显示当前层画面
};
// 解码,yuv通用参数放前面,与yuv_arg_s保持一致
struct jpg_decode_arg_s
{
struct yuv_arg_s yuv_arg;
uint32_t rotate;
uint32_t decode_w; // 解码图片的size
uint32_t decode_h;
uint32_t step_w;
uint32_t step_h;
};
struct takephoto_yuv_arg_s
{
struct yuv_arg_s yuv_arg;
char name[64];
};
enum YUV_data_type2
{
YUV_P0 = BIT(0),
YUV_P1 = BIT(1),
// 如果YUV需要编码,那么值可能与JPG的值会有关联,这个要好好想想怎么去处理
YUV_OTHER = BIT(2),
};
struct file_msg_s
{
uint32_t type;
uint8_t path[64];
uint8_t ishid;
};
enum JPG_HARDWARE_data_type2
{
// 暂定双镜头,如果有更多需要区分,可以先添加
JPG_Camera0 = BIT(0),
JPG_Camera1 = BIT(1),
// 下面算是自定义,比如gen420可以从各个地方来源,所以没有固定的名字
// 这里可能部分需要与YUV一致因为编码从GEN420过来的,所以类型会与GEN420的源头会有关联
// 如果有关联,就要考虑映射关系了,暂时先直接用吧
JPG_GEN420_0 = BIT(2),
};
enum RGB_data_type2
{
LVGL_RGB = BIT(0),
};
// MSI的命令暂时定义这里,后续需要整理
enum MSI_SELF_CMDs
{
// osd使用
MSI_OSD_HARDWARE_REAY_CMD,
MSI_OSD_HARDWARE_ENCODE_SET_LEN,
MSI_OSD_HARDWARE_ENCODE_GET_LEN,
MSI_OSD_HARDWARE_ENCODE_BUF,
MSI_OSD_HARDWARE_DEV,
MSI_OSD_HARDWARE_STREAM_RESET,
MSI_OSD_HARDWARE_STREAM_STOP,
MSI_OSD_ENC_MSI_ENABLE,
};
enum MSI_SCALE3_NORMAL_CMD
{
MSI_SCALE3_START,
MSI_SCLAE3_NORMAL_ADD_DPI, //从scale3增加一个获取某个分辨率的yuv数据,暂定内部只有一个buf,
//用于分时复用,考虑连拍的问题,如果采用一次性全部获取,会导致推屏丢帧严重
};
enum MSI_SCALE1_CMD
{
MSI_SCALE1_RESET_DPI,
MSI_SCALE1_STOP,
};
enum MSI_SCALE2_CMD
{
MSI_SCALE2_START,
MSI_SCALE2_SET_FILTER_TYPE,
};
enum MSI_LCD_VIDEO_CMD
{
MSI_VIDEO_ENABLE,
MSI_VIDEO_GET_ENABLE,
};
enum MSI_LCD_OSD_CMD
{
// osd使用
MSI_OSD_ENABLE,
};
enum MSI_JPEG0_CMD
{
MSI_JPEG_STOP,
MSI_JPEG_RESET_FROM,
MSI_JPEG_RESET_DPI,
MSI_PRC_MJPEG_KICK,
MSI_PRC_REGISTER_ISR,
};
enum MSI_JPEG_CONCAT
{
MSI_JPEG_OPEN,
MSI_JPEG_MSG,
MSI_JPEG_START,
MSI_JPEG_FROM,
MSI_JPEG_NODE_COUNT,
MSI_GET_JPEG_MSI,
MSI_SET_GEN420_TYPE,
MSI_SET_SCALE1_TYPE,
MSI_SET_TIME,
MSI_SET_SCALE1_AUTO_FLAG,
};
enum MSI_JPEG_HARDWARE
{
MSI_JPEG_HARDWARE_MSG,
MSI_JPEG_HARDWARE_START,
MSI_JPEG_HARDWARE_STOP,
MSI_JPEG_HARDWARE_FROM,
MSI_JPEG_HARDWARE_SET_GEN420_TYPE,
MSI_JPEG_HARDWARE_SET_SCALE1_TYPE,
MSI_JPEG_SET_TIME,
MSI_JPEG_SET_LEN,
MSI_JPEG_SET_SCALE1_FLAG,
};
enum MSI_AUTO_JPG
{
MSI_AUTO_JPG_SWITCH_ENCODE_SRC,
};
enum MSI_AUTO_H264
{
MSI_AUTO_H264_MODE, //切换模式,0:默认模式 1:缩时录影模式(如果修改帧率,需要先停止再设置时间)
MSI_AUTO_H264_TIMELAPSE_TIME, //设置缩时录影时间
};
enum MSI_JPG_RECODE
{
MSI_JPG_RECODE_MAGIC,
MSI_JPG_RECODE_FORCE_TYPE
};
enum MSI_JPEG_DECODE_MSG
{
MSI_JPEG_DECODE_X_Y,
MSI_JPEG_DECODE_FORCE_TYPE,
MSI_JPEG_DECODE_MAGIC,
};
enum MSI_JPG_THUMB
{
MSI_JPG_THUMB_TAKEPHOTO,
MSI_JPG_THUMB_TAKEPHOTO_SETPATH,
};
enum MSI_DECODE_CMD
{
MSI_DECODE_SET_W_H,
MSI_DECODE_SET_IN_OUT_SIZE,
MSI_DECODE_SET_STEP,
MSI_DECODE_READY,
MSI_DECOE_START,
};
enum MSI_PLAYER_CMD
{
MSI_FORWARD_INDEX,
MSI_REWIND_INDEX,
MSI_PLAYER_MAGIC,
MSI_PLAYER_STATUS,
};
enum MSI_MEDIA_PLAYER_CMD
{
MSI_MEDIA_ADD_FILE_MSI,
MSI_MEDIA_ADD_OUTPUT,
MSI_MEDIA_DEL_OUTPUT,
MSI_MEDIA_PAUSE,
MSI_MEDIA_PLAY,
MSI_MEDIA_PLAY_1FPS,
};
enum MSI_MEDIA_CTRL_CMD
{
MSI_MEDIA_CTRL_PLAY,
MSI_MEDIA_CTRL_PLAY_1FPS,
MSI_MEDIA_CTRL_RECORD_START,
MSI_MEDIA_CTRL_EVENT_START,
MSI_MEDIA_CTRL_EVENT_STOP,
MSI_MEDIA_CTRL_GET_RECTIME,
MSI_MEDIA_CTRL_SET_RECORD_SIZE,
MSI_MEDIA_CTRL_SET_RECORD_SEC,
};
enum MSI_VIDEO_DEMUX_CTRL_CMD
{
MSI_VIDEO_DEMUX_JMP_TIME,
MSI_VIDEO_DEMUX_FORWARD_TIME,
MSI_VIDEO_DEMUX_REWIND_TIME,
MSI_VIDEO_DEMUX_SET_STATUS,
MSI_VIDEO_DEMUX_GET_STATUS,
MSI_VIDEO_DEMUX_START,
MSI_VIDEO_DEMUX_STOP,
MSI_VIDEO_DEMUX_PAUSE,
};
enum MSI_TAKEPHOTO_SCALE3_CMD
{
MSI_TAKEPHOTO_SCALE3_KICK,
MSI_TAKEPHOTO_SCALE3_STOP,
};
enum MSI_CSC_CMD
{
MSI_CSC_MSI_ENABLE,
};
#endif