Esempio n. 1
0
void	CWeaponMagazined::OnH_A_Chield()
{
	if (m_bHasDifferentFireModes)
	{
		CActor	*actor = smart_cast<CActor*>(H_Parent());
		if (!actor) SetQueueSize(-1);
		else SetQueueSize(GetCurrentFireMode());
	};
	inherited::OnH_A_Chield();
};
Esempio n. 2
0
void CWeaponMagazined::load(IReader &input_packet)
{
	inherited::load(input_packet);
	load_data(m_iQueueSize, input_packet); SetQueueSize(m_iQueueSize);
	load_data(m_iShotNum, input_packet);
	load_data(m_iCurFireMode, input_packet);
}
Esempio n. 3
0
void	CWeaponMagazined::OnPrevFireMode()
{
	if (!m_bHasDifferentFireModes) return;
	if (GetState() != eIdle) return;
	m_iCurFireMode = (m_iCurFireMode - 1 + m_aFireModes.size()) % m_aFireModes.size();
	SetQueueSize(GetCurrentFireMode());
};
Esempio n. 4
0
void CWeaponMagazined::net_Import(NET_Packet& P)
{
	//	if (Level().IsDemoPlay())
	//		Msg("CWeapon::net_Import [%d]", ID());

	inherited::net_Import(P);

	m_iCurFireMode = P.r_u8();
	SetQueueSize(GetCurrentFireMode());
}
HRESULT HDMediaSource::CreateStreams()
{
	DWORD dwStreamCount = 0;
	_pPresentationDescriptor->GetStreamDescriptorCount(&dwStreamCount);
	if (dwStreamCount == 0)
		return MF_E_UNEXPECTED;

	for (unsigned i = 0;i < dwStreamCount;i++)
	{
		BOOL fSelected;
		ComPtr<IMFStreamDescriptor> psd;

		HRESULT hr = _pPresentationDescriptor->GetStreamDescriptorByIndex(i,
			&fSelected,psd.GetAddressOf());

		if (FAILED(hr))
			return hr;

		DWORD dwStreamId = 0;
		hr = psd->GetStreamIdentifier(&dwStreamId);
		if (FAILED(hr))
			return hr;

		auto stream = HDMediaStream::CreateMediaStream((int)dwStreamId,this,psd.Get());
		if (stream == nullptr)
			return E_OUTOFMEMORY;

		stream->SetQueueSize(STREAM_QUEUE_SIZE_DEFAULT); //default.

		hr = stream->Initialize();
		if (FAILED(hr))
			return hr;

		hr = _streamList.Add(stream.Get());
		if (FAILED(hr))
			return hr;

#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && defined(_DEBUG)
		stream->DbgUseRequestSampleTickLog();
#endif

		if (stream->IsH264Stream() || stream->IsHEVCStream())
			SetMediaStreamPrivateDataFromBlob(stream.Get());
		if (stream->IsFLACStream())
			SetMediaStreamPrivateDataFromBlob(stream.Get(),MF_MT_USER_DATA);
		if (stream->IsFLACStream())
			stream->SetDiscontinuity();
	}

	DWORD dwQueueSize = 0;

	DWORD sid = 0;
	UINT width = 0,height = 0;
	float fps = 0.0f;
	if (SUCCEEDED(FindBestVideoStreamIndex(_pPresentationDescriptor.Get(),&sid,&width,&height,&fps)))
	{
		if (width <= 848) //480p
			dwQueueSize = STREAM_QUEUE_SIZE_480P;
		else if (width <= 1280) //720p
			dwQueueSize = STREAM_QUEUE_SIZE_720P;
		else if (width <= 1920) //1080p
			dwQueueSize = STREAM_QUEUE_SIZE_1080P;
		else if (width > 1920) //4K
			dwQueueSize = STREAM_QUEUE_SIZE_4K;

		if (_network_mode)
			dwQueueSize *= 2;

		if (fps > 120.0f)
			fps = 60.0f;

		if (_forceQueueSize == MF_SOURCE_STREAM_QUEUE_FPS_AUTO && fps > 3)
			dwQueueSize = SetupVideoQueueSize(fps,width,height);

		//如果外部强制设置大小
		if (GlobalOptionGetUINT32(kCoreForceBufferSamples) > 0)
			dwQueueSize = GlobalOptionGetUINT32(kCoreForceBufferSamples);

		for (unsigned i = 0;i < _streamList.Count();i++)
		{
			_streamList[i]->SetQueueSize(dwQueueSize);
			auto mediaType = _streamList[i]->GetMediaType();
			if (SUCCEEDED(WMF::Misc::IsAudioMediaType(mediaType)))
			{
				//WV和TTA的帧都很长,WV半秒,TTA一秒,队列放小小。
				GUID subType = GUID_NULL;
				mediaType->GetGUID(MF_MT_SUBTYPE,&subType);
				if (subType == MFAudioFormat_WV4)
					_streamList[i]->SetQueueSize(7);
				else if (subType == MFAudioFormat_TTA1)
					_streamList[i]->SetQueueSize(3);
				else if (subType == MFAudioFormat_FLAC_FRAMED && dwQueueSize > 4)
					_streamList[i]->SetQueueSize(dwQueueSize / 2);
			}
		}
	}else{
		//Audio Stream Only.
		DWORD dwStreamCount = 0;
		_pPresentationDescriptor->GetStreamDescriptorCount(&dwStreamCount);
		if (dwStreamCount == 1)
		{
			ComPtr<IMFMediaType> pMediaType;
			if (SUCCEEDED(WMF::Misc::GetMediaTypeFromPD(_pPresentationDescriptor.Get(),0,pMediaType.GetAddressOf())))
			{
				if (SUCCEEDED(WMF::Misc::IsAudioMediaType(pMediaType.Get())))
				{
					for (unsigned i = 0;i < _streamList.Count();i++)
						_streamList[i]->SetQueueSize(24);
				}

				if (SUCCEEDED(WMF::Misc::IsAudioPCMSubType(pMediaType.Get())))
				{
					dwQueueSize = SetupAudioQueueSize(pMediaType.Get());

					for (unsigned i = 0;i < _streamList.Count();i++)
						_streamList[i]->SetQueueSize(dwQueueSize);
				}
			}
		}
	}

	return S_OK;
}