rtpqueueinternal.c

来自「linux环境下用纯c写的RTP协议的通用开发库」· C语言 代码 · 共 114 行

C
114
字号
/*------------------------------------------------------------------------- * 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 + =
减小字号Ctrl + -
显示快捷键?