#ifndef _DATASERVER_DATA_UD_H_ #define _DATASERVER_DATA_UD_H_ #include #ifdef __cplusplus extern "C" { #endif struct userdata_meta_info_t { uint32_t poc_number; /************ flags bit definition *********** bit 0: //used for mpeg2 1, group start 0, not group start bit 1-2: //used for mpeg2 0, extension_and_user_data( 0 ) 1, extension_and_user_data( 1 ) 2, extension_and_user_data( 2 ) bit 3-6: //video format 0, VFORMAT_MPEG12 1, VFORMAT_MPEG4 2, VFORMAT_H264 3, VFORMAT_MJPEG 4, VFORMAT_REAL 5, VFORMAT_JPEG 6, VFORMAT_VC1 7, VFORMAT_AVS 8, VFORMAT_SW 9, VFORMAT_H264MVC 10, VFORMAT_H264_4K2K 11, VFORMAT_HEVC 12, VFORMAT_H264_ENC 13, VFORMAT_JPEG_ENC 14, VFORMAT_VP9 bit 7-9: //frame type 0, Unknown Frame Type 1, I Frame 2, B Frame 3, P Frame 4, D_Type_MPEG2 bit 10: //top_field_first_flag valid 0: top_field_first_flag is not valid 1: top_field_first_flag is valid bit 11: //top_field_first bit val **********************************************/ uint32_t flags; uint32_t vpts; /*video frame pts*/ /****************************************** 0: pts is invalid, please use duration to calculate 1: pts is valid ******************************************/ uint32_t vpts_valid; /*duration for frame*/ uint32_t duration; /* how many records left in queue waiting to be read*/ uint32_t records_in_que; unsigned long long priv_data; uint64_t vpts_64; /*valid only if version == 2*/ uint32_t padding_data[2]; }; /** * @brief Data of Userdata */ typedef struct { uint32_t version; uint32_t instance_id; /** * Reserved */ uint32_t buf_len; /** * @brief The size of bytes of the field "data" below. * The client should read "data_size" bytes start from the data[0]. */ uint32_t data_size; /** * Reserved */ unsigned long long pbuf_addr; struct userdata_meta_info_t meta_info; /** * The data of the userdata */ uint8_t data[0]; } ds_data_userdata_t; #ifdef __cplusplus } #endif #endif