www.pudn.com > modifyencini.rar > CODEC_API.h


#ifndef _CODEC_API_H_
#define _CODEC_API_H_

#include 

#define CODEC_API(retType) retType
#define DEV_IDX long
#define Param_IN 
#define Param_OUT *
#define Ptr_STR char*

//宏定义
#define MAX_IP_LEN 20
#define MAX_UCAST_LIST 5
#define MAX_FUCN_NAME_LEN 30
#define MAX_FILE_NAME_LEN 30
#define MAX_DEV_NUM 20
#define MAX_COM_SEND_DATA_BUF 255
#define MAX_RECV_DATA_BUF 255

//设备类型: ENCODER/DECODER
typedef enum {
     DEV_UNKNOWN    =0,    //未知设备类型
     DEV_CODEC      =1,    //编解码器
     DEV_ENCODER    =2,    //编码器
     DEV_DECODER    =3     //解码器
} DEVICE_TYPE;

//媒体类型: VES/PS/TS
typedef enum {
    MEDIA_UNKNOWN = 0,
    MEDIA_VES     = 1,
    MEDIA_PS      = 2,
    MEDIA_TS      = 3
} _MEDIA_TYPE_;

//传输协议: UDP/RTP
typedef enum {
    PROTO_UNKNOWN = 0,
    PROTO_UDP     = 1,
    PROTO_RTP     = 2
} TRANS_PROTO;

//网络地址IP:Port
typedef struct {
    char sIP[MAX_IP_LEN];
    int  nPort;
} Net_Addr;

//视频制式: PAL/NTSC
//warning: encoder 1-PAL,2-NTSC, decoder 1-NTSC,2-PAL
typedef enum {
    VIDFMT_UNKNOWN = 0,
    VIDFMT_PAL  = 1,
    VIDFMT_NTSC = 2
} VIDEO_FMT;

//视频MPEG格式: MPEG1/2/4
typedef enum {
    VIDMPG_UNKNOWN =0,
    VIDMPG_1 = 1,
    VIDMPG_2 = 2,
    VIDMPG_4 = 4
} VIDEO_MPEG;

//设备参数
typedef struct {
    //identifier
    DEVICE_TYPE     DevType;    //ENCODER/DECODER
    int             DevID;      //device identifier
    _MEDIA_TYPE_      MediaType;  //VES/PS/TS
    
    //network param
    TRANS_PROTO     TransProto; //UDP/RTP
    char            local_network_ipaddr[MAX_IP_LEN]; //e.g. 192.168.0.2
    char            local_network_mask[MAX_IP_LEN];   //e.g. 255.255.255.0
    char            local_network_gateway[MAX_IP_LEN];//e.g. 192.168.0.1
    int             my_port;
    Net_Addr        server_address;             //e.g. 192.168.0.3:5050
    char            control_ipaddr[MAX_IP_LEN]; //e.g. 192.168.1.21
    bool            doMulticast;                //TRUE or FALSE
    Net_Addr        multicast_address;          //e.g. 2224.0.0.1:8100
    bool            doNetSend;
    int             iSendNum;
    Net_Addr        send_target_list[MAX_UCAST_LIST];

    bool            doFileWrite;   //write data to file flag,TURE or FALSE

    //serial port param
    long            com1_baud_rate;
    char            com1_parity_type;
    long            com1_data_bit;
    long            com1_stop_bit;
    long            com2_baud_rate;
    char            com2_parity_type;
    long            com2_data_bit;
    long            com2_stop_bit;
    long            local_alarm_com;
    Net_Addr        com_remote_address;

    //just for encoder only
    //video param
    long            HResolu;
    long            VResolu;
    long            VidBitRate;
    long            VBVSize;
    long            VidFmt;
    long            VidMpeg;
    //audio param
    long            AudSamRate;
    long            AudBitRate;
    long            AudChnMode;

    //just for decoder only
    //net receive param
    bool            doNetRecv;
    Net_Addr        recv_addr;
    bool            doMulticastRecv;
    Net_Addr        recv_multicast_addr;
    //file read, read data from file
    bool            doFileRead;
    char            file_read_name[MAX_FILE_NAME_LEN];
    //decode param
    long            video_format;
    long            mpeg_coding_standard;
} DevParamStruct;

//参数类型
typedef enum {
    PARAM_UNKNOWN   =0,     //未知参数类型
 
    //基本参数
    PARAM_DEVTYPE   =1,     //设备类型,DEVICE_TYPE,DEV_ENCODER-编码器 DEV_DECODER-解码器
    PARAM_DEVID	    =2,     //设备ID,long
    PARAM_STREAM    =3,     //流类型,_MEDIA_TYPE_,PS/TS
    
    //网络参数
    PARAM_TRANSPROTO=10,    //收发协议,TRANS_PTOTO 0-UDP 1-RTP
    
    PARAM_IPADDR    =11,    //IP地址,bstr
    PARAM_MASK      =12,    //子网掩码,bstr
    PARAM_GATEWAY   =13,    //默认网关,bstr
    PARAM_MYPORT    =14,    //设备端口,int
    PARAM_SERVADDR  =15,    //服务器IP:Port, Net_Addr
    PARAM_CTRLADDR  =16,    //控制机IP,bstr

    //发送参数
    PARAM_DOMCAS    =17,    //组播标志,bool
    PARAM_MCASTADDR =18,    //组播IP:Port,Net_Addr
    
    PARAM_DOUCAST   =19,    //单播标志,bool
    PARAM_ULISTADDR =20,    //单播列表IP:Port,Net_Addr
    
    PARAM_FILEW	    =21,    //本地录像标志,bool

    //serial port param
    //com1
    PARAM_COM1BAUD    =22, //baud rate, long
    PARAM_COM1PARITY  =23, //parity check type, char N, O, E, S
    PARAM_COM1DATABIT =24, //data bit len, long 5, 6, 7, 8
    PARAM_COM1STOPBIT =25, //stop bit len, long 1, 2
    //com2
    PARAM_COM2BAUD    =26,
    PARAM_COM2PARITY  =27,
    PARAM_COM2DATABIT =28,
    PARAM_COM2STOPBIT =29,

    PARAM_ALARMCOM    =30, //local alarm com, long 0-noe, 1-com1, 2-com2
    PARAM_REMOTEADDR  =31, //remote IP:Port, Net_Addr

    //just for encoder only
    //视频参数
    PARAM_HRESOLU   =40,    //水平分辨率,long
    PARAM_VRESOLU   =41,    //垂直分辩率,long
    PARAM_VBITRATE  =42,    //视频比特率,long
    PARAM_VBV       =43,    //VBV缓冲大小,long
    PARAM_VFORMAT   =44,    //视频制式,VIDEO_FMT,1-PAL, 2-NTSC
    PARAM_VMPEG	    =45,    //压缩标准,VIDEO_MPG,MPEG1/MPEG2/MPEG4
    //音频参数
    PARAM_ASAMRATE  =46,    //音频采样率,long
    PARAM_ABITRATE  =47,    //音频比特率,long
    PARAM_CHNMODE   =48,    //声道模式,long

    //just for decoder only
    //net recv param
    PARAM_DOURECV   =50,    //unicast recv flag,bool
    PARAM_URADDR    =51,    //unicast recv addr,Net_Addr
    PARAM_DOMRECV   =52,    //multicast recv flag,bool
    PARAM_MRADDR    =53,    //multicast recv addr,Net_Addr
    //file read
    PARAM_DOFILERD  =54,    //file read flag,bool
    PARAM_FILERDNAME=55,    //file name,bstr
    //decode param
    PARAM_VIDEOFMT  =56,    //video_format,1-NTSC, 2-PAL
    PARAM_MPEGCDSTD =57     //mpeg_coding_standard, MPEG1/2/4
} PARAM_TYPE;

//错误信息常量定义
typedef enum {
    RESULT_SUCCESS	= 0,	//执行成功
    RESULT_UNKNOWN	= 2000,	//未知错误
    RESULT_OFFLINE	= 2001,	//设备离线
    RESULT_NOTEXIST	= 2002,	//设备不存在
    RESULT_PARAMERR	= 2003,	//传入参数不正确
    RESULT_NETERR	= 2004,	//网络错误
    RESULT_PKTERR	= 2005,	//返回包格式错误
    RESULT_SENDERR	= 2006,	//发送数据错误
    RESULT_NOECHO	= 2007	//设备无返回
} RESULT_TYPE;

//状态查询,无须发送查询指令
typedef enum {
    STATUS_NULL	    =0,
    STATUS_PROG     =1, //主程序状态
    STATUS_NSEND    =2, //网络发送状态
    STATUS_FILEW    =3, //文件写状态
    STATUS_COM1     =4, //COM1状态
    STATUS_COM2     =5, //COM2状态
    //just for encoder
    STATUS_ENC	    =6, //编码状态
    //just for decoder
    STATUS_DEC      =7, //decode status
    STATUS_NRECV    =8, //net recv status
    STATUS_FILER    =9  //file read status
} STATUS_TYPE;

//状态信息参数
typedef struct {
	STATUS_TYPE StatusType;  //status type
	bool        bRun;        //run flag
} StatusInfoStruct;

//设备基本信息
typedef struct {
    DEVICE_TYPE    DevType;
    long           DevID;
    char           DevIP[MAX_IP_LEN];
    int            DevPort;  //API server port
    bool           bDevON;   //if connect success, bDevON=true
} DevInfoStruct;

//设备身份识别信息
typedef struct {
    DEVICE_TYPE	   DevType;
    long           DevID;
    char           DevIP[MAX_IP_LEN];
    int            DevPort; //API server port
} DevSignStruct;

//网络发送串口数据结构体
typedef struct {
    int    com_idx;  //1-com1, 2-com2
    char   DataBuf[MAX_COM_SEND_DATA_BUF]; //send data buffer
    int    DataLen;
} SendComInfoStruct;

//传送包格式
typedef struct {
    char sFuncName[MAX_FUCN_NAME_LEN]; //函数名
    union {
        StatusInfoStruct StatusInfo;   //状态信息
        DevParamStruct DevParam;       //参数信息
        SendComInfoStruct SdComInfo;   //send serial data
    };
    RESULT_TYPE Result;                //返回结果
} TransPktStruct;

//设备动态库
typedef struct {
	DevInfoStruct  DevInfo;   //基本信息
	DevParamStruct DevParam;  //参数信息
} DeviceDynamicLib;

#endif