精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Android進階之SurfaceView與TextureView詳解

移動開發 Android
SurfaceView 以及 TextureView 均繼承于 android.view.View,屬于 Android 提供的控件體系的一部分。與普通 View 不同,它們都在獨立的線程中繪制和渲染。

[[419280]]

前言

SurfaceView 以及 TextureView 均繼承于 android.view.View,屬于 Android 提供的控件體系的一部分。與普通 View 不同,它們都在獨立的線程中繪制和渲染。所以,相比于普通的 ImageView 它們的性能更高,因此常被用在對繪制的速率要求比較高的應用場景中,用來解決普通 View 因為繪制的時間延遲而帶來的掉幀的問題,比如用作相機預覽、視頻播放的媒介等;

今天我們就來詳細介紹下;

一、Surface 簡介

Surface 就是“表面”的意思,可以簡單理解為內存中的一段繪圖緩沖區。在SDK的文檔中,對Surface的描述是這樣的:“Handle onto a raw buffer that is being managed by the screen compositor”,翻譯成中文就是“由屏幕顯示內容合成器(screen compositor)所管理的原生緩沖器的句柄”,這句話包括下面兩個意思:

  • 通過Surface(因為Surface是句柄)就可以獲得原生緩沖器以及其中的內容。就像在C語言中,可以通過一個文件的句柄,就可以獲得文件的內容一樣;
  • 原生緩沖器(rawbuffer)是用于保存當前窗口的像素數據的。
  • 簡單的說 Surface 對應了一塊屏幕緩沖區,每個Window對應一個Surface,任何View都是畫在Surface上的,傳統的view共享一塊屏幕緩沖區,所有的繪制必須在UI線程中進行我們不能直接操作Surface實例,要通過SurfaceHolder,在SurfaceView中可以通過getHolder()方法獲取到SurfaceHolder實例;
  • Surface 是一個用來畫圖形的地方,但是我們知道畫圖都是在一個Canvas對象上面進行的,Surface 中的 Canvas 成員,是專門用于提供畫圖的地方,就像黑板一樣,其中的原始緩沖區是用來保存數據的地方;
  • Surface本身的作用類似一個句柄,得到了這個句柄就可以得到其中的Canvas、原始緩沖區以及其他方面的內容,所以簡單的說Surface是用來管理數據的(句柄);

二、SurfaceView應用詳解

1、SurfaceView 介紹

  • 簡單的說SurfaceView就是一個有Surface的View里面內嵌了一個專門用于繪制的Surface,SurfaceView 控制這個 Surface 的格式和尺寸以及繪制位置。
  • SurfaceView 就是在 Window 上挖一個洞,它就是顯示在這個洞里,其他的View是顯示在Window上,所以View可以顯式在 SurfaceView之上,你也可以添加一些層在SurfaceView之上。
  1. if (mWindow == null) {   
  2.     mWindow = new MyWindow(this);   
  3.     mLayout.type = mWindowType;   
  4.     mLayout.gravity = Gravity.LEFT|Gravity.TOP;   
  5.     mSession.addWithoutInputChannel(mWindow, mWindow.mSeq, mLayout,   
  6.     mVisible ? VISIBLE : GONE, mContentInsets);   

很明顯,每個SurfaceView創建的時候都會創建一個MyWindow,new MyWindow(this)中的this正是SurfaceView自身,因此將SurfaceView和window綁定在一起,而前面提到過每個window對應一個Surface。

所以SurfaceView也就內嵌了一個自己的Surface,可以認為SurfaceView是來控制Surface的位置和尺寸。傳統View及其派生類的更新只能在UI線程,然而UI線程還同時處理其他交互邏輯,這就無法保證view更新的速度和幀率了,而SurfaceView可以用獨立的線程來進行繪制。

因此可以提供更高的幀率,例如游戲,攝像頭取景等場景就比較適合用SurfaceView來實現。

Surface是縱深排序(Z-ordered)的,這表明它總在自己所在窗口的后面。

Surfaceview提供了一個可見區域,只有在這個可見區域內的Surface部分內容才可見,可見區域外的部分不可見,

所以可以認為SurfaceView就是展示Surface中數據的地方,Surface就是管理數據的地方,SurfaceView就是展示數據的地方,只有通過SurfaceView才能展現Surface中的數據。

  • Surface的排版顯示受到視圖層級關系的影響,它的兄弟視圖結點會在頂端顯示。這意味者Surface的內容會被它的兄弟視圖遮擋,這一特性可以用來放置遮蓋物(overlays)(例如,文本和按鈕等控件);
  • 注意,如果Surface上面有透明控件,那么它的每次變化都會引起框架重新計算它和頂層控件的透明效果,這會影響性能。surfaceview變得可見時,surface被創建;surfaceview隱藏前,surface被銷毀;
  • 這樣能節省資源。如果你要查看surface被創建和銷毀的時機,可以重載surfaceCreated(SurfaceHolder)和surfaceDestroyed(SurfaceHolder);
  • SurfaceView的核心在于提供了兩個線程:UI線程和渲染線程,兩個線程通過“雙緩沖”機制來達到高效的界面適時更新。而這個雙緩沖可以理解為,SurfaceView在更新視圖時用到了兩張Canvas,一張frontCanvas和一張backCanvas;
  • 每次實際顯示的是frontCanvas,backCanvas存儲的是上一次更改前的視圖,當使用lockCanvas()獲取畫布時,得到的實際上是backCanvas而不是正在顯示的frontCanvas,之后你在獲取到的backCanvas上繪制新視圖,再unlockCanvasAndPost(canvas)此視圖,那么上傳的這張canvas將替換原來的frontCanvas作為新的frontCanvas,原來的frontCanvas將切換到后臺作為backCanvas;
  • 如果你已經先后兩次繪制了視圖A和B,那么你再調用lockCanvas()獲取視圖,獲得的將是A而不是正在顯示的B,之后你將重繪的C視圖上傳,那么C將取代B作為新的frontCanvas顯示在SurfaceView上,原來的B則轉換為backCanvas;
  • 不用畫布,直接在窗口上進行繪圖叫做無緩沖繪圖。用了一個畫布,將所有內容都先畫到畫布上,在整體繪制到窗口上,就該叫做單緩沖繪圖,那個畫布就是一個緩沖區。用了兩個畫布,一個進行臨時的繪圖,一個進行最終的繪圖,這樣就叫做雙緩沖;

2、SurfaceView 的優缺點

  • 一般的Activity包含的多個View會組成View hierachy的樹形結構,只有最頂層的DectorView才是對WMS可見的,這個DecorView在WMS中有一個對應的WindowState,再SurfaceFlinger中有對應的Layer,而SurfaceView正因為它有自己的Surface,有自己的Window,它在WMS中有對應的WindowState,在SurfaceFlinger中有Layer。
  • 雖然在App端它仍在View hierachy中,但在Server端(WMS和SurfaceFlinger)中,它與宿主窗口是分離的。這樣的好處是對這個Surface的渲染可以放到單獨的線程中去做,渲染時可以有自己的GL context。
  • 因為它不會影響主線程對時間的響應。所以它的優點就是可以在獨立的線程中繪制,不影響主線程,而且使用雙緩沖機制,播放視頻時畫面更順暢。
  • 但是這也有缺點,因為這個Surface不在View hierachy中,它的顯示也不受View的屬性控制,所以不能進行平移、縮放等動畫,它也不能放在其它ViewGroup中,SurfaceView不能嵌套使用,而且不能使用某些View的特性,例如View.setAlpha()。
  • 從 Android7.0 開始,SurfaceView 的窗口位置與其他 View 渲染同步更新。這意味著在屏幕上平移和縮放 SurfaceView 不會導致渲染失真。

3、SurfaceHolder 簡介

  • 顯示一個 Surface 的抽象接口,使你可以控制 Surface 的大小和格式以及在Surface上編輯像素,和監視 Surace 的改變。這個接口通常通過SurfaceView類實現。
  • 簡單的說就是我們無法直接操作Surface只能通過SurfaceHolder這個接口來獲取和操作Surface。
  • SurfaceHolder中提供了一些lockCanvas():獲取一個Canvas對象,并鎖定之。
  • 所得到的Canvas對象,其實就是 Surface 中一個成員。加鎖的目的其實就是為了在繪制的過程中,Surface 中的數據不會被改變。lockCanvas 是為了防止同一時刻多個線程對同一 canvas寫入。
  • 從設計模式的角度來看,Surface、SurfaceView、SurfaceHolder實質上就是MVC(Model-View-Controller),Model就是模型或者說是數據模型,更簡單的可以理解成數據,在這里也就是Surface,View就是視圖,代表用戶交互界面,這里就是 SurfaceView, SurfaceHolder 就是 Controller.

4、SurfaceView簡單應用

SurfaceView 的 getHolder() 方法獲取圖層 (Surface),它通過接口 SurfaceHolder 提供。當 SurfaceView 所在的窗口可見的時候,圖層 (Surface) 會被創建。你可以通過實現 SurfaceHolder.Callback.surfaceCreated(SurfaceHolder) 和 SurfaceHolder.Callback.surfaceDestroyed(SurfaceHolder) 監聽 Surface 的創建和銷毀事件,并且只能在這兩個方法之間對圖層 (Surface) 進行操作。SurfaceView 和 SurfaceHolder.Callback 的所有方法都會被主線程調用,所以當在子線程中進行繪制的時候,必須妥善進行線程的同步

  1. class SurfaceViewActivity : CommonActivity<ActivitySurfaceViewBinding>(), SurfaceHolder.Callback { 
  2.     private lateinit var camera: Camera 
  3.     private lateinit var surfaceView: SurfaceView 
  4.     private lateinit var holder: SurfaceHolder 
  5.     override fun getLayoutResId(): Int = R.layout.activity_surface_view 
  6.     override fun doCreateView(savedInstanceState: Bundle?) { 
  7.         surfaceView = SurfaceView(this) 
  8.         // Add callback to listen the lifecycle callback for SurfaceView 
  9.         holder = surfaceView.holder 
  10.         holder.addCallback(this) 
  11.         binding.cl.addView(surfaceView) 
  12.     } 
  13.     override fun surfaceCreated(holder: SurfaceHolder?) { 
  14.         camera = Camera.open() 
  15.         camera.setPreviewDisplay(holder) 
  16.         camera.startPreview() 
  17.     } 
  18.     override fun surfaceChanged(holder: SurfaceHolder?, format: Int, width: Int, height: Int) { 
  19.         // Ignored, Camera does all the work for us 
  20.     } 
  21.     override fun surfaceDestroyed(holder: SurfaceHolder?) { 
  22.         camera.stopPreview() 
  23.         camera.release() 
  24.     } 

SurfaceView 也提供了生命周期的回調接口。當我們只需要從 SurfaceView 上面得到一個 SurfaceHolder 實例然后向其中添加回調即可;

二、TextureView詳解

1、TextureView介紹

  • SurfaceView不在主窗口中,它沒法做動畫沒法使用一些View的特性方法,所以在Android 4.0中引入了TextureView,它是一個結合了View和SurfaceTexture的View對象。
  • TextureView 在 API 14 中引入,用來展示流,比如視頻和 OpenGL 等的流。這些流可以來自應用進程或者是跨進程的。它只能用在開啟了硬件加速的窗口,否則無法繪制任何內容。與 SurefaceView 不同,TextureView 不會創建一個獨立的窗口,而是像一個普通的 View 一樣。這種區別使得 TextureView 可以移動、轉換和做動畫等,比如你可以使用 TextureView 的 setAlpha() 方法將其設置成半透明的
  • 它不會在WMS中單獨創建窗口,而是作為View hierachy中的一個普通view,因此它可以和其他普通View一樣進行平移、旋轉等動畫。但是TextureView必須在硬件加速的窗口中,它顯示的內容流數據可以來自App進程或者遠程進程。
  • TextureView 重載了 draw() 方法,其中主要 SurfaceTexture 中收到的圖像數據作為紋理更新到對應的 HardwareLayer 中。
  • SurfaceTexture.OnFrameAvailableListener用于通知TextureView內容流有新圖像到來。SurfaceTextureListener接口用于讓TextureView的使用者知道SurfaceTexture已準備好,這樣就可以把SurfaceTexture交給相應的內容源。
  • Surface為BufferQueue的Producer接口實現類,使生產者可以通過它的軟件或硬件渲染接口為SurfaceTexture內部的BufferQueue提供graphic buffer。
  • SurfaceTexture 可以用作非直接輸出的內容流,這樣就提供二次處理的機會。與SurfaceView直接輸出相比,這樣會有若干幀的延遲。同時,由于它本身管理BufferQueue,因此內存消耗也會稍微大一些。
  • TextureView 是一個可以把內容流作為外部紋理輸出在上面的 View, 它本身需要是一個硬件加速層。

TextureView 的使用非常簡單,你只需要獲取到它的 SurfaceTexture. 然后就可以使用它來渲染;

  1. class TextureViewActivity : CommonActivity<ActivityTextureViewBinding>(), TextureView.SurfaceTextureListener { 
  2.     private lateinit var camera: Camera 
  3.     private lateinit var textureView: TextureView 
  4.     override fun getLayoutResId(): Int = R.layout.activity_texture_view 
  5.     override fun doCreateView(savedInstanceState: Bundle?) { 
  6.         textureView = TextureView(this) 
  7.         // Add callback to listen the lifecycle callback for TextureView 
  8.         textureView.surfaceTextureListener = this 
  9.         binding.cl.addView(textureView) 
  10.     } 
  11.     override fun onSurfaceTextureAvailable(surface: SurfaceTexture?, width: Int, height: Int) { 
  12.         camera = Camera.open() 
  13.         // Add the surface texture to camera 
  14.         camera.setPreviewTexture(surface) 
  15.         camera.startPreview() 
  16.     } 
  17.     override fun onSurfaceTextureSizeChanged(surface: SurfaceTexture?, width: Int, height: Int) { 
  18.         // Ignored, Camera does all the work for us 
  19.     } 
  20.     override fun onSurfaceTextureUpdated(surface: SurfaceTexture?) { 
  21.         // Invoked every time there's a new Camera preview frame 
  22.     } 
  23.     override fun onSurfaceTextureDestroyed(surface: SurfaceTexture?): Boolean { 
  24.         // Release everything when texture destroyed 
  25.         camera.stopPreview() 
  26.         camera.release() 
  27.         return true 
  28.     } 

TextureView 的 SurfaceTexture 可以通過 getSurfaceTexture() 方法或者通過 SurfaceTextureListener 獲取到。還有一點很重要的是,SurfaceTexture 只在 TextureView 關聯到窗口并且 onAttachedToWindow() 被觸發的之后可用。因此,強烈建議使用監聽的方式來獲取 SurfaceTexture 可用的通知。

還有一個重要的就是,在同一時刻只能由一個生產者可以使用 TextureView,就是說,當你使用 TextureView 作為相機預覽的時候是無法使用 lockCanvas() 同時在 TextureView 上面進行繪制的。

除了只能在開啟了硬件加速的窗口中使用,TextureView 消費的內存要比 SurfaceView 要多,并伴隨著 1-3 幀的延遲;

2、SurfaceTexture介紹

  • SurfaceTexture 是 Surface 和 OpenGL ES(GLES) 紋理的組合。SurfaceTexture 用于提供輸出到 GLES 紋理的 Surface 。
  • SurfaceTexture 是從Android 3.0開始加入,與SurfaceView不同的是,它對圖像流的處理并不直接顯示,而是轉為GL外部紋理,因此用于圖像流數據的二次處理。
  • 比如 Camera 的預覽數據,變成紋理后可以交給 GLSurfaceView 直接顯示,也可以通過SurfaceTexture 交給TextureView 作為 View heirachy 中的一個硬件加速層來顯示。
  • 首先,SurfaceTexture從圖像流 (來自Camera預覽、視頻解碼、GL繪制場景等) 中獲得幀數據,當調用updateTexImage()時,根據內容流中最近的圖像更新 SurfaceTexture 對應的GL紋理對象。
  • SurfaceTexture 包含一個應用是其使用方的BufferQueue。當生產方將新的緩沖區排入隊列時,onFrameAvailable() 回調會通知應用。然后,應用調用updateTexImage(),這會釋放先前占有的緩沖區,從隊列中獲取新緩沖區并執行EGL調用,從而使GLES可將此緩沖區作為外部紋理使用。

3、SurfaceView 和 TextureView區別

  • SurfaceView 是一個有自己Surface的View。它的渲染可以放在單獨線程而不是主線程中。其缺點是不能做變形和動畫。SurfaceTexture可以用作非直接輸出的內容流,這樣就提供二次處理的機會。
  • 與SurfaceView直接輸出相比,這樣會有若干幀的延遲。同時,由于它本身管理BufferQueue,因此內存消耗也會稍微大一些。
  • TextureView是一個可以把內容流作為外部紋理輸出在上面的View。它本身需要是一個硬件加速層。事實上TextureView本身也包含了SurfaceTexture。
  • 它與SurfaceView+SurfaceTexture組合相比可以完成類似的功能(即把內容流上的圖像轉成紋理,然后輸出)。區別在于TextureView是在View hierachy中做繪制,因此一般它是在主線程上做的(在Android 5.0引入渲染線程后,它是在渲染線程中做的)。
  • 而SurfaceView+SurfaceTexture在單獨的Surface上做繪制,可以是用戶提供的線程,而不是系統的主線程或是渲染線程。
  • 與 SurfaceView 相比,TextureView 具有更出色的 Alpha 版和旋轉處理能力,但在視頻上以分層方式合成界面元素時,SurfaceView 具有性能方面的優勢。
  • 當客戶端使用 SurfaceView 呈現內容時,SurfaceView 會為客戶端提供單獨的合成層。如果設備支持,SurfaceFlinger 會將單獨的層合成為硬件疊加層。
  • 當客戶端使用 TextureView 呈現內容時,界面工具包會使用 GPU 將 TextureView 的內容合成到 View 層次結構中。
  • 對內容進行的更新可能會導致其他 View 元素重繪,例如,如果其他 View 位于 TextureView 上方。View 呈現完成后,SurfaceFlinger 會合成應用界面層和所有其他層,以便每個可見像素合成兩次。

  • 在Android 7.0上系統 Surfaceview 的性能比 TextureView 更有優勢,支持對象的內容位置和包含的應用內容同步更新,平移、縮放不會產生黑邊。在7.0以下系統如果使用場景有動畫效果,可以選擇性使用TextureView。
  • 由于失效(invalidation)和緩沖的特性,TextureView增加了額外1~3幀的延遲顯示畫面更新。
  • TextureView總是使用GL合成,而SurfaceView可以使用硬件overlay后端,可以占用更少的內存。
  • TextureView的內部緩沖隊列導致比SurfaceView使用更多的內存。
  • SurfaceView:內部自己持有surface,surface 創建、銷毀、大小改變時系統來處理的,通過surfaceHolder 的callback回調通知。
  • 當畫布創建好時,可以將surface綁定到MediaPlayer中。SurfaceView如果為用戶可見的時候,創建SurfaceView的SurfaceHolder用于顯示視頻流解析的幀圖片,如果發現SurfaceView變為用戶不可見的時候,則立即銷毀SurfaceView的SurfaceHolder,以達到節約系統資源的目的

總結:

TextureView 和 SurfaceView 都繼承自 View 類,但是 TextureView 在 Andriod 4.0 之后的 API 中才能使用。SurfaceView 可以通過 SurfaceHolder.addCallback() 方法在子線程中更新 UI;TextureView 則可以通過 TextureView.setSurfaceTextureListener() 在子線程中更新 UI,能夠在子線程中更新 UI 是上述兩控件相比于 View 的最大優勢

責任編輯:武曉燕 來源: Android開發編程
相關推薦

2021-08-26 07:38:41

AndroidMediaPlayerTextureView

2021-09-07 06:40:25

AndroidLiveData原理

2021-10-03 15:08:32

Android

2021-09-01 06:48:16

AndroidGlide緩存

2021-08-10 20:41:33

AndroidApp流程

2021-09-02 07:00:01

Glide流程Android

2021-08-17 13:41:11

AndroidView事件

2021-08-23 06:27:46

AndroidctivitysetContentV

2021-08-11 17:15:17

AndroidActivity場景

2013-05-20 17:48:20

2021-08-09 20:29:27

Android沉浸式狀態欄

2021-09-03 07:27:38

AndroidGlide管理

2021-09-12 07:30:10

配置

2013-05-20 17:51:47

Android游戲開發SurfaceView

2021-08-05 20:39:34

AndroidKotlinStandard.kt

2021-10-09 20:18:31

Android

2014-10-20 09:55:02

2013-05-20 17:04:09

2021-09-06 13:12:05

前端JavaScript編程

2021-09-29 09:42:32

AndroidViewDragHel拖動上下滑卡片
點贊
收藏

51CTO技術棧公眾號

成av人片一区二区| 91亚洲自偷观看高清| 调教+趴+乳夹+国产+精品| 国产综合色一区二区三区| 欧美片一区二区| 精品中国亚洲| 欧美性猛片aaaaaaa做受| 大桥未久一区二区| 婷婷综合激情网| 久久综合婷婷| 美日韩丰满少妇在线观看| 美女久久久久久久久| 成人在线爆射| 亚洲精品久久久蜜桃| 国产一区二区三区高清| 欧美性猛交xxxx乱大交hd| 天天综合国产| 日韩国产高清污视频在线观看| 欧美伦理视频在线观看| 日韩专区在线| 成人短视频下载| 国产精品自拍偷拍| 九九热国产视频| 欧美电影一二区| 精品亚洲一区二区| 麻豆传媒在线看| 女海盗2成人h版中文字幕| 亚洲桃色在线一区| 乱色588欧美| 国产成人久久精品77777综合| 久久精品官网| 午夜精品久久久久久久99热| 成人一级黄色大片| 国产伦精品一区二区三区视频| 欧美电影免费提供在线观看| 中文字幕第80页| 爱搞国产精品| 亚洲综合区在线| 亚洲砖区区免费| 久久综合九色综合久| 波多野结衣中文字幕一区二区三区| 国产精品情侣自拍| 99久久久久久久久| 国产亚洲毛片在线| 国模精品视频一区二区| 久久久久久久久精| 一区二区三区四区在线观看国产日韩| 中文字幕亚洲欧美一区二区三区| 久久人人爽人人爽人人片 | 91av国产在线| 久久香蕉精品视频| 欧美精品一卡| 久久五月情影视| 麻豆精品国产免费| 欧美xxav| 精品国产欧美一区二区三区成人| 亚洲ⅴ国产v天堂a无码二区| 国产剧情在线观看一区| 国产午夜精品一区理论片飘花| 亚洲国产无码精品| 精品国产aⅴ| 一区二区三区美女xx视频| b站大片免费直播| 日韩深夜影院| 亚洲精品视频在线播放| 亚洲av无码国产精品久久| 杨幂一区二区三区免费看视频| 日韩精品在线视频观看| 国产熟妇搡bbbb搡bbbb| 蜜臀av免费一区二区三区| 亚洲欧洲在线播放| 中文字幕第二区| 久久免费大视频| 久久天天躁狠狠躁夜夜爽蜜月| 性生交大片免费全黄| 欧美片第1页综合| 国产+人+亚洲| 免费的毛片视频| 青草av.久久免费一区| 国产精品一区二区久久国产| 国产精品欧美亚洲| 成人美女视频在线观看| 久久一区免费| aiai在线| 夜夜夜精品看看| 黄色网页免费在线观看| 日韩中文影院| 日韩一区二区在线观看视频播放| 欧洲熟妇的性久久久久久| 日本一区福利在线| 中文字幕亚洲图片| 久久久一区二区三区四区| 久久久国产精品一区二区中文| 国产精品精品一区二区三区午夜版| 又色又爽又黄无遮挡的免费视频| 国产九色精品成人porny | 毛片在线播放视频| 91精品国产66| 精品国产伦一区二区三区观看方式| 制服丝袜第一页在线观看| 大胆日韩av| 欧美国产日韩一区二区在线观看| 国产精品美女久久久久av爽| 久久精品国产99| 国产精品日韩欧美一区二区| 国产视频网站在线| 一区二区三区国产| 人妻丰满熟妇av无码区app| 清纯唯美激情亚洲| 亚洲性xxxx| 国产亚洲第一页| 奇米影视一区二区三区小说| 国产精品高清一区二区三区| av中文字幕在线| 亚洲va在线va天堂| 日韩欧美国产片| 色哟哟精品丝袜一区二区| 久久精品成人欧美大片| 欧美啪啪小视频| 国产精品一二三| 小说区图片区图片区另类灬| av手机在线观看| 91精品国产综合久久精品app| 久久久久亚洲av无码专区桃色| 在线中文一区| 国产精国产精品| 亚洲精品字幕在线| 中文字幕在线观看一区| 免费日韩视频在线观看| 成人直播在线观看| 免费91麻豆精品国产自产在线观看| 国产嫩bbwbbw高潮| av在线一区二区| 草草草视频在线观看| crdy在线观看欧美| 中文字幕日韩有码| 台湾佬中文在线| caoporm超碰国产精品| 肉大捧一出免费观看网站在线播放 | 91蜜桃网址入口| 99色这里只有精品| 亚州一区二区| 欧美成人中文字幕| 国产精品自产拍| 国产精品成人免费精品自在线观看| 黄色国产小视频| 精品国产一级| 久久人体大胆视频| 国产精品爽爽久久久久久| 国产精品网站在线| 簧片在线免费看| 国产精品嫩草影院在线看| 欧美在线视频免费观看| 亚洲三区在线播放| 欧美日韩性视频| 欧美亚一区二区三区| 先锋a资源在线看亚洲| 精品伦精品一区二区三区视频| wwwwxxxx在线观看| 亚洲国产精品久久91精品| 国产午夜精品一区二区理论影院| 大陆成人av片| 精品人妻少妇一区二区| 欧美激情极品| 浅井舞香一区二区| 久蕉依人在线视频| 欧美日韩中文精品| 在线看的片片片免费| 国产suv精品一区二区6| 国产精品无码电影在线观看| 国产一区二区在线视频你懂的| 欧美精品videossex性护士| 欧美 日韩 国产 成人 在线| 午夜av一区二区| 成年人免费观看视频网站| 另类调教123区| 男同互操gay射视频在线看| 欧美一区一区| 2018日韩中文字幕| 国产高清视频在线观看| 欧美一区二区视频网站| 日本少妇久久久| 久久蜜桃av一区精品变态类天堂 | 久久机这里只有精品| 九九久久九九久久| 久久这里只有精品一区二区| 国产成人精品最新| 国产三级在线播放| 日韩激情片免费| www.com亚洲| 亚洲激情av在线| 丰满少妇在线观看资源站| 蓝色福利精品导航| 国产色一区二区三区| 禁断一区二区三区在线| 91精品综合久久| 中文字幕人成乱码在线观看| 色婷婷av一区二区三区久久| 欧美一区二区公司| 欧美日韩一区三区四区| 国产 日韩 欧美 成人| 国产欧美日韩在线| 丰满熟女人妻一区二区三区| 日本欧洲一区二区| 日韩激情视频一区二区| 国产区精品区| 国产精品国产亚洲精品看不卡15| 秋霞国产精品| 国内成人精品视频| 日本中文字幕视频在线| 亚洲精品久久久久中文字幕欢迎你| 美女黄页在线观看| 性欧美疯狂xxxxbbbb| 成人18视频免费69| 久久这里只有精品6| 中文字幕第10页| 奇米影视一区二区三区小说| 青青草成人免费在线视频| 羞羞答答成人影院www| 欧美男人的天堂| 91国内精品| 成人av在线亚洲| 欧美极品影院| 97精品在线视频| 亚洲wwwww| www高清在线视频日韩欧美| 久久手机免费观看| 日韩av最新在线| www.国产麻豆| 91精品福利在线一区二区三区 | 含羞草www国产在线视频| 亚洲免费伊人电影在线观看av| 精品人妻午夜一区二区三区四区 | 波多野结衣欧美| 91丨九色丨国产在线| 日韩一级二级| 国产成人鲁鲁免费视频a| 亚洲电影观看| 午夜精品久久17c| 91超碰在线播放| 欧美激情性做爰免费视频| av网址在线| 欧美成人免费va影院高清| 欧美日韩在线资源| 日日骚久久av| 蜜桃视频在线观看www社区 | 91国偷自产一区二区三区观看 | 欧美亚洲一区二区在线观看| 99re这里只有精品在线| 色综合天天综合网国产成人综合天| 精品无码人妻一区二区三| 亚洲欧美激情一区二区| 91 在线视频| 一区二区三区在线高清| 欧美精品久久久久性色| 一区二区三区四区不卡视频 | 每日更新在线观看av| 亚洲精品天天看| 免费黄网站在线观看| 亚洲欧美中文字幕在线一区| 男人的天堂在线免费视频| 亚洲摸下面视频| 国产爆初菊在线观看免费视频网站| 亚洲色图激情小说| 9191在线| 久久精品在线播放| 欧洲黄色一区| 91成人在线观看国产| 日韩性xxx| 国产精品视频大全| www一区二区三区| 成人在线视频电影| 九九免费精品视频在线观看| 日韩性感在线| 亚洲国产精品久久久天堂| 国产精品国三级国产av| 国产一区二区三区久久| 天天操天天爱天天爽| 国内精品伊人久久久久av影院| 久久黄色一级视频| www.亚洲精品| 亚洲精品国产精品国自产网站| 国产精品国产馆在线真实露脸| 青青草原免费观看| 欧美午夜视频一区二区| 中文字幕在线观看1| 日韩精品一区二区三区在线观看 | 中文字幕欧美在线| 成人av免费| 国产91精品视频在线观看| 激情小说亚洲| 国产精品久久久久久久小唯西川 | 欧美三级韩国三级日本一级| 99精品久久久久久中文字幕| 亚洲国产91精品在线观看| h视频在线免费| 欧美激情视频在线免费观看 欧美视频免费一 | 高清久久久久久| 在线观看av中文字幕| 一色桃子久久精品亚洲| 亚洲黄色小说图片| 91精品国产入口在线| 日韩资源在线| 粗暴蹂躏中文一区二区三区| 日韩伦理在线| 亚洲自拍欧美色图| 国产videos久久| 日本五级黄色片| 久久国产精品无码网站| 女人被狂躁c到高潮| 成人欧美一区二区三区1314| 成人午夜视频在线播放| 日韩欧美资源站| av电影在线网| 欧美伊久线香蕉线新在线| 麻豆精品久久| 日韩三级电影| 国产亚洲在线观看| 不卡的一区二区| 中文字幕av资源一区| 毛片视频网站在线观看| 欧美大胆人体bbbb| 麻豆传媒在线免费| 国产精品18久久久久久麻辣| 久久精品论坛| 日本男女交配视频| 国产激情91久久精品导航| 国产3级在线观看| 日韩欧中文字幕| 涩涩视频免费看| 久久99青青精品免费观看| 亚洲青青一区| 视频一区二区综合| 老**午夜毛片一区二区三区 | 中国老头性行为xxxx| 亚洲精品一区在线观看香蕉| 国产盗摄精品一区二区酒店| 91福利入口| 亚洲精品二区三区| 手机免费av片| 国产精品进线69影院| 最新国产中文字幕| 在线视频日韩精品| 韩日一区二区| 视频在线99re| 喷白浆一区二区| 天天操天天舔天天射| 在线免费观看成人短视频| 国产一级网站视频在线| 国产成人av在线| 精品一区av| 蜜臀av免费观看| 国产精品大尺度| 一本色道久久综合熟妇| 精品国产欧美一区二区五十路| 亚洲美女色播| avove在线观看| 国产91综合一区在线观看| 国产一级做a爱免费视频| 亚洲第一区在线| 午夜久久中文| 欧美日韩精品久久久免费观看| 爽好多水快深点欧美视频| 亚欧精品视频一区二区三区| 欧美区在线观看| 中中文字幕av在线| 成人欧美一区二区三区在线观看| 最新国产拍偷乱拍精品 | 欧美日韩另类综合| 亚洲在线久久| 中文字幕第九页| 欧美色欧美亚洲高清在线视频| 男女av在线| 成人a级免费视频| 国产一区亚洲| v8888av| 欧美日韩另类一区| 在线观看操人| 精品999在线观看| 日本vs亚洲vs韩国一区三区| 三级黄色录像视频| 精品久久久久久久人人人人传媒| 蜜桃在线视频| 亚洲精品一区二区毛豆| 国产精品一二三四区| 欧美 日韩 精品| 色婷婷久久一区二区| 成人性生交大片免费看96| 成人在线免费播放视频| 综合久久给合久久狠狠狠97色 | 一区二区精品伦理...| 亚洲一区二区三区乱码 | 成人性生交xxxxx网站| 狠狠入ady亚洲精品| 国产肥白大熟妇bbbb视频| 911精品国产一区二区在线| 捆绑调教日本一区二区三区| 在线免费观看成人| 99国产精品久久久久久久久久 | 亚洲一区二区动漫|