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