share_ptr的一点片段

void Gb28181RTPSession::ProcessRTPPacket(const jrtplib::RTPSourceData &srcdat, const jrtplib::RTPPacket &rtppack)
{
	// You can inspect the packet and the source's info here
	//std::cout << "Got packet " << rtppack.GetExtendedSequenceNumber() << " from SSRC " << srcdat.GetSSRC() << std::endl;

	if(rtppack.HasMarker())
	{
		Buf->Write2SingleBuf(rtppack.GetPayloadData(), rtppack.GetPayloadLength());

		unsigned char* data = NULL;
		unsigned int datalen = 0;
		Buf->ReadFromSingleBuf(&data, &datalen);

		for(std::list<std::tr1::weak_ptr<Gb28181RTPSessionSlot> >::iterator iter = m_WatcherS.begin(); iter!=m_WatcherS.end(); ++iter)
		{
			std::tr1::shared_ptr<Gb28181RTPSessionSlot> Slot = (*iter).lock();
			if(Slot)
				Slot->OnGetData(data, datalen);
		}
	}
	else
	{
		Buf->Write2SingleBuf(rtppack.GetPayloadData(), rtppack.GetPayloadLength());
	}

	rtppack.GetExtendedSequenceNumber();
	rtppack.GetPayloadData();
	rtppack.GetPayloadLength();
	rtppack.GetSSRC();
	rtppack.HasMarker();
}

void Gb28181RTPSession::SetSlot(std::tr1::weak_ptr<Gb28181RTPSessionSlot> &Watcher)
{
	m_WatcherS.push_back(Watcher);
}
void Gb28181RTPSession::UnsetSlot(std::tr1::weak_ptr<Gb28181RTPSessionSlot> &Watcher)
{
	for(std::list<std::tr1::weak_ptr<Gb28181RTPSessionSlot> >::iterator iter = m_WatcherS.begin(); iter!=m_WatcherS.end(); ++iter)
	{
		std::tr1::shared_ptr<Gb28181RTPSessionSlot> Slot1 = (*iter).lock();
		std::tr1::shared_ptr<Gb28181RTPSessionSlot> Slot2 = Watcher.lock();
		if(Slot1==Slot2)
		{
			m_WatcherS.erase(iter);
			break;
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值