소스 검색

Z991239-4806 #comment 优化本地播放实体稳定性问题

80274480 1 년 전
부모
커밋
5590f61ba6
5개의 변경된 파일76개의 추가작업 그리고 57개의 파일을 삭제
  1. 46 17
      Module/mod_localmediaplay/mod_localmediaplay.cpp
  2. 21 22
      Other/libmediaplayer/audio.cpp
  3. 7 14
      Other/libmediaplayer/player.cpp
  4. 1 2
      Other/libmediaplayer/player.h
  5. 1 2
      Other/libmediaplayer/video.cpp

+ 46 - 17
Module/mod_localmediaplay/mod_localmediaplay.cpp

@@ -204,8 +204,8 @@ CLocalMediaPlayEntity::CLocalMediaPlayEntity()
 	m_iPlayType = 0;
 	m_bStartRecord = false;
 	m_leftlen = 0;
-	m_piclevel = PIC_LOG_ERROR;
-	m_medialevel = MEDIA_LOG_ERROR;
+	m_piclevel = PIC_LOG_INFO;
+	m_medialevel = MEDIA_LOG_INFO;
 }
 
 
@@ -927,11 +927,11 @@ ErrorCodeEnum CLocalMediaPlayEntity::LoadEntityConfig()
 {
 	SpIniMappingTable table;
 	int iPlayType = 0;
-	int iMediaLogLevel = (int)MEDIA_LOG_ERROR;
-	int iPicLogLevel = (int)PIC_LOG_ERROR;
+	int iMediaLogLevel = (int)MEDIA_LOG_INFO;
+	int iPicLogLevel = (int)PIC_LOG_INFO;
 	table.AddEntryInt("LocalMediaPlay", "PlayType", iPlayType, 0);
-	table.AddEntryInt("LocalMediaPlay", "MediaLevel", iMediaLogLevel, (int)MEDIA_LOG_ERROR);
-	table.AddEntryInt("LocalMediaPlay", "PicLevel", iPicLogLevel, (int)PIC_LOG_ERROR);
+	table.AddEntryInt("LocalMediaPlay", "MediaLevel", iMediaLogLevel, (int)MEDIA_LOG_INFO);
+	table.AddEntryInt("LocalMediaPlay", "PicLevel", iPicLogLevel, (int)PIC_LOG_INFO);
 
 	CSmartPointer<IConfigInfo> spConfig;
 	ErrorCodeEnum Error = GetFunction()->OpenConfig(Config_CenterSetting, spConfig);
@@ -1510,6 +1510,14 @@ DWORD WINAPI MediaPlayThread(LPVOID param)
 		}
 	}
 
+	if (entity->m_badplayflag) {
+		entity->m_badplayflag = false;
+	}
+	
+	if (entity->m_playThread) {
+		entity->m_playThread = NULL;
+	}
+	
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Exit MediaPlayThread.");
 
 	return 0;
@@ -1650,7 +1658,15 @@ DWORD WINAPI StartMediaPlayFunc(LPVOID param)
 		}
 	}
 	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Leave Media Play Function.");
-	entity->m_uMediaPlayThreadId = 0;
+
+	if (entity->m_badplayflag) {
+		entity->m_badplayflag = false;
+	}
+
+	if (0 != entity->m_uMediaPlayThreadId) {
+		entity->m_uMediaPlayThreadId = 0;
+	}
+
 	return iRet;
 }
 #else
@@ -1898,7 +1914,7 @@ void CLocalMediaPlayEntity::StartVideo(int nCfgInx, int nWndX, int nWndY, int nW
 				m_badplayflag = true;
 				m_playThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&MediaPlayThread, this, 0, NULL);
 			}
-	}
+		}
 		else {
 			if (NULL != m_uMediaPlayThreadId) {
 				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Current is playing video, close it.");
@@ -1989,7 +2005,11 @@ void CLocalMediaPlayEntity::StartAudio(const char *pAudioNames)
 		if (0 != m_uMediaPlayThreadId) {
 			m_pMediaAudioPlayer->Close();
 			m_uMediaPlayThreadId = 0;
+#ifdef RVC_OS_WIN
 			Sleep(500);
+#else
+			usleep(500*1000);
+#endif // RVC_OS_WIN
 		}
 	}
 
@@ -2064,9 +2084,12 @@ void CLocalMediaPlayEntity::StopVideo(int nCfgInx)
 			}
 		}
 #else
-		m_pMediaPlayer[nCfgInx]->Close();
-		m_pPicturePlayer[nCfgInx]->Close();
-		m_badplayflag = false;
+		if (0 != m_uMediaPlayThreadId) {
+			m_pMediaPlayer[nCfgInx]->Close();
+			m_pPicturePlayer[nCfgInx]->Close();
+			pthread_join(m_uMediaPlayThreadId, NULL);
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Succeed to StopVideo!");
+		}
 #endif
 	}
 }
@@ -2082,13 +2105,16 @@ void CLocalMediaPlayEntity::StopAudio()
 	} 
 	else{
 		if(FALSE == m_pMediaAudioPlayer->checkIsStop())
+			m_pMediaAudioPlayer->Close();
+			m_buserstopaudio = true;
+			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Succeed to StopAudio!");
+	}
+#else
+	if (false == m_pMediaAudioPlayer->checkIsStop()) {
 		m_pMediaAudioPlayer->Close();
 		m_buserstopaudio = true;
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Succeed to StopAudio!");
 	}
-#else
-	m_pMediaAudioPlayer->Close();
-	m_buserstopaudio = true;
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Succeed to StopAudio!");
 #endif
 }
 
@@ -2114,7 +2140,10 @@ void CLocalMediaPlayEntity::StopImage(int nCfgInx)
 			}
 		}
 #else
-		m_pPicturePlayer[nCfgInx]->Close();
+		if (false == m_pPicturePlayer[nCfgInx]->checkIsStop()) {
+			m_pPicturePlayer[nCfgInx]->Close();
+			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Succeed to StopImage!");
+		}
 #endif
 	}
 }
@@ -2616,7 +2645,7 @@ void CLocalMediaPlaySession::Handle_StartPlayAudio(SpReqAnsContext<PlayService_S
 {
 	DbgToBeidou(ctx->link, __FUNCTION__)();
 	CSimpleStringA AudioNames = CSimpleStringW2A(ctx->Req.AudioNames);
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("start play audio, name:%s", AudioNames);
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("start play audio, name:%s", AudioNames.GetData());
 
 	CSimpleStringA UpdateState = "";
 	ErrorCodeEnum Error = m_pEntity->GetFunction()->GetSysVar("UpdateState", UpdateState);

+ 21 - 22
Other/libmediaplayer/audio.cpp

@@ -165,7 +165,7 @@ int open_audio_stream(player_stat_t *is)
 		// 1.2 获取解码器
 		p_codec = avcodec_find_decoder(p_codec_par->codec_id);
 		if (NULL == p_codec) {
-			is->rvc_hostapi->Debug(MEDIA_LOG_DEBUG, "Cann't find codec!");
+			is->rvc_hostapi->Debug(MEDIA_LOG_ERROR, "Cann't find codec!");
 			return ret;
 		}
 
@@ -173,19 +173,19 @@ int open_audio_stream(player_stat_t *is)
 		// 1.3.1 p_codec_ctx初始化:分配结构体,使用p_codec初始化相应成员为默认值
 		p_codec_ctx = avcodec_alloc_context3(p_codec);
 		if (p_codec_ctx == NULL) {
-			is->rvc_hostapi->Debug(MEDIA_LOG_DEBUG, "avcodec_alloc_context3() failed.");
+			is->rvc_hostapi->Debug(MEDIA_LOG_ERROR, "avcodec_alloc_context3() failed.");
 			return ret;
 		}
 		// 1.3.2 p_codec_ctx初始化:p_codec_par ==> p_codec_ctx,初始化相应成员
 		ret = avcodec_parameters_to_context(p_codec_ctx, p_codec_par);
 		if (ret < 0) {
-			is->rvc_hostapi->Debug(MEDIA_LOG_DEBUG, "avcodec_parameters_to_context() failed %d.", ret);
+			is->rvc_hostapi->Debug(MEDIA_LOG_ERROR, "avcodec_parameters_to_context() failed %d.", ret);
 			return ret;
 		}
 		// 1.3.3 p_codec_ctx初始化:使用p_codec初始化p_codec_ctx,初始化完成
 		ret = avcodec_open2(p_codec_ctx, p_codec, NULL);
 		if (ret < 0) {
-			is->rvc_hostapi->Debug(MEDIA_LOG_DEBUG, "avcodec_open2() failed %d.", ret);
+			is->rvc_hostapi->Debug(MEDIA_LOG_ERROR, "avcodec_open2() failed %d.", ret);
 			return ret;
 		}
 
@@ -224,7 +224,6 @@ static int audio_resample(player_stat_t *is, int64_t audio_callback_time)
         av_usleep(1000);
     }
 
-	//is->rvc_hostapi->Debug(MEDIA_LOG_DEBUG, "%s:%d.", __FUNCTION__, __LINE__);
     // 若队列头部可读,则由af指向可读帧
 	if (!(af = frame_queue_peek_readable(&is->audio_frm_queue))) {
 		is->rvc_hostapi->Debug(MEDIA_LOG_DEBUG, "%s:%d user stop flag is %s, function return", __FUNCTION__, __LINE__, is->buser_stop ? "true" : "false");
@@ -259,7 +258,7 @@ static int audio_resample(player_stat_t *is, int64_t audio_callback_time)
             0, NULL);
         if (!is->audio_swr_ctx || swr_init(is->audio_swr_ctx) < 0)
         {
-			is->rvc_hostapi->Debug(MEDIA_LOG_DEBUG, "Cannot create sample rate converter for conversion of %d Hz %s %d channels to %d Hz %s %d channels!",
+			is->rvc_hostapi->Debug(MEDIA_LOG_ERROR, "Cannot create sample rate converter for conversion of %d Hz %s %d channels to %d Hz %s %d channels!",
 				af->frame->sample_rate, av_get_sample_fmt_name((AVSampleFormat)af->frame->format), af->frame->channels,
 				is->audio_param_tgt.freq, av_get_sample_fmt_name((AVSampleFormat)is->audio_param_tgt.fmt), is->audio_param_tgt.channels);
             swr_free(&is->audio_swr_ctx);
@@ -286,7 +285,7 @@ static int audio_resample(player_stat_t *is, int64_t audio_callback_time)
         int out_size = av_samples_get_buffer_size(NULL, is->audio_param_tgt.channels, out_count, (AVSampleFormat)is->audio_param_tgt.fmt, 0);
         int len2 = 0;
         if (out_size < 0){
-			is->rvc_hostapi->Debug(MEDIA_LOG_DEBUG, "av_samples_get_buffer_size() failed.");
+			is->rvc_hostapi->Debug(MEDIA_LOG_ERROR, "av_samples_get_buffer_size() failed.");
             return -1;
         }
         av_fast_malloc(&is->audio_frm_rwr, &is->audio_frm_rwr_size, out_size);
@@ -296,12 +295,12 @@ static int audio_resample(player_stat_t *is, int64_t audio_callback_time)
         // 音频重采样:返回值是重采样后得到的音频数据中单个声道的样本数
         len2 = swr_convert(is->audio_swr_ctx, out, out_count, in, af->frame->nb_samples);
         if (len2 < 0){
-			is->rvc_hostapi->Debug(MEDIA_LOG_DEBUG, "swr_convert() failed.");
+			is->rvc_hostapi->Debug(MEDIA_LOG_ERROR, "swr_convert() failed.");
             return -1;
         }
 
         if (len2 == out_count){
-			is->rvc_hostapi->Debug(MEDIA_LOG_DEBUG, "audio buffer is probably too small.");
+			is->rvc_hostapi->Debug(MEDIA_LOG_ERROR, "audio buffer is probably too small.");
 			if (swr_init(is->audio_swr_ctx) < 0)
                 swr_free(&is->audio_swr_ctx);
         }
@@ -358,14 +357,14 @@ static int open_audio_playing(void *arg)
 	
 	if (NULL == is->straudiodev) {
 		int iaudioapeaker = SDL_GetNumAudioDevices(0);
-		is->rvc_hostapi->Debug(MEDIA_LOG_ERROR, "audio output device number is %d.", iaudioapeaker);
+		is->rvc_hostapi->Debug(MEDIA_LOG_DEBUG, "audio output device number is %d.", iaudioapeaker);
 		int i = 0;
 		for (; i < iaudioapeaker; i++) {
-			is->rvc_hostapi->Debug(MEDIA_LOG_ERROR, "device id %d audio device name is %s.", i, SDL_GetAudioDeviceName(i, 0));
+			is->rvc_hostapi->Debug(MEDIA_LOG_DEBUG, "device id %d audio device name is %s.", i, SDL_GetAudioDeviceName(i, 0));
 			if (is->paudiodev && strstr(SDL_GetAudioDeviceName(i, 0), is->paudiodev)) {
 				const char* strdevname = SDL_GetAudioDeviceName(i, 0);
 				is->straudiodev = av_strdup(strdevname);
-				is->rvc_hostapi->Debug(MEDIA_LOG_ERROR, "%s matched audio device name is %s.", is->paudiodev, strdevname);
+				is->rvc_hostapi->Debug(MEDIA_LOG_INFO, "%s matched audio device name is %s.", is->paudiodev, strdevname);
 				break;
 			}
 		}
@@ -382,10 +381,10 @@ static int open_audio_playing(void *arg)
 				is->rvc_hostapi->Debug(MEDIA_LOG_DEBUG, "[%d] Audio Drivers name is %s.", i, drivername);
 			}
 		}
-		is->rvc_hostapi->Debug(MEDIA_LOG_ERROR, "current audio driver name is %s.", SDL_GetCurrentAudioDriver());
+		is->rvc_hostapi->Debug(MEDIA_LOG_INFO, "current audio driver name is %s.", SDL_GetCurrentAudioDriver());
 	}
 
-	while (!(audio_dev = SDL_OpenAudioDevice(is->straudiodev, 0, &wanted_spec, &actual_spec, SDL_AUDIO_ALLOW_FREQUENCY_CHANGE | SDL_AUDIO_ALLOW_CHANNELS_CHANGE))){
+	while (!(is->m_audio_dev = SDL_OpenAudioDevice(is->straudiodev, 0, &wanted_spec, &actual_spec, SDL_AUDIO_ALLOW_FREQUENCY_CHANGE | SDL_AUDIO_ALLOW_CHANNELS_CHANGE))){
 		is->rvc_hostapi->Debug(MEDIA_LOG_ERROR, "SDL_OpenAudio (%d channels, %d Hz): %s",wanted_spec.channels, wanted_spec.freq, SDL_GetError());
 		if (!wanted_spec.channels) {
 			if (!wanted_spec.freq) {
@@ -395,7 +394,7 @@ static int open_audio_playing(void *arg)
 		}
 	}
 
-	is->rvc_hostapi->Debug(MEDIA_LOG_ERROR, "SDL_OpenAudioDevice success and audio_dev is %d.", audio_dev);
+	is->rvc_hostapi->Debug(MEDIA_LOG_INFO, "SDL_OpenAudioDevice success and audio_dev is %d.", is->m_audio_dev);
     is->audio_param_tgt.fmt = AV_SAMPLE_FMT_S16;
     is->audio_param_tgt.freq = actual_spec.freq;
     is->audio_param_tgt.channel_layout = av_get_default_channel_layout(actual_spec.channels);
@@ -403,11 +402,11 @@ static int open_audio_playing(void *arg)
     is->audio_param_tgt.frame_size = av_samples_get_buffer_size(NULL, actual_spec.channels, 1, (AVSampleFormat)is->audio_param_tgt.fmt, 1);
     is->audio_param_tgt.bytes_per_sec = av_samples_get_buffer_size(NULL, actual_spec.channels, actual_spec.freq, (AVSampleFormat)is->audio_param_tgt.fmt, 1);
 	
-	is->rvc_hostapi->Debug(MEDIA_LOG_ERROR, "audio param target (%d channels, %d Hz, channel_layout(%d), frame_size(%d), bytes_per_sec(%d)).", actual_spec.channels, actual_spec.freq, is->audio_param_tgt.channel_layout, is->audio_param_tgt.frame_size, is->audio_param_tgt.bytes_per_sec);
+	is->rvc_hostapi->Debug(MEDIA_LOG_INFO, "audio param target (%d channels, %d Hz, channel_layout(%d), frame_size(%d), bytes_per_sec(%d)).", actual_spec.channels, actual_spec.freq, is->audio_param_tgt.channel_layout, is->audio_param_tgt.frame_size, is->audio_param_tgt.bytes_per_sec);
 
 	if (is->audio_param_tgt.bytes_per_sec <= 0 || is->audio_param_tgt.frame_size <= 0){
-		is->rvc_hostapi->Debug(MEDIA_LOG_DEBUG, "av_samples_get_buffer_size failed.");
-		SDL_CloseAudioDevice(audio_dev);
+		is->rvc_hostapi->Debug(MEDIA_LOG_ERROR, "av_samples_get_buffer_size failed.");
+		SDL_CloseAudioDevice(is->m_audio_dev);
 		return -1;
     }
     is->audio_param_src = is->audio_param_tgt;
@@ -415,15 +414,15 @@ static int open_audio_playing(void *arg)
     is->audio_frm_size = 0;
     is->audio_cp_index = 0;
 
-	SDL_PauseAudioDevice(audio_dev, 0);
+	SDL_PauseAudioDevice(is->m_audio_dev, 0);
 
 	SDL_LockMutex(is->audio_play_wait_mutex);
 	SDL_CondWait(is->audio_play_cond, is->audio_play_wait_mutex);
 	SDL_UnlockMutex(is->audio_play_wait_mutex);
 
-	is->rvc_hostapi->Debug(MEDIA_LOG_DEBUG, "----------%s:%d before SDL Close Audio Device.", __FUNCTION__, __LINE__);
-	SDL_CloseAudioDevice(audio_dev);
-	is->rvc_hostapi->Debug(MEDIA_LOG_DEBUG, "---------%s:%d after SDL Close Audio Device.", __FUNCTION__, __LINE__);
+	is->rvc_hostapi->Debug(MEDIA_LOG_INFO, "----------%s:%d before SDL Close Audio Device.", __FUNCTION__, __LINE__);
+	SDL_CloseAudioDevice(is->m_audio_dev);
+	is->rvc_hostapi->Debug(MEDIA_LOG_INFO, "---------%s:%d after SDL Close Audio Device", __FUNCTION__, __LINE__);
 
 	return 0;
 }

+ 7 - 14
Other/libmediaplayer/player.cpp

@@ -121,7 +121,7 @@ CMediaPlayer::CMediaPlayer(CMediaHostApi* pHostApi)
 		}
 	}
 	else {
-		m_hostapi->Debug(MEDIA_LOG_DEBUG, "new CMediaPlayer failed!");
+		m_hostapi->Debug(MEDIA_LOG_ERROR, "new CMediaPlayer failed!");
 	}
 
 	if (initialized){
@@ -157,7 +157,7 @@ CMediaPlayer::~CMediaPlayer()
 
 	if (--initialized == 0){
 		SDL_Quit();
-		m_hostapi->Debug(MEDIA_LOG_ERROR, "SDL_Quit");
+		m_hostapi->Debug(MEDIA_LOG_INFO, "SDL_Quit");
 	}
 }
 
@@ -184,12 +184,12 @@ bool CMediaPlayer::SetFinishedFlag()
 	if (NULL != m_player_stat){
 		//m_player_stat->baudio_finished = true;
 		if (NULL != m_hostapi) {
-			m_hostapi->Debug(MEDIA_LOG_ERROR, "%s:%d set baudio_finished to true.", __FUNCTION__, __LINE__);
+			m_hostapi->Debug(MEDIA_LOG_INFO, "%s:%d set baudio_finished to true.", __FUNCTION__, __LINE__);
 		}
 	}
 	else {
 		if (NULL != m_hostapi) {
-			m_hostapi->Debug(MEDIA_LOG_ERROR, "%s:%d m_player_stat is null and set audio finished flag failed.", __FUNCTION__, __LINE__);
+			m_hostapi->Debug(MEDIA_LOG_INFO, "%s:%d m_player_stat is null and set audio finished flag failed.", __FUNCTION__, __LINE__);
 		}
 	}
 	
@@ -220,7 +220,7 @@ int CMediaPlayer::Initialize_Player_Stat(rvc_media_player_param_t* pMedia_Player
 
 	m_player_stat = (player_stat_t*)av_mallocz(sizeof(player_stat_t));
 	if (NULL == m_player_stat) {
-		m_hostapi->Debug(MEDIA_LOG_DEBUG, "player_stat_t struct malloc failed!");
+		m_hostapi->Debug(MEDIA_LOG_ERROR, "player_stat_t struct malloc failed!");
 		return iRet;
 	}
 
@@ -532,16 +532,9 @@ int CMediaPlayer::StopMediaPlay()
 	frame_queue_signal(&m_player_stat->video_frm_queue);
 	frame_queue_signal(&m_player_stat->audio_frm_queue);
 
-	m_hostapi->Debug(MEDIA_LOG_ERROR, "%s:%d set m_player_stat media finished flag to true.", __FUNCTION__, __LINE__);
+	m_hostapi->Debug(MEDIA_LOG_INFO, "%s:%d set m_player_stat media finished flag to true.", __FUNCTION__, __LINE__);
 	m_player_stat->buser_stop = true;
 
-	if (m_bplaying) {
-		m_hostapi->Debug(MEDIA_LOG_DEBUG, "user stop audio play set SDL_PauseAudioDevice param to 1.");
-		if (0 != audio_dev){
-			SDL_PauseAudioDevice(audio_dev, 1);
-		}
-	}
-
 	iRet = 0;
 
 	return iRet;
@@ -569,7 +562,7 @@ int CMediaPlayer::ExitMediaPlayingThread()
 		
 		if (m_player_stat->sdl_video.window){
 			SDL_DestroyWindow(m_player_stat->sdl_video.window);
-			m_hostapi->Debug(MEDIA_LOG_ERROR, "Destroy Window.");
+			m_hostapi->Debug(MEDIA_LOG_DEBUG, "Destroy Window.");
 		}
 	}
 

+ 1 - 2
Other/libmediaplayer/player.h

@@ -220,6 +220,7 @@ typedef struct player_stat_s{
 	volatile uint8_t uVolume;		// 音量大小1-128
 	char* straudiodev;				// 获取到的音频设备名
 	CMediaHostApi* rvc_hostapi;
+	SDL_AudioDeviceID m_audio_dev;
 	
 	char strPlayLists[MAX_FILECOUNT][MAX_PATH];		//播放列表,全路径
 	uint8_t uFilesCount;							//播放文件数
@@ -256,8 +257,6 @@ double get_clock(play_clock_t *c);
 void set_clock_at(play_clock_t *c, double pts, int serial, double time);
 void set_clock(play_clock_t *c, double pts, int serial);
 
-static SDL_AudioDeviceID audio_dev;
-
 class CMediaPlayer
 {
 public:

+ 1 - 2
Other/libmediaplayer/video.cpp

@@ -352,7 +352,6 @@ static int video_playing_thread(void *arg)
     player_stat_t *is = (player_stat_t *)arg;
     double remaining_time = 0.0;
 
-	is->rvc_hostapi->Debug(MEDIA_LOG_DEBUG, "%s:%d.", __FUNCTION__, __LINE__);
     while ((false == is->buser_stop) && (false == is->bvideo_decode_finished)){
         if (remaining_time > 0.0){
             av_usleep((unsigned)(remaining_time * 1000000.0));
@@ -481,7 +480,7 @@ static int open_video_playing(void* arg)
 			return -1;
 		}
 		else {
-			is->rvc_hostapi->Debug(MEDIA_LOG_ERROR, "SDL Create Window success.");
+			is->rvc_hostapi->Debug(MEDIA_LOG_INFO, "SDL Create Window success.");
 		}
 
 		if (eFullScreen_Type == is->eWindType) {