hust_rtpqueueinternal.c

来自「实现基于ip2022的MPEG2 TS的IP组播接收」· C语言 代码 · 共 117 行

C
117
字号
/*------------------------------------------------------------------------- * rtpqueueinternal.c - _rtpqclear, _rtpqinsert, rtpqueueextract *------------------------------------------------------------------------- */#include <ipOS.h>#include <ipHAL.h>#include "hust_rtp.h"#include "hust_bufpool.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);		heap_free(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 + -
显示快捷键?