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

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

?? aviomgr.cpp

?? nettalk
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//NetTalk
/*------------------------------------------------------------------------------*\
 =============================
   模塊名稱: AVIOMgr.cpp
 =============================
 
 [版權(quán)]
 
   2000-2002  115軟件工廠  版權(quán)所有
                                              
\*------------------------------------------------------------------------------*/

#include "WndX.h"
#include <vfw.h> 

#include "AVIOMgr.h"
#include "UDPSocket.h"
#include "g729a.h"
#include "AudioPlay.h"
#include <stdio.h>
/*------------------------------------------------------------------------------*/
CAVIOMgr* pMgrInst=0;


/*------------------------------------------------------------------------------*/
//聲音輸入線程,包括聲音的壓縮
DWORD WINAPI CAVIOMgr::AudioInThreadProc(LPVOID lpParameter)
{
	CAVIOMgr* pMgr=(CAVIOMgr*)lpParameter;
	MSG msg;
	while(GetMessage(&msg,0,0,0))
	{
		switch(msg.message)
		{
		case WIM_DATA:
			{
				WAVEHDR* pWH=(WAVEHDR*)msg.lParam;
				waveInUnprepareHeader((HWAVEIN)msg.wParam,pWH,sizeof(WAVEHDR));
							
				if(pWH->dwBytesRecorded!=SIZE_AUDIO_FRAME)
					break;//it's not full recorded,i think the wave recorder has ben
				//stopped,discard it,and don't do anything!
				//
				CopyMemory(pMgr->m_AudioLocal,pWH->lpData,SIZE_AUDIO_FRAME);
				pMgr->OnEncodeAudioData(pMgr->m_AudioLocal,SIZE_AUDIO_FRAME);
				
				waveInPrepareHeader((HWAVEIN)msg.wParam,pWH,sizeof(WAVEHDR));
				waveInAddBuffer((HWAVEIN)msg.wParam,pWH,sizeof(WAVEHDR));
			}
			break;
		}
	}	
	return msg.wParam;
}

/*------------------------------------------------------------------------------*/
//音頻輸出線程,包括音頻解碼
DWORD WINAPI CAVIOMgr::AudioOutThreadProc(LPVOID lpParameter)
{
	
	CAVIOMgr* pMgr=(CAVIOMgr*)lpParameter;
	MSG msg;
	while(GetMessage(&msg,0,0,0))
	{
		switch(msg.message)
		{
		case IOM_AUDIO:
			pMgr->OnDecodeAudioData((PACK_AUDIO*)msg.lParam,(int)msg.wParam);
			break;
		case WOM_DONE:
			{
				WAVEHDR* pwh=(WAVEHDR*)msg.lParam;
				waveOutUnprepareHeader((HWAVEOUT)msg.wParam,pwh,sizeof(WAVEHDR));
				pMgr->m_iAudioBuf--;
				delete []pwh->lpData;//刪除Play調(diào)用時(shí)分配的內(nèi)存
				delete pwh;
			}
			break;
		}
	}
	return msg.wParam;
}

/*------------------------------------------------------------------------------*/
//視頻流回調(diào)函數(shù)
LRESULT CALLBACK CAVIOMgr::VideoStreamCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr)
{
	
	CAVIOMgr* pMgr=(CAVIOMgr*)capGetUserData(hWnd);
	if(pMgr)
	{
		//壓縮視頻數(shù)據(jù)
		pMgr->OnEncodeVideoData((char*)lpVHdr->lpData,lpVHdr->dwBytesUsed);
		
	}	
	return TRUE;
}

/*------------------------------------------------------------------------------*/
//Socket線程,負(fù)責(zé)接收數(shù)據(jù)
DWORD WINAPI CAVIOMgr::SockThreadProc(LPVOID lpParameter)
{
	CAVIOMgr* pMgr=(CAVIOMgr*)lpParameter;

	char buf[4096];
	int iLen=0;
	while(1)
	{
		iLen=pMgr->m_Socket.RecvFrom(buf,4096,(sockaddr*)&pMgr->m_sockaddr);
		if(iLen>0)
		{
			
			switch(*((short*)buf))//check the flag
			{
			case FLAG_CMD:
				{
				//命令
					pMgr->OnCommand((PACK_CMD*)buf,iLen);
				}
				break;
			case FLAG_AUDIO:
				{
					//音頻數(shù)據(jù)
					if(pMgr->m_ds.bAudioOut&&
						pMgr->m_ds.bAudioCodec&&
						pMgr->m_hAudioOut&&
						((PACK_AUDIO*)buf)->session==pMgr->m_session)
					{
						char* p=new char[iLen];
						if(p)
						{
							CopyMemory(p,buf,iLen);
							if(!PostThreadMessage(pMgr->m_dwAudioOutId,IOM_AUDIO,iLen,(LPARAM)p))
								delete []p;
						}
					}
				}
				break;
			case FLAG_VIDEO:
				{
					//視頻數(shù)據(jù)
					if(pMgr->m_ds.bVideoOut&&
						pMgr->m_ds.bVideoCodec&&
						((PACK_VIDEO*)buf)->session==pMgr->m_session)
					{
						
						pMgr->OnDecodeVideoData((PACK_VIDEO*)buf,iLen);			
						
					}
				}
				
				break;
			}
		}
		else
		{
			if(!pMgr->m_Socket.IsSocket())
				break;
		}//the socket should be closed,that is m_Socket have been
		//destroyed,so break the loop and end the thread
	}
	return 0;
}

/*------------------------------------------------------------------------------*/

CAVIOMgr::CAVIOMgr()
{
	pMgrInst=this;	

	m_hSockThread=NULL;

	m_hAudioOut=0;
	m_hAudioIn=0;

	m_idCmd=0;

	m_bEnable=TRUE;
	m_bEnableBandAdjust=TRUE;
	
}

/*------------------------------------------------------------------------------*/
CAVIOMgr::~CAVIOMgr()
{
	Destroy();
	pMgrInst=0;
}

/*------------------------------------------------------------------------------*/
//初始化SOCKET,指定PORT
BOOL CAVIOMgr::InitSocket(UINT nPort)
{
	
	DestroySocket();	
	
	BOOL bRet=FALSE;	
	if(!m_Socket.Create(nPort))
		goto RET;
	//創(chuàng)建socket線程(socket為block方式)
	m_hSockThread=CreateThread(0,0,SockThreadProc,(LPVOID)this,0,&m_dwSockThreadId);
	if(!m_hSockThread)	
		goto RET;
	
	
	bRet=TRUE;
RET:
	if(!bRet)
		DestroySocket();
		
	return bRet;
}

/*------------------------------------------------------------------------------*/

BOOL CAVIOMgr::DestroySocket()
{
	m_Socket.Destroy();
	//
	
	if(m_hSockThread)
	{
		BOOL b=FALSE;
		DWORD ExitCode;
		int Timeout = 50; 
		while(Timeout)//等待線程結(jié)束,如果到一定時(shí)間還沒結(jié)束,就強(qiáng)制結(jié)束
		{			 //因?yàn)镾ocket已經(jīng)destroy了,所以socket線程會返回
			GetExitCodeThread(m_hSockThread, &ExitCode);
			
			if (ExitCode != STILL_ACTIVE)
			{
				b=TRUE;
				// Thread has ended.
				break;
			}
			else
			{
				Sleep(10);
			}
			
			--Timeout;
		}
		if(!b)//time out ,terminate it
			TerminateThread(m_hSockThread,0);
				
	}
	m_hSockThread=NULL;
	return TRUE;
}

/*------------------------------------------------------------------------------*/
//設(shè)定目標(biāo)
void CAVIOMgr::SetDst(char *ip, unsigned short port)
{
	m_dst.sin_family=AF_INET;
	//將計(jì)算機(jī)名或IP轉(zhuǎn)化為網(wǎng)絡(luò)地址
	m_dst.sin_addr.s_addr=CUDPSocket::Name2Inet(ip);
	m_dst.sin_port=htons(port);
	
}

/*------------------------------------------------------------------------------*/
//初始化音頻輸入,當(dāng)初始化完成,錄音就開始了
BOOL CAVIOMgr::InitAudioRec()
{
	DestroyAudioRec();
	BOOL bRet=FALSE;
	//創(chuàng)建錄音線程
	m_hAudioIn=CreateThread(0,0,AudioInThreadProc,this,0,&m_dwAudioInId);
	if(!m_hAudioIn)
		goto RET;
	if(!m_AudioRec.Create(0,m_dwAudioInId,(DWORD)this,CALLBACK_THREAD,SIZE_AUDIO_FRAME))
		goto RET;
	//開始錄音
	if(!m_AudioRec.Start())
		goto RET;
	
	bRet=TRUE;
RET:
	if(!bRet)
	{
		//如果失敗,就向主窗口發(fā)送出錯消息
		PostMessage(m_hwndMainWnd,IOM_NOTIFY,MAKEWPARAM(IOMN_ERR,IOME_AUDIO_IN),(LPARAM)this);
		DestroyAudioRec();
	}
	
	return bRet;

}

/*------------------------------------------------------------------------------*/
//該死的waveIn函數(shù),結(jié)束錄音時(shí)老是出現(xiàn)死鎖(XP下還是會出現(xiàn)這個問題,也不知道怎么解決,苦啊)
BOOL CAVIOMgr::DestroyAudioRec()
{
	
	m_AudioRec.Stop();
    m_AudioRec.Destroy();
	if(m_hAudioIn)
	{
		int t=50;
		DWORD ExitCode;
		BOOL bEnd=FALSE;
		//向錄音線程發(fā)送退出消息,并等待線程結(jié)束
		PostThreadMessage(m_dwAudioInId,WM_QUIT,0,0);
		while(t)
		{
			
			GetExitCodeThread(m_hAudioIn,&ExitCode);
			if(ExitCode!= STILL_ACTIVE)
			{
				bEnd=TRUE;
				break;
			}
			else
				Sleep(10);
			t--;
		}
		if(!bEnd)
			TerminateThread(m_hAudioIn,0);
		m_hAudioIn=0;
		
	}	
		
	return TRUE;

}

/*------------------------------------------------------------------------------*/
//初始化播放設(shè)備
BOOL CAVIOMgr::InitAudioPlay()
{
	BOOL bRet=FALSE;
	DestroyAudioPlay();
	m_iAudioBuf=0;
	m_hAudioOut=CreateThread(0,0,AudioOutThreadProc,this,0,&m_dwAudioOutId);
	if(!m_hAudioOut)
		goto RET;
	if(!m_AudioPlay.Create(0,m_dwAudioOutId,(DWORD)this,CALLBACK_THREAD))
		goto RET;
	bRet=TRUE;
	
	
RET:
	if(!bRet)
	{
		//向主窗口發(fā)送出錯消息
		PostMessage(m_hwndMainWnd,IOM_NOTIFY,MAKEWPARAM(IOMN_ERR,IOME_AUDIO_OUT),(LPARAM)this);
		DestroyAudioPlay();
	}
	
	return bRet;
}

/*------------------------------------------------------------------------------*/
//
BOOL CAVIOMgr::DestroyAudioPlay()
{

	m_AudioPlay.Destroy();
	if(m_hAudioOut)
	{
		int t=50;
		DWORD ExitCode;
		BOOL bEnd=FALSE;
		PostThreadMessage(m_dwAudioOutId,WM_QUIT,0,0);
		while(t)
		{
			
			GetExitCodeThread(m_hAudioOut,&ExitCode);
			if(ExitCode!= STILL_ACTIVE)
			{
				bEnd=TRUE;
				break;
			}
			else
				Sleep(10);
			t--;
		}
		if(!bEnd)
			TerminateThread(m_hAudioOut,0);
		m_hAudioOut=0;
		
	}
	return TRUE;
}

/*------------------------------------------------------------------------------*/
//音頻解碼,并將音頻數(shù)據(jù)發(fā)送到想要數(shù)據(jù)的窗口
void CAVIOMgr::OnDecodeAudioData(PACK_AUDIO *ppa, int len)
{
	
	if(m_CodecMgr.DecodeAudioData((char*)ppa->data,SIZE_AUDIO_PACKED,m_AudioRemote,0))
	{	
		//為了避免延遲過長,當(dāng)累積的緩沖超過六塊時(shí)拋棄即將加入的緩沖
		if(m_iAudioBuf<6)
		{
			m_iAudioBuf++;
			m_AudioPlay.Play(m_AudioRemote,SIZE_AUDIO_FRAME);
		}
		if(m_hwndRemoteAudioRcv)
			SendMessage(m_hwndRemoteAudioRcv,IOM_AUDIO,1,(LPARAM)this);
	}
	
	m_uDataRcv+=sizeof(PACK_AUDIO);
	delete []ppa;

}

/*------------------------------------------------------------------------------*/
//壓縮音頻原始數(shù)據(jù)并發(fā)送出去
void CAVIOMgr::OnEncodeAudioData(char *pa, int len)
{
	
	m_AudioPack.flag=FLAG_AUDIO;
	m_AudioPack.session=m_session;
	
	if(m_CodecMgr.EncodeAudioData(pa,len,(char*)m_AudioPack.data,0))
	{			
		m_Socket.SendTo((char*)&m_AudioPack,sizeof(PACK_AUDIO),(sockaddr*)&m_dst);
		m_uDataSend+=sizeof(PACK_AUDIO);
	}
	
	if(m_hwndLocalAudioRcv)
		SendMessage(m_hwndLocalAudioRcv,IOM_AUDIO,0,(LPARAM)this);
		
}

/*------------------------------------------------------------------------------*/
//視頻解碼
void CAVIOMgr::OnDecodeVideoData(PACK_VIDEO *ppv, int len)
{	
	
	if(m_CodecMgr.DecodeVideoData(((char*)ppv)+sizeof(PACK_VIDEO),ppv->data_size,m_VideoRemote,0,0))
	{
		m_nFrameCount++;
		
		m_nCurVid=ppv->id;
		//將視頻數(shù)據(jù)發(fā)送到視頻顯示窗口
		if(m_hwndRemoteVideoRcv)
			SendMessage(m_hwndRemoteVideoRcv,IOM_VIDEO,1,(LPARAM)this);
		
	}
	//統(tǒng)計(jì)收到的數(shù)據(jù)
	m_uDataRcv+=sizeof(PACK_VIDEO)+ppv->data_size;
}

/*------------------------------------------------------------------------------*/
//視頻壓縮并發(fā)送
void CAVIOMgr::OnEncodeVideoData(char *pv, int len)
{
	
	int rlen;
	
	if(m_bVideoSend)
	{			
		if(m_CodecMgr.EncodeVideoData(pv,len,m_VideoPack+sizeof(PACK_VIDEO),&rlen,0))
		{
			
			((PACK_VIDEO*)m_VideoPack)->data_size=(unsigned short)rlen;
			((PACK_VIDEO*)m_VideoPack)->id=m_idVideo++;
			((PACK_VIDEO*)m_VideoPack)->session=m_session;
			m_Socket.SendTo(m_VideoPack,rlen+sizeof(PACK_VIDEO),(sockaddr*)&m_dst);
			//統(tǒng)計(jì)發(fā)送的數(shù)據(jù)
			m_uDataSend+=rlen+sizeof(PACK_VIDEO);
		}
	}
	m_VideoLocal=pv;
	if(m_hwndLocalVideoRcv)
	{
		//將視頻數(shù)據(jù)發(fā)送到視頻顯示窗口
		SendMessage(m_hwndLocalVideoRcv,IOM_VIDEO,0,(LPARAM)this);
	}

	
}

/*------------------------------------------------------------------------------*/
//初始化,創(chuàng)建SOCKET,并監(jiān)聽
BOOL CAVIOMgr::Init(UINT nPort)
{
	Destroy();
		
	m_hwndLocalVideoRcv=0;
	m_hwndLocalAudioRcv=0;
	m_hwndRemoteVideoRcv=0;
	m_hwndRemoteAudioRcv=0;
	m_hwndMainWnd=0;
	m_bVideoSend=TRUE;
	
	m_iStatus=STA_FREE;
	BOOL bRet=FALSE;
	m_uDataRcv=0;
	m_uDataSend=0;
	if(!InitSocket(nPort))
		goto RET;
	//創(chuàng)建消息接收窗口,主要用于超時(shí)重發(fā)機(jī)制,因?yàn)橐O(shè)定很多不同ID的定時(shí)器
	m_MsgRcvWnd.Create(0,0,0,0,CRectX(0,0,0,0),0,0);
	bRet=TRUE;
RET:
	return bRet;
}

/*------------------------------------------------------------------------------*/
//初始化視頻捕捉設(shè)備
BOOL CAVIOMgr::InitCap()//
{
	HWND hCap;
	
	m_ViCap.Destroy();
	BOOL bRet=FALSE;
	if(!m_ViCap.Init())
		goto RET;
	//得到驅(qū)動數(shù)
	if(!m_ViCap.GetDriverNum())
		goto RET;
	//連接到驅(qū)動
	if(!m_ViCap.ConnectToDriver(0))
		goto RET;
	hCap=m_ViCap.GetCapWindow();
	//設(shè)置視頻格式
	if(!capSetVideoFormat(hCap,&m_CodecMgr.m_BmpU,sizeof(BITMAPINFO)))
		goto RET;
	//設(shè)置視頻流回調(diào)函數(shù)
	if(!capSetCallbackOnVideoStream(hCap,VideoStreamCallbackProc))
		goto RET;
	//將user數(shù)據(jù)設(shè)為AVIOMgr對象指針
	if(!capSetUserData(hCap,(DWORD)this))
		goto RET;
	//開始視頻流
	if(!capCaptureSequenceNoFile(hCap))
		goto RET;
	
	bRet=TRUE;
RET:
	if(!bRet)
	{
		PostMessage(m_hwndMainWnd,IOM_NOTIFY,MAKEWPARAM(IOMN_ERR,IOME_VIDEO_IN),(LPARAM)this);
		m_ViCap.Destroy();
	}
	return bRet;
}

/*------------------------------------------------------------------------------*/
BOOL CAVIOMgr::DestroyCap()
{
	
	m_ViCap.Destroy();
	return TRUE;
}

/*------------------------------------------------------------------------------*/
void CAVIOMgr::Destroy()
{
	EndTalk();
	DestroySocket();
	DestroyAudioRec();
	DestroyCap();
	DestroyAudioPlay();
	DestroyAudioCodec();
	DestroyVideoCodec();
}

/*------------------------------------------------------------------------------*/
//
BOOL CAVIOMgr::InitAudioCodec()
{
	
	BOOL bRet=FALSE;
	
	if(!m_CodecMgr.InitCodecA())
		goto RET;
	//啟動丟包率定時(shí)器	
	SetTimer(m_hwndMainWnd,100,1000,DropRateCounter);
	bRet=TRUE;
RET:
	if(!bRet)
	{
		PostMessage(m_hwndMainWnd,IOM_NOTIFY,MAKEWPARAM(IOMN_ERR,IOME_AUDIO_CODEC),(LPARAM)this);
		DestroyAudioCodec();
	}
	return bRet;
}

/*------------------------------------------------------------------------------*/
//
void CAVIOMgr::DestroyAudioCodec()
{	
	//關(guān)閉丟包率定時(shí)器
	KillTimer(m_hwndMainWnd,100);
	m_CodecMgr.DestroyCodecA();
}

/*------------------------------------------------------------------------------*/
//初始化視頻編碼解碼器
BOOL CAVIOMgr::InitVideoCodec()
{
	m_idVideo=0;
	m_nFps=0;
	m_nFrameCount=0;
	m_nLastFrameCount=0;
	m_nDropRate=0;
	m_nCurVid=0;
	m_nLastVid=0;
	BOOL bRet=FALSE;
	//
	if(!m_CodecMgr.InitCodecV())
		goto RET;
	
	((PACK_VIDEO*)m_VideoPack)->flag=FLAG_VIDEO;

		
	bRet=TRUE;
RET:
	if(!bRet)
	{
		PostMessage(m_hwndMainWnd,IOM_NOTIFY,MAKEWPARAM(IOMN_ERR,IOME_VIDEO_CODEC),(LPARAM)this);
		DestroyVideoCodec();
	}
	return bRet;
}

/*------------------------------------------------------------------------------*/
void CAVIOMgr::DestroyVideoCodec()
{
	
	
		
	m_CodecMgr.DestroyCodecV();
}


/*------------------------------------------------------------------------------*/
void CAVIOMgr::GetDeviceSupport(DEVICE_SUPPORT &ds)
{

}

/*------------------------------------------------------------------------------*/
//呼叫某個IP
BOOL CAVIOMgr::Call(char *ip, unsigned short port)
{

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久亚洲精华国产精华液| 欧亚一区二区三区| 一区二区三区高清| 精品久久久久久久久久久院品网 | 亚洲视频在线一区| 7777精品伊人久久久大香线蕉 | 欧美激情在线观看视频免费| 欧美午夜不卡在线观看免费| 国产剧情在线观看一区二区| 亚洲一卡二卡三卡四卡五卡| 国产女人18水真多18精品一级做| 这里只有精品电影| 色屁屁一区二区| 国产成人自拍高清视频在线免费播放| 五月婷婷久久综合| 亚洲裸体在线观看| 中文字幕电影一区| 久久人人爽爽爽人久久久| 欧美高清性hdvideosex| 色噜噜偷拍精品综合在线| 成人国产精品免费网站| 国内精品免费在线观看| 青青国产91久久久久久| 亚洲午夜电影网| 亚洲精品免费在线观看| 国产精品久久久久一区| 国产视频视频一区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 精品免费日韩av| 欧美美女一区二区| 欧美色倩网站大全免费| 在线视频中文字幕一区二区| 92精品国产成人观看免费| www.视频一区| 成人av高清在线| 风间由美性色一区二区三区| 韩国精品久久久| 久久99精品久久久久久动态图| 天堂成人免费av电影一区| 亚洲bt欧美bt精品777| 亚洲国产成人91porn| 亚洲福利国产精品| 亚洲一区二区高清| 日韩在线a电影| 蜜臀av亚洲一区中文字幕| 婷婷一区二区三区| 日韩电影免费在线| 卡一卡二国产精品| 国产乱子轮精品视频| 国产69精品久久99不卡| 菠萝蜜视频在线观看一区| 97精品电影院| 欧美系列日韩一区| 欧美一级在线免费| 久久久五月婷婷| 国产精品美女www爽爽爽| 国产精品久久久久久久岛一牛影视| 国产精品久久久久久久久免费相片 | 亚洲成人激情av| 日韩成人免费看| 国产一区二区三区av电影| 国产乱码精品1区2区3区| 成人深夜在线观看| 在线日韩一区二区| 欧美精品日韩综合在线| 精品国产免费人成在线观看| 国产日产欧美一区二区视频| 日韩美女精品在线| 日韩影院免费视频| 国产精品综合久久| 色婷婷综合久久久久中文一区二区 | 欧美日韩国产欧美日美国产精品| 91精品国产91久久久久久一区二区 | 在线影视一区二区三区| 欧美美女直播网站| 久久只精品国产| 亚洲裸体在线观看| 久久99精品视频| 色综合天天综合| 欧美一级片免费看| 国产精品电影一区二区三区| 亚洲国产精品综合小说图片区| 久久99国产精品免费| 91丝袜国产在线播放| 日韩欧美一区在线观看| 亚洲色欲色欲www| 美女视频黄a大片欧美| a亚洲天堂av| 欧美大片拔萝卜| 亚洲精品一二三| 精品一区二区日韩| 欧洲国内综合视频| 国产日韩欧美精品一区| 亚洲va欧美va天堂v国产综合| 国产精品18久久久| 69av一区二区三区| 亚洲欧美综合另类在线卡通| 免费高清视频精品| 日本精品免费观看高清观看| 久久欧美一区二区| 日韩精品一级二级 | 蜜桃av一区二区在线观看| av不卡在线播放| 精品欧美一区二区三区精品久久 | 尤物视频一区二区| 国产盗摄女厕一区二区三区| 91精品国产一区二区三区蜜臀| 欧美经典一区二区三区| 蜜桃av一区二区三区电影| 一本久久a久久免费精品不卡| 2021中文字幕一区亚洲| 日韩专区在线视频| 色偷偷一区二区三区| 国产女同互慰高潮91漫画| 热久久免费视频| 欧美三级欧美一级| 亚洲色图欧洲色图| 丁香婷婷综合网| 久久亚洲春色中文字幕久久久| 调教+趴+乳夹+国产+精品| 91捆绑美女网站| 国产精品毛片久久久久久久| 国产主播一区二区| 欧美成人在线直播| 日本中文字幕一区二区视频 | 欧美人妖巨大在线| 亚洲综合色网站| 色综合天天综合色综合av| 国产精品理论片| 成人小视频在线| 欧美激情资源网| 成人黄色综合网站| 国产精品久久一卡二卡| 福利电影一区二区| 国产欧美日产一区| 处破女av一区二区| 国产精品午夜电影| 成人av在线电影| 国产精品久久久爽爽爽麻豆色哟哟| 国产**成人网毛片九色 | 欧美一区二区三区免费| 亚洲国产一区二区三区青草影视| 在线精品视频免费播放| 亚洲激情校园春色| 欧美在线一二三四区| 亚洲国产精品自拍| 91精品国产综合久久福利软件| 日本不卡视频在线观看| 日韩色视频在线观看| 麻豆成人91精品二区三区| 日韩欧美一区在线观看| 国产精品一区二区x88av| 日本一区二区动态图| 99久久精品一区二区| 亚洲欧美一区二区三区国产精品| 在线亚洲人成电影网站色www| 一区二区三区中文在线观看| 在线观看av一区二区| 日韩成人一区二区| 精品处破学生在线二十三| 国产成人综合自拍| 亚洲精品免费电影| 欧美一区二区视频在线观看2020| 麻豆精品在线观看| 中文字幕第一区| 91精彩视频在线观看| 爽好多水快深点欧美视频| 精品久久久久久久久久久久久久久| 国产酒店精品激情| 有坂深雪av一区二区精品| 欧美一区二区大片| 国产精品99久| 亚洲欧美福利一区二区| 精品视频全国免费看| 久久成人18免费观看| 国产精品麻豆欧美日韩ww| 欧美午夜精品久久久久久孕妇| 麻豆国产精品视频| 国产精品传媒视频| 欧美日本韩国一区二区三区视频| 激情五月激情综合网| 亚洲欧美日韩国产中文在线| 91精品国产综合久久精品app| 国产精品一区二区三区网站| 一区二区在线电影| 精品国产1区二区| 色婷婷国产精品久久包臀| 美女在线观看视频一区二区| 中文字幕在线不卡一区| 欧美高清你懂得| 成人精品gif动图一区| 免费一级片91| 一区二区三区不卡视频在线观看 | 亚洲无人区一区| 国产欧美精品一区二区三区四区 | 26uuu国产在线精品一区二区| 91日韩精品一区| 国产呦精品一区二区三区网站| 一区二区三区在线看| 久久久久久久久免费|