日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

最简单的视音频播放示例3:Direct3D播放YUV,RGB(通过Surface)

發布時間:2025/4/5 编程问答 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 最简单的视音频播放示例3:Direct3D播放YUV,RGB(通过Surface) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇文章記錄了GDI播放視頻的技術。打算接下來寫兩篇文章記錄Direct3D(簡稱D3D)播放視頻的技術。Direct3D應該Windows下最常用的播放視頻的技術。實際上視頻播放只是Direct3D的“副業”,它主要用于3D游戲制作。當前主流的游戲幾乎都是使用Direct3D制作的,例如《地下城與勇士》,《穿越火線》,《英雄聯盟》,《魔獸世界》,《QQ飛車》等等。使用Direct3D可以用兩種方式渲染視頻:Surface和Texture。使用Surface相對來說比使用Texture要簡單一些,但是不如使用Texture靈活。鑒于使用Surface更加容易上手,本文記錄使用Direct3D中的Surface顯示視頻的技術。下一篇文章再記錄使用Direct3D中的Texture顯示視頻的技術。

?

Direct3D簡介

下面下簡單記錄一下背景知識。摘錄修改了維基上的一部分內容(維基上這部分敘述貌似很不準確…):

Direct3D(簡稱:D3D)是微軟公司在Microsoft Windows系統上開發的一套3D繪圖API,是DirectX的一部份,目前廣為各家顯示卡所支援。1995年2月,微軟收購了英國的Rendermorphics公司,將RealityLab 2.0技術發展成Direct3D標準,并整合到Microsoft Windows中,Direct3D在DirectX 3.0開始出現。后來在DirectX 8.0發表時與DirectDraw編程介面合并并改名為DirectX Graphics。Direct3D與Windows GDI是同層級組件。它可以直接調用底層顯卡的功能。與OpenGL同為電腦繪圖軟件和電腦游戲最常使用的兩套繪圖API。

抽象概念

Direct3D的抽象概念包括:Devices(設備),Swap Chains(交換鏈)和Resources(資源)。

Device(設備)用于渲染3D場景。例如單色設備就會渲染黑白圖片,而彩色設備則會渲染彩色圖片。Device目前我自己了解的有以下2類(還有其他類型,但不是很熟):

HAL(Hardware Abstraction Layer):支持硬件加速的設備。在所有設備中運行速度是最快的,也是最常用的。
Reference:模擬一些硬件還不支持的新功能。換言之,就是利用軟件,在CPU對硬件渲染設備的一個模擬。

每一個Device至少要有一個Swap Chain(交換鏈)。一個Swap Chain由一個或多個Back Buffer Surfaces(后臺緩沖表面)組成。渲染在Back Buffer中完成。
此外,Device包含了一系列的Resources(資源),用于定義渲染時候的數據。每個Resources有4個屬性:

Type:描述Resource的類型。例如surface, volume, texture, cube texture, volume texture, surface texture, index buffer 或者vertex buffer。
Usage:描述Resource如何被使用。例如指定Resource是以只讀方式調用還是以可讀寫的方式調用。
Format:數據的格式。比如一個二維表面的像素格式。例如,D3DFMT_R8G8B8的Format表明了數據格式是24 bits顏色深度的RGB數據。
Pool:描述Resource如何被管理和存儲。默認的情況下Resource會被存儲在設備的內存(例如顯卡的顯存)中。也可以指定Resource存儲在系統內存中。

渲染流水線(rendering pipeline)

Direct3D API定義了一組Vertices(頂點), Textures(紋理), Buffers(緩沖區)轉換到屏幕上的流程。這樣的流程稱為Rendering Pipeline(渲染流水線),它的各階段包括:

Input Assembler(輸入組裝):從應用程序里讀取vertex數據,將其裝進流水線。
Vertex Shader(頂點著色器):對每個頂點屬性進行著色。每次處理一個頂點,比如變換、貼圖、光照等。注意這個地方可能需要自己編程。
Geometry Shader(幾何著色器): Shader Model 4.0引進了幾何著色器,處理點、線、面的幾何坐標變換。此處我自己還不是很了解。

PS:上述處理完后的數據可以理解為以下圖片。即包含頂點信息,但不包含顏色信息。

Stream Output(流輸出):將Vertex Shader和Geometry Shader處理完成的數據輸出給使用者。
Rasterizer(光柵化): 把算完的頂點轉成像素,再將像素(pixels)輸出給Pixel Shader。這里也可執行其他工作,比如像素數據的切割,插值等。

PS:光柵化的過程可以理解為下圖。即把頂點轉換成像素。

Pixel Shader(像素著色器):對每個像素進行著色。注意這個地方可能需要自己編程。
Output Merger(輸出混合):整合各種不同的數據,輸出最后結果。

視頻顯示的基礎知識

在記錄Direct3D的視頻顯示技術之前,首先記錄一下視頻顯示的基礎知識。我自己歸納總結了以下幾點知識。

1. 三角形

在Direct3D中經常會出現“三角形”這個概念。這是因為在3D圖形渲染中,所有的物體都是由三角形構成的。因為一個三角形可以表示一個平面,而3D物體就是由一個或多個平面構成的。比如下圖表示了一個非常復雜的3D地形,它們也不過是由許許多多三角形表示的。

因此我們只要指定一個或多個三角形,就可以表示任意3D物體。

2. 后臺緩沖表面,前臺表面,交換鏈,離屏表面

后臺緩沖表面和前臺表面的概念總是同時出現的。簡單解釋一下它們的作用。當我們進行復雜的繪圖操作時,畫面可能有明顯的閃爍。這是由于繪制的東西沒有同時出現在屏幕上而導致的。“前臺表面”+“后臺緩沖表面”的技術可以解決這個問題。前臺表面即我們看到的屏幕,后臺緩沖表面則在內存當中,對我們來說是不可見的。每次的所有繪圖操作不是在屏幕上直接繪制,而是在后臺緩沖表面中進行,當繪制完成后,需要的時候再把繪制的最終結果顯示到屏幕上。這樣就解決了上述的問題。

實際上,上述技術還涉及到一個“交換鏈”(Swap Chain)的概念。所謂的“鏈”,指的是一系列的表面組成的一個合集。這些表面中有一個是前臺表面(顯示在屏幕上),剩下的都是后臺緩沖表面。其實,簡單的交換鏈不需要很多表面,只要兩個就可以了(雖然感覺不像“鏈”)。一個后臺緩沖表面,一個前臺表面。所謂的“交換”,即是在需要呈現后臺緩沖表面中的內容的時候,交換這兩個表面的“地位”。即前臺表面變成后臺緩沖表面,后臺緩沖表面變成前臺表面。如此一來,后臺緩沖表面的內容就呈現在屏幕上了。原先的前臺表面,則扮演起了新的后臺緩沖表面的角色,準備進行新的繪圖操作。當下一次需要顯示畫面的時候,這兩個表面再次交換,如此循環往復,永不停止。
此外,還有一個離屏表面。離屏表面是永遠看不到的表面(所謂“離屏”),它通常被用來存放位圖,并對其中的數據做一些處理。本文介紹的例子中就用到了一個離屏表面。通常的做法是把離屏表面上的位圖復制到后臺緩沖表面,后臺緩沖表面再顯示到前臺表面。

安裝DirectX SDK

?

使用Direct3D開發之前需要安裝DirectX SDK。安裝沒有難度,一路“Next”即可。

Microsoft DirectX SDK (June 2010)下載地址:
http://www.microsoft.com/en-us/download/details.aspx?id=6812
使用VC進行開發的時候,需要在項目的“屬性”對話框中配置頭文件和庫:
頭文件配置:C/C++->常規->附加包含目錄
庫文件配置:
(a)鏈接器->常規->附加庫目錄。
(b)鏈接器->輸入->附加依賴項(填寫一個d3d9.lib)
編程的時候,添加頭文件后即可使用:

?

[cpp]?view plaincopy
  • #include?<d3d9.h>??
  • ?

    D3D視頻顯示的流程

    有關Direct3D的知識的介紹還有很多,在這里就不再記錄了。正如那句俗話:“Talk is cheap, show me the code.”,光說理論還是會給人一種沒有“腳踏實地”的感覺,下文將會結合代碼記錄Direct3D中使用Surface渲染視頻的技術。

    使用Direct3D的Surface播放視頻一般情況下需要如下步驟:

    1. 創建一個窗口(不屬于D3D的API)
    2. 初始化

    1) 創建一個Device?
    2) 基于Device創建一個Surface(離屏表面)

    3. 循環顯示畫面

    1) 清理
    2) 一幀視頻數據拷貝至Surface
    3) 開始一個Scene
    4) Surface數據拷貝至后臺緩沖表面
    5) 結束Scene
    6) 顯示(后臺緩沖表面->前臺表面)

    下面結合Direct3D播放YUV/RGB的示例代碼,詳細分析一下上文的流程。

    1. 創建一個窗口(不屬于D3D的API)

    建立一個Win32的窗口程序,就可以用于Direct3D的顯示。程序的入口函數是WinMain(),調用CreateWindow()即可創建一個窗口。這一步是必須的,不然Direct3D繪制的內容就沒有地方顯示了。此處不再詳述。

    2. 初始化

    1) 創建一個Device

    這一步完成的時候,可以得到一個IDirect3DDevice9接口的指針。創建一個Device又可以分成以下幾個詳細的步驟:
    (a) 通過 Direct3DCreate9()創建一個IDirect3D9接口。
    獲取IDirect3D9接口的關鍵實現代碼只有一行:

    [cpp]?view plaincopy
  • IDirect3D9?*m_pDirect3D9?=?Direct3DCreate9(?D3D_SDK_VERSION?);??
  • ?

    IDirect3D9接口是一個代表我們顯示3D圖形的物理設備的C++對象。它可以用于獲得物理設備的信息和創建一個IDirect3DDevice9接口。例如,可以通過它的GetAdapterDisplayMode()函數獲取當前主顯卡輸出的分辨率,刷新頻率等參數,實現代碼如下。

    [cpp]?view plaincopy
  • D3DDISPLAYMODE?d3dDisplayMode;??
  • lRet?=?m_pDirect3D9->GetAdapterDisplayMode(?D3DADAPTER_DEFAULT,?&d3dDisplayMode?);??

  • 由代碼可以看出,獲取的信息存儲在D3DDISPLAYMODE結構體中。D3DDISPLAYMODE結構體中包含了主顯卡的分辨率等信息:

    [cpp]?view plaincopy
  • /*?Display?Modes?*/??
  • typedef?struct?_D3DDISPLAYMODE??
  • {??
  • ????UINT????????????Width;??
  • ????UINT????????????Height;??
  • ????UINT????????????RefreshRate;??
  • ????D3DFORMAT???????Format;??
  • }?D3DDISPLAYMODE;??


  • 也可以用它的GetDeviceCaps()函數搞清楚主顯卡是否支持硬件頂點處理,實現的代碼如下。

    [cpp]?view plaincopy
  • D3DCAPS9?d3dcaps;??
  • lRet=m_pDirect3D9->GetDeviceCaps(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,&d3dcaps);??
  • int?hal_vp?=?0;??
  • if(?d3dcaps.DevCaps?&?D3DDEVCAPS_HWTRANSFORMANDLIGHT?){??
  • ????//?yes,?save?in?‘vp’?the?fact?that?hardware?vertex??
  • ????//?processing?is?supported.??
  • ????hal_vp?=?D3DCREATE_HARDWARE_VERTEXPROCESSING;??
  • }??


  • 由代碼可以看出,獲取的設備信息存儲在D3DCAPS9結構體中。D3DCAPS9定義比較長包含了各種各樣的信息,不再列出來。從該結構體的DevCaps字段可以判斷得出該設備是否支持硬件頂點處理。
    (b) 設置D3DPRESENT_PARAMETERS結構體,為創建Device做準備。
    接下來填充一個D3DPRESENT_PARAMETERS結構的實例。這個結構用于設定我們將要創建的IDirect3DDevice9對象的一些特性,它的定義如下。

    [cpp]?view plaincopy
  • typedef?struct?_D3DPRESENT_PARAMETERS_??
  • {??
  • ????UINT????????????????BackBufferWidth;??
  • ????UINT????????????????BackBufferHeight;??
  • ????D3DFORMAT???????????BackBufferFormat;??
  • ????UINT????????????????BackBufferCount;??
  • ??
  • ??
  • ????D3DMULTISAMPLE_TYPE?MultiSampleType;??
  • ????DWORD???????????????MultiSampleQuality;??
  • ??
  • ??
  • ????D3DSWAPEFFECT???????SwapEffect;??
  • ????HWND????????????????hDeviceWindow;??
  • ????BOOL????????????????Windowed;??
  • ????BOOL????????????????EnableAutoDepthStencil;??
  • ????D3DFORMAT???????????AutoDepthStencilFormat;??
  • ????DWORD???????????????Flags;??
  • ??
  • ??
  • ????/*?FullScreen_RefreshRateInHz?must?be?zero?for?Windowed?mode?*/??
  • ????UINT????????????????FullScreen_RefreshRateInHz;??
  • ????UINT????????????????PresentationInterval;??
  • }?D3DPRESENT_PARAMETERS;??

  • D3DPRESENT_PARAMETERS這個結構體比較重要。詳細列一下它每個參數的含義:
    BackBufferWidth:后臺緩沖表面的寬度(以像素為單位)。
    BackBufferHeight:后臺緩沖表面的高度(以像素為單位)。
    BackBufferFormat:后臺緩沖表面的像素格式(例如:32位像素格式為D3DFMT:A8R8G8B8)。
    BackBufferCount:后臺緩沖表面的數量,通常設為“1”,即只有一個后備表面。
    MultiSampleType:全屏抗鋸齒的類型,顯示視頻沒用到,不詳細分析。
    MultiSampleQuality:全屏抗鋸齒的質量等級,顯示視頻沒用到,不詳細分析。
    SwapEffect:指定表面在交換鏈中是如何被交換的。支持以下取值:
    *D3DSWAPEFFECT_DISCARD:后臺緩沖表面區的東西被復制到屏幕上后,后臺緩沖表面區的東西就沒有什么用了,可以丟棄了。
    *D3DSWAPEFFECT_FLIP: 后臺緩沖表面拷貝到前臺表面,保持后臺緩沖表面內容不變。當后臺緩沖表面大于1個時使用。
    *D3DSWAPEFFECT_COPY: 同上。當后臺緩沖表面等于1個時使用。
    一般使用D3DSWAPEFFECT_DISCARD。
    hDeviceWindow:與設備相關的窗口句柄,你想在哪個窗口繪制就寫那個窗口的句柄
    Windowed:BOOL型,設為true則為窗口模式,false則為全屏模式
    EnableAutoDepthStencil:設為true,D3D將自動創建深度/模版緩沖。
    AutoDepthStencilFormat:深度/模版緩沖的格式
    Flags:一些附加特性
    FullScreen_RefreshRateInHz:刷新率,設定D3DPRESENT_RATE_DEFAULT使用默認刷新率
    PresentationInterval:設置刷新的間隔,可以用以下方式:
    *D3DPRENSENT_INTERVAL_DEFAULT,則說明在顯示一個渲染畫面的時候必要等候顯示器刷新完一次屏幕。例如顯示器刷新率設為80Hz的話,則一秒最多可以顯示80個渲染畫面。
    *D3DPRENSENT_INTERVAL_IMMEDIATE:表示可以以實時的方式來顯示渲染畫面。
    下面列出使用Direct3D播放視頻的時候D3DPRESENT_PARAMETERS的一個最簡單的設置。

    [cpp]?view plaincopy
  • //D3DPRESENT_PARAMETERS?Describes?the?presentation?parameters.??
  • D3DPRESENT_PARAMETERS?d3dpp;???
  • ZeroMemory(?&d3dpp,?sizeof(d3dpp)?);??
  • d3dpp.Windowed?=?TRUE;??
  • d3dpp.SwapEffect?=?D3DSWAPEFFECT_DISCARD;??
  • d3dpp.BackBufferFormat?=?D3DFMT_UNKNOWN;??
  • ?

    (c) 通過IDirect3D9的CreateDevice ()創建一個Device。

    最后就可以調用IDirect3D9的CreateDevice()方法創建Device了。

    CreateDevice()的函數原型如下:

    ?

    [cpp]?view plaincopy
  • HRESULT?CreateDevice(??
  • UINT?Adapter,??
  • D3DDEVTYPE?DeviceType,??
  • HWND?hFocusWindow,??
  • DWORD?BehaviorFlags,??
  • D3DPRESENT_PARAMETERS?*pPresentationParameters,??
  • IDirect3DDevice9**?ppReturnedDeviceInterface??
  • );??

  • 其中每個參數的含義如下所列:

    ?

    Adapter:指定對象要表示的物理顯示設備。D3DADAPTER_DEFAULT始終是主要的顯示器適配器。

    DeviceType:設備類型,包括D3DDEVTYPE_HAL(Hardware Accelerator,硬件加速)、D3DDEVTYPE_SW(SoftWare,軟件)。
    hFocusWindow:同我們在前面d3dpp.hDeviceWindow的相同
    BehaviorFlags:設定為D3DCREATE_SOFTWARE_VERTEXPROCESSING(軟件頂點處理)或者D3DCREATE_HARDWARE_VERTEXPROCESSING(硬件頂點處理),使用前應該用D3DCAPS9來檢測用戶計算機是否支持硬件頂點處理功能。
    pPresentationParameters:指定一個已經初始化好的D3DPRESENT_PARAMETERS實例
    ppReturnedDeviceInterface:返回創建的Device


    下面列出使用Direct3D播放視頻的時候CreateDevice()的一個典型的代碼。

    ?

    [cpp]?view plaincopy
  • IDirect3DDevice9?*m_pDirect3DDevice;??
  • D3DPRESENT_PARAMETERS?d3dpp;??
  • …??
  • m_pDirect3D9->CreateDevice(?D3DADAPTER_DEFAULT,?D3DDEVTYPE_HAL,hwnd,??
  • ????????D3DCREATE_SOFTWARE_VERTEXPROCESSING,??
  • ????????&d3dpp,?&m_pDirect3DDevice?);??
  • ?

    ?

    2) 基于Device創建一個Surface

    通過IDirect3DDevice9接口的CreateOffscreenPlainSurface ()方法即可創建一個Surface(離屏表面。所謂的“離屏”指的是永遠不在屏幕上顯示)。CreateOffscreenPlainSurface ()的函數原型如下所示:

    ?

    [cpp]?view plaincopy
  • HRESULT?CreateOffscreenPlainSurface(UINT?width,??
  • ?UINT?height,??
  • ?D3DFORMAT?format,??
  • ?D3DPOOL?pool,??
  • ?IDirect3DSurface9?**?result,??
  • ?HANDLE?*?unused??
  • ?);??

  • 其中每個參數的含義如下所列:

    ?

    Width:離屏表面的寬。
    Height:離屏表面的高。
    Format:離屏表面的像素格式(例如:32位像素格式為D3DFMT_A8R8G8B8)
    Pool:D3DPOOL定義了資源對應的內存類型,例如如下幾種類型。
    D3D3POOL_DEFAULT: 默認值,表示存在于顯卡的顯存中。
    D3D3POOL_MANAGED:由Direct3D自由調度內存的位置(顯存或者緩存中)。
    D3DPOOL_SYSTEMMEM: 表示位于內存中。
    Result:返回創建的Surface。
    Unused:還未研究。

    下面給出一個使用Direct3D播放視頻的時候CreateTexture()的典型代碼。該代碼創建了一個像素格式為YV12的離屏表面,存儲于顯卡的顯存中。

    ?

    [cpp]?view plaincopy
  • IDirect3DDevice9?*?m_pDirect3DDevice;??
  • IDirect3DSurface9?*m_pDirect3DSurfaceRender;??
  • …??
  • m_pDirect3DDevice->CreateOffscreenPlainSurface(??
  • ????????lWidth,lHeight,??
  • ????????(D3DFORMAT)MAKEFOURCC('Y',?'V',?'1',?'2'),??
  • ????????D3DPOOL_DEFAULT,??
  • ????????&m_pDirect3DSurfaceRender,??
  • ????????NULL);??
  • ?

    ?

    創建Surface完成之后,初始化工作就完成了。

    3. 循環顯示畫面

    循環顯示畫面就是一幀一幀的讀取YUV/RGB數據,然后顯示在屏幕上的過程,下面詳述一下步驟。

    1) 清理

    在顯示之前,通過IDirect3DDevice9接口的Clear()函數可以清理Surface。個人感覺在播放視頻的時候用不用這個函數都可以。因為視頻本身就是全屏顯示的。顯示下一幀的時候自然會覆蓋前一幀的所有內容。Clear()函數的原型如下所示:

    ?

    [cpp]?view plaincopy
  • HRESULT?Clear(??
  • ?DWORD?Count,??
  • ?const?D3DRECT?*pRects,??
  • ?DWORD?Flags,??
  • ?D3DCOLOR?Color,??
  • ?float?Z,??
  • ?DWORD?Stencil??
  • );??

  • 其中每個參數的含義如下所列:

    ?

    Count:說明你要清空的矩形數目。如果要清空的是整個客戶區窗口,則設為0;?
    ?pRects:這是一個D3DRECT結構體的一個數組,如果count中設為5,則這個數組中就得有5個元素。?
    ?Flags:一些標記組合。只有三種標記:D3DCLEAR_STENCIL , D3DCLEAR_TARGET , D3DCLEAR_ZBUFFER。?
    ?Color:清除目標區域所使用的顏色。?
    ?float:設置Z緩沖的Z初始值。Z緩沖還沒研究過。?
    ?Stencil:這個在播放視頻的時候也沒有用到。

    下面給出一個使用Direct3D播放視頻的時候IDirect3DDevice9的Clear()的典型代碼。

    ?

    [cpp]?view plaincopy
  • IDirect3DDevice9?*m_pDirect3DDevice;??
  • m_pDirect3DDevice->Clear(0,?NULL,?D3DCLEAR_TARGET,?D3DCOLOR_XRGB(0,?0,?255),?1.0f,?0);??

  • 上述代碼運行完后,屏幕會變成藍色(R,G,B取值為0,0,255)。

    ?



    2) 一幀視頻數據拷貝至Surface

    操作Surface的像素數據,需要使用IDirect3DSurface9的LockRect()和UnlockRect()方法。使用LockRect()鎖定紋理上的一塊矩形區域,該矩形區域被映射成像素數組。利用函數返回的D3DLOCKED_RECT結構體,可以對數組中的像素進行直接存取。LockRect()函數原型如下。

    ?

    [cpp]?view plaincopy
  • HRESULT?LockRect(??
  • ??D3DLOCKED_RECT?*pLockedRect,??
  • ??const?RECT?*pRect,??
  • ??DWORD?Flags??
  • );??

  • 每個參數的意義如下:

    ?

    pLockedRect: 返回的一個D3DLOCKED_RECT結構體用于描述被鎖定的區域。
    pRect: 使用一個 RECT結構體指定需要鎖定的區域。如果為NULL的話就是整個區域。
    Flags: 暫時還沒有細研究。

    其中D3DLOCKED_RECT結構體定義如下所示。

    ?

    [cpp]?view plaincopy
  • typedef?struct?_D3DLOCKED_RECT??
  • {??
  • ????INT?????????????????Pitch;??
  • ????void*???????????????pBits;??
  • }?D3DLOCKED_RECT;??
  • ?

    ?

    兩個參數的意義如下:
    Pitch:surface中一行像素的數據量(Bytes)。注意這個的值并不一定等于實際像素數據一行像素的數據量(通常會大一些),它取值一般是4的整數倍。
    pBits:指向被鎖定的數據。

    使用LockRect()函數之后,就可以對其返回的D3DLOCKED_RECT中的數據進行操作了。例如memcpy()等。操作完成后,調用UnlockRect()方法。

    下面給出一個使用Direct3D的Surface播放視頻的時候IDirect3DSurface9的數據拷貝的典型代碼。該代碼拷貝了YUV420P的數據至Surface。

    [cpp]?view plaincopy
  • IDirect3DSurface9?*m_pDirect3DSurfaceRender;??
  • HRESULT?lRet;??
  • ...??
  • D3DLOCKED_RECT?d3d_rect;??
  • lRet=m_pDirect3DSurfaceRender->LockRect(&d3d_rect,NULL,D3DLOCK_DONOTWAIT);??
  • if(FAILED(lRet))??
  • ????return?-1;??
  • byte?*pSrc?=?buffer;??
  • byte?*?pDest?=?(BYTE?*)d3d_rect.pBits;??
  • int?stride?=?d3d_rect.Pitch;??
  • unsigned?long?i?=?0;??
  • ??
  • //Copy?Data?(YUV420P)??
  • for(i?=?0;i?<?pixel_h;i?++){??
  • ????memcpy(pDest?+?i?*?stride,pSrc?+?i?*?pixel_w,?pixel_w);??
  • }??
  • for(i?=?0;i?<?pixel_h/2;i?++){??
  • ????memcpy(pDest?+?stride?*?pixel_h?+?i?*?stride?/?2,pSrc?+?pixel_w?*?pixel_h?+?pixel_w?*?pixel_h?/?4?+?i?*?pixel_w?/?2,?pixel_w?/?2);??
  • }??
  • for(i?=?0;i?<?pixel_h/2;i?++){??
  • ????memcpy(pDest?+?stride?*?pixel_h?+?stride?*?pixel_h?/?4?+?i?*?stride?/?2,pSrc?+?pixel_w?*?pixel_h?+?i?*?pixel_w?/?2,?pixel_w?/?2);??
  • }??
  • ??
  • lRet=m_pDirect3DSurfaceRender->UnlockRect();??

  • 3) 開始一個Scene
    使用IDirect3DDevice9接口的BeginScene()開始一個Scene。Direct3D中規定所有繪制方法都必須在BeginScene()和EndScene()之間完成。這個函數沒有參數。

    4) Surface數據拷貝至后臺緩沖表面
    使用IDirect3DDevice9接口的GetBackBuffer() 可以獲得后臺緩沖表面。然后使用StretchRect()方法可以將Surface的數據拷貝至后臺緩沖表面中,等待顯示。

    GetBackBuffer()函數原型如下。

    ?

    [cpp]?view plaincopy
  • HRESULT?GetBackBuffer(??
  • ??UINT??iSwapChain,???
  • ??UINT??BackBuffer,???
  • ??D3DBACKBUFFER_TYPE?Type,??
  • ??IDirect3DSurface9?**?ppBackBuffer???
  • );??

  • 函數中參數含義如下:

    ?

    iSwapChain:指定正在使用的交換鏈索引。
    BackBuffer:后臺緩沖表面索引。
    Type:后臺緩沖表面的類型。

    ppBackBuffer:保存后臺緩沖表面的LPDIRECT3DSURFACE9對象。

    ?

    StretchRect()可以將一個矩形區域的像素從設備內存的一個Surface轉移到另一個Surface上。StretchRect()函數的原型如下。

    ?

    [cpp]?view plaincopy
  • HRESULT?StretchRect(??
  • ??IDirect3DSurface9?*?pSourceSurface,??
  • ??CONST?RECT?*?pSourceRect,??
  • ??IDirect3DSurface9?*?pDestSurface,??
  • ??CONST?RECT?*?pDestRect,??
  • ??D3DTEXTUREFILTERTYPE?Filter??
  • );??
  • ?

    ?

    函數中參數含義如下:
    pSourceSurface:指向源Surface的指針。
    pSourceRect:使用一個 RECT結構體指定源Surface需要復制的區域。如果為NULL的話就是整個區域。
    pDestSurface:指向目標Surface的指針。
    pDestRect:使用一個 RECT結構體指定目標Surface的區域。
    Filter:設置圖像大小變換的時候的插值方法。例如:
    D3DTEXF_POINT:鄰域法。質量較差。
    D3DTEXF_LINEAR:線性插值,最常用。

    下面給出的代碼將離屏表面的數據傳給了后臺緩沖表面。一但傳給了后臺緩沖表面,就可以用于顯示了。

    ?

    [cpp]?view plaincopy
  • IDirect3DDevice9?*m_pDirect3DDevice;??
  • IDirect3DSurface9?*m_pDirect3DSurfaceRender;??
  • IDirect3DSurface9?*?pBackBuffer;??
  • ??
  • ??
  • m_pDirect3DDevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&pBackBuffer);??
  • m_pDirect3DDevice->StretchRect(m_pDirect3DSurfaceRender,NULL,pBackBuffer,&m_rtViewport,D3DTEXF_LINEAR);??
  • ?


    5) 結束Scene
    EndScene()和BeginScene()是成對出現的,不再解釋。
    6) 顯示

    使用IDirect3DDevice9接口的Present ()顯示結果。Present ()的原型如下。

    ?

    [cpp]?view plaincopy
  • HRESULT?Present(??
  • ???const?RECT?*pSourceRect,??
  • ???const?RECT?*pDestRect,??
  • ???HWND?hDestWindowOverride,??
  • ???const?RGNDATA?*pDirtyRegion??
  • ??);??

  • 幾個參數的意義如下:

    ?

    pSourceRect:你想要顯示的后臺緩沖表面區的一個矩形區域。設為NULL則表示要把整個后臺緩沖表面區的內容都顯示。?
    pDestRect:表示一個顯示區域。設為NULL表示整個客戶顯示區。?
    hDestWindowOverride:你可以通過它來把顯示的內容顯示到不同的窗口去。設為NULL則表示顯示到主窗口。?
    pDirtyRegion:一般設為NULL

    下面給出一個使用Direct3D播放視頻的時候IDirect3DDevice9的Present ()的典型代碼。從代碼可以看出,全部設置為NULL就可以了。

    ?

    [cpp]?view plaincopy
  • IDirect3DDevice9?*m_pDirect3DDevice;??
  • …??
  • m_pDirect3DDevice->Present(?NULL,?NULL,?NULL,?NULL?);??
  • ?

    ?

    播放視頻流程總結

    文章至此,使用Direct3D顯示YUV/RGB的全部流程就記錄完畢了。最后貼一張圖總結上述流程。

    代碼

    完整的代碼如下所示。

    [cpp]?view plaincopy
  • /**?
  • ?*?最簡單的Direct3D播放視頻的例子(Direct3D播放RGB/YUV)[Surface]?
  • ?*?Simplest?Video?Play?Direct3D?(Direct3D?play?RGB/YUV)[Surface]?
  • ?*?
  • ?*?雷霄驊?Lei?Xiaohua?
  • ?*?leixiaohua1020@126.com?
  • ?*?中國傳媒大學/數字電視技術?
  • ?*?Communication?University?of?China?/?Digital?TV?Technology?
  • ?*?http://blog.csdn.net/leixiaohua1020?
  • ?*?
  • ?*?本程序使用Direct3D播放RGB/YUV視頻像素數據。使用D3D中的Surface渲染數據。?
  • ?*?使用Surface渲染視頻相對于另一種方法(使用Texture)來說,更加簡單,適合?
  • ?*?新手學習。?
  • ?*?函數調用步驟如下:?
  • ?*?
  • ?*?[初始化]?
  • ?*?Direct3DCreate9():獲得IDirect3D9?
  • ?*?IDirect3D9->CreateDevice():通過IDirect3D9創建Device(設備)。?
  • ?*?IDirect3DDevice9->CreateOffscreenPlainSurface():通過Device創建一個Surface(離屏表面)。?
  • ?*?
  • ?*?[循環渲染數據]?
  • ?*?IDirect3DSurface9->LockRect():鎖定離屏表面。?
  • ?*?memcpy():填充數據?
  • ?*?IDirect3DSurface9->UnLockRect():解鎖離屏表面。?
  • ?*?IDirect3DDevice9->BeginScene():開始繪制。?
  • ?*?IDirect3DDevice9->GetBackBuffer():獲得后備緩沖。?
  • ?*?IDirect3DDevice9->StretchRect():拷貝Surface數據至后備緩沖。?
  • ?*?IDirect3DDevice9->EndScene():結束繪制。?
  • ?*?IDirect3DDevice9->Present():顯示出來。?
  • ?*?
  • ?*?This?software?play?RGB/YUV?raw?video?data?using?Direct3D.?It?uses?Surface??
  • ?*?in?D3D?to?render?the?pixel?data.?Compared?to?another?method?(use?Texture),??
  • ?*?it?is?more?simple?and?suitable?for?the?beginner?of?Direct3D.?
  • ?*?The?process?is?shown?as?follows:?
  • ?*?
  • ?*?[Init]?
  • ?*?Direct3DCreate9():?Get?IDirect3D9.?
  • ?*?IDirect3D9->CreateDevice():?Create?a?Device.?
  • ?*?IDirect3DDevice9->CreateOffscreenPlainSurface():?Create?a?Offscreen?Surface.?
  • ?*?
  • ?*?[Loop?to?Render?data]?
  • ?*?IDirect3DSurface9->LockRect():?Lock?the?Offscreen?Surface.?
  • ?*?memcpy():?Fill?pixel?data...?
  • ?*?IDirect3DSurface9->UnLockRect():?UnLock?the?Offscreen?Surface.?
  • ?*?IDirect3DDevice9->BeginScene():?Begin?drawing.?
  • ?*?IDirect3DDevice9->GetBackBuffer():?Get?BackBuffer.?
  • ?*?IDirect3DDevice9->StretchRect():?Copy?Surface?data?to?BackBuffer.?
  • ?*?IDirect3DDevice9->EndScene():?End?drawing.?
  • ?*?IDirect3DDevice9->Present():?Show?on?the?screen.?
  • ?*/??
  • ??
  • #include?<stdio.h>??
  • #include?<tchar.h>??
  • #include?<d3d9.h>??
  • ??
  • CRITICAL_SECTION??m_critial;??
  • ??
  • IDirect3D9?*m_pDirect3D9=?NULL;??
  • IDirect3DDevice9?*m_pDirect3DDevice=?NULL;??
  • IDirect3DSurface9?*m_pDirect3DSurfaceRender=?NULL;??
  • ??
  • RECT?m_rtViewport;??
  • ??
  • //set?'1'?to?choose?a?type?of?file?to?play??
  • //Read?BGRA?data??
  • #define?LOAD_BGRA????0??
  • //Read?YUV420P?data??
  • #define?LOAD_YUV420P?1??
  • ??
  • ??
  • //Width,?Height??
  • const?int?screen_w=500,screen_h=500;??
  • const?int?pixel_w=320,pixel_h=180;??
  • FILE?*fp=NULL;??
  • ??
  • //Bit?per?Pixel??
  • #if?LOAD_BGRA??
  • const?int?bpp=32;??
  • #elif?LOAD_YUV420P??
  • const?int?bpp=12;??
  • #endif??
  • ??
  • unsigned?char?buffer[pixel_w*pixel_h*bpp/8];??
  • ??
  • ??
  • void?Cleanup()??
  • {??
  • ????EnterCriticalSection(&m_critial);??
  • ????if(m_pDirect3DSurfaceRender)??
  • ????????m_pDirect3DSurfaceRender->Release();??
  • ????if(m_pDirect3DDevice)??
  • ????????m_pDirect3DDevice->Release();??
  • ????if(m_pDirect3D9)??
  • ????????m_pDirect3D9->Release();??
  • ????LeaveCriticalSection(&m_critial);??
  • }??
  • ??
  • ??
  • int?InitD3D(?HWND?hwnd,?unsigned?long?lWidth,?unsigned?long?lHeight?)??
  • {??
  • ????HRESULT?lRet;??
  • ????InitializeCriticalSection(&m_critial);??
  • ????Cleanup();??
  • ??
  • ????m_pDirect3D9?=?Direct3DCreate9(?D3D_SDK_VERSION?);??
  • ????if(?m_pDirect3D9?==?NULL?)??
  • ????????return?-1;??
  • ??
  • ????D3DPRESENT_PARAMETERS?d3dpp;???
  • ????ZeroMemory(?&d3dpp,?sizeof(d3dpp)?);??
  • ????d3dpp.Windowed?=?TRUE;??
  • ????d3dpp.SwapEffect?=?D3DSWAPEFFECT_DISCARD;??
  • ????d3dpp.BackBufferFormat?=?D3DFMT_UNKNOWN;??
  • ??
  • ????GetClientRect(hwnd,&m_rtViewport);??
  • ??
  • ????lRet=m_pDirect3D9->CreateDevice(?D3DADAPTER_DEFAULT,?D3DDEVTYPE_HAL,hwnd,??
  • ????????D3DCREATE_SOFTWARE_VERTEXPROCESSING,??
  • ????????&d3dpp,?&m_pDirect3DDevice?);??
  • ????if(FAILED(lRet))??
  • ????????return?-1;??
  • ??
  • #if?LOAD_BGRA??
  • ????lRet=m_pDirect3DDevice->CreateOffscreenPlainSurface(??
  • ????????lWidth,lHeight,??
  • ????????D3DFMT_X8R8G8B8,??
  • ????????D3DPOOL_DEFAULT,??
  • ????????&m_pDirect3DSurfaceRender,??
  • ????????NULL);??
  • #elif?LOAD_YUV420P??
  • ????lRet=m_pDirect3DDevice->CreateOffscreenPlainSurface(??
  • ????????lWidth,lHeight,??
  • ????????(D3DFORMAT)MAKEFOURCC('Y',?'V',?'1',?'2'),??
  • ????????D3DPOOL_DEFAULT,??
  • ????????&m_pDirect3DSurfaceRender,??
  • ????????NULL);??
  • #endif??
  • ??
  • ??
  • ????if(FAILED(lRet))??
  • ????????return?-1;??
  • ??
  • ????return?0;??
  • }??
  • ??
  • ??
  • bool?Render()??
  • {??
  • ????HRESULT?lRet;??
  • ????//Read?Data??
  • ????//RGB??
  • ????if?(fread(buffer,?1,?pixel_w*pixel_h*bpp/8,?fp)?!=?pixel_w*pixel_h*bpp/8){??
  • ????????//?Loop??
  • ????????fseek(fp,?0,?SEEK_SET);??
  • ????????fread(buffer,?1,?pixel_w*pixel_h*bpp/8,?fp);??
  • ????}??
  • ??????
  • ????if(m_pDirect3DSurfaceRender?==?NULL)??
  • ????????return?-1;??
  • ????D3DLOCKED_RECT?d3d_rect;??
  • ????lRet=m_pDirect3DSurfaceRender->LockRect(&d3d_rect,NULL,D3DLOCK_DONOTWAIT);??
  • ????if(FAILED(lRet))??
  • ????????return?-1;??
  • ??
  • ????byte?*pSrc?=?buffer;??
  • ????byte?*?pDest?=?(BYTE?*)d3d_rect.pBits;??
  • ????int?stride?=?d3d_rect.Pitch;??
  • ????unsigned?long?i?=?0;??
  • ??
  • ????//Copy?Data??
  • #if?LOAD_BGRA??
  • ????int?pixel_w_size=pixel_w*4;??
  • ????for(i=0;?i<?pixel_h;?i++){??
  • ????????memcpy(?pDest,?pSrc,?pixel_w_size?);??
  • ????????pDest?+=?stride;??
  • ????????pSrc?+=?pixel_w_size;??
  • ????}??
  • #elif?LOAD_YUV420P??
  • ????for(i?=?0;i?<?pixel_h;i?++){??
  • ????????memcpy(pDest?+?i?*?stride,pSrc?+?i?*?pixel_w,?pixel_w);??
  • ????}??
  • ????for(i?=?0;i?<?pixel_h/2;i?++){??
  • ????????memcpy(pDest?+?stride?*?pixel_h?+?i?*?stride?/?2,pSrc?+?pixel_w?*?pixel_h?+?pixel_w?*?pixel_h?/?4?+?i?*?pixel_w?/?2,?pixel_w?/?2);??
  • ????}??
  • ????for(i?=?0;i?<?pixel_h/2;i?++){??
  • ????????memcpy(pDest?+?stride?*?pixel_h?+?stride?*?pixel_h?/?4?+?i?*?stride?/?2,pSrc?+?pixel_w?*?pixel_h?+?i?*?pixel_w?/?2,?pixel_w?/?2);??
  • ????}??
  • #endif??
  • ??
  • ????lRet=m_pDirect3DSurfaceRender->UnlockRect();??
  • ????if(FAILED(lRet))??
  • ????????return?-1;??
  • ??
  • ????if?(m_pDirect3DDevice?==?NULL)??
  • ????????return?-1;??
  • ??
  • ????m_pDirect3DDevice->Clear(?0,?NULL,?D3DCLEAR_TARGET,?D3DCOLOR_XRGB(0,0,0),?1.0f,?0?);??
  • ????m_pDirect3DDevice->BeginScene();??
  • ????IDirect3DSurface9?*?pBackBuffer?=?NULL;??
  • ??
  • ????m_pDirect3DDevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&pBackBuffer);??
  • ????m_pDirect3DDevice->StretchRect(m_pDirect3DSurfaceRender,NULL,pBackBuffer,&m_rtViewport,D3DTEXF_LINEAR);??
  • ????m_pDirect3DDevice->EndScene();??
  • ????m_pDirect3DDevice->Present(?NULL,?NULL,?NULL,?NULL?);??
  • ??????
  • ??
  • ????return?true;??
  • }??
  • ??
  • ??
  • LRESULT?WINAPI?MyWndProc(HWND?hwnd,?UINT?msg,?WPARAM?wparma,?LPARAM?lparam)??
  • {??
  • ????switch(msg){??
  • ????case?WM_DESTROY:??
  • ????????Cleanup();??
  • ????????PostQuitMessage(0);??
  • ????????return?0;??
  • ????}??
  • ????return?DefWindowProc(hwnd,?msg,?wparma,?lparam);??
  • }??
  • ??
  • int?WINAPI?WinMain(?__in?HINSTANCE?hInstance,?__in_opt?HINSTANCE?hPrevInstance,?__in?LPSTR?lpCmdLine,?__in?int?nShowCmd?)??
  • {??
  • ????WNDCLASSEX?wc;??
  • ????ZeroMemory(&wc,?sizeof(wc));??
  • ??
  • ????wc.cbSize?=?sizeof(wc);??
  • ????wc.hbrBackground?=?(HBRUSH)(COLOR_WINDOW?+?1);??
  • ????wc.lpfnWndProc?=?(WNDPROC)MyWndProc;??
  • ????wc.lpszClassName?=?L"D3D";??
  • ????wc.style?=?CS_HREDRAW?|?CS_VREDRAW;??
  • ??
  • ????RegisterClassEx(&wc);??
  • ??
  • ????HWND?hwnd?=?NULL;??
  • ????hwnd?=?CreateWindow(L"D3D",?L"Simplest?Video?Play?Direct3D?(Surface)",?WS_OVERLAPPEDWINDOW,?100,?100,?500,?500,?NULL,?NULL,?hInstance,?NULL);??
  • ????if?(hwnd==NULL){??
  • ????????return?-1;??
  • ????}??
  • ??????
  • ????if(InitD3D(?hwnd,?pixel_w,?pixel_h)==E_FAIL){??
  • ????????return?-1;??
  • ????}??
  • ??
  • ????ShowWindow(hwnd,?nShowCmd);??
  • ????UpdateWindow(hwnd);??
  • ??
  • #if?LOAD_BGRA??
  • ????fp=fopen("../test_bgra_320x180.rgb","rb+");??
  • #elif?LOAD_YUV420P??
  • ????fp=fopen("../test_yuv420p_320x180.yuv","rb+");??
  • #endif??
  • ????if(fp==NULL){??
  • ????????printf("Cannot?open?this?file.\n");??
  • ????????return?-1;??
  • ????}??
  • ??
  • ????MSG?msg;??
  • ????ZeroMemory(&msg,?sizeof(msg));??
  • ??
  • ????while?(msg.message?!=?WM_QUIT){??
  • ????????//PeekMessage,?not?GetMessage??
  • ????????if?(PeekMessage(&msg,?NULL,?0,?0,?PM_REMOVE)){??
  • ????????????TranslateMessage(&msg);??
  • ????????????DispatchMessage(&msg);??
  • ????????}??
  • ????????else{??
  • ????????????Sleep(40);??
  • ????????????Render();??
  • ????????}??
  • ????}??
  • ??
  • ??
  • ????UnregisterClass(L"D3D",?hInstance);??
  • ????return?0;??
  • }??
  • ?

    代碼注意事項

    1.可以通過設置定義在文件開始出的宏,決定讀取哪個格式的像素數據(bgra,yuv420p)。

    [cpp]?view plaincopy
  • //set?'1'?to?choose?a?type?of?file?to?play????
  • //Read?BGRA?data??
  • #define?LOAD_BGRA????0??
  • //Read?YUV420P?data??
  • #define?LOAD_YUV420P?1??


  • 2.窗口的寬高為screen_w,screen_h。像素數據的寬高為pixel_w,pixel_h。它們的定義如下。

    ?

    [cpp]?view plaincopy
  • //Width,?Height????
  • const?int?screen_w=500,screen_h=500;????
  • const?int?pixel_w=320,pixel_h=180;????
  • ?

    ?

    3.其他要點
    本程序使用的是Win32的API創建的窗口。但注意這個并不是MFC應用程序的窗口。MFC代碼量太大,并不適宜用來做教程。因此使用Win32的API創建窗口。程序的入口函數是WinMain(),其中調用了CreateWindow()創建了顯示視頻的窗口。此外,程序中的消息循環使用的是PeekMessage()而不是GetMessage()。GetMessage()獲取消息后,將消息從系統中移除,當系統無消息時,會等待下一條消息,是阻塞函數。而函數PeekMesssge()是以查看的方式從系統中獲取消息,可以不將消息從系統中移除(相當于“偷看”消息),是非阻塞函數;當系統無消息時,返回FALSE,繼續執行后續代碼。使用PeekMessage()的好處是可以保證每隔40ms可以顯示下一幀畫面。

    運行結果

    不論選擇讀取哪個格式的文件,程序的最終輸出效果都是一樣的,如下圖所示。

    ?

    下載

    代碼位于“Simplest Media Play”中



    SourceForge項目地址:https://sourceforge.net/projects/simplestmediaplay/
    CSDN下載地址:http://download.csdn.net/detail/leixiaohua1020/8054395


    上述工程包含了使用各種API(Direct3D,OpenGL,GDI,DirectSound,SDL2)播放多媒體例子。其中音頻輸入為PCM采樣數據。輸出至系統的聲卡播放出來。視頻輸入為YUV/RGB像素數據。輸出至顯示器上的一個窗口播放出來。
    通過本工程的代碼初學者可以快速學習使用這幾個API播放視頻和音頻的技術。
    一共包括了如下幾個子工程:
    simplest_audio_play_directsound:? 使用DirectSound播放PCM音頻采樣數據。
    simplest_audio_play_sdl2:? 使用SDL2播放PCM音頻采樣數據。
    simplest_video_play_direct3d:? 使用Direct3D的Surface播放RGB/YUV視頻像素數據。
    simplest_video_play_direct3d_texture:使用Direct3D的Texture播放RGB視頻像素數據。
    simplest_video_play_gdi:? 使用GDI播放RGB/YUV視頻像素數據。
    simplest_video_play_opengl:? 使用OpenGL播放RGB/YUV視頻像素數據。
    simplest_video_play_opengl_texture: 使用OpenGL的Texture播放YUV視頻像素數據。
    simplest_video_play_sdl2:? 使用SDL2播放RGB/YUV視頻像素數據。

    總結

    以上是生活随笔為你收集整理的最简单的视音频播放示例3:Direct3D播放YUV,RGB(通过Surface)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    久久综合九色综合97_ 久久久 | 在线a亚洲视频播放在线观看 | av中文字幕在线电影 | 超碰97国产精品人人cao | 亚洲成人精品久久久 | 国产精品入口66mio女同 | 狠狠色香婷婷久久亚洲精品 | 久久理伦片 | 欧美性爽爽| 精品国产伦一区二区三区观看体验 | 色综合久久久网 | 天天操夜夜爱 | 久草www | 亚洲综合少妇 | 亚洲天天在线 | 亚洲欧美少妇 | 波多野结衣一区 | 国产视频九色蝌蚪 | 色婷婷综合久久久久 | 久草久草在线 | 欧美性色xo影院 | 久久影院中文字幕 | 久久久蜜桃一区二区 | 黄色免费视频在线观看 | 久久天天躁狠狠躁亚洲综合公司 | 亚洲视频六区 | 最近2019好看的中文字幕免费 | 免费亚洲精品视频 | 六月色丁香 | 天天干天天干天天操 | 福利视频午夜 | 97精品国产97久久久久久粉红 | 天海冀一区二区三区 | 欧美成人xxxx | 天天天干夜夜夜操 | 久久精品成人热国产成 | 在线观看成人国产 | 日日操日日插 | .国产精品成人自产拍在线观看6 | 日韩欧美69 | 中文字幕日韩精品有码视频 | 国产精品一区二区久久国产 | 亚洲黄色av网址 | 欧美专区亚洲专区 | 激情五月五月婷婷 | 婷婷亚洲最大 | 国产成人高清 | 91日本在线播放 | 成人免费共享视频 | 丝袜一区在线 | 伊人丁香| 超碰com| 欧美一区二区在线免费观看 | 美女久久| 欧美日本在线视频 | 三级黄色免费片 | 国产高清久久久 | 精品国产1区二区 | 黄色一级大片在线观看 | 欧美男同视频网站 | 五月婷激情 | 狠狠操天天射 | 免费男女羞羞的视频网站中文字幕 | 天天射天天射天天 | 欧美成人视 | 久久97久久 | 精品99在线视频 | 九九交易行官网 | av在线一二三区 | 国产精品精品久久久久久 | 免费看色的网站 | 国产手机在线观看 | 亚洲国产精品电影 | 欧美一二三区播放 | 免费看污污视频的网站 | 国产五月 | 在线亚洲成人 | 97在线免费视频 | av在线电影免费观看 | 在线观看激情av | 久久在线看 | 国产一级片免费播放 | 激情欧美一区二区免费视频 | 久久99久久久久久 | 欧美日韩视频在线观看一区二区 | 亚洲精品成人 | 日韩在线高清视频 | 午夜精品久久久久久久99 | 波多野结衣在线视频免费观看 | 国产日产精品久久久久快鸭 | 伊人久在线 | 色吊丝在线永久观看最新版本 | 欧美国产日韩中文 | 欧美网址在线观看 | 亚洲精品免费观看 | 国产精品久久久久婷婷 | 久草青青在线观看 | 国产精品a成v人在线播放 | 天天天天色综合 | 99精品成人 | 99视频精品在线 | 国产中文字幕三区 | 免费在线激情电影 | 丁香激情综合久久伊人久久 | 在线 日韩 av | 久久99国产一区二区三区 | 日韩视频在线观看视频 | 夜夜爽天天爽 | 天堂在线一区 | 在线观看911视频 | 亚洲精品成人在线 | 免费观看性生交 | 亚洲第一中文字幕 | 九九久久精品视频 | 国产 日韩 在线 亚洲 字幕 中文 | 国产v亚洲v | www成人精品| 91av在线免费 | 久在线观看 | 五月婷婷爱 | 国内精品久久久久久久久久久久 | 在线国产黄色 | 国产在线无 | 国产精品一区二区三区在线 | 国产精品2019| 五月天婷婷免费视频 | 国产色影院| 国产精品成人一区二区 | 一区二区影院 | 欧美日韩视频网站 | 亚洲精品视频网站在线观看 | 三上悠亚一区二区在线观看 | 91成熟丰满女人少妇 | 亚洲国产久 | 亚洲综合精品视频 | 亚洲一区二区三区四区精品 | 日日夜夜精品网站 | 深爱婷婷久久综合 | 日本中文字幕在线观看 | 国产精品video爽爽爽爽 | 久久久久久99精品 | 亚洲国产精品500在线观看 | 四虎影视av | 国产成人精品一区二区三区网站观看 | 婷婷色亚洲 | 射九九| 中文字幕在线播放视频 | 在线视频一区二区 | 国产在线高清精品 | 国产黄色特级片 | 中文字幕 国产视频 | 手机成人免费视频 | 亚洲午夜精品在线观看 | 亚洲国产日本 | 免费福利片 | 国产精品久久久av久久久 | 成年人看片网站 | 色七七亚洲影院 | 综合久久久久久 | 最近能播放的中文字幕 | 午夜成人免费电影 | 四虎海外影库www4hu | 午夜视频色 | 黄色精品网站 | 国产精品美女久久久久久免费 | 中文字幕久久精品亚洲乱码 | 久久综合久久八八 | 五月激情婷婷丁香 | 日日夜夜天天人人 | 中文字幕黄色av | 黄色成年 | 日韩成人免费电影 | 久久综合婷婷综合 | 国产精品久久久区三区天天噜 | 色综合天天视频在线观看 | 国产在线观看二区 | 五月婷色| 国产黄色观看 | 91在线超碰| 特级西西www44高清大胆图片 | 黄色成品视频 | 国产精品1区| 亚洲精品乱码久久久久久蜜桃91 | www.看片网站 | 精品免费视频 | 五月亚洲综合 | 精品国产一区二区三区久久久久久 | 天堂激情网 | 欧美一区二区三区特黄 | 婷婷九月丁香 | 麻豆视频在线看 | 成年人黄色免费看 | 五月婷在线 | 在线观看黄网站 | 美女视频a美女大全免费下载蜜臀 | 久久a v视频| 伊人色播 | 欧美日韩另类视频 | 四虎影视成人永久免费观看亚洲欧美 | 久久精品一区二区 | 亚洲高清视频在线 | 国产一区二区在线免费观看 | 国产h在线观看 | www.国产精品| 国产精品3区 | 中中文字幕av在线 | 91一区二区三区久久久久国产乱 | 国产精品丝袜 | 最近免费中文视频 | 91高清完整版在线观看 | 成人在线观看影院 | 久久国产精品99国产 | 干亚洲少妇| 在线免费黄色av | av在线官网 | 韩国av一区二区三区 | 98福利在线| 视频直播国产精品 | 国产精品一区一区三区 | 久久久久国产精品免费网站 | 亚洲欧洲成人精品av97 | www蜜桃视频 | 麻豆国产网站入口 | 欧美一区日韩一区 | 天天玩天天干 | 在线免费看黄色 | 天天色中文 | 久草在线免费新视频 | 色婷婷国产在线 | 亚洲欧洲精品一区二区 | 国产一级免费观看 | 婷婷久久综合网 | 激情伊人五月天久久综合 | 日韩欧美国产免费播放 | 日本黄色免费网站 | 欧美精品一区二区在线观看 | 天天操月月操 | 国产资源在线视频 | 少妇av网| 九九视频在线观看视频6 | 91pony九色丨交换 | 玖玖视频网 | 夜夜躁狠狠躁日日躁视频黑人 | 久久免费视频这里只有精品 | 久久国产经典 | 亚洲在线视频免费观看 | 亚洲综合少妇 | 久久96国产精品久久99软件 | 午夜体验区 | 免费在线国产 | 中文字幕欧美日韩va免费视频 | 精品国产观看 | 丁香婷婷激情网 | 激情av网址 | 婷婷久久久 | 亚洲视频网站在线观看 | 91亚洲精品在线 | 久久草草热国产精品直播 | 国产在线播放一区二区三区 | 四虎亚洲精品 | 久在线观看 | 亚洲精选视频在线 | 日韩在线影视 | 一级黄色片在线免费看 | 成人av地址 | 国产精品大尺度 | 青青草国产成人99久久 | 色综合久久中文字幕综合网 | 国产精品你懂的在线观看 | 色亚洲激情 | 色在线国产| 久久免费99 | 国产剧情一区在线 | 国产成人久久久77777 | 三级av免费 | 最近高清中文在线字幕在线观看 | 国产精品毛片一区二区三区 | 天天干天天干 | 成人在线你懂得 | 国产精品尤物 | 欧美日韩视频一区二区 | 精品美女久久久久久免费 | 免费高清看电视网站 | 99久久精品免费看国产一区二区三区 | 在线导航av | 免费看污黄网站 | 狠狠的日 | 啪啪免费试看 | 国产特级毛片aaaaaa高清 | www.av小说 | 日本精品在线视频 | 91精品在线播放 | 午夜私人影院 | 视频国产一区二区三区 | 久草热久草视频 | 国产精品久久艹 | 又湿又紧又大又爽a视频国产 | 精品视频中文字幕 | 久久精品99国产精品 | 色视频网站免费观看 | 久久天堂亚洲 | 日韩在线首页 | 美女免费视频一区 | 国产综合福利在线 | 亚洲最新合集 | 亚洲人在线视频 | 久热av在线 | 久久午夜电影网 | 久久久久国产精品一区 | 日本三级全黄少妇三2023 | 国产精品免费在线 | 西西www4444大胆在线 | 久久成人国产精品一区二区 | 国产a国产 | 麻豆视频在线免费看 | 婷婷六月久久 | 九九在线高清精品视频 | 久久精品伊人 | 国产精品视频全国免费观看 | 高清久久久久久 | 成年人视频在线 | 久久8精品| 亚洲精品乱码久久久久 | 色香蕉网 | 国产香蕉97碰碰碰视频在线观看 | www.久久久.cum | 嫩草av影院 | 久久久免费看片 | 97人人精品 | 国产在线毛片 | 国产黄色av网站 | 亚洲黄色免费在线看 | 国产剧情一区 | 国产 日韩 欧美 中文 在线播放 | 黄色一级免费电影 | 中文字幕免费观看 | 欧美在线视频第一页 | 九色琪琪久久综合网天天 | 亚洲特级毛片 | 激情动态 | 久久精品伊人 | 亚洲成av人片在线观看香蕉 | 国产一级二级三级在线观看 | 国产成人三级在线观看 | 亚洲精品婷婷 | 91麻豆国产| 免费观看成人av | 免费在线色 | 日韩欧美在线一区二区 | 日韩中文字幕一区 | 国产福利91精品张津瑜 | 91大神精品视频在线观看 | 久久久久免费精品视频 | 在线一区二区三区 | 亚洲黄色免费电影 | 最近高清中文字幕在线国语5 | 成年人视频在线免费播放 | 黄色成人av | 国产精品久免费的黄网站 | 在线激情av电影 | 91在线操 | 嫩草av在线| 91麻豆精品| 国产不卡一二三区 | 91日韩在线| 精品国产123 | 亚洲最新av在线 | 在线精品视频免费播放 | 一区二区三区日韩视频在线观看 | 成人a级黄色片 | 欧美一级激情 | 免费观看视频的网站 | 精品你懂的 | 欧美一区二视频在线免费观看 | 久久国产精品系列 | 在线观看av片 | 成年人黄色免费网站 | 激情婷婷色 | 久久久久久久久久久久久9999 | 九色视频网站 | 日本女人逼| 2021久久| 久久精品视频日本 | 99riav1国产精品视频 | 日韩在线视频在线观看 | 一区 二区 精品 | 99精品在线免费视频 | 亚洲在线a | 日本99干网 | 综合中文字幕 | 日日久视频 | 欧美日韩免费视频 | 免费av成人在线 | 午夜视频久久久 | 成人在线观看免费视频 | 国产乱对白刺激视频不卡 | 亚洲视频免费视频 | 在线观看av小说 | 特级免费毛片 | 夜夜爽夜夜操 | 日韩欧美视频免费观看 | 成人综合婷婷国产精品久久免费 | 天天综合狠狠精品 | 亚洲精品美女久久久久网站 | 色就色,综合激情 | www.黄色网.com | 在线电影中文字幕 | 天天色天 | 亚洲国产日韩一区 | 99久久影视 | 九九av| 国产视频一区二区在线 | 久草在线免费在线观看 | 欧美国产日韩一区 | av中文字幕日韩 | 国产视频美女 | 伊人色综合久久天天网 | 欧美一区二区三区特黄 | 免费色黄| 免费污片| 91色偷偷| 91av资源在线 | 九热在线 | 亚洲黄色一级视频 | 中文字幕 二区 | 久久老司机精品视频 | 在线免费性生活片 | 日韩在线观看小视频 | 亚洲电影影音先锋 | 久久精品官网 | 成年人免费电影在线观看 | 久久精品在线免费观看 | 久久国内免费视频 | 久久免费看 | 中文字幕在线中文 | 黄色视屏av| av大全在线 | 亚洲精品视频在线观看视频 | av天天在线观看 | 亚洲日本国产精品 | 中文字幕视频在线播放 | 波多野结衣在线观看一区二区三区 | 久久久av电影 | 狠狠网 | 亚洲精品国产自产拍在线观看 | 国产精品久久久久久久午夜片 | 色视频在线观看 | 欧美成人在线免费观看 | 一级片视频在线 | 91国内在线| 粉嫩av一区二区三区免费 | 成人久久免费视频 | 久久色在线播放 | 免费在线国产视频 | 91精品一区二区三区蜜桃 | 最新国产精品久久精品 | 亚洲aⅴ免费在线观看 | 二区三区在线 | 亚洲va在线va天堂va偷拍 | 亚洲国产片色 | 日韩中文字幕免费 | 国产精品福利一区 | 国产视频精品久久 | 中文字幕有码在线播放 | 成人国产精品免费观看 | 青青草国产精品 | 欧美久久久久久久久久久久久 | 亚洲一区日韩 | 亚洲码国产日韩欧美高潮在线播放 | 成人中文字幕+乱码+中文字幕 | 91亚洲精品久久久蜜桃 | 成人综合婷婷国产精品久久免费 | 91大神精品视频在线观看 | 婷婷丁香五 | 国产亚洲精品美女 | 久草视频在线观 | 天天色天天色天天色 | 国产剧情在线一区 | 99视频播放| 成人性生交视频 | av在线影视 | 中文字幕av网站 | 在线免费观看视频a | 国产中文字幕久久 | 久久精品久久久久 | 97视频久久久 | 99精品视频网 | 在线免费性生活片 | 波多野结衣亚洲一区二区 | 天天爱av导航| av大全在线观看 | 91污视频在线观看 | 精品国产一区二区三区久久 | 天天骚夜夜操 | 中文字幕一二 | 天天综合导航 | 97爱爱爱 | 在线中文字幕播放 | 国产另类xxxxhd高清 | 中文字幕 国产视频 | 婷婷色在线观看 | 顶级bbw搡bbbb搡bbbb | 中文字幕在线观看网址 | 国产美女久久久 | 五月天堂色 | 日韩中文在线视频 | 一区二区视频网站 | 国产手机在线观看 | 夜夜操综合网 | 日韩在线精品 | 日韩电影中文字幕 | 久久99久久99精品免费看小说 | 国产日韩欧美视频在线观看 | 日日干夜夜骑 | 天天干天天拍天天操 | 99热亚洲精品| 在线观看免费版高清版 | 精品国产伦一区二区三区免费 | 一区二区三区四区精品视频 | 欧美性色综合网站 | 亚洲免费精品视频 | 免费a网站 | 超碰在线观看97 | 91精品国产成人观看 | 91麻豆精品国产自产在线游戏 | 麻豆国产露脸在线观看 | 亚洲天天在线日亚洲洲精 | 黄色国产高清 | 国产91在线观 | 日韩欧美在线综合网 | 国产精品v a免费视频 | 综合黄色网 | 亚洲国产片| 人人插人人搞 | 99精品一级欧美片免费播放 | 91精品夜夜 | 探花在线观看 | 久久99精品国产99久久6尤 | av黄色大片 | 成人免费 在线播放 | 国产一级片免费观看 | 国产精品女人久久久久久 | 国产精品免费小视频 | 天天操天天综合网 | 在线国产专区 | 又长又大又黑又粗欧美 | 国产精品日韩欧美一区二区 | 久久与婷婷 | 日韩在线一区二区免费 | 天天拍天天操 | 国产在线观看a | 免费成人短视频 | av电影 一区二区 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 久久伊人爱 | 久久国产精品成人免费浪潮 | 人人操日日干 | 亚洲永久精品国产 | 亚洲极色 | 亚洲精品白浆高清久久久久久 | 久久综合色天天久久综合图片 | 欧美三级免费 | 超碰人人做 | 亚洲天天看 | 97超级碰碰碰视频在线观看 | 丁香婷婷综合激情 | 国产精品露脸在线 | 成人h在线观看 | 天天射网站| 黄色成人影院 | 黄色小说免费观看 | 九色最新网址 | 九九国产精品视频 | 亚洲国产天堂av | 在线看av的网址 | 免费看亚洲毛片 | 久久精品欧美一区 | 国产视频中文字幕 | 久久永久免费视频 | 久久九九久久 | 久草视频免费在线播放 | 在线免费视频一区 | 制服丝袜在线91 | 久久国产精品99久久久久久老狼 | 丁香婷婷激情 | 午夜久久成人 | 成人av中文字幕在线观看 | 91精品国产综合久久久久久久 | 91免费的视频在线播放 | 久久蜜臀一区二区三区av | 91影视成人| 亚洲国产精品成人va在线观看 | 日韩毛片一区 | 久草a在线 | 在线观看亚洲国产 | 亚洲国产成人久久综合 | 午夜精品99久久免费 | 国产精品视频地址 | 日韩一级片观看 | 中文字幕五区 | 天天鲁天天干天天射 | 日本视频久久久 | 99c视频高清免费观看 | 亚洲午夜在线视频 | www.com久久| 一区二区三区国 | 久久久久成人精品亚洲国产 | 日韩久久精品一区二区三区 | 日日操夜夜操狠狠操 | 一区二区中文字幕在线播放 | 亚洲精品免费在线观看视频 | 天天色天 | 热久久在线视频 | 91av九色 | www.超碰97.com | www.五月天色 | 91福利区一区二区三区 | 色婷五月 | 日本黄色特级片 | 99热9| caobi视频| 亚洲视频专区在线 | 亚洲精品女人久久久 | 国产色影院 | 在线免费观看国产视频 | 国产一区在线视频 | 婷婷丁香av | 国产精品久久久免费看 | 久9在线| 久久亚洲综合国产精品99麻豆的功能介绍 | 在线视频区 | 国产精品一区二区精品视频免费看 | 三三级黄色片之日韩 | 亚洲免费av片 | 亚洲精品字幕在线观看 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 日本精品在线 | 四虎影院在线观看av | 天天干天天爽 | 日韩av在线免费看 | 少妇自拍av | 青春草免费视频 | 久久欧洲视频 | 日本中文字幕一二区观 | 人人要人人澡人人爽人人dvd | 2021av在线| 国产精品21区 | 91久久久国产精品 | 天天插日日操 | 在线免费黄色 | 国产中文在线观看 | 欧美日韩xxxxx | 韩日视频在线 | 成人久久免费视频 | 青草视频网 | 深爱婷婷| 日韩美视频 | 91精品第一页 | 日韩精品一区二区三区免费观看视频 | 天天色视频 | 综合色婷婷 | 亚洲一级黄色av | 91九色视频在线 | 在线观看国产区 | 精品亚洲一区二区 | 99r在线观看 | 精品一区二区三区香蕉蜜桃 | 福利片视频区 | 99精品免费久久久久久日本 | 狠狠网亚洲精品 | 99色婷婷| 日本丰满少妇免费一区 | 91成人在线观看高潮 | 在线天堂中文www视软件 | 美女网站视频一区 | 成人中文字幕+乱码+中文字幕 | 99久久精品免费看国产四区 | 免费十分钟| 91新人在线观看 | 黄色特级片 | 国产午夜精品av一区二区 | 深爱五月激情网 | 98精品国产自产在线观看 | 91传媒视频在线观看 | 日韩大片在线免费观看 | 国产一级91 | 国产一级二级在线观看 | 色多视频在线观看 | 最近日本mv字幕免费观看 | 国产免费又粗又猛又爽 | 国产美女无遮挡永久免费 | wwwww.国产 | 日韩色区 | 日韩二区三区 | 久久不射电影院 | 欧美日韩在线精品一区二区 | 国产精品一区二区三区在线 | 国产精品一区二区三区四区在线观看 | 99久久er热在这里只有精品66 | 四虎国产精品免费观看视频优播 | 亚洲一区久久 | 精品美女久久 | 天天操夜操视频 | 日日操操操 | 亚洲精品永久免费视频 | 九九免费在线视频 | 精品99在线观看 | 日本成人免费在线观看 | 欧美精品久久人人躁人人爽 | 91福利区一区二区三区 | 亚洲视屏在线播放 | 人人插人人看 | 国产成人免费网站 | 中文字幕激情 | 日韩精选在线观看 | 波多野结衣动态图 | 九九99 | 激情婷婷亚洲 | 日韩精品在线播放 | 国产精品久久久久久久久搜平片 | 欧洲精品久久久久毛片完整版 | 久久激情综合 | 国产91欧美 | 91爱爱网址| 五月在线| 精品麻豆入口免费 | 亚洲高清网站 | 中文字幕一区二区三区四区 | 人人干人人添 | 久草av在线播放 | 久草国产在线 | 日韩色av色资源 | 久久国产精品免费看 | 97精品国产97久久久久久久久久久久 | 成人黄色大片在线免费观看 | 婷婷丁香在线观看 | 欧美二区三区91 | 亚洲精品国产综合99久久夜夜嗨 | 高清国产午夜精品久久久久久 | 在线观看黄网站 | 91人人在线 | 成年人国产视频 | 日日操狠狠干 | 亚洲精品久久久久www | 欧美日韩视频在线观看一区二区 | 欧美精品一区二区三区四区在线 | 日韩黄色在线电影 | 97日日碰人人模人人澡分享吧 | 国产精久久久久久妇女av | 久久精品国产一区二区 | 探花视频免费在线观看 | 免费97视频 | 成人av免费网站 | 国产在线观看中文字幕 | 成人教育av| 国产精品久久精品 | 一本一本久久aa综合精品 | 国产一级在线观看 | 国产在线小视频 | 日韩三级视频在线看 | 国产999在线 | 中文不卡视频在线 | 综合色影院 | 久久久三级视频 | 国产黄色成人 | 国产91成人在在线播放 | 中文字幕综合在线 | 久久伊人婷婷 | 在线看毛片网站 | 一本一本久久aa综合精品 | 国产三级午夜理伦三级 | 91九色蝌蚪视频在线 | 激情图片qvod | 国产精品99久久99久久久二8 | 日韩免费观看高清 | 亚洲精品午夜久久久 | 超碰在线亚洲 | 精品一区 在线 | 天天操天天摸天天射 | www.天天草 | 青青草国产免费 | 久久久久夜色 | 麻豆国产在线播放 | 中文资源在线官网 | 亚洲欧美乱综合图片区小说区 | 天天干天天看 | 久久久久久久久久久免费视频 | 欧美激情片在线观看 | 丁香六月中文字幕 | 欧美一区二区三区激情视频 | 玖草在线观看 | 亚洲黄色在线免费观看 | 在线观看片 | 日日夜夜精品视频 | 色欧美综合 | 在线免费高清一区二区三区 | 插久久| 少妇bbbb揉bbbb日本 | 久久久这里有精品 | 欧美精品小视频 | 婷婷六月天综合 | 精品一二| 91手机电视 | 亚洲精品国偷拍自产在线观看蜜桃 | 久久久精品福利视频 | 婷婷久久一区二区三区 | 97国产在线视频 | 午夜视频在线观看欧美 | 夜夜爽88888免费视频4848 | 中文字幕一区在线观看视频 | 97爱爱爱 | 99久久免费看 | 久久成人午夜视频 | 国产这里只有精品 | 91免费视频黄 | 男女啪啪免费网站 | 激情五月色播五月 | 日本色小说视频 | 色综合天天综合网国产成人网 | 久久久高清一区二区三区 | 色天天久久 | 超碰99人人 | 日韩专区av| 干狠狠| 久久99热国产 | 在线免费观看黄色大片 | 精品麻豆 | 国产麻豆精品久久 | 亚洲女同videos | 国产aaa毛片| 香蕉在线视频播放网站 | 日韩欧美国产激情在线播放 | 国产黄a三级三级三级三级三级 | 五月婷婷视频在线 | 久久手机免费视频 | 久久综合久久鬼 | 91在线中文 | 色婷婷综合久久久久中文字幕1 | av电影不卡 | 国产精品欧美久久 | 国产成a人亚洲精v品在线观看 | 国产无遮挡又黄又爽馒头漫画 | 91大神电影 | 伊人婷婷网 | 欧美美女一级片 | 国产欧美日韩精品一区二区免费 | 久久久99国产精品免费 | а天堂中文最新一区二区三区 | 成人午夜影院在线观看 | 欧美性做爰猛烈叫床潮 | 911久久香蕉国产线看观看 | 日韩精品一区在线播放 | 亚洲国产精品成人综合 | 91视频首页| 日本少妇高清做爰视频 | 五月婷婷综合在线 | 久久精品日本啪啪涩涩 | 久久精品一二三区白丝高潮 | 狠狠操狠狠操 | 亚洲精品免费看 | 一级片免费观看 | 精品国模一区二区 | 国产福利a| 国内精品久久久久久 | 久久综合久久88 | 岛国一区在线 | 不卡国产在线 | 日本韩国精品一区二区在线观看 | 亚洲欧美偷拍另类 | 天天干人人 | 国产小视频你懂的在线 | 最近免费中文字幕 | 伊人色综合网 | av最新资源| 亚洲国产日韩欧美 | 狠狠操操网 | 91精品伦理 | 天天爱天天操天天爽 | 又黄又爽又刺激的视频 | 久久无码av一区二区三区电影网 | 91色网址| 在线观看www91 | 最近2019好看的中文字幕免费 | 日本mv大片欧洲mv大片 | 91精品国产入口 | 免费精品视频在线 | 国产精品不卡在线观看 | 人人爽爽人人 | 日日狠狠 | 青青草视频精品 | 六月丁香六月婷婷 | 国产成a人亚洲精v品在线观看 | 国产69久久 | 日韩网站在线 | 天天综合网天天 | 欧美日韩视频在线观看一区二区 | 黄色三级在线 | 91中文字幕 | 国产午夜视频在线观看 | 九九免费在线看完整版 | 激情综合网在线观看 | 五月综合色| 91精品伦理 | 国产精品久久久久久久久久白浆 | 69国产在线观看 | www.com.日本一级 | 在线看小早川怜子av | 久久av伊人 | 精精国产xxxx视频在线播放 | 在线91视频 | 国产麻豆果冻传媒在线观看 | 黄色在线网站噜噜噜 | 国内精品久久久久影院优 | 综合影视 | 国产精品嫩草影院99网站 | 久久艹欧美 | 91精品视频在线观看免费 | 久久久国产视频 | 欧美在线资源 | 亚洲精品国产欧美在线观看 | 色爱区综合激月婷婷 | 91精品国产综合久久福利 | 国产精品一区二区精品视频免费看 | 天天干天天操天天射 | 在线国产视频一区 | 久久精品成人热国产成 | 深爱五月激情网 | 中文字幕黄网 | 中文在线字幕免费观 | 国产精品久久久久免费观看 | 999精品| 在线视频欧美精品 | 国产精品毛片一区二区在线看 | 亚洲伦理一区二区 | 最近日本韩国中文字幕 | 国产色秀视频 | av电影免费在线看 | 中文字幕在线观看完整版电影 | 中国精品一区二区 | 日韩18p| 一区免费视频 | 日韩欧美有码在线 | 中文在线中文资源 | 亚洲国产成人高清精品 | 青草草在线视频 | 欧美 亚洲 另类 激情 另类 | 97电影在线观看 | 免费日韩电影 | 激情综合五月婷婷 | 色综合久久88色综合天天 | 国产三级视频 | 蜜臀av一区| 午夜精品区| 久久综合九色综合欧美狠狠 | 久久精品一区二区三区四区 | 国产精品18久久久久久首页狼 | 久久精品中文视频 | 亚洲午夜精品久久久久久久久久久久 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 色综合天天色综合 | 中文字幕网站 | 最新成人av | 四虎影视8848dvd| av亚洲产国偷v产偷v自拍小说 | 久久黄色影视 | 日韩黄色免费看 | 久久久五月天 | 中文字幕免费中文 | 麻豆免费在线播放 | 国产精品毛片久久久久久久久久99999999 | 国产精品电影在线 | 欧美日性视频 | 四虎成人精品永久免费av | 亚洲精品久久久久999中文字幕 | 成人h在线观看 | 中文字幕黄色 | av天天澡天天爽天天av | 韩日色视频 | 国产香蕉久久精品综合网 | 99久久9| 久久久免费 | 亚洲成人av免费 | 日韩精品免费一线在线观看 | 久久视屏网 | 亚洲国产午夜 | 久久久久久久久久网站 | 精品国产一区二区三区久久久蜜月 | 久久久精品高清 | 九七人人干 | 亚洲美女免费视频 | av资源免费看 | 国语自产偷拍精品视频偷 | 免费观看性生交大片3 | 在线观看日本高清mv视频 | 日韩高清精品免费观看 | 亚洲国产精品传媒在线观看 | 丁香激情网 | 97视频总站|