亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mediaplayback.cpp

?? < VC++視頻音頻開發(fā)>> 這本書的源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號(hào):
					playback->buffering = TRUE;

					while(size < sizeI + playback->input->GetBufferingSize() && !(playback->input->GetBufferSize() >= playback->input->GetSize())) {

						Sleep(10);
						size = playback->input->GetBufferSize();
						
						playback->bufferingProgress = (size - sizeI) * 100 / playback->input->GetBufferingSize();
					}

					playback->buffering   = FALSE;
					playback->hasToBuffer = FALSE;

					playback->decaps->UpdateForSize();

					RECT rect;

					GetClientRect(playback->hwndPlayback, &rect);
					InvalidateRect(playback->hwndPlayback, &rect, TRUE); 
	 				UpdateWindow(playback->hwndPlayback);
		
					if(playback->audioRenderer->paused)
						playback->audioRenderer->Pause();
				}
			}

startPlayingWAudio:

			frame = NULL;

			if(!playback->paused) {

				if(playback->fastForward) {

					playback->decaps->SeekNextKeyFrame(0);
				}
				else {
					if(playback->rewind) {
	
						playback->decaps->SeekPreviousKeyFrame(0);
					}
				}

				/*
				 * 同步
				 *
				 */

				if(!playback->fastForward && !playback->rewind) {

					timeDiff = playback->GetVideoTime() - playback->GetAudioTime();



					if(timeDiff == 0) {
					
						/*
						 * 什么也不做
						 */
					}
					else {

						if(timeDiff > 10) {
							Sleep(timeDiff/2);
						}

						if(timeDiff < -150) {
					
							/*
							 * 跳過,不進(jìn)行補(bǔ)償
							 */	
					
							playback->videoBuffer->DropOneFrame();
							playback->videoFrames++;
						}


						if(timeDiff < -230) {
						
							/*
							 * 跳過,不進(jìn)行補(bǔ)償
							 */	
							
							playback->videoBuffer->DropOneFrame();
							playback->videoFrames++;
						}
					}
				}
				else {

					Sleep(120);
				}

				frame = playback->videoBuffer->GetOneFrame();
				playback->videoFrames++;

				if(frame == NULL) {

					/*
					 * 在文件或緩沖末尾
					 */

					if(playback->input->GetCaps() & MEDIA_CAPS_BUFFERIZE) {

						if(playback->input->GetBufferSize() < playback->input->GetSize()) {

							goto startBufferingWAudio;
						}
						else {

							if(!playback->audioRenderer->paused)
								playback->audioRenderer->Pause();

							playback->decaps->UpdateForSize();

							frame = playback->videoBuffer->GetOneFrame();

							if(playback->audioRenderer->paused)
								playback->audioRenderer->Pause();
						}
					}
				}

				if(frame == NULL) {

					if(!playback->loop) {
						
						SendMessage(playback->hwndPlayback, WM_PLAYA_PLAYBACK_END, 0, 0);
						playback->Stop(TRUE);
					}
					else {

						playback->decaps->Rewind(0, 0);
						
						if(!playback->fastForward && !playback->rewind) {
		
							if(playback->hasAudio)
								playback->audioRenderer->Stop();
	
							if(playback->hasAudio)
								playback->audioDecoder->EmptyAudioBuffer();
						}

						playback->audioBytes      = 0;
						playback->videoFrames     = 0;
						
						playback->videoBuffer->StopBuffering();
						playback->videoBuffer->StartBuffering(playback->decaps->GetVideoWidth(0));
					
						if(!playback->fastForward && !playback->rewind) {

							if(playback->hasAudio)
								playback->audioRenderer->Start();
						}
						
						goto startPlayingWAudio;
					}

					break;
				}

				WaitForSingleObject(playback->playbackMutex, INFINITE);

				if(!playback->paused) {
					
					if(playback->fullscreen) {
						
						playback->videoRenderer->DrawFullscreen(frame, playback->decaps->GetCurrentVideoFrame(0), playback->videoDecoder->GetInvertFlag(), playback->desktopMode);
					}
					else {
						
						playback->videoRenderer->Draw(frame, playback->videoRect, playback->decaps->GetCurrentVideoFrame(0), playback->videoDecoder->GetInvertFlag());
					}
				}

				ReleaseMutex(playback->playbackMutex);
			}
		}
	}

	return 0;
}

/*
 * 圖形設(shè)備接口(GDI)方法
 *
 */

MP_RESULT     MediaPlayback::FlipToGDI() 
{
	return MP_RESULT_OK;
}


/**************************************************************
 *                                                            *
 *                      視頻回調(diào)方法                          *
 *                 ------------------------                   *
 *                                                            *
 **************************************************************/


MP_RESULT     MediaPlayback::Play()
{
	if(this->HasAudio() || this->HasVideo()) {

		if(this->fastForward) {
	
			this->fastForward = FALSE;

			this->baseTime = GetTickCount();

			this->videoFrames = 0;
			this->audioBytes  = 0;

			if(this->decaps) {
			
				this->decaps->ReSeekAudio(0);
			}

			if(this->hasAudio) {

				this->audioDecoder->EmptyAudioBuffer();
			
				this->audioRenderer->SetVolume(this->volume);

				this->audioRenderer->Stop();
				this->audioRenderer->Start();
			}
		}
		else {

			if(this->rewind) {
	
				this->rewind  = FALSE;

				this->baseTime = GetTickCount();

				this->videoFrames     = 0;
				this->audioBytes      = 0;

				if(this->decaps) {
				
					this->decaps->ReSeekAudio(0);
				}

				if(this->hasAudio) {

					this->audioDecoder->EmptyAudioBuffer();
			
					this->audioRenderer->SetVolume(this->volume);
					this->audioRenderer->Stop();
					this->audioRenderer->Start();
				}
			}
			else {

				if(this->paused) {

					this->Pause();
					return MP_RESULT_OK;
				}

				if(this->playing)
					return MP_RESULT_ERROR;

				this->playing = TRUE;
				this->paused  = FALSE;

				this->videoFrames = 0;
				this->audioBytes  = 0;

				this->decaps->Rewind(0, 0);

				if(this->HasAudio()) {
			
					this->audioDecoder->EmptyAudioBuffer();

					this->audioRenderer->SetVolume(this->volume);

					this->videoBuffer->StartBuffering(this->decaps->GetVideoWidth(0));

					if(this->audioRenderer->paused && (this->input->GetCaps() & MEDIA_CAPS_BUFFERIZE)) {

						this->audioRenderer->Pause();
						this->audioRenderer->Stop();
						this->audioRenderer->Start();
					}
					else {
						this->audioRenderer->Start();
					}

					this->videoThread = CreateThread( NULL, 0, PlaybackVideoAndAudioThreadFunc, (LPVOID) this, 0, &this->videoThreadId );
		
					return MP_RESULT_OK;
				}
				else {
				
					if(this->HasVideo()) {

						this->videoBuffer->StartBuffering(this->decaps->GetVideoWidth(0));
	
						this->videoThread = CreateThread( NULL, 0, PlaybackVideoOnlyThreadFunc, (LPVOID) this, 0, &this->videoThreadId );

						return MP_RESULT_OK;
					}
				}
			}
		}
	}

	return MP_RESULT_ERROR;	
}

MP_RESULT     MediaPlayback::Pause()
{
	if(this->playing) {

		if(this->paused) {

			if(this->hasAudio) {
				this->audioRenderer->Pause();
			}

			this->paused = FALSE;

			ReleaseMutex(this->playbackMutex);

			this->baseTime += (GetTickCount() - this->stopTime);

			ResumeThread(this->videoThread);
		}
		else {
		
			WaitForSingleObject(this->playbackMutex, INFINITE);

			if(!this->fastForward && !this->rewind) {
				
				if(this->hasAudio) {
					this->audioRenderer->Pause();
				}
			}
			else {
				
				this->videoFrames     = 0;

				if(this->hasAudio) {
					
					this->decaps->ReSeekAudio(0);
					this->audioDecoder->EmptyAudioBuffer();
				
					this->audioBytes     = 0;

					this->audioRenderer->Stop();
					this->audioRenderer->Start();
					this->audioRenderer->Pause();
				}
			}

			this->fastForward = FALSE;
			this->rewind      = FALSE;

			this->stopTime = GetTickCount();

			SuspendThread(this->videoThread);
			this->paused = TRUE;
		}
	}

	return MP_RESULT_ERROR;	
}

MP_RESULT     MediaPlayback::NextFrame()
{
	return MP_RESULT_ERROR;	
}

MP_RESULT     MediaPlayback::Stop(int redrawWindow)
{
	if(this->paused)
		this->Pause();

	if(this->playing) {

		WaitForSingleObject(this->playbackMutex, INFINITE);	
		
		if(this->hasAudio) {

			this->audioRenderer->Stop();
		}

		this->playing = FALSE;

		this->buffering = FALSE;
		this->bufferingProgress = 0;

		if(this->HasVideo()) {

			this->videoBuffer->StopBuffering();
		}

		ReleaseMutex(this->playbackMutex);
	}

	this->fastForward  = FALSE;
	this->rewind       = FALSE;

	this->playing      = FALSE;
	this->paused       = FALSE;

	this->audioBytes      = 0;
	this->videoFrames     = 0;

	this->decaps->Rewind(0, 0);

	if(this->hasAudio)
		this->audioDecoder->EmptyAudioBuffer();

	if(this->videoRenderer)
		this->videoRenderer->Stop();

	/*
	 * 刷新
	 */

	RECT rect;

	if(redrawWindow) {
		
		GetClientRect(this->hwndPlayback, &rect);
		InvalidateRect(this->hwndPlayback, &rect, TRUE); 
	 	UpdateWindow(this->hwndPlayback);
	}

	TerminateThread(this->videoThread, 0);

	return MP_RESULT_ERROR;	
}

MP_RESULT     MediaPlayback::FastForward()
{
	if(this->paused) {

		this->fastForward = TRUE;
		this->paused      = FALSE;

		ReleaseMutex(this->playbackMutex);
		this->baseTime += (GetTickCount() - this->stopTime);

		ResumeThread(this->videoThread);

		return MP_RESULT_OK;
	}

	if(this->playing && !this->rewind && !this->fastForward) {

		if(this->hasAudio) {
			this->audioRenderer->Stop();
		}

		this->stopTime = GetTickCount();

		this->fastForward = TRUE;
	}

	return MP_RESULT_OK;	
}

MP_RESULT     MediaPlayback::Rewind()
{
	if(this->paused) {

		this->rewind = TRUE;
		this->paused = FALSE;

		ReleaseMutex(this->playbackMutex);
		this->baseTime += (GetTickCount() - this->stopTime);

		ResumeThread(this->videoThread);

		return MP_RESULT_OK;
	}

	if(this->playing && !this->fastForward && !this->rewind) {

		if(this->hasAudio) {
			this->audioRenderer->Stop();
		}

		this->stopTime = GetTickCount();

		this->rewind = TRUE;
	}


	return MP_RESULT_OK;	
}

MP_RESULT     MediaPlayback::MaintainImage()
{
	if(this->HasVideo()) {

		if(this->fullscreen) {

			this->videoRenderer->DrawFullscreen(this->videoBuffer->GetLastFrame(), 0, this->videoDecoder->GetInvertFlag(), this->desktopMode);
		}
		else {
			
			this->videoRenderer->Draw(this->videoBuffer->GetLastFrame(), this->videoRect, 0, this->videoDecoder->GetInvertFlag());
		}
	}

	return MP_RESULT_OK;
}

MP_RESULT     MediaPlayback::Seek(int percent)
{
	int has_to_play = 0;
	RECT rect;
	
	if(this->HasAudio() || this->HasVideo()) {
	
		if(this->playing) {

			Stop(FALSE);
			has_to_play = 1;
		}

		this->decaps->Seek(0, 0, percent);

		if(this->input->GetCaps() & MEDIA_CAPS_BUFFERIZE) {

			this->decaps->UpdateForSize();
		}

		if(this->hasAudio)
			this->audioDecoder->EmptyAudioBuffer();

		if(has_to_play) {
	
			this->playing = TRUE;
			this->paused  = FALSE;

			this->videoFrames     = 0;
			this->audioBytes      = 0;

			if(this->HasAudio()) {
			
				this->audioRenderer->Start();

				this->videoThread = CreateThread( NULL, 0, PlaybackVideoAndAudioThreadFunc, (LPVOID) this, 0, &this->videoThreadId );
			}
			else {
				
				this->videoThread = CreateThread( NULL, 0, PlaybackVideoOnlyThreadFunc, (LPVOID) this, 0, &this->videoThreadId );
			}
		}

		GetClientRect(this->hwndPlayback, &rect);
		InvalidateRect(this->hwndPlayback, &rect, TRUE); 
	 	UpdateWindow(this->hwndPlayback);

	}
	
	return MP_RESULT_ERROR;	
}

MP_RESULT     MediaPlayback::SetFullscreen(int active, HWND hwnd)
{
	if(active && !this->fullscreen) {

		int has_to_play = 0;

		if(this->playing && !this->paused) {
			
			this->Pause();
			has_to_play = 1;
		}
		
		this->fullscreen = TRUE;

		if(this->videoRenderer->InitFullscreen(hwnd, this->decaps->GetVideoWidth(0), this->decaps->GetVideoHeight(0)) != MP_RESULT_OK) {
		
			this->videoRenderer->Init(hwnd, this->decaps->GetVideoWidth(0), this->decaps->GetVideoHeight(0));
			this->fullscreen = FALSE;

			return MP_RESULT_ERROR;
		}
			
		if(has_to_play) {

			this->Pause();
		}
	}
	else {
	
	if(this->fullscreen) {
	
			int has_to_play = 0;

			if(this->playing && !this->paused) {
			
				this->Pause();
				has_to_play = 1;
			}

			this->videoRenderer->Init(hwnd, this->decaps->GetVideoWidth(0), this->decaps->GetVideoHeight(0));
			this->fullscreen = FALSE;
		
			if(has_to_play) {

				this->Pause();
			}
		}
	}
	
	return MP_RESULT_ERROR;	
}

MP_RESULT     MediaPlayback::SetVolume(int volume)
{
	this->volume = volume;

	if(this->hasAudio) {

		this->audioRenderer->SetVolume(this->volume);
	}

	return MP_RESULT_OK;	
}

MP_RESULT     MediaPlayback::SetLoop(int loop)
{
	this->loop = loop;

	return MP_RESULT_OK;	
}

MP_RESULT     MediaPlayback::SetDesktopMode(BOOL on)
{
	this->desktopMode = on;

	return MP_RESULT_OK;
}

MP_RESULT     MediaPlayback::SetVideoRect(RECT *rect)
{
	this->videoRect = rect;

	return MP_RESULT_OK;
}

MP_RESULT     MediaPlayback::Close()
{
	if(this->input)
		this->input->Close();

	if(this->HasVideo()) {

		/*
		 * 清除視頻
		 *
		 */

		this->Stop(FALSE);

		this->videoRenderer->Close();

		this->videoBuffer->StopBuffering();

		this->videoBuffer->ReleaseConnections();
		this->videoDecoder->ReleaseConnections();
		this->decaps->ReleaseConnections();

	}

	if(this->HasAudio()) {

		/*
		 * 清除音頻
		 *
		 */

		this->audioRenderer->Close();
		this->audioDecoder->ReleaseConnections();
	}

	if(this->hasSubtitles) {

		this->subtitler->ReleaseConnections();
		this->subtitler->Close();
	}

	return MP_RESULT_OK;	
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月婷婷另类国产| 亚洲国产精品精华液ab| 久久综合九色综合久久久精品综合| 欧美成人精品二区三区99精品| 欧美不卡在线视频| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 精品视频一区三区九区| 欧美精品乱码久久久久久| 久久亚洲综合av| 精品一区二区三区日韩| 国产黄人亚洲片| 欧美亚日韩国产aⅴ精品中极品| 日韩色在线观看| 亚洲视频在线一区二区| 青青草国产精品亚洲专区无| 成人国产精品免费网站| 欧美另类一区二区三区| 国产欧美一区二区精品性色| 性久久久久久久久| 成人的网站免费观看| 欧美一级二级三级蜜桃| 中文字幕一区二区三区在线不卡| 日韩电影一二三区| av不卡免费在线观看| 欧美一卡2卡3卡4卡| 亚洲人成网站精品片在线观看| 免费成人小视频| 欧美做爰猛烈大尺度电影无法无天| 精品sm在线观看| 亚洲一区二区视频在线| 国产999精品久久久久久| 欧美一二三四在线| 亚洲天堂久久久久久久| 激情欧美一区二区三区在线观看| 欧美综合欧美视频| 亚洲国产精品黑人久久久| 久久国产日韩欧美精品| 91传媒视频在线播放| 国产精品美女一区二区| 久久国产精品99精品国产 | 亚洲综合一区在线| 国产suv精品一区二区三区| 欧美男人的天堂一二区| 综合久久久久久久| 国产激情视频一区二区三区欧美| 欧美精品电影在线播放| 一区二区三区在线高清| 成人黄页毛片网站| 久久综合精品国产一区二区三区| 午夜不卡av免费| 色婷婷av一区| 专区另类欧美日韩| 国产成人久久精品77777最新版本| 欧美一区二区三区的| 亚洲成a人片综合在线| 99re成人精品视频| 国产精品妹子av| 成人午夜大片免费观看| 久久久久国产精品人| 激情图区综合网| 精品久久久久久无| 久久精品国内一区二区三区| 日韩一区和二区| 日韩av中文字幕一区二区| 欧美日韩激情一区| 日韩中文字幕亚洲一区二区va在线| 在线观看中文字幕不卡| 亚洲与欧洲av电影| 欧美日韩一级黄| 亚洲成人av一区| 欧美人体做爰大胆视频| 日韩国产精品91| 日韩视频一区二区在线观看| 奇米精品一区二区三区四区| 欧美一卡二卡三卡四卡| 美女在线视频一区| 精品三级av在线| 韩国女主播一区| 国产片一区二区三区| 粉嫩一区二区三区在线看| 国产女人18水真多18精品一级做| 国产剧情一区二区三区| 久久精品视频一区| 成人免费黄色大片| 日韩伦理免费电影| 在线观看av一区二区| 视频在线观看91| 精品福利视频一区二区三区| 国产一区二区精品久久99| 日本一区二区视频在线| www.av亚洲| 亚洲一级在线观看| 欧美一区二区三区视频| 国产永久精品大片wwwapp | 日本精品视频一区二区| 亚洲国产精品综合小说图片区| 欧美疯狂做受xxxx富婆| 蜜臀精品久久久久久蜜臀| 亚洲精品一线二线三线| 成熟亚洲日本毛茸茸凸凹| 亚洲人成电影网站色mp4| 欧美视频一区二区| 精品中文字幕一区二区| 国产精品污污网站在线观看| 91美女在线观看| 日韩国产欧美在线播放| 久久九九国产精品| 在线亚洲免费视频| 毛片av一区二区| 国产精品私人影院| 欧美日韩一区二区电影| 国产一区在线看| 一区二区三区成人| 日韩一区二区免费在线观看| 成人激情免费视频| 三级久久三级久久久| 国产区在线观看成人精品| 欧美视频一区二区三区四区| 韩国v欧美v亚洲v日本v| 一区二区三区四区乱视频| 日韩欧美国产1| 色综合久久久久| 精品一区二区三区免费播放 | 精品视频在线免费看| 国产在线观看一区二区| 亚洲黄色小视频| 精品国产sm最大网站免费看| 色综合一区二区| 国产精品主播直播| 亚洲成人你懂的| 亚洲国产精品ⅴa在线观看| 9191成人精品久久| 成人毛片老司机大片| 日韩国产一二三区| 亚洲伦在线观看| 久久久www免费人成精品| 欧美撒尿777hd撒尿| 成人免费视频免费观看| 麻豆极品一区二区三区| 亚洲午夜电影在线| 中文av字幕一区| 久久综合色8888| 欧美精品久久一区| 在线视频你懂得一区| 成人亚洲一区二区一| 轻轻草成人在线| 亚洲国产一区视频| 亚洲人成在线播放网站岛国 | 91在线你懂得| 国产成人免费视频一区| 毛片基地黄久久久久久天堂| 亚洲国产成人va在线观看天堂| 国产日产欧美一区| 精品成人免费观看| 日韩欧美二区三区| 制服丝袜中文字幕一区| 91精品91久久久中77777| 波多野结衣91| 成人午夜av电影| 国产成人精品三级麻豆| 激情小说亚洲一区| 奇米色777欧美一区二区| 性做久久久久久久久| 亚洲一区二区三区激情| 亚洲六月丁香色婷婷综合久久 | 成人av片在线观看| 国产成人夜色高潮福利影视| 国产专区欧美精品| 久久av老司机精品网站导航| 日本vs亚洲vs韩国一区三区| 亚洲国产成人精品视频| 亚洲制服欧美中文字幕中文字幕| 亚洲视频每日更新| 中文一区二区在线观看| 国产欧美精品一区aⅴ影院 | 波多野结衣视频一区| 国产a精品视频| 国产成人av电影在线观看| 国产在线精品一区在线观看麻豆| 精品一区二区三区香蕉蜜桃 | 亚洲国产岛国毛片在线| 国产人伦精品一区二区| 中文字幕久久午夜不卡| 中文字幕亚洲视频| 亚洲精品免费一二三区| 一区二区三区日韩在线观看| 亚洲午夜激情网页| 日日夜夜免费精品| 久久精品国产一区二区| 久久国产精品一区二区| 国内精品第一页| 丁香一区二区三区| 成人av手机在线观看| 色伊人久久综合中文字幕| 欧美亚洲综合一区| 欧美一卡2卡3卡4卡| 久久先锋资源网| 中文字幕一区二区三区在线观看| 亚洲欧洲制服丝袜| 手机精品视频在线观看|