亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rtcppacketbuilder.cpp

?? jrtp庫
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*  This file is a part of JRTPLIB  Copyright (c) 1999-2007 Jori Liesenborgs  Contact: jori.liesenborgs@gmail.com  This library was developed at the "Expertisecentrum Digitale Media"  (http://www.edm.uhasselt.be), a research center of the Hasselt University  (http://www.uhasselt.be). The library is based upon work done for   my thesis at the School for Knowledge Technology (Belgium/The Netherlands).  Permission is hereby granted, free of charge, to any person obtaining a  copy of this software and associated documentation files (the "Software"),  to deal in the Software without restriction, including without limitation  the rights to use, copy, modify, merge, publish, distribute, sublicense,  and/or sell copies of the Software, and to permit persons to whom the  Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included  in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS  IN THE SOFTWARE.*/#include "rtcppacketbuilder.h"#include "rtpsources.h"#include "rtppacketbuilder.h"#include "rtcpscheduler.h"#include "rtpsourcedata.h"#include "rtcpcompoundpacketbuilder.h"#include "rtpmemorymanager.h"#include "rtpdebug.h"RTCPPacketBuilder::RTCPPacketBuilder(RTPSources &s,RTPPacketBuilder &pb,RTPMemoryManager *mgr)	: RTPMemoryObject(mgr),sources(s),rtppacketbuilder(pb),prevbuildtime(0,0),transmissiondelay(0,0),ownsdesinfo(mgr){	init = false;#if (defined(WIN32) || defined(_WIN32_WCE))	timeinit.Dummy();#endif // WIN32 || _WIN32_WCE}RTCPPacketBuilder::~RTCPPacketBuilder(){	Destroy();}int RTCPPacketBuilder::Init(size_t maxpacksize,double tsunit,const void *cname,size_t cnamelen){	if (init)		return ERR_RTP_RTCPPACKETBUILDER_ALREADYINIT;	if (maxpacksize < RTP_MINPACKETSIZE)		return ERR_RTP_RTCPPACKETBUILDER_ILLEGALMAXPACKSIZE;	if (tsunit < 0.0)		return ERR_RTP_RTCPPACKETBUILDER_ILLEGALTIMESTAMPUNIT;	if (cnamelen>255)		cnamelen = 255;		maxpacketsize = maxpacksize;	timestampunit = tsunit;		int status;		if ((status = ownsdesinfo.SetCNAME((const uint8_t *)cname,cnamelen)) < 0)		return status;		ClearAllSourceFlags();		interval_name = -1;	interval_email = -1;	interval_location = -1;	interval_phone = -1;	interval_tool = -1;	interval_note = -1;	sdesbuildcount = 0;	transmissiondelay = RTPTime(0,0);	firstpacket = true;	processingsdes = false;	init = true;	return 0;}void RTCPPacketBuilder::Destroy(){	if (!init)		return;	ownsdesinfo.Clear();	init = false;}int RTCPPacketBuilder::BuildNextPacket(RTCPCompoundPacket **pack){	if (!init)		return ERR_RTP_RTCPPACKETBUILDER_NOTINIT;	RTCPCompoundPacketBuilder *rtcpcomppack;	int status;	bool sender = false;	RTPSourceData *srcdat;		*pack = 0;		rtcpcomppack = RTPNew(GetMemoryManager(),RTPMEM_TYPE_CLASS_RTCPCOMPOUNDPACKETBUILDER) RTCPCompoundPacketBuilder(GetMemoryManager());	if (rtcpcomppack == 0)		return ERR_RTP_OUTOFMEM;		if ((status = rtcpcomppack->InitBuild(maxpacketsize)) < 0)	{		RTPDelete(rtcpcomppack,GetMemoryManager());		return status;	}		if ((srcdat = sources.GetOwnSourceInfo()) != 0)	{		if (srcdat->IsSender())			sender = true;	}		uint32_t ssrc = rtppacketbuilder.GetSSRC();	RTPTime curtime = RTPTime::CurrentTime();	if (sender)	{		RTPTime rtppacktime = rtppacketbuilder.GetPacketTime();		uint32_t rtppacktimestamp = rtppacketbuilder.GetPacketTimestamp();		uint32_t packcount = rtppacketbuilder.GetPacketCount();		uint32_t octetcount = rtppacketbuilder.GetPayloadOctetCount();		RTPTime diff = curtime;		diff -= rtppacktime;		diff += transmissiondelay; // the sample being sampled at this very instant will need a larger timestamp				uint32_t tsdiff = (uint32_t)((diff.GetDouble()/timestampunit)+0.5);		uint32_t rtptimestamp = rtppacktimestamp+tsdiff;		RTPNTPTime ntptimestamp = curtime.GetNTPTime();		if ((status = rtcpcomppack->StartSenderReport(ssrc,ntptimestamp,rtptimestamp,packcount,octetcount)) < 0)		{			RTPDelete(rtcpcomppack,GetMemoryManager());			if (status == ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT)				return ERR_RTP_RTCPPACKETBUILDER_PACKETFILLEDTOOSOON;			return status;		}	}	else	{		if ((status = rtcpcomppack->StartReceiverReport(ssrc)) < 0)		{			RTPDelete(rtcpcomppack,GetMemoryManager());			if (status == ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT)				return ERR_RTP_RTCPPACKETBUILDER_PACKETFILLEDTOOSOON;			return status;		}	}	uint8_t *owncname;	size_t owncnamelen;	owncname = ownsdesinfo.GetCNAME(&owncnamelen);	if ((status = rtcpcomppack->AddSDESSource(ssrc)) < 0)	{		RTPDelete(rtcpcomppack,GetMemoryManager());		if (status == ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT)			return ERR_RTP_RTCPPACKETBUILDER_PACKETFILLEDTOOSOON;		return status;	}	if ((status = rtcpcomppack->AddSDESNormalItem(RTCPSDESPacket::CNAME,owncname,owncnamelen)) < 0)	{		RTPDelete(rtcpcomppack,GetMemoryManager());		if (status == ERR_RTP_RTCPCOMPPACKBUILDER_NOTENOUGHBYTESLEFT)			return ERR_RTP_RTCPPACKETBUILDER_PACKETFILLEDTOOSOON;		return status;	}	if (!processingsdes)	{		int added,skipped;		bool full,atendoflist;		if ((status = FillInReportBlocks(rtcpcomppack,curtime,sources.GetTotalCount(),&full,&added,&skipped,&atendoflist)) < 0)		{			RTPDelete(rtcpcomppack,GetMemoryManager());			return status;		}				if (full && added == 0)		{			RTPDelete(rtcpcomppack,GetMemoryManager());			return ERR_RTP_RTCPPACKETBUILDER_PACKETFILLEDTOOSOON;		}			if (!full)		{			processingsdes = true;			sdesbuildcount++;						ClearAllSourceFlags();				doname = false;			doemail = false;			doloc = false;			dophone = false;			dotool = false;			donote = false;			if (interval_name > 0 && ((sdesbuildcount%interval_name) == 0)) doname = true;			if (interval_email > 0 && ((sdesbuildcount%interval_email) == 0)) doemail = true;			if (interval_location > 0 && ((sdesbuildcount%interval_location) == 0)) doloc = true;			if (interval_phone > 0 && ((sdesbuildcount%interval_phone) == 0)) dophone = true;			if (interval_tool > 0 && ((sdesbuildcount%interval_tool) == 0)) dotool = true;			if (interval_note > 0 && ((sdesbuildcount%interval_note) == 0)) donote = true;						bool processedall;			int itemcount;						if ((status = FillInSDES(rtcpcomppack,&full,&processedall,&itemcount)) < 0)			{				RTPDelete(rtcpcomppack,GetMemoryManager());				return status;			}			if (processedall)			{				processingsdes = false;				ClearAllSDESFlags();				if (!full && skipped > 0) 				{					// if the packet isn't full and we skipped some				        // sources that we already got in a previous packet,					// we can add some of them now										bool atendoflist;					 					if ((status = FillInReportBlocks(rtcpcomppack,curtime,skipped,&full,&added,&skipped,&atendoflist)) < 0)					{						RTPDelete(rtcpcomppack,GetMemoryManager());						return status;					}				}			}		}	}	else // previous sdes processing wasn't finished	{		bool processedall;		int itemcount;		bool full;					if ((status = FillInSDES(rtcpcomppack,&full,&processedall,&itemcount)) < 0)		{			RTPDelete(rtcpcomppack,GetMemoryManager());			return status;		}		if (itemcount == 0) // Big problem: packet size is too small to let any progress happen		{			RTPDelete(rtcpcomppack,GetMemoryManager());			return ERR_RTP_RTCPPACKETBUILDER_PACKETFILLEDTOOSOON;		}		if (processedall)		{			processingsdes = false;			ClearAllSDESFlags();			if (!full) 			{				// if the packet isn't full and we skipped some				// we can add some report blocks								int added,skipped;				bool atendoflist;				if ((status = FillInReportBlocks(rtcpcomppack,curtime,sources.GetTotalCount(),&full,&added,&skipped,&atendoflist)) < 0)				{					RTPDelete(rtcpcomppack,GetMemoryManager());					return status;				}				if (atendoflist) // filled in all possible sources					ClearAllSourceFlags();			}		}	}			if ((status = rtcpcomppack->EndBuild()) < 0)	{		RTPDelete(rtcpcomppack,GetMemoryManager());		return status;	}	*pack = rtcpcomppack;	firstpacket = false;	prevbuildtime = curtime;	return 0;}void RTCPPacketBuilder::ClearAllSourceFlags(){	if (sources.GotoFirstSource())	{		do		{			RTPSourceData *srcdat = sources.GetCurrentSourceInfo();			srcdat->SetProcessedInRTCP(false);		} while (sources.GotoNextSource());	}}int RTCPPacketBuilder::FillInReportBlocks(RTCPCompoundPacketBuilder *rtcpcomppack,const RTPTime &curtime,int maxcount,bool *full,int *added,int *skipped,bool *atendoflist){	RTPSourceData *srcdat;	int addedcount = 0;	int skippedcount = 0;	bool done = false;	bool filled = false;	bool atend = false;	int status;	if (sources.GotoFirstSource())	{		do		{			bool shouldprocess = false;						srcdat = sources.GetCurrentSourceInfo();			if (!srcdat->IsOwnSSRC()) // don't send to ourselves			{				if (!srcdat->IsCSRC()) // p 35: no reports should go to CSRCs				{					if (srcdat->INF_HasSentData()) // if this isn't true, INF_GetLastRTPPacketTime() won't make any sense					{						if (firstpacket)							shouldprocess = true;						else						{							// p 35: only if rtp packets were received since the last RTP packet, a report block							// should be added														RTPTime lastrtptime = srcdat->INF_GetLastRTPPacketTime();														if (lastrtptime > prevbuildtime)								shouldprocess = true;						}					}				}			}			if (shouldprocess)			{				if (srcdat->IsProcessedInRTCP()) // already covered this one				{					skippedcount++;				}				else				{					uint32_t rr_ssrc = srcdat->GetSSRC();					uint32_t num = srcdat->INF_GetNumPacketsReceivedInInterval();					uint32_t prevseq = srcdat->INF_GetSavedExtendedSequenceNumber();					uint32_t curseq = srcdat->INF_GetExtendedHighestSequenceNumber();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产福利91精品| 久久激情五月婷婷| 国产一区二区三区免费观看| 日本乱人伦aⅴ精品| xfplay精品久久| 亚洲18女电影在线观看| 本田岬高潮一区二区三区| 91精品蜜臀在线一区尤物| 最新欧美精品一区二区三区| 激情av综合网| 欧美欧美午夜aⅴ在线观看| 中文字幕 久热精品 视频在线| 日本不卡高清视频| 在线观看国产精品网站| 国产精品欧美一区喷水| 久久国产成人午夜av影院| 欧美少妇xxx| 国产精品超碰97尤物18| 国产一区二区三区国产| 在线综合+亚洲+欧美中文字幕| 亚洲综合男人的天堂| 成人黄色小视频| 久久久久久久久一| 精品系列免费在线观看| 欧美一区二区人人喊爽| 午夜精彩视频在线观看不卡| 色又黄又爽网站www久久| 国产精品久久久久久久久久久免费看| 久久99国产精品久久99| 91精品久久久久久蜜臀| 日韩精彩视频在线观看| 欧美午夜一区二区三区| 亚洲精品乱码久久久久久黑人| 日韩欧美黄色影院| 亚洲aⅴ怡春院| 精品视频在线免费看| 亚洲人亚洲人成电影网站色| 成人国产精品免费| 国产欧美精品一区aⅴ影院 | 久久久精品天堂| 激情综合一区二区三区| 欧美v国产在线一区二区三区| 六月丁香婷婷久久| 欧美变态口味重另类| 精一区二区三区| 久久久亚洲高清| 国产一区二区三区综合| 久久精品这里都是精品| 极品美女销魂一区二区三区| www精品美女久久久tv| 激情六月婷婷久久| 国产肉丝袜一区二区| 国产成人精品免费在线| 国产精品日韩成人| 一本久久综合亚洲鲁鲁五月天| 一区二区国产视频| 欧美在线观看18| 视频一区中文字幕国产| 日韩欧美色电影| 国产精品99精品久久免费| 久久蜜臀中文字幕| 成人激情综合网站| 最新国产成人在线观看| 91国偷自产一区二区开放时间 | 综合电影一区二区三区| 91久久人澡人人添人人爽欧美| 亚洲国产日韩a在线播放| 欧美伦理电影网| 国产一区二区三区四区五区美女 | 在线观看日韩精品| 日本免费在线视频不卡一不卡二 | 精品污污网站免费看| 美国一区二区三区在线播放| 久久日韩粉嫩一区二区三区| 99精品视频在线播放观看| 亚洲综合免费观看高清完整版在线 | 懂色av噜噜一区二区三区av| 亚洲老司机在线| 日韩一区二区三区四区| 国产成人av一区二区三区在线 | 欧美xxxxxxxx| 99在线精品观看| 午夜欧美大尺度福利影院在线看| 日韩精品资源二区在线| 成人精品在线视频观看| 亚洲一区二区三区四区在线免费观看 | 国产91富婆露脸刺激对白| 亚洲日本在线视频观看| 欧美一卡二卡三卡| 懂色av一区二区三区免费观看| 亚洲午夜私人影院| 亚洲精品一区二区精华| 色综合中文字幕| 蜜桃久久av一区| 成人欧美一区二区三区视频网页| 欧美另类高清zo欧美| 成人一区二区在线观看| 天天操天天色综合| 国产精品美女www爽爽爽| 欧美日本在线播放| 国产a精品视频| 日精品一区二区| 国产精品美女视频| 欧美成人a∨高清免费观看| 色综合久久久久综合| 另类小说一区二区三区| 中文字幕一区二区三区四区| 欧美一级免费大片| 91美女片黄在线观看91美女| 精品在线观看免费| 亚洲国产成人av网| 国产精品乱人伦一区二区| 91精品黄色片免费大全| 99久久久国产精品| 国产一区二区精品在线观看| 五月天婷婷综合| 亚洲色图欧美在线| 久久精品一区二区三区不卡牛牛 | 欧美影院精品一区| 懂色av噜噜一区二区三区av| 蜜桃久久精品一区二区| 亚洲国产乱码最新视频| 国产精品久久久久永久免费观看| 日韩精品最新网址| 欧美日韩高清一区二区不卡| 91在线免费看| 国产99久久久国产精品| 久久99国产精品免费网站| 五月婷婷综合激情| 一区二区三区小说| 国产精品久线观看视频| 久久亚洲免费视频| 日韩精品一区国产麻豆| 欧美日本一区二区在线观看| 欧洲亚洲国产日韩| 99国产精品国产精品毛片| 福利电影一区二区三区| 久久99国产精品免费| 日本视频免费一区| 首页国产欧美久久| 午夜精品久久久久久不卡8050| 亚洲欧美激情视频在线观看一区二区三区| 久久这里只有精品视频网| 欧美一卡二卡在线观看| 欧美日韩精品一区二区天天拍小说| 色视频成人在线观看免| av电影天堂一区二区在线| 国产成人午夜片在线观看高清观看| 美国三级日本三级久久99| 日韩影视精彩在线| 五月天激情综合| 五月天一区二区三区| 天天色 色综合| 日韩成人伦理电影在线观看| 日韩影视精彩在线| 日本亚洲欧美天堂免费| 奇米精品一区二区三区四区| 日本最新不卡在线| 日韩高清不卡一区二区| 日韩中文字幕区一区有砖一区 | 国产精品不卡在线观看| 国产精品伦一区二区三级视频| 国产精品美女久久久久av爽李琼| 国产精品传媒入口麻豆| 亚洲丝袜自拍清纯另类| 亚洲免费在线视频一区 二区| 亚洲另类中文字| 一区二区在线看| 亚洲国产另类精品专区| 午夜免费久久看| 蜜臂av日日欢夜夜爽一区| 久久精品国产网站| 国产激情一区二区三区四区 | 午夜精品久久久久久久99樱桃| 日韩精品每日更新| 久久精品噜噜噜成人88aⅴ| 精品一区二区免费| 国产成人精品一区二区三区网站观看 | 一区二区三区四区在线播放| 亚洲高清一区二区三区| 美女视频一区在线观看| 久久电影网站中文字幕| 国产精品一卡二卡在线观看| 成人丝袜视频网| 在线中文字幕一区| 在线成人av网站| 精品电影一区二区三区| 国产精品全国免费观看高清| 亚洲黄色小视频| 美女视频第一区二区三区免费观看网站| 国产一区美女在线| 成人av网站免费| 欧美日韩午夜精品| 久久综合99re88久久爱| 亚洲图片另类小说| 天天操天天干天天综合网| 国产一区欧美日韩| 色94色欧美sute亚洲线路一久| 欧美一区二区三区系列电影| 久久久久综合网|