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

📄 framereadnonfragmented.c

📁 linux环境下用纯c写的RTP协议的通用开发库
💻 C
字号:
/* framereadnonfragmented.c - framereadnonfragmented */#include <syn.h>#include <util.h>#include <strings.h>#include <stdlib.h>#include <unistd.h>#include <frame.h>#include <errno.h>#include <util.h>#include <limits.h>#define DEBUG(x) x#include <stdio.h>/*------------------------------------------------------------------------ * framereadnonfragmented - copy psstm->stm_channels frames into buf * This function finishes the job of frameread in the case that the frame * is not fragmented. See frameread() for details on the first 8 * parameters. The functions are seperated for readability and * managability. *------------------------------------------------------------------------ */intframereadnonfragmented(struct synsession *pssn, struct synstream *psstm, struct timespec *time, mediatime_t *tsout, char *buf, int buflen, char *extraheaderbuf, int *extraheaderbuflen, struct rtpln *pln, char *pframe, mediatime_t ts, mediatime_t frameduration, int bytesleft){   	struct timespec	tmptime;	struct frameparam	*pparam;	struct rtp		*prtp;	int			chan, bytestocopy, bytescopied, dataoffset, framelen;	bool                    block;	pparam = (struct frameparam *) psstm->sstm_parameters;	block = (psstm->sstm_readflags & SYN_READ_BLOCK) != 0;	prtp = &pln->rln_rtp;	psstm->sstm_lastread = ts + frameduration;	/*	 * Copy each channel's frame; by RFC1890 all channels must be present.	 */	for (chan = 0, bytescopied = 0; chan < pparam->fp_channels; chan++) {		framelen = pparam->fp_framelength(pframe, bytesleft);		if (framelen == ERROR) {			bytesleft = 0;			break;		}		framelen = min(framelen, bytesleft);		bytestocopy = min(framelen, buflen);		bcopy(pframe, buf, bytestocopy);    		buf += bytestocopy;		buflen -= bytestocopy;		bytesleft -= framelen;		pframe += framelen;		bytescopied += bytestocopy;		if (bytesleft == 0 || buflen == 0)			break;	}  	if (extraheaderbuf != NULL) {		*extraheaderbuflen = min(dataoffset, *extraheaderbuflen);		bcopy(RTP_DATA(prtp), extraheaderbuf, *extraheaderbuflen);	}  	if (bytesleft == 0)		bufpoolfreebuf(pln);      	else 		rtpqinsert(pssn->ssn_session, psstm->sstm_ssrc, pln);  	tmptime = timeunflatten(ts - psstm->sstm_clky, psstm->sstm_clkrt);	tmptime = timeadd(tmptime, psstm->sstm_clkx);	*time = tmptime;	*tsout = ts;	return bytescopied;}

⌨️ 快捷键说明

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