📄 rtpqueueinternal.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 + -