#ifndef _P2PC_INTERFACE_H_ #define _P2PC_INTERFACE_H_ #ifdef WIN32 #define PACKED #else #define PACKED __attribute__((packed)) #endif #define MAX_P2PCH_NS 4 //最大通道数,目前是4 请不要做更改 #define UPDATE_FLAG_SUPPORT #define KTRUE 1 #define KFALSE 0 #define DWORD unsigned int //32bits #define WORD unsigned short //16bits #define BYTE unsigned char //8bits #define KBOOL unsigned int //32bits #define UINT64 unsigned long long //64bits enum{ DEV_TYPE_NULL, DEV_TYPE_SERVER, DEV_TYPE_NPC, DEV_TYPE_MOBILE, DEV_TYPE_PC, DEV_TYPE_DOORBELL, DEV_TYPE_ALERTOR, DEV_TYPE_IPC }; ///dwServerType enum{ SERVER_TYPE_NULL, SERVER_TYPE_P2P, SERVER_TYPE_LIST, SERVER_TYPE_EMAIL, SERVER_TYPE_IOS_PUSH, SERVER_TYPE_INDEX = 9, SERVER_TYPE_DEV_UPG = 10, SERVER_TYPE_LOG = 11, }; #define CONN_TYPE_VIDEO_CALL 0x00 #define CONN_TYPE_MONITOR 0x01 #define CONN_TYPE_FILE_TRANS 0x02 #define VIDEO_ABILITY_320x240 (1<<0) #define VIDEO_ABILITY_640x480 (1<<1) #define VIDEO_ABILITY_1280x720 (1<<2) #define VIDEO_ABILITY_1920x1080 (1<<3) //sP2PInitPrm.vRejectSignal() 中参数dwErrorOption 的枚举定义,表示p2p连接失败的原因 enum { CALL_ERROR_NONE=0, //无原因 CALL_ERROR_DESID_NOT_ENABLE, // 对方的ID 被禁用 CALL_ERROR_DESID_OVERDATE, // 对方的ID 过期了 CALL_ERROR_DESID_NOT_ACTIVE, // 对方的ID 尚未激活 CALL_ERROR_DESID_OFFLINE, // 对方离线 CALL_ERROR_DESID_BUSY, // 对方忙线中 CALL_ERROR_DESID_POWERDOWN, //对方已关机 CALL_ERROR_NO_HELPER, // 没有找到协助人 CALL_ERROR_HANGUP, // 对方已经挂断 CALL_ERROR_TIMEOUT, // 连接超时 CALL_ERROR_INTER_ERROR, // 内部错误 CALL_ERROR_RING_TIMEOUT, // 无人接听 CALL_ERROR_PW_WRONG, //密码错误( 在远程监控时用到密码,在视频通话是不需要) CALL_ERROR_CONN_FAIL, CALL_ERROR_NOT_SUPPORT, }; enum { MESG_TYPE_GET_SETTING, // 0 MESG_TYPE_SET_SETTING, // 1 MESG_TYPE_RET_SETTING, MESG_TYPE_GET_REC_LIST, MESG_TYPE_RET_REC_LIST, MESG_TYPE_MESSAGE, MESG_TYPE_DEBUG_LOG_ON, MESG_TYPE_DEBUG_LOG_OFF, MESG_TYPE_DEBUG_LOG_SUBMIT, MESG_TYPE_ALARM_CALL, MESG_TYPE_GET_DATETIME, MESG_TYPE_SET_DATETIME, // 11 MESG_TYPE_RET_DATETIME, // 12 MESG_TYPE_GET_EMIAL, // 13 MESG_TYPE_SET_EMIAL, // 14 MESG_TYPE_RET_EMIAL, // 15 MESG_TYPE_GET_WIFILIST, // 16 MESG_TYPE_SET_WIFILIST, // 17 MESG_TYPE_RET_WIFILIST, // 18 MESG_TYPE_GET_ALARMCODE_STATUS, // 19 MESG_TYPE_SET_ALARMCODE_STATUS, // 20 MESG_TYPE_RET_ALARMCODE_STATUS, // 21 MESG_TYPE_GET_APPID, // 22 MESG_TYPE_SET_APPID, // 23 MESG_TYPE_RET_APPID, // 24 MESG_TYPE_SET_INIT_PASSWD, // 25 MESG_TYPE_RET_INIT_PASSWD, // 26 MESG_TYPE_USER_CMD, // 27 MESG_TYPE_USER_CMD_RET, // 28 MESG_TYPE_UPG_CHEK_VERSION, // 29 MESG_TYPE_UPG_CHEK_VERSION_RET, // 30 MESG_TYPE_UPG_FILE_TO_DOWNLOAD, // 31 MESG_TYPE_UPG_FILE_TO_DOWNLOAD_RET, // 32 MESG_TYPE_UPG_FILE_CANCEL_DOWNLOAD, // 33 MESG_TYPE_UPG_FILE_CANCEL_DOWNLOAD_RET, //34 MESG_TYPE_UPG_CHEK_CUR_VERSION, // 35 MESG_TYPE_UPG_CHEK_CUR_VERSION_RET, //36 MESG_TYPE_UPG_CREATE_WHOLEFLASH_TO_FILE, // 37 MESG_TYPE_UPG_CREATE_WHOLEFLASH_TO_FILE_RET, // 38 MESG_TYPE_GET_SYS_VERSION, // 39 MESG_TYPE_GET_SYS_VERSION_RET, // 40 LAN_TRANS_SET_INIT_PASSWD = 48, // 48 LAN_TRANS_RET_INIT_PASSWD, // 49 MESG_TYPE_DRBL_ACK_GET = 58, MESG_TYPE_DRBL_ACK_RET, // 59 MESG_TYPE_DRBLCALL, //60 MESG_TYPE_DRBL_HOSTSTA_RET, // 61 MESG_TYPE_DEV_CHKCODE_SEND, // 62 MESG_TYPE_DRBL_CHKCODE_SEND, // 63 MESG_TYPE_DEV_UNLOCK_DRBL, // 64 MESG_TYPE_UNLOCK_DRBL_RET, // 65 MESG_TYPE_GET_SDCARD_INFO = 80, MESG_TYPE_SET_FORMAT_SDCARD = 81, MESG_TYPE_GET_DEFENCE_SWITCH_STATE, //82 获取防区开关 MESG_TYPE_SET_DEFENCE_SWITCH_STATE, //83 设置防区开关 MESG_TYPE_RET_DEFENCE_SWITCH_STATE, //84 设置返回值 MESG_TYPE_SET_MOTOR_PRESET_POS = 87, //预置位 MESG_TYPE_RET_MOTOR_PRESET_POS = 88, MESG_TYPE_GET_ALARM_TYPE_MOTOR_PRESET_POS,//89 MESG_TYPE_SET_ALARM_TYPE_MOTOR_PRESET_POS,//90 MESG_TYPE_RET_ALARM_TYPE_MOTOR_PRESET_POS,//91 预置位 MESG_TYPE_SET_GPIO_CTL = 95, MESG_TYPE_RET_GPIO_CTL, //值:96 MESG_TYPE_WORKMODE_SETTING =149, MESG_TYPE_QRCODE_LEARN_CODE =216, MESG_TYPE_CUSTOM_CMD_NO_VERRIFY_SET = 127, MESG_TYPE_CUSTOM_CMD_NO_VERRIFY_RET, //128 MESG_TYPE_GET_NVR_INFO = 131, MESG_TYPE_RET_NVR_INFO, MESG_TYPE_GET_DEVICE_LANGUAGE = 211, MESG_TYPE_SET_DEVICE_LANGUAGE, //212 MESG_TYPE_RET_DEVICE_LANGUAGE, //213 MESG_TYPE_GET_SCHEDULE_DEFENCE_INFO, //214 获取布撤防 MESG_TYPE_SET_SCHEDULE_DEFENCE_INFO, //215 MESG_TYPE_MAIN_NEED_PASSPWD = 223, //223 获取和修改433传感器名字 预置位转动好后截图 MESG_TYPE_SETORGET_LENS_FOCUS_PARAMS = 224, // 自动变焦 获取和设置变焦镜头马达当前位置的命令是一样滴 消息头命令 MESG_TYPE_GET_FISHEYE = 228, //获取当前全景相机配置信息 MESG_TYPE_SET_FISHEYE,//229 设置当前全景相机配置信息 MESG_TYPE_RET_FISHEYE,//230 返回当前全景相机配置信息 MESG_TYPE_RET_RECORD_STATE = 237, //设备当前的录像状态、有没有TF卡 MESG_TYPE_SET_VIDEO_CLEAR_LEVEL = 239, /**< 设置录像质量 */ MESG_TYPE_GET_VIDEO_CLEAR_LEVEL = 240, /**< 获取录像质量 */ MESG_TYPE_RET_VIDEO_CLEAR_LEVEL = 241, /**< 录像质量返回 */ MESG_TYPE_DEVICE_NOT_SUPPORT_RET = 0XFF, }; enum { OS_ARM_LINUX, OS_ANDROID, OS_IOS, OS_MAC, OS_WINDOWS, OS_X86_LINUX, OS_NONE = 0xFF, }; enum { PUSH_MESG_SYSTEM, PUSH_MESG_VERIFY, PUSH_MESG_FRIEND, PUSH_MESG_ALARM, PUSH_MESG_CALL, PUSH_MESG_DOORBELL }; enum { ID_STATUS_OFFLINE, ID_STATUS_ONLINE, ID_STATUS_INACTIVE, }; #define MAX_FRIENDS_NS 256 typedef struct sFriendsType { DWORD dwFriendsCount; DWORD dwFriends[MAX_FRIENDS_NS]; BYTE bStatus[MAX_FRIENDS_NS]; BYTE bType[MAX_FRIENDS_NS]; }PACKED sFriendsType; typedef struct sCallingPrmType { KBOOL fgBCalled; DWORD dwHisID; DWORD dwHisDevType; KBOOL fgInSameDomain; KBOOL fgSuperCall; DWORD dwRemoteChNs; DWORD dwCallPrm[4]; }sCallingPrmType; #if 1 //def SUPPORT_GET_REMOTE_FILE enum { GET_FILE_CMD_ERR_NONE, GET_FILE_CMD_ERR_PW_INCRRECT, GET_FILE_CMD_ERR_IP_FREEZE, GET_FILE_CMD_ERR_NO_SUCH_FILE, GET_FILE_CMD_ERR_NOT_ALLOWED, GET_FILE_CMD_ERR_READ_FILE_FAIL, GET_FILE_CMD_ERR_BUZY, GET_FILE_CMD_ERR_MEMORY_LIMITED, GET_FILE_CMD_ERR_TIMEOUT, }; #endif //网络库的初始化参数 typedef struct sP2PInitPrm { DWORD dw3CID; // 本机ID ; 调试时可以使用: dw3CID=2000, dwR1=0x5a8d47b0, dwR2=0x4fd73aa3 DWORD dwCode1; // 检验码1 DWORD dwCode2; // 检验码2 char * pHostName; // 服务器表,请传入: "|www.cloudlinks.cn|www.cloud-links.net|www.gwelltimes.com" DWORD dwChNs; // 本机通道数目,请设为1 DWORD dwChBufSize[MAX_P2PCH_NS]; // 每个通道的缓存大小,请统一设置为(1024*512) DWORD dwPassword; //密码,请设为十进制数: 123456 DWORD dwCustomerID[10]; // 被呼叫 时,当有人拨打进来,通过此函数 告知上层。 // 主叫时,拨打已经通了。对方正在响铃,也回调此函数。 // fgBCalled : TRUE 表示 被呼叫, FALSE 表示主叫。 // dwHisID : 对方ID 号。 // fgInSameDomain :对方跟本机在 同一个局域网里。 // fgMonitorOnly : 暂时没有用。 // dwRemoteChNs : 暂时没有用。 void (* vCallingSignal )(sCallingPrmType *sCallPrm); //呼叫被拒绝或者连接断开的回调函数 // fgBCalled : TRUE 表示 被呼叫, FALSE 表示主叫。 // dwErrorOption: 断开的原因,请参见前述枚举。 void (* vRejectSignal )(BOOL fgBCalled, DWORD dwErrorOption); //接听回调函数, 当对方接通了或本机接听了来电,通过此函数告知上层。 // fgBCalled : TRUE 表示 被呼叫, FALSE 表示主叫。 void (* vAcceptSignal )(BOOL fgBCalled, DWORD *pdwPrm); // 连接OK 回调函数,当主叫时对方已经接听并且连接通道一切就绪,告诉上层开始传输音视频。 void (* vP2PConnReady)(void); void (* vRecvRemoteMessage)(DWORD dwSrcID, KBOOL fgHasCheckdPassword, void *pMesg, DWORD dwMesgSize); void (* vSendMessageAck)(DWORD dwDesID, DWORD dwMesgID, DWORD dwError); void (* vFriendsStatusUpdate)(sFriendsType * pFriends); #ifdef UPDATE_FLAG_SUPPORT void (* vFlagUpdate)(DWORD *pdwFlags ); #endif //【远程获取文件结果回调】 //参数-dwDesID: 目标设备ID //参数-pFilename: 文件名 //参数-dwErrorCode: 错误代码(详情见上枚举) void (* vGetFileCmdACK)(DWORD dwDesID, char *pFilename, DWORD dwErrorCode); }sP2PInitPrm; #ifdef UPDATE_FLAG_SUPPORT void vP2PSetUpdateFlag(DWORD *pdwFlag); #endif enum { MESG_ERROR_NONE, MESG_ERROR_PASSWORD_FAIL , MESG_ERROR_TIMEOUT, MESG_IOS_PUSH_ERROR, MESG_ERROR_NO_RIGHT, }; KBOOL fgP2PInit(sP2PInitPrm * pPrm); // 网络库初始化 void vP2PExit(void); // 网络库退出并释放资源 KBOOL fgP2PLinkOK(void); // 查看网络库状态.(类似与QQ 是否在线) //呼叫一个ID // dwId: 对方ID 号。 // fgSuperCall: KTRUE:监控, KFALSE : 视频电话。 // dwPassword : 如果视频监控,此为对方的监控密码。 // 16-code 48 手机号 KBOOL fgP2PCall(UINT64 u64Id, KBOOL fgSuperCall, DWORD dwPassword, DWORD *pdwPrm, char *strPushMesg); void vP2PHungup(KBOOL fgWaitFinish); // 挂断连接 void vP2PAccept(DWORD *pdwPrm); // 接受呼叫 KBOOL fgP2PSendRemoteMessage(DWORD dwDesID, DWORD dwRemotePW, DWORD dwMesgID, void * pMesg, DWORD dwMesgSize, char * pPushMesg, DWORD dwPushMesgLen, DWORD dwType); KBOOL fgP2PGetFriendsStatus(DWORD *pFriendsTable, DWORD dwCount); //-------------------------------------------- //【获取远程文件】 //参数-dwDesID: 目标设备ID号。 //参数-dwPassword: 远程设备的密码。 //参数-pRemoteFilename: 远程文件的文件名(带完整路径) //参数-pLocalSaveFilename: 存到本地的文件名(带完整路径) BOOL fgP2PGetRemoteFile(DWORD dwDesID, DWORD dwPassword, char *pRemoteFilename, char *pLocalSaveFilename); //-------------------------------------------- //【获取远程文件的进度】 //返回值- 0 ~ 100 的整数 DWORD dwP2PGetFileProgress(void); //-------------------------------------------- //【取消(中断) 获取远程文件】 void vP2PCancelGetRemoteFile(void); /////////////////////////////////////////////////////////////// ////////////////////////// enum { PACKET_TYPE_AV_DATA = 0, PACKET_TYPE_HEADER_ONLY , PACKET_TYPE_USR_DATA, }; //AV 数据分组头结构 typedef struct sAVBlockHeaderType { BYTE bHeaderFlag[4]; // 分组头标记 0xFF 0xFF 0xFF 0x88 BYTE bVersion; // 版本号 BYTE bPacketType; // 此分组的类型, WORD wAudioPackCnt; //当前分组中音频帧的数量 DWORD dwVideoDataLen; //当前分组中视频数据的长度 UINT64 u64VPTS; //当前分组中视频帧时间戳,uS为单位 UINT64 u64APTS; //当前分组中音频帧时间戳,uS为单位 }PACKED sAVBlockHeaderType; typedef struct sAVInfoType { WORD AudioType: 3; //音频编码格式 WORD AudioCodecOption: 4; //音频编码的参数 WORD AudioMode: 1; // 音频模式: 单声道/双声道 WORD AudioBitWidth: 2; // 音频位宽,目前只支持16bit WORD AudioSampleRate : 3; // 音频采样率 WORD SampleNumPerFrame : 3; //每帧数据里的采样数 DWORD VideoType: 4; /// 视频类型,目前只支持H264 DWORD VideoWidth: 12; // 视频像素宽度 DWORD VideoHeight: 10; //视频像素高度 DWORD videoFrameRate: 6; // 视频帧率 }PACKED sAVInfoType; //AV 信息分组数据结构 typedef struct sAVBlockHeader2Type { BYTE bHeaderFlag[4]; // 分组头标记 0xFF 0xFF 0xFF 0x88 BYTE bVersion; // 版本号 BYTE bPacketType; // 此分组的类型 sAVInfoType sAvInfo; //音视频格式信息 UINT64 u64VPTS; //当前分组中视频帧时间戳,uS为单位 UINT64 u64APTS; //当前分组中音频帧时间戳,uS为单位 }PACKED sAVBlockHeader2Type; /////音频类型 enum { AUDIO_TYPE_NONE = 0, AUDIO_TYPE_G711A , AUDIO_TYPE_G711U , AUDIO_TYPE_PT_G726 , AUDIO_TYPE_PT_AAC, AUDIO_TYPE_PT_AMR, AUDIO_TYPE_PT_ADPCMA, AUDIO_TYPE_MAX, }; ///AMR音频编码选项 enum { AMR_FORMAT_MMS, AMR_FORMAT_IF1, AMR_FORMAT_IF2, AMR_FORMAT_NONE, }; //音频模式 单声道/立体声 enum { AUDIO_SOUND_MODE_MOMO =0,/*mono*/ AUDIO_SOUND_MODE_STEREO =1,/*stereo*/ AUDIO_SOUND_MODE_NONE , }; // 音频采样位宽 enum { AUDIO_BIT_WIDTH_8 = 0, /* 8bit width */ AUDIO_BIT_WIDTH_16 = 1, /* 16bit width*/ AUDIO_BIT_WIDTH_32 = 2, /* 32bit width*/ AUDIO_BIT_WIDTH_NONE, }; ////音频采样率 enum { AUDIO_SAMPLE_RATE_8K = 0, /* 8K samplerate*/ AUDIO_SAMPLE_RATE_11K , /* 11.025K samplerate*/ AUDIO_SAMPLE_RATE_16K , /* 16K samplerate*/ AUDIO_SAMPLE_RATE_22K , /* 22.050K samplerate*/ AUDIO_SAMPLE_RATE_24K , /* 24K samplerate*/ AUDIO_SAMPLE_RATE_32K , /* 32K samplerate*/ AUDIO_SAMPLE_RATE_44K , /* 44.1K samplerate*/ AUDIO_SAMPLE_RATE_48K , /* 48K samplerate*/ }; ////音频每帧采样数 enum { SAMPLE_NUM_80 = 0, SAMPLE_NUM_160 , SAMPLE_NUM_320 , SAMPLE_NUM_480 , SAMPLE_NUM_1024 , SAMPLE_NUM_2048 , }; ///视频类型 enum { VIDEO_TYPE_NONE = 0 , VIDEO_TYPE_H264 , VIDEO_TYPE_MPEG4 , VIDEO_TYPE_JPEG, VIDEO_TYPE_MJPEG, }; //user data bCommandType enum { USR_CMD_PTZ_CTL, //云台控制 USR_CMD_VIDEO_CTL, // 视频控制 USR_CMD_REMOTLY_DEFENCE_CTL, // USR_CMD_PLAY_CTL, USR_CMD_AUDIO_ONLY, USR_CMD_FM1188_CTL, USR_CMD_CURRENT_USERS_NS, USR_CMD_MAX_NS, }; //bCommandOption enum { USR_CMD_OPTION_PTZ_TURN_LEFT, USR_CMD_OPTION_PTZ_TURN_RIGHT, USR_CMD_OPTION_PTZ_TURN_UP, USR_CMD_OPTION_PTZ_TURN_DOWN, }; enum { USR_CMD_OPTION_VIDEO_PAUSE, //暂停 USR_CMD_OPTION_VIDEO_RESUME, // 继续 USR_CMD_OPTION_VIDEO_FAST_FORWARD, // 快进 USR_CMD_OPTION_VIDEO_SLOW_FORWARD, //慢进 USR_CMD_OPTION_VIDEO_STEP, // 单步 }; //bCommandOption enum { USR_CMD_OPTION_START_DEFENCE, USR_CMD_OPTION_STOP_DEFENCE, USR_CMD_OPTION_READ_DEFENCE_STATUS, USR_CMD_OPTION_WRITE_DEFENCE_STATUS, }; //bCommandOption enum { USR_CMD_OPTION_NONE, USR_CMD_OPTION_FILE_INFO, //begin PTS = (((UINT64)(pUserData->dwCmdData[0])<<32) |pUserData->dwCmdData[1]);//End PTS = (((UINT64)(pUserData->dwCmdData[2])<<32) |pUserData->dwCmdData[3]); USR_CMD_OPTION_FILE_END, // USR_CMD_OPTION_PAUSE, USR_CMD_OPTION_PAUSE_RET, USR_CMD_OPTION_RESUME, USR_CMD_OPTION_RESUME_RET, USR_CMD_OPTION_JUMP,//memcpy(&u64JumpTargetPTS , pUsrCmd->dwCmdData, sizeof(UINT64) ); USR_CMD_OPTION_JUMP_RET, //pUserData->dwCmdData[0] : true , false USR_CMD_OPTION_NEXT_FILE, //memcpy(&sTargetNextFile, pUsrCmd->dwCmdData, sizeof(sRecFilenameType) ); USR_CMD_OPTION_NEXT_FILE_RET, ////pUserData->dwCmdData[0] : true , false USR_CMD_OPTION_STOP, USR_CMD_OPTION_STOP_RET,//pUserData->dwCmdData[0] : true , false USR_CMD_OPTION_PLAY, USR_CMD_OPTION_PLAY_RET,//pUserData->dwCmdData[0] : true , false USR_CMD_OPTION_FAST_PLAY, //快进播放 USR_CMD_OPTION_FAST_PLAY_RET, USR_CMD_OPTION_FAST_PLAY_CANCEL, //不要快进 USR_CMD_OPTION_FAST_PLAY_CANCEL_RET }; ////用户数据分组结构 typedef struct sUsrDataBlockHeaderType { BYTE bHeaderFlag[4]; BYTE bVersion; BYTE bPacketType; ////PACKET_TYPE_USR_DATA BYTE bCommandType; // BYTE bCommandOption; DWORD dwCmdData[5]; //保留 }PACKED sUsrDataBlockHeaderType; //////////////////////////////////////////////////////////////// #define SUPPORT_REC_TO_FILE #define GBOOL unsigned int /////////////////////av encode interface/////////////////////////// GBOOL fgStartAVEncAndSend(DWORD dwVideoFrameRate); void vStopAVEncAndSend(void); GBOOL fgFillVideoRawFrame(BYTE *pbData, DWORD dwSize, DWORD dwWidth, DWORD dwHeight, GBOOL fgX2Reflection); void vFillAudioRawData(BYTE *pbData, DWORD dwSize); GBOOL fgSendUserData(DWORD dwCmd, DWORD dwOption , BYTE * pData, DWORD dwDataLen) ; ///////////////////////end of av encode interface/////////////////////////////////// typedef struct GAVFrame { BYTE *data[3]; int linesize[3]; int width; int height; uint64_t pts; }GAVFrame; #define CONN_TYPE_VIDEO_CALL 0x00 #define CONN_TYPE_MONITOR 0x01 #define CONN_TYPE_FILE_TRANS 0x02 #define CONN_TYPE_PLAY_REC_FILE 0x02 typedef struct sRecAndDecPrm { DWORD dwConnectType;//以前是传的1或者0 现在需要改一改 void (* vRecvUserDataCallBack )(DWORD dwCmd, DWORD dwOption , DWORD * pdwData, DWORD dwDataLen); void (*vRecvAVHeader)(sAVInfoType * pAVInfo) ; void (*vRecvAVData)(BYTE *pAudioData, DWORD dwAudioDataLen, DWORD dwFrames, UINT64 u64APTS, BYTE *pVideoData, DWORD dwVideoLen, UINT64 u64VPTS) ; }sRecAndDecPrm; ////////////////////////av decode interface ////////////////////////////////// GBOOL fgStartRecvAndDec(sRecAndDecPrm *psInitPrm); void vStopRecvAndDec(void); GBOOL fgGetAudioDataToPlay(BYTE * pDesBuf, DWORD dwSize) ; GBOOL fgGetVideoFrameToDisplay(GAVFrame ** pFrame); void vReleaseVideoFrame(void) ; void vSetSupperDrop(KBOOL fgDrop); //////////////////////end of av decode interface//////////////////////////////// //暂停两者不播放 #ifdef SUPPORT_REC_TO_FILE GBOOL fgStartRecordToFile(char *pFileName); void vStopRecord(void); #endif BOOL fgGetServerIPAddr(DWORD *pdwIPAddr,WORD *pwPort,const DWORD dwSerType); #ifdef __cplusplus class ShapeWarp { public: ShapeWarp(); ~ShapeWarp(); //key status const static int KEY_NONE = -1; const static int KEY_DOWN = 0; const static int KEY_UP = 1; const static int KEY_MOVE = 2; //animation const static int ANI_NONE = 0; const static int ANI_ZOOM_AUTO_IN = 1; const static int ANI_ZOOM_AUTO_OUT = 2; const static int ANI_FLING = 3; const static int ROTE_SLOWLY = 4; // graph mode const static int MANUL = 0; //manual const static int PANORAMA = 1; //panorama const static int PLAN = 2; //plan //GestrueMode const static int GESTRUE_MODE_NONE = -1; const static int GESTRUE_MODE_FINGER = 0; const static int GESTRUE_MODE_SENSOR = 1; //fisheye position const static int FISHEYE_TOP = 0; const static int FISHEYE_BOTTOM = 1; const static int FISHEYE_WALL = 2; //fisheye type const static int FISHEYE_360 = 0; const static int FISHEYE_180 = 1; // shape type const static int SHAPE_CIRCLE = 0; const static int SHAPE_180_HALF_SPHERE = 1; const static int SHAPE_CYLIDER = 2; const static int SHAPE_BOWLE = 3; typedef void (*ShapeNotify)(int MsgType, int MsgAction); //-------------------- method --------------------------// /*Description:init data *Arguments: * width --- texture width, * height --- texture height, * w_width --- windows width, * w_height --- windows height, * instalType --- shape type, sphere, cylinder , 180°... * *cVersion --- IOS version * deviceID ----- camara ID * *cUUID --- phone UUID. * iUniformMatrix ---shader Matrix id * iFishEyeType --- FISHEYE_180, FISHEYE_360 */ void initData(int width, int height, int w_width, int w_height, int installType, const char *cVersion, long deviceID, const char* cUUID, long iUniformMatrix, int iFishEyeType); /* *release render data */ void releaseData(); /* * must call initData() firstly */ void ChangeScreen(int width, int height, int isFullScreen); /* *draw shapes */ void drawself(); /* *Description:zoom out *Arguments: x, y Zoom out position on screen */ void setZoomOut(int x, int y); /* *Description:zoom out without position * */ void setZoomOut(); /* *Description:zoom in *Arguments: x, y Zoom in position on screen */ void setZoomIN(int x, int y); /* *Description:zoom in without position * */ void setZoomIN(); /* *Description:move a step when drag, *Arguments: x, y velocity of x and y derection on scrren * */ void setFling(float x, float y); /* *Description: move a step when drag, *Arguments: x, y position in screen *Arguments: dx, dy distance of moved */ void setMoveStep(float x, float y, float dx, float dy); /* *sing tap */ void singalTap(); /* * Description: set a key status, eg. up move and down * Arguments: * KEY_NONE * KEY_DOWN * KEY_UP * KEY_MOVE */ void setKeyStatus(int key); /* * */ void buildMaps(int w, int h); /* *Description: set a sensor quarter */ void setTrackerQuat(float x, float y, float z, float w); /* *get gesture mode */ int getGestureMode(); /* *Description: set a Gesture mode eg. sensor finger *Arguments: *GESTRUE_MODE_NONE *GESTRUE_MODE_FINGER *GESTRUE_MODE_SENSOR */ void setGestureMode(int mode); /* *Description: set fish eye position , must be used before initData method. *FISHEYE_TOP default. *Arguments:iPostion FISHEYE_TOP --- top, FISHEYE_BOTTOM --- bottom, FISHEYE_WALL --- wall; * */ void setFisheyePosition(int iPostion); /* *Description: set a notify function , must be used after initData method. * */ void setNotifyFunction(ShapeNotify ShapeNotify); /* * Description: set max scale after spread. */ void setMaxScale(float maxScale); /* * Description: set the speed of drift. */ void setDriftSpeed(float speed); }; #endif #endif //_P2PC_INTERFACE_H