亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产老女人精品毛片久久| 蜜桃视频在线一区| 欧美片网站yy| 国产成人一区在线| 亚洲国产日日夜夜| 欧美经典一区二区| 欧美日韩卡一卡二| 成人精品一区二区三区四区| 视频一区视频二区中文字幕| 国产精品久久久久影院色老大| 91超碰这里只有精品国产| 高清shemale亚洲人妖| 蜜桃av一区二区| 亚洲观看高清完整版在线观看| 国产精品久久毛片| 久久久精品综合| 欧美第一区第二区| 欧美福利一区二区| 色呦呦国产精品| 国产成人av电影在线| 石原莉奈一区二区三区在线观看| 亚洲男人的天堂在线观看| 国产亚洲精品精华液| 日韩视频在线你懂得| 欧美三级资源在线| 91浏览器在线视频| 成人免费视频app| 国产一区二区三区免费看| 午夜精品国产更新| 玉足女爽爽91| 亚洲乱码中文字幕综合| 中文字幕va一区二区三区| 久久这里只有精品首页| 日韩欧美一区二区在线视频| 欧美日本免费一区二区三区| 欧美亚洲一区二区在线| 色综合视频在线观看| aaa亚洲精品一二三区| 成人高清伦理免费影院在线观看| 国内精品在线播放| 国产一区二区三区av电影 | 91在线观看地址| 成人性生交大片免费看视频在线| 国产一区二区剧情av在线| 久久精品久久久精品美女| 青娱乐精品在线视频| 免费不卡在线观看| 久久99热这里只有精品| 美女视频网站黄色亚洲| 麻豆91小视频| 麻豆精品久久精品色综合| 青青草国产成人99久久| 久久99精品久久久久| 国产乱国产乱300精品| 国产91丝袜在线18| 日韩欧美第一区| 成人av在线电影| 91色综合久久久久婷婷| 91亚洲国产成人精品一区二三| 99国产欧美另类久久久精品| 色网综合在线观看| 欧美日韩1234| 久久久久久亚洲综合影院红桃| 国产亚洲一区二区三区在线观看| 中文字幕精品在线不卡| 亚洲少妇中出一区| 午夜精品aaa| 精品无码三级在线观看视频| 国产电影一区在线| 91精品办公室少妇高潮对白| 欧美日韩国产a| 久久久噜噜噜久久人人看 | 欧美精品aⅴ在线视频| 日韩亚洲欧美一区二区三区| 久久精品日韩一区二区三区| 中文字幕欧美一| 日日摸夜夜添夜夜添国产精品| 极品美女销魂一区二区三区 | 欧美亚男人的天堂| 日韩欧美电影在线| **欧美大码日韩| 视频一区二区欧美| 国产91在线观看| 欧美久久久久免费| 国产区在线观看成人精品 | 日韩在线一二三区| 国产河南妇女毛片精品久久久| 成人18视频日本| 日韩欧美一二三四区| 中文字幕一区二区三中文字幕| 日韩av午夜在线观看| 99久久免费精品高清特色大片| 欧美裸体bbwbbwbbw| 欧美国产日韩a欧美在线观看| 亚洲成av人综合在线观看| 国产原创一区二区三区| 欧美三级日韩在线| 中文字幕av一区二区三区高| 一区2区3区在线看| 国产高清久久久久| 欧美精品一卡两卡| 亚洲日本一区二区三区| 狠狠色丁香婷婷综合| 色吧成人激情小说| 久久精品这里都是精品| 日韩精品欧美精品| 91国产精品成人| 国产偷国产偷亚洲高清人白洁| 香蕉成人伊视频在线观看| fc2成人免费人成在线观看播放| 9191成人精品久久| 一区二区三区欧美视频| 懂色av一区二区夜夜嗨| 欧美va亚洲va| 日本亚洲欧美天堂免费| 欧洲另类一二三四区| 1024成人网| 国产精品亚洲专一区二区三区| 欧美久久久一区| 亚洲成年人影院| 一本色道综合亚洲| 亚洲视频电影在线| 99九九99九九九视频精品| 欧美国产精品久久| 国产在线精品免费av| 日韩免费观看2025年上映的电影| 性做久久久久久| 欧美视频在线播放| 亚洲欧美精品午睡沙发| av在线一区二区| 亚洲国产精品激情在线观看| 国产美女精品在线| 国产偷v国产偷v亚洲高清| 国产精品一色哟哟哟| 久久久综合视频| 国产一区二区三区| 国产拍欧美日韩视频二区| 国产一区二区三区久久悠悠色av| 精品久久久三级丝袜| 狠狠色丁香婷综合久久| 久久综合色8888| 国产在线播放一区| 国产欧美日韩视频一区二区 | 不卡av在线免费观看| 欧美国产97人人爽人人喊| 丁香一区二区三区| 国产精品久久久久久久浪潮网站| 东方aⅴ免费观看久久av| 中文字幕日本不卡| 91麻豆福利精品推荐| 亚洲一二三级电影| 亚洲日本在线天堂| 欧美在线高清视频| 亚洲成人自拍偷拍| 欧美一级淫片007| 韩国精品久久久| 国产精品欧美综合在线| 97久久精品人人做人人爽50路| 亚洲精品高清在线观看| 欧美日韩不卡视频| 国产在线精品一区二区不卡了| 国产精品天美传媒| 色爱区综合激月婷婷| 日本欧美大码aⅴ在线播放| 欧美电视剧在线观看完整版| 国产福利91精品一区二区三区| 自拍偷拍欧美精品| 911精品产国品一二三产区| 国内一区二区视频| 亚洲免费在线播放| 在线综合+亚洲+欧美中文字幕| 精品一区二区三区日韩| 国产精品久久久久婷婷| 欧美日韩国产影片| 国产中文字幕一区| 亚洲精品日韩一| 欧美电影免费观看高清完整版在 | 久久先锋影音av鲁色资源网| 99久久99久久久精品齐齐| 亚洲成人手机在线| 久久久久久一二三区| 欧美性极品少妇| 国产一区二区福利| 亚洲大型综合色站| 欧美国产综合色视频| 91精品国产一区二区| 国产成人综合在线| 午夜免费欧美电影| 日本一区二区久久| 宅男噜噜噜66一区二区66| 99免费精品在线| 麻豆精品新av中文字幕| 一区二区在线观看视频在线观看| 精品欧美一区二区在线观看 | 欧美在线免费观看视频| 国产黑丝在线一区二区三区| 天天av天天翘天天综合网色鬼国产| 国产精品无遮挡| 日韩欧美电影一区| 欧美日韩国产一二三|