⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hust_event.h

📁 实现基于ip2022的MPEG2 TS的IP组播接收
💻 H
字号:
/*------------------------------------------------------------------------- * event.h - BIT_SET, SET_BIT, UNSET_BIT *------------------------------------------------------------------------- */#ifndef EVENT_H#define EVENT_H#include "hust_rtplibcommon.h"////#include <time.h>///#include <semaphore.h>///#include <pthread.h>#include "hust_bufpool.h"/* event types; comment describes data included in event */#define EVENT_RTP_HEAD   	0 /* none */#define EVENT_RTP		1 /* none */#define EVENT_RTCP_SR		2 /* SR packet (inc RTCP hdr) */#define EVENT_RTCP_RR		3 /* RR packet (inc RTCP hdr) */#define EVENT_RTCP_BYE		4 /* reason string */#define EVENT_RTCP_APP		5 /* APP Packet (inc RTCP hdr) */#define EVENT_RTCP_SDES_CHUNK	6 /* chunk (inc SSRC) *//* SDES item events are sent only when the item value changes */#define EVENT_RTCP_SDES_CNAME	7 /* none */#define EVENT_RTCP_SDES_NAME	8 /* none */#define EVENT_RTCP_SDES_EMAIL	9 /* none */#define EVENT_RTCP_SDES_PHONE	10 /* none */#define EVENT_RTCP_SDES_LOC	11 /* none */#define EVENT_RTCP_SDES_TOOL	12 /* none */#define EVENT_RTCP_SDES_NOTE	13 /* none */#define EVENT_RTCP_SDES_PRIV	14 /* none */#define EVENT_PARTICIPANT_TIMEOUT		15 /* none */#define EVENT_PARTICIPANT_ENCODING       	16 /* none */#define EVENT_PARTICIPANT_NEW			17 /* none */#define EVENT_PARTICIPANT_SEQGAP		18 /* none */#define EVENT_PARTICIPANT_SYNC                  19 /* sstm_clky adjustment */#define EVENT_COLLISION				20 /* none */#define EVENT_NOBUFS				21 /* none */#define EVENT_TYPES				22#define EVENT_VECTOR_SZ ((EVENT_TYPES / 8) + (EVENT_TYPES % 8 != 0 ? 1 : 0))////EVENT_VECTOR_SZ=3#define BIT_SET(pchar, bit) ((pchar[bit / 8] & (1 << (7 - (bit % 8)))) != 0)////检验一个bitvector是否与bit标识的event类型向对应////返回true时表示bit和pchar表示的bitvector相对应,这种类型的event////是被want的#define SET_BIT(pchar, bit) (pchar[bit / 8] |= 1 << (7 - (bit % 8)))///通过设置与event类型相对应的bitvector中的位来设置相应的event的为开的状态#define UNSET_BIT(pchar, bit) (pchar[bit / 8] &= ~(1 << (7 - (bit % 8))))///通过设置与event类型相对应的bitvector中的位来设置相应的event的为关的状态/* structure for an event */struct event {  int             ev_type;	/* type of event		*/  ssrc_t          ev_ssrc;	/* SSRC to which event pertains	*/  ///struct timespec ev_time;	/* localtime event generated	*/  struct event    *ev_next;	/* pointer to next event in q	*/  int		  ev_datalen;	/* length of data		*/  char            ev_data[1];	/* beginning of data		*/}; #define EVENT_QUEUE_HT_SZ	11#define EVENT_DEFAULTBPBUFSZ	1024#define EVENT_DEFAULTBPBUFCOUNT	32/* structure for an event queue */struct eventqueue {  char          eq_wantall[EVENT_VECTOR_SZ];	/* bitvect for events wanted from any SSRC */  /////bitvect作为哈希表中的object与ssrc对应,但是也有的evetn是任何源都需要的,则用eq_wantall来表示  ////EVENT_VECTOR_SZ=3  struct event	*eq_eventtail;		/* newest event in queue	    */  struct event	*eq_eventhead;		/* oldest event in queue	    */ //// pthread_mutex_t eq_eventqueuemutex;	/* mutex to lock queue		    */ //// sem_t		eq_eventsem;		/* semaphore to impl blocking	    */  int		eq_eventblock;		/* true if nextevent should block   */  struct ht     *eq_ssrcs;		/* hashtable ssrc -> bitvector	    */  ////一个源对应一个bitvector,一个bitvector可以用来标识与这个源相关的所有的event的开关状态  ////标识的方法就是位与不同类型的event相对应    struct bufpool eq_bpool;}; /* Event API calls */int eventqnext(struct eventqueue *, struct event *, int);int eventqpost(struct eventqueue *, int, ssrc_t, void *, int);int eventqinit(struct eventqueue *, int, bool, int, int);int eventqfilterssrc(struct eventqueue *, int, ssrc_t, bool);int eventqfilterall(struct eventqueue *, int, bool);int eventqdestroy(struct eventqueue *);int eventqclear(struct eventqueue *);/* Internal calls */bool eventqwant(struct eventqueue *, int, ssrc_t);int eventqenqueue(struct eventqueue *, struct event *);struct event *eventqdequeue(struct eventqueue *);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -