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

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

?? mav8dlg.cpp

?? VC ++ ,遠(yuǎn)程視頻 監(jiān)控系統(tǒng)...分服務(wù)客戶端
?? CPP
字號(hào):
// MAV8Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "MAV8.h"
#include <windows.h>
#include <mmsystem.h>

#include ".\av8inc\av8api.h"
#include ".\av8inc\define.h"

#include "Overlay.h"
#include "PlayWnd.h"
#include "MAV8Dlg.h"

#include "PlayWnd.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define WM_DATABLOCK_UPDATE		WM_USER+20

static char	caFileName[STRSIZE];// = "catest1.mpg";

typedef WORD (CALLBACK *USER_CALLBACK) (HDRVR hdrvr, UINT msg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2);

WORD CALLBACK _loadds MyCallBack(HDRVR hdrvr, UINT msg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2);

static HMMIO hmmioInput;
static HMMIO hmmioOutput;
HDRVR hVFDrv;
BYTE bStream;

HWND	hWnd;
BOOL Ready = false;
extern PBYTE 	pbMem[];
extern BOOL		Rendered;
PBYTE	RWPtr;
PBYTE	tmpMem;
DWORD	m_ReceivedBytes = 0;			// maximize = 0x8000
DWORD	m_RemainBytes = 0;			// maximize = 0x8000
int		rwIndex = 0;
PBYTE	Ptr[100];
BOOL	CaptureToFile;

extern BOOL PeekAndPump();

void Setdata (LPSTR lpBuffer, LONG dwBufferWrite)
{
	DWORD Bytes = (DWORD)(dwBufferWrite);
	if ((m_ReceivedBytes + Bytes )> 0x8000) {
		CopyMemory((PVOID)(Ptr[rwIndex]+(LONGLONG)m_ReceivedBytes), 
				(PVOID)(lpBuffer),
				(DWORD)(Bytes = 0x8000 - m_ReceivedBytes));
		m_RemainBytes = dwBufferWrite - Bytes;
		RWPtr = Ptr[rwIndex];
		rwIndex = (rwIndex + 1)%100;

		Ready = true;

		tmpMem = new BYTE[m_RemainBytes];
		CopyMemory((PVOID)(tmpMem), 
				(PVOID)(lpBuffer + Bytes),
				(DWORD)(m_RemainBytes));

		m_ReceivedBytes = 0;
		TRACE2 ("A Block Ready = %lX, %lX\n",(DWORD)(lpBuffer), Bytes);
	} else {
		if (m_RemainBytes != 0) {
			CopyMemory((PVOID)(Ptr[rwIndex]+(LONGLONG)m_ReceivedBytes), 
				(PVOID)(tmpMem),
				(DWORD)(m_RemainBytes));
			m_ReceivedBytes += m_RemainBytes;
			delete tmpMem;
			m_RemainBytes = 0;
		}
		CopyMemory((PVOID)(Ptr[rwIndex]+(LONGLONG)m_ReceivedBytes), 
				(PVOID)(lpBuffer),
				Bytes);

		m_ReceivedBytes += Bytes;
	}
}


WORD CALLBACK _loadds MyCallBack(HDRVR hdrvr, UINT msg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2)
{
DWORD		dwFlags = 0;

//	TRACE0("MyCallBack ");
	switch (msg)
	{
	case VF_MSGUSER_BUF_WRITE:
	    {
	        LONG		lRet;
	        LPVF_BUFWRITE_STRUCT	lpBufWrite = (LPVF_BUFWRITE_STRUCT)dwParam1;
		
			Setdata ((LPSTR)lpBufWrite->lpBuffer, (LONG)lpBufWrite->dwBufferWrite);
			TRACE0 ("Sent\n");
		
			if (CaptureToFile) {
				lRet = mmioWrite(hmmioOutput, (LPSTR)lpBufWrite->lpBuffer, (LONG)lpBufWrite->dwBufferWrite);	        
				if (lRet == -1L)
				{
				    return (FALSE);
				}
			}
	        break;
	    }

	case VF_MSGUSER_BUF_CREATE:
	    {
	        LPVF_CALLBACK_STRUCT	lpCallback = (LPVF_CALLBACK_STRUCT)dwParam1;
			if (CaptureToFile) {
	        if (lpCallback->wSubMsg == VF_SUBMSG_OUTPUT)
		    {
                dwFlags = MMIO_CREATE | MMIO_WRITE;
                hmmioOutput = mmioOpen((LPTSTR)caFileName, (LPMMIOINFO)NULL, dwFlags);
		    }
	        else
            {
                dwFlags = MMIO_READ | MMIO_DENYWRITE;
                hmmioInput = mmioOpen((LPTSTR)caFileName, (LPMMIOINFO)NULL, dwFlags);
            }
			}
			TRACE0 ("Create\n");
	        break;
	    }

	case VF_MSGUSER_BUF_CLOSE:
	    {
	        LPVF_CALLBACK_STRUCT	lpCallback = (LPVF_CALLBACK_STRUCT)dwParam1;
			if (CaptureToFile) {
	        if (lpCallback->wSubMsg == VF_SUBMSG_OUTPUT)
		    {
		        if (hmmioOutput)
			    {
			        mmioClose(hmmioOutput, NULL);
			        hmmioOutput = NULL;
			    }
		    }
	        else
		    {
		        if (hmmioInput)
		        {
		            mmioClose(hmmioInput, NULL);
		            hmmioInput = NULL;
		        }
		    }
			}
			TRACE0 ("Closed\n");
	        break;
	    }
    } // switch

	return 1;
}

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


void CMAV8Dlg::CountDevice ()
{
	CString Msg;
	
	
	hVFDrv = OpenDriver (L"AV8api.dll", NULL, NULL);
	if (hVFDrv) {
		if (HVFAssign (hVFDrv, 0)) {
			if (HVFLock (hVFDrv, VF_CAP_ALL)) {
					pbDeviceLocked = TRUE;
			}
			else {
					pbDeviceLocked= FALSE;
			}
		}
		else {
				pbDeviceLocked = FALSE;
				CloseDriver (hVFDrv,NULL,NULL);
				hVFDrv = 0;
		}

	} 

	GetDlgItem (IDC_CHECK1)->EnableWindow(pbDeviceLocked);
	GetDlgItem (IDC_RECORD)->EnableWindow(false);
}

void CMAV8Dlg::CloseAllDevice ()
{
	if (hVFDrv) {
		HVFUnlock (hVFDrv, VF_CAP_ALL);
		CloseDriver (hVFDrv, NULL, NULL);
		hVFDrv = NULL;
	}

}


BOOL CMAV8Dlg::InitEncodeVideoVxD(HDRVR m_hVFDrv, BYTE m_bStream)

{
    DWORD dwValue;
    WORD  wWidth, wHeight;

    wWidth=352;
    wHeight=288;
    dwValue=MAKELONG(wWidth, wHeight);

    HVFSet(m_hVFDrv, m_bStream, VF_INDEX_VID_OUTPUTSIZE, dwValue);

    /* SDL - also set video width and height to scale images */
    wWidth = (wWidth * 45) / 44; // try to maintain standard MPEG SIF aspect ratio
    dwValue = MAKELONG(wWidth, wHeight /* [sic] */);
    HVFSet(m_hVFDrv, m_bStream, VF_INDEX_VID_INPUTSIZE, dwValue);

    HVFSet(m_hVFDrv, m_bStream, VF_INDEX_VID_BITRATE, 512000);	//BITRATE_DEFAULT);

    HVFSet(m_hVFDrv, m_bStream, VF_INDEX_VID_RATE, VF_FLAG_VID_25);

    HVFSet(m_hVFDrv, m_bStream, VF_INDEX_VID_IINTERVAL, IINTERVAL_DEFAULT);

    HVFSet(m_hVFDrv, m_bStream, VF_INDEX_VID_BINTERVAL, PINTERVAL_DEFAULT);

    HVFSet(m_hVFDrv, m_bStream, VF_INDEX_VID_MODE, VF_FLAG_VID_PAL);

    HVFSet(m_hVFDrv, m_bStream, VF_INDEX_VID_SOURCE, VF_FLAG_VID_COMPOSITE);

    HVFSet(m_hVFDrv, m_bStream, VF_INDEX_VID_ALGORITHM, VF_FLAG_VID_MPEG);

    HVFSet(m_hVFDrv, m_bStream, VF_INDEX_VID_BRIGHTNESS, BRIGHTNESS_DEFAULT);

    HVFSet(m_hVFDrv, m_bStream, VF_INDEX_VID_CONTRAST, CONTRAST_DEFAULT);		   

    HVFSet(m_hVFDrv, m_bStream, VF_INDEX_VID_HUE, HUE_DEFAULT);		

    HVFSet(m_hVFDrv, m_bStream, VF_INDEX_VID_SATURATION, SATURATION_DEFAULT);

    return TRUE;
}



BOOL CMAV8Dlg::InitEncodeAudioVxD(HDRVR m_hVFDrv, BYTE m_bStream)

{
 	DWORD dwValue;

	HVFSet(m_hVFDrv, m_bStream, VF_INDEX_AUD_SAMPLE, SAMPLE_RATE_DEFAULT);
	HVFSet(m_hVFDrv, m_bStream, VF_INDEX_AUD_BITRATE, BIT_RATE_DEFAULT);

	dwValue=VF_FLAG_AUD_MPEG;	// set to MPEG algorithm
	dwValue=(dwValue<<16)+VF_FLAG_AUD_NONE;
	HVFSet(m_hVFDrv, m_bStream, VF_INDEX_AUD_ALGORITHM, dwValue);
	HVFSet(m_hVFDrv, m_bStream, VF_INDEX_AUD_MODE, MODE_DEFAULT);
	HVFSet(m_hVFDrv, m_bStream, VF_INDEX_AUD_VOLUME, VOLUME_MIN);
	HVFSet(m_hVFDrv, m_bStream, VF_INDEX_AUD_VOLUME, VOLUME_DEFAULT);
	HVFSet(m_hVFDrv, m_bStream, VF_INDEX_AUD_GAIN, GAIN_DEFAULT);

	return TRUE;
}



BOOL CMAV8Dlg::InitEncodeSystemVxD(HDRVR m_hVFDrv, BYTE m_bStream)
{
	HVFSet(m_hVFDrv, m_bStream, VF_INDEX_STM_TYPE, VF_FLAG_MPGSYS);
	HVFSet(m_hVFDrv, m_bStream, VF_INDEX_STM_ENCODEMODE, VF_FLAG_STM_NORMAL);
	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMAV8Dlg dialog

CMAV8Dlg::CMAV8Dlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMAV8Dlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMAV8Dlg)
	m_InputWnd = TRUE;
	m_ToFile = FALSE;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

	pOverlayWnd=NULL;
	IsCapture = FALSE;
	hVFDrv = 0;

	pPlayWnd = NULL;
}

CMAV8Dlg::~CMAV8Dlg()
{
	if(pOverlayWnd)
		delete pOverlayWnd;
	pOverlayWnd = NULL;
	IsCapture = FALSE;
	hVFDrv = 0;
}

void CMAV8Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMAV8Dlg)
	DDX_Control(pDX, IDC_CHECK1, m_Check1);
	DDX_Check(pDX, IDC_INWINDOW, m_InputWnd);
	DDX_Check(pDX, IDC_TOFILE, m_ToFile);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMAV8Dlg, CDialog)
	//{{AFX_MSG_MAP(CMAV8Dlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_CHECK1, OnCheck1)
	ON_BN_CLICKED(IDC_RECORD, OnRecstop1)
	ON_BN_CLICKED(IDC_TOFILE, OnTofile)
	ON_BN_CLICKED(IDC_STOP, OnRecstop1)
	ON_BN_CLICKED(IDC_INWINDOW, OnInwindow)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMAV8Dlg message handlers

BOOL CMAV8Dlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	
	CountDevice ();

	GetDlgItem (IDC_EDIT1)->SetWindowText ("c:\\temp1.mpg");
	GetDlgItem (IDC_EDIT1)->EnableWindow (m_ToFile);
	GetDlgItem (IDC_STOP)->EnableWindow (IsCapture);

	CaptureToFile = m_ToFile;
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CMAV8Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CMAV8Dlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CMAV8Dlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CMAV8Dlg::OnDestroy() 
{
	CDialog::OnDestroy();
	
	CloseAllDevice ();	
}
void CMAV8Dlg::CreateVideoWindow ()
{
		int nXDelta;
		int nXScreenSize, nXNew;

		CRect RectDlg;
		GetWindowRect(RectDlg);
	// readjust the control window location
		nXScreenSize=::GetSystemMetrics(SM_CXSCREEN);
		nXNew=nXScreenSize/2+50;
		nXDelta=nXNew-RectDlg.left;
		RectDlg.left=nXNew;
		RectDlg.right=RectDlg.right+nXDelta;
		MoveWindow(&RectDlg);
	// calcuate the overlay window size and location
		WORD wOverlayWidth;
		WORD wOverlayHeight;
		wOverlayWidth = 352;
		wOverlayHeight = 288;
		RectDlg.left=RectDlg.left-wOverlayWidth-10;
		RectDlg.right=RectDlg.left + wOverlayWidth + GetSystemMetrics(SM_CXFRAME)+5;
		RectDlg.bottom=RectDlg.top+ wOverlayHeight + 10+
		GetSystemMetrics(SM_CYFRAME)+ 
		//GetSystemMetrics(SM_CYCAPTION)+GetSystemMetrics(SM_CYMENU);
		GetSystemMetrics(SM_CYCAPTION); // test


		pOverlayWnd=new COverlay(hVFDrv, RectDlg, wOverlayWidth, wOverlayHeight);
		pOverlayWnd->ShowWindow(SW_SHOWNORMAL);
		pOverlayWnd->UpdateWindow();

		InitEncodeVideoVxD(hVFDrv, 0);
        InitEncodeAudioVxD(hVFDrv, 0);
	    InitEncodeSystemVxD(hVFDrv, 0);
}

void CMAV8Dlg::RecordOrStop (int id, CString fn)
{
    WORD flags;
	if (IsCapture) {
		// Stop capture
        HVFStop(hVFDrv, bStream);
		TRACE0 ("HVFStop\n");
		if (id == 0) {
			if (pPlayWnd) {
				pPlayWnd->m_pimc->StopWhenReady();
				TRACE0 ("StopWhenReady\n");
			}
		}
        HVFClose(hVFDrv, bStream);
		TRACE0 ("HVFClose\n");
		bStream = 0;
		IsCapture = FALSE;
	}
	else {
		// Start Record
		IsCapture = TRUE;
	
		flags = VF_FLAG_MPEG | VF_FLAG_ENCODE | VF_FLAG_OUTBUF;
		lstrcpy (caFileName, fn.GetBuffer (MAX_PATH));
		bStream = static_cast<BYTE> (HVFOpen(hVFDrv, 
							flags, 
							reinterpret_cast<unsigned long>(MyCallBack)));
		fn.ReleaseBuffer ();
		InitEncodeVideoVxD(hVFDrv, bStream);
        InitEncodeAudioVxD(hVFDrv, bStream);
		InitEncodeSystemVxD(hVFDrv, bStream);
        
		if (id == 0) {
			for (int i = 0; i< 100; i++)
				Ptr[i] = pbMem[i];
	
			rwIndex = 0;
			Ready = false;
		}

		HVFRecord(hVFDrv, bStream, NULL, NULL);

		if (id == 0) {
			pPlayWnd->Render ();
		}
	}
	GetDlgItem (IDC_STOP)->EnableWindow (IsCapture);
	GetDlgItem (IDC_INWINDOW)->EnableWindow (!IsCapture);
	GetDlgItem (IDC_TOFILE)->EnableWindow (!IsCapture);
}

void CMAV8Dlg::OnCheck1() 
{
	if (m_Check1.GetCheck () == 1) {
		if (m_InputWnd && !pOverlayWnd)
			CreateVideoWindow ();
		GetDlgItem (IDC_RECORD)->EnableWindow (TRUE);
		pPlayWnd = new CPlayWnd ();			///
		hWnd = pPlayWnd->GetSafeHwnd ();
		pPlayWnd->ShowWindow (SW_SHOW);		///	
		pPlayWnd->UpdateWindow();			///
	}
	else {
		delete pOverlayWnd;
		pOverlayWnd = NULL;
		delete pPlayWnd;
		pPlayWnd= NULL;
		GetDlgItem (IDC_RECORD)->EnableWindow (FALSE);
		GetDlgItem (IDC_STOP)->EnableWindow (FALSE);
	}
}

void CMAV8Dlg::OnRecstop1() 
{

	CString fn;

	GetDlgItem (IDC_EDIT1)->GetWindowText (fn);

	RecordOrStop (0, fn);

}


void CMAV8Dlg::OnTofile() 
{
	UpdateData (TRUE);
	CaptureToFile = m_ToFile;
	GetDlgItem (IDC_EDIT1)->EnableWindow (m_ToFile);
}

void CMAV8Dlg::OnInwindow() 
{
	UpdateData (TRUE);
	
	if (m_InputWnd) {
		if(!pOverlayWnd) {
			CreateVideoWindow ();
		}
	} else {
		if(pOverlayWnd)
			delete pOverlayWnd;
		pOverlayWnd = NULL;
	}

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
gogo大胆日本视频一区| 欧美图区在线视频| 蜜桃传媒麻豆第一区在线观看| 亚洲女同一区二区| 国产精品激情偷乱一区二区∴| 日韩网站在线看片你懂的| 欧美日韩一区二区电影| 色婷婷综合激情| 成人美女视频在线观看18| 国产成人精品免费一区二区| 激情五月激情综合网| 麻豆国产一区二区| 蜜桃视频在线观看一区二区| 午夜精品久久久久久久99水蜜桃| 亚洲精品网站在线观看| 亚洲精品你懂的| 亚洲精品ww久久久久久p站| 国产精品久久久久7777按摩 | 91美女精品福利| 成人激情综合网站| 五月婷婷久久丁香| 日韩国产一二三区| 天堂成人免费av电影一区| 午夜精品一区二区三区免费视频| 亚洲专区一二三| 香蕉久久夜色精品国产使用方法 | 国产精品久久久久影院色老大| 欧美电影免费提供在线观看| 日韩欧美国产麻豆| 26uuu精品一区二区| 久久久久国产免费免费| 久久久久久**毛片大全| 亚洲国产精华液网站w| 中文字幕一区二区不卡| 亚洲免费在线看| 午夜天堂影视香蕉久久| 一区二区三区在线视频播放| 亚洲国产你懂的| 日日摸夜夜添夜夜添国产精品| 天堂久久一区二区三区| 久久9热精品视频| 丝袜美腿亚洲综合| 久久国产尿小便嘘嘘尿| 高清在线不卡av| a4yy欧美一区二区三区| 在线精品国精品国产尤物884a| 欧美日韩国产乱码电影| 精品黑人一区二区三区久久| 国产欧美一区二区精品性| 国产精品久久777777| 亚洲一区二区精品3399| 亚瑟在线精品视频| 国产一级精品在线| 一本久久a久久精品亚洲| 正在播放亚洲一区| 91精品国产免费久久综合| 国产人伦精品一区二区| 亚洲精品你懂的| 久久99精品久久久久久国产越南 | 国产精品色在线观看| 亚洲人成在线播放网站岛国| 天堂av在线一区| 狠狠色丁香久久婷婷综合_中| 91丨九色丨黑人外教| 欧美一区二区播放| 亚洲欧洲www| 日产国产高清一区二区三区| 成熟亚洲日本毛茸茸凸凹| 欧美巨大另类极品videosbest | 国产成人av电影在线| 在线亚洲高清视频| 精品国产成人系列| 中文字幕乱码久久午夜不卡| 亚洲国产日日夜夜| 国产一区 二区| 欧美精品99久久久**| 国产精品美女一区二区| 麻豆91小视频| 91麻豆自制传媒国产之光| 欧美成人欧美edvon| 亚洲一区二区三区四区在线| 高清在线成人网| 日韩免费在线观看| 亚洲精品国产精品乱码不99| 国产精品一品二品| 91精品综合久久久久久| 亚洲视频在线一区观看| 久久99蜜桃精品| 欧美精品 国产精品| 亚洲人成影院在线观看| 国产精品一区在线观看乱码| 欧美成人精品3d动漫h| 日日骚欧美日韩| 56国语精品自产拍在线观看| 亚洲午夜激情av| 欧美性大战久久久久久久| 亚洲激情网站免费观看| 一本色道久久综合精品竹菊 | 成人免费高清视频在线观看| 国产亚洲自拍一区| 韩国女主播一区二区三区| 欧美精品一区二区三区蜜桃视频 | 国产一区二区久久| 久久久精品免费网站| 国产一区美女在线| 亚洲国产精品99久久久久久久久 | 欧美α欧美αv大片| 久久精品国产秦先生| 精品成人一区二区三区四区| 国产精品综合av一区二区国产馆| 久久九九久久九九| 成人黄色免费短视频| 亚洲欧美一区二区三区孕妇| 色香蕉久久蜜桃| 亚洲图片欧美综合| 69av一区二区三区| 另类调教123区| 久久久久久电影| 播五月开心婷婷综合| 亚洲精品国产视频| 在线综合亚洲欧美在线视频| 青青草成人在线观看| 久久婷婷国产综合精品青草| 粉嫩在线一区二区三区视频| 亚洲欧美综合在线精品| 日本韩国欧美在线| 日韩二区三区四区| 久久久99精品免费观看不卡| 99久久精品国产毛片| 亚洲成av人在线观看| 精品美女被调教视频大全网站| 国产一区二区精品久久99| 一区在线播放视频| 欧美专区日韩专区| 狠狠久久亚洲欧美| 亚洲区小说区图片区qvod| 91精品久久久久久久91蜜桃| 国产成人精品午夜视频免费 | 91麻豆成人久久精品二区三区| 午夜久久久久久久久久一区二区| 久久综合色婷婷| 色综合久久88色综合天天6| 日本色综合中文字幕| 国产精品女上位| 欧美美女bb生活片| 成人亚洲一区二区一| 亚洲成a人v欧美综合天堂| 国产亚洲欧美日韩俺去了| 欧美又粗又大又爽| 国产一区二区精品久久99| 一区二区三区资源| 久久久www成人免费毛片麻豆| 色激情天天射综合网| 国产一区二区美女| 亚洲123区在线观看| 国产精品嫩草久久久久| 欧美一区二区三区免费大片| 91在线看国产| 国内久久婷婷综合| 亚洲成人手机在线| 国产精品久久毛片a| 欧美一区二区三区免费观看视频| 波多野洁衣一区| 麻豆传媒一区二区三区| 亚洲综合色丁香婷婷六月图片| 久久久.com| 日韩你懂的电影在线观看| 在线精品视频一区二区三四| 国产成人综合网| 免费观看在线色综合| 亚洲无线码一区二区三区| 国产精品国产三级国产有无不卡 | 日韩视频免费观看高清完整版| 99精品国产视频| 国产九九视频一区二区三区| 青青草视频一区| 亚洲国产精品久久艾草纯爱| 1区2区3区国产精品| 国产日韩欧美激情| 久久综合色天天久久综合图片| 欧美疯狂性受xxxxx喷水图片| 91片在线免费观看| 成人免费视频app| 国产盗摄视频一区二区三区| 久久se这里有精品| 丝袜亚洲精品中文字幕一区| 亚洲一区二区三区中文字幕| 亚洲女人****多毛耸耸8| 中文av一区特黄| 国产色婷婷亚洲99精品小说| 精品国产乱码久久久久久图片 | 欧美日韩情趣电影| 欧美在线看片a免费观看| 99re这里只有精品首页| 成人av电影在线网| 不卡一区在线观看| 成人动漫中文字幕| 成人va在线观看| 99久久精品情趣| 一本久道久久综合中文字幕 |