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(); };
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); }
void CWeaponMagazined::OnPrevFireMode() { if (!m_bHasDifferentFireModes) return; if (GetState() != eIdle) return; m_iCurFireMode = (m_iCurFireMode - 1 + m_aFireModes.size()) % m_aFireModes.size(); SetQueueSize(GetCurrentFireMode()); };
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; }