Пример #1
0
HRESULT ParaEngine::CAudioEngine2::InitAudioEngine(IParaAudioEngine* pInteface)
{
	if (pInteface != 0)
	{
		SAFE_RELEASE(m_pAudioEngine);
		m_pAudioEngine = pInteface;
	}
	else if(m_pAudioEngine == 0)
	{
		DLLPlugInEntity* pPluginEntity = CGlobals::GetPluginManager()->LoadDLL("audioengine", AUDIO_ENGINE_DLL_PATH);
		if(pPluginEntity!=0)
		{
			for (int i=0; i < pPluginEntity->GetNumberOfClasses(); ++i)
			{
				ClassDescriptor* pClassDesc = pPluginEntity->GetClassDescriptor(i);

				if(pClassDesc && pClassDesc->ClassID()==AudioEngine_CLASS_ID)
				{
					m_pAudioEngine = (IParaAudioEngine*) pClassDesc->Create();
				}
			}
		}
	}
	if (m_pAudioEngine == 0)
	{
		OUTPUT_LOG("error: failed loading audio plugin %s\n", AUDIO_ENGINE_DLL_PATH);
	}
	else
	{
		//Allow the user to choose a playback device
		OUTPUT_LOG("Available Audio Playback Devices: \n");
		unsigned int deviceCount = m_pAudioEngine->getAvailableDeviceCount();
		std::string defaultDeviceName = m_pAudioEngine->getDefaultDeviceName();
		for (unsigned int i = 0; i < deviceCount; ++i)
		{
			std::string deviceName = m_pAudioEngine->getAvailableDeviceName(i);
			if (deviceName.compare(defaultDeviceName) == 0)
			{
				OUTPUT_LOG("%d : %s [DEFAULT]\n", i, StringHelper::AnsiToUTF8(deviceName.c_str()));
			}
			else
			{
				OUTPUT_LOG("%d : %s\n", i, StringHelper::AnsiToUTF8(deviceName.c_str()));
			}
		}
		unsigned int deviceSelection = 0;
		//Initialize the manager with the user settings
		m_pAudioEngine->initialize(m_pAudioEngine->getAvailableDeviceName(deviceSelection));

		// use linear distance model by default. 
		m_pAudioEngine->SetDistanceModel(Audio_DistModel_LINEAR_DISTANCE_CLAMPED);

		// tell to use left handed coordinate system, which will invert the z axis. 
		m_pAudioEngine->SetCoordinateSystem(0);
	}
	return (m_pAudioEngine!=0) ? S_OK : E_FAIL;
}
Пример #2
0
IMovieCodec* CMoviePlatform::GetMovieCodec(bool bCreateIfNotExist)
{
	if (m_pMovieCodec)
	{
		return m_pMovieCodec;
	}
	else
	{
		static bool s_bIsLoaded = false;
		if (s_bIsLoaded || !bCreateIfNotExist)
		{
			return m_pMovieCodec;
		}
		else
		{
			s_bIsLoaded = true;

			ParaEngine::DLLPlugInEntity* pPluginEntity = NULL;
			for (int i = 0; m_pMovieCodec == 0 && i < sizeof(MOVIE_CODEC_DLL_FILE_PATHS) / sizeof(const char*); ++i)
			{
				const char* sFilename = MOVIE_CODEC_DLL_FILE_PATHS[i];

				pPluginEntity = CGlobals::GetPluginManager()->GetPluginEntity(sFilename);

				if (pPluginEntity == 0)
				{
					// load the plug-in if it has never been loaded before. 
					pPluginEntity = ParaEngine::CGlobals::GetPluginManager()->LoadDLL("", sFilename);
				}

				if (pPluginEntity != 0 && pPluginEntity->IsValid())
				{
					if (pPluginEntity->GetLibVersion() >= 3)
					{
						for (int i = 0; i < pPluginEntity->GetNumberOfClasses(); ++i)
						{
							ClassDescriptor* pClassDesc = pPluginEntity->GetClassDescriptor(i);

							if (pClassDesc && pClassDesc->ClassID() == MovieCodec_CLASS_ID)
							{
								m_pMovieCodec = (IMovieCodec*)pClassDesc->Create();
							}
						}
					}
					else
					{
						OUTPUT_LOG("movie codec require at least version 3 but you only have version %d\n", pPluginEntity->GetLibVersion());
						CGlobals::GetApp()->SystemMessageBox("MovieCodec plugin needs at least version 3. Please update from official website!");
					}
				}
			}
		}
		return m_pMovieCodec;
	}
}