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

📄 rtpqueueinternal.c

📁 linux环境下用纯c写的RTP协议的通用开发库
💻 C
字号:
/*------------------------------------------------------------------------- * rtpqueueinternal.c - _rtpqclear, _rtpqinsert, rtpqueueextract *------------------------------------------------------------------------- */#include <rtp.h>#include <pthread.h>#include <stdlib.h>#include <strings.h>/*------------------------------------------------------------------------ * _rtpqclear - free all packets from a stream's RTP queue. * Assumes queue already locked. *------------------------------------------------------------------------ */int_rtpqclear(struct rtpqueue *pq){  	struct rtpln		*p, *q;  	p = pq->rq_tail;	while (p != NULL) {		q = p->rln_next;		bufpoolfreebuf(p);		p = q;	}	pq->rq_tail = NULL;	pq->rq_head = NULL;	return OK;}/*------------------------------------------------------------------------ * _rtpqinsert - insert a node into a stream's RTP queue. * Assumes queue already locked. *------------------------------------------------------------------------ */int_rtpqinsert(struct rtpqueue *pq, struct rtpln *pln, bool *head){  	struct rtpln    *p, *q;  	if (head != NULL)		*head = FALSE;	p = pq->rq_tail;	q = NULL;	while (p != NULL && p->rln_seq > pln->rln_seq) {		q = p;		p = p->rln_next;	}	if (q != NULL) {		q->rln_next = pln;		pln->rln_prev = q;	}	else {		pq->rq_tail = pln;		pln->rln_prev = NULL;	}	if (p != NULL) {		p->rln_prev = pln;		pln->rln_next = p;	}	else {		pq->rq_head = pln;		pln->rln_next = NULL;		if (head != NULL)			*head = TRUE;	}	pq->rq_len += pln->rln_len;	return OK;}/*------------------------------------------------------------------------ * rtpqextract - extrace a packet from the doubly-linked list * Assumes queue already locked. *------------------------------------------------------------------------ */struct rtpln *rtpqextract(struct rtpqueue *pq, struct rtpln *pln){  	struct rtpln *n, *p;	if (pln == NULL)		return NULL;  	n = pln->rln_next;	p = pln->rln_prev;	if (n != NULL) 		n->rln_prev = p;	else 		pq->rq_head = p;    	if (p != NULL)		p->rln_next = n;	else		pq->rq_tail = n;	pln->rln_next = NULL;	pln->rln_prev = NULL;	pq->rq_len -= pln->rln_len;	return pln;}

⌨️ 快捷键说明

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