Эх сурвалжийг харах

Z991239-2910 #comment [localmediaplayer] 优化本地播放实体初始化流程

陈礼鹏80274480 3 жил өмнө
parent
commit
89571f6763

+ 35 - 18
Module/mod_localmediaplay/mod_localmediaplay.cpp

@@ -88,6 +88,8 @@ CLocalMediaPlayEntity::CLocalMediaPlayEntity()
 	memset(m_pPicturePlayer, 0, sizeof(m_pPicturePlayer));
 	m_uMediaPlayThreadId = 0;
 	m_badplayflag = true;
+	m_bgetflag = false;
+	m_bgetico = false;
 #endif // RVC_OS_WIN
 
 	ZeroMemory(&m_mediaParam, sizeof(MediaPlayParam));
@@ -109,6 +111,8 @@ CLocalMediaPlayEntity::~CLocalMediaPlayEntity()
 	if (0 == pthread_join(m_scanThreadId, NULL)) {
 		Dbg("pthread join scanThreadId success.");
 	}
+	m_bgetflag = false;
+	m_bgetico = false;
 	
 #endif // RVC_OS_WIN
 }
@@ -482,11 +486,17 @@ int CLocalMediaPlayEntity::GetMediaPlayerIcoPath(char* strPath, size_t uLen)
 int CLocalMediaPlayEntity::GetAudioOutDevName(char* strDev, size_t uLen)
 {
 	int iRet = -1;
-	int idatalen = m_strAudioOutDev.GetLength();
-	if (uLen > idatalen && idatalen > 0){
-		memcpy(strDev, m_strAudioOutDev.GetData(), idatalen);
+	if (false == m_bgetflag) {
+		int idatalen = m_strAudioOutDev.GetLength();
+		if (uLen > idatalen && idatalen > 0) {
+			memcpy(strDev, m_strAudioOutDev.GetData(), idatalen);
+			iRet = 0;
+			m_bgetflag = true;
+			Dbg("%s:%d audio Out Device Name is %s.", __FUNCTION__, __LINE__, strDev);
+		}
+	}
+	else {
 		iRet = 0;
-		Dbg("%s:%d audio Out Device Name is %s.",__FUNCTION__, __LINE__, strDev);
 	}
 
 	return iRet;
@@ -512,25 +522,32 @@ bool CLocalMediaPlayEntity::GetScanExitFlag()
 int CLocalMediaPlayEntity::GetPlayerIcoPath(char* strPath, size_t uLen)
 {
 	int iRet = -1;
-	if (NULL == strPath) {
-		return iRet;
-	}
-	CSimpleStringA csBinPath;
-	ErrorCodeEnum eErrPath = GetFunction()->GetPath("Bin", csBinPath);
-	if (eErrPath != Error_Succeed) {
-		Dbg("GetBasePath failed (%d).", eErrPath);
-		return iRet;
-	}
+	if (false == m_bgetico) {
+		if (NULL == strPath) {
+			return iRet;
+		}
+		CSimpleStringA csBinPath;
+		ErrorCodeEnum eErrPath = GetFunction()->GetPath("Bin", csBinPath);
+		if (eErrPath != Error_Succeed) {
+			Dbg("GetBasePath failed (%d).", eErrPath);
+			return iRet;
+		}
 
-	CSimpleStringA szIcoName("rvc_media_player_64px.bmp");
-	szIcoName = csBinPath + SPLIT_SLASH_STR + szIcoName;
-	//Dbg("media player ico full path is %s.", szIcoName.GetData());
+		CSimpleStringA szIcoName("rvc_media_player_64px.bmp");
+		szIcoName = csBinPath + SPLIT_SLASH_STR + szIcoName;
+		Dbg("media player ico full path is %s.", szIcoName.GetData());
 
-	if (uLen > szIcoName.GetLength()) {
-		memcpy(strPath, szIcoName.GetData(), szIcoName.GetLength());
+		if (uLen > szIcoName.GetLength()) {
+			memcpy(strPath, szIcoName.GetData(), szIcoName.GetLength());
+			iRet = 0;
+			m_bgetico = true;
+		}
+	}
+	else {
 		iRet = 0;
 	}
 
+
 	return iRet;
 }
 

+ 2 - 0
Module/mod_localmediaplay/mod_localmediaplay.h

@@ -189,6 +189,8 @@ private:
 	volatile bool m_badplayflag;
 	bool m_scanexitflag;
 	CSimpleStringA m_strAudioOutDev;
+	bool m_bgetflag;
+	bool m_bgetico;
 #endif // RVC_OS_WIN
 };
 

+ 3 - 6
Other/libaudions/iaudionsinterface.h

@@ -1,7 +1,6 @@
-#ifndef _LIB_AUDIO_NS_INTERFACE_H_
-#define _LIB_AUDIO_NS_INTERFACE_H_
+#pragma  once
 
-#ifdef RVC_OS_WIN
+#ifdef _WIN32
 #ifdef LIBAUDIONS_EXPORTS
 #define IAUDIONSINTERFACE_API __declspec(dllexport)
 #else
@@ -32,6 +31,4 @@ public:
 };
 
 extern "C" IAUDIONSINTERFACE_API IAudioNs* CreateIAudioNsObj(audions_callback_t* pCallback);
-extern "C" IAUDIONSINTERFACE_API void DestroyIAudioNsObj(IAudioNs* pIAudioNs);
-
-#endif
+extern "C" IAUDIONSINTERFACE_API void DestroyIAudioNsObj(IAudioNs* pIAudioNs);

+ 2 - 0
Other/libaudions/libaudions.cpp

@@ -187,6 +187,8 @@ void AudioNsImpl::NsLog(const char* fmt, ...)
 	}
 }
 
+
+
 void AudioNsImpl::ReleaseObj()
 {
 	NsLog("AudioNsImpl ReleaseObj.");

+ 11 - 10
Other/libmediaplayer/player.cpp

@@ -10,6 +10,8 @@
 #include "audio.h"
 
 
+static int initialized = 0;
+
 // 返回值:返回上一帧的pts更新值(上一帧pts+流逝的时间)
 double get_clock(play_clock_t *c)
 {
@@ -122,17 +124,17 @@ CMediaPlayer::CMediaPlayer(CMediaHostApi* pHostApi)
 		m_hostapi->Debug(MEDIA_LOG_DEBUG, "new CMediaPlayer failed!");
 	}
 
-	Uint32 uRet = SDL_WasInit(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER);
-
-	if (0 == uRet){
-		if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER))
-		{
+	if (initialized){
+		++initialized;
+	}
+	else {
+		if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER)){
 			m_hostapi->Debug(MEDIA_LOG_ERROR, "Could not initialize SDL - %s", SDL_GetError());
 			m_hostapi->Debug(MEDIA_LOG_ERROR, "(Did you set the DISPLAY variable?)");
 		}
 		else {
-			uRet = SDL_WasInit(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER);
-			m_hostapi->Debug(MEDIA_LOG_DEBUG, "initialize SDL success, and init ret = %d.", uRet);
+			initialized++;
+			m_hostapi->Debug(MEDIA_LOG_DEBUG, "initialize SDL success");
 		}
 	}
 }
@@ -153,10 +155,9 @@ CMediaPlayer::~CMediaPlayer()
 		m_paudiodev = NULL;
 	}
 
-	Uint32 uRet = SDL_WasInit(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER);
-	Uint32 uFlag = SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER;
-	if (uFlag == uRet) {
+	if (--initialized == 0){
 		SDL_Quit();
+		m_hostapi->Debug(MEDIA_LOG_ERROR, "SDL_Quit");
 	}
 }