99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

Android OpenGL ES:將GL_TEXTURE_2D紋理渲染到ImageReader Surface的完整指南

Android OpenGL ES:將GL_TEXTURE_2D紋理渲染到ImageReader Surface的完整指南 簡(jiǎn)介針對(duì) Android 平臺(tái)上將 OpenGLES3 紋理 ID 渲染到 ImageReader Surface 的需求這份資源以完整可運(yùn)行的 Android 工程形式提供了從紋理加載、EGLDisplay 虛擬屏幕綁定、eglSwapBuffers 緩沖交換到 ImageReader 回調(diào)讀取數(shù)據(jù)并生成 Bitmap 的端到端參考實(shí)現(xiàn)。源碼按功能拆分結(jié)構(gòu)清晰適合需要對(duì)接相機(jī)/視頻幀數(shù)據(jù)或做離屏渲染的 Android 中高級(jí)開(kāi)發(fā)者參考。包含 89 個(gè)文件壓縮包僅 879KB。工程采用 Android Gradle 標(biāo)準(zhǔn)結(jié)構(gòu)java 文件承載渲染線程與回調(diào)核心邏輯xml 完成界面布局及清單配置gradle 與 properties 管理依賴和構(gòu)建參數(shù)webp 等用于界面輔助展示bin、lock 等則屬于工程編譯緩存。代碼中對(duì) EGL 環(huán)境搭建、紋理加載、Surface 數(shù)據(jù)通路和 onImageAvailable 取幀等關(guān)鍵節(jié)點(diǎn)均有直接體現(xiàn)便于對(duì)照項(xiàng)目進(jìn)行流程梳理、移植或性能調(diào)優(yōu)。目前已有 731 人學(xué)習(xí)/下載適合正在鉆研 Android 圖形管線、希望打通 OpenGLES 與 Surface 之間數(shù)據(jù)鏈路的開(kāi)發(fā)者。1. 為什么要把 GL_TEXTURE_2D 紋理 ID 渲染到 ImageReader 的 Surface 上在 Android 圖形鏈路里紋理 ID 往往是離屏渲染鏈尾部的產(chǎn)物FBO 完成特效合成、第三方 SDK 輸出一幀經(jīng)過(guò) GL_TEXTURE_2D 的紋理下一步要么送編碼器要么給系統(tǒng)拍下來(lái)。但紋理 ID 只是 GPU 里的一個(gè)“名字”MediaCodec、ImageReader 不認(rèn)識(shí)它它們認(rèn)識(shí)的是 Surface——或者說(shuō)得更準(zhǔn)確一點(diǎn)認(rèn)識(shí)一塊 BufferQueue 的生產(chǎn)端。把 GL_TEXTURE_2D 紋理 ID 畫到 ImageReader 提供的 Surface 上本質(zhì)是在 GPU 里把一張紋理完整搬一次家完成一次低成本的顏色緩沖交換而不是把圖像數(shù)據(jù)讀回 CPU 再寫出去。這個(gè)需求常見(jiàn)于視頻編輯、老照片修復(fù)、平臺(tái)美顏抽幀和低延遲串流。它比 glReadPixels 高效得多比使用 SurfaceTexture 多一層可讀性也比直接向 MediaCodec 編碼器 Surface 輸出更能兼容后續(xù)的 CPU 讀幀邏輯。適合兩類人一類是想把 OpenGL ES 3.0 離屏渲染結(jié)果交給系統(tǒng)編碼、錄屏、拍照的工程師另一類是手頭有一個(gè)來(lái)自第三方庫(kù)的 GL_TEXTURE_2D 紋理 ID不知道如何不碰像素就轉(zhuǎn)型成 Android 可消費(fèi)幀的人。這篇文章按我的慣用方案把 EGL 環(huán)境、ImageReader Surface 初始化、渲染代碼、同步柵欄和編碼器接入全部拆開(kāi)。2. 用 EGL 把 ImageReader 的 Surface 接進(jìn) OpenGL ES 3.0先解決“畫到哪”幾乎所有 Android 開(kāi)發(fā)者看到 ImageReader 的第一反應(yīng)都是調(diào)onImageAvailable后拿Image對(duì)象逐一讀 Plane。這個(gè)思路只覆蓋了消費(fèi)端忽略了 ImageReader 另一個(gè)更重要的身份它的getSurface()返回值是一個(gè)標(biāo)準(zhǔn) Surface而 Surface 背后是 BufferQueue 的生產(chǎn)端。換句話說(shuō)GPU 可以把它當(dāng)作一塊可繪制的緩沖區(qū)域只要 EGL 愿意認(rèn)領(lǐng)這塊 Surface。2.1 ImageReader 的 Surface 不是 View渲染路徑完全不同TextureView、SurfaceView 的 Surface 與 ImageReader 的 Surface 在底層都關(guān)聯(lián) BufferQueue但在 API 表現(xiàn)上差異很大。SurfaceView 上可以用 OpenGL 繪制TextureView 本身是 View 層級(jí)里的一個(gè)圖層而 ImageReader 的 Surface 只能作為 ImageReader 的消費(fèi)緩沖入口。它沒(méi)有窗口句柄也不能被 attach 到窗口系統(tǒng)唯一的接入方式就是通過(guò) EGL 的eglCreateWindowSurface。很多人在這一步選錯(cuò) API把 ImageReader 的 Surface 當(dāng) SurfaceTexture 傳進(jìn)setPreviewTexture或者嘗試Canvas.lockCanvas后手動(dòng)編解碼都繞了遠(yuǎn)路。常規(guī)做法是創(chuàng)建 ImageReader取出其 Surface然后在 EGL 層創(chuàng)建 EGLSurface之后所有 GL 繪制命令都會(huì)落到這塊 Surface 上eglSwapBuffers之后 ImageReader 就能異步收到一張全新 Image。下面是四種常見(jiàn) Surface 消費(fèi)者的對(duì)比對(duì)象可被 GL 繪制能否 CPU 讀像素典型用途SurfaceView 的 Surface可以需要額外處理游戲、視頻播放TextureView 的 SurfaceTexture可以需要額外處理相機(jī)預(yù)覽、UI 合成MediaCodec 的 input Surface可以不可以直接讀硬編碼輸入ImageReader 的 Surface可以通過(guò) EGL 接入可以且是設(shè)計(jì)目標(biāo)拍幀、讀紋理、YUV 轉(zhuǎn)換2.2 EGL Surface 與 ImageReader 的像素格式必須匹配EGL 是 OpenGL ES 和窗口系統(tǒng)之間的橋梁。把 ImageReader 的 Surface 接進(jìn)來(lái)核心是eglGetDisplay、eglInitialize、eglChooseConfig、eglCreateWindowSurface這條鏈路。其中最容易出問(wèn)題的是 EGLConfig 的選擇ImageReader 的緩沖格式由構(gòu)造時(shí)的 pixelFormat 決定而 EGLWindowSurface 創(chuàng)建時(shí)不能直接指定格式它必須從 EGLConfig 中推導(dǎo)。如果 EGLConfig 的 RGBA 位數(shù)與 ImageReader 不一致輕則色彩偏移重則eglCreateWindowSurface直接返回EGL_BAD_MATCH。以下是我在實(shí)際項(xiàng)目里穩(wěn)定使用的 EGL 初始化片段EGLDisplay display EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY); int[] version new int[2]; EGL14.eglInitialize(display, version, 0, version, 1); int[] configAttrs { EGL14.EGL_RENDERABLE_TYPE, EGL14.EGL_OPENGL_ES2_BIT | 0x0040, // 0x0040 對(duì)應(yīng) EGL_OPENGL_ES3_BIT EGL14.EGL_RED_SIZE, 8, EGL14.EGL_GREEN_SIZE, 8, EGL14.EGL_BLUE_SIZE, 8, EGL14.EGL_ALPHA_SIZE, 8, EGL14.EGL_NONE }; EGLConfig[] configs new EGLConfig[1]; int[] numConfigs new int[1]; EGL14.eglChooseConfig(display, configAttrs, 0, configs, 0, 1, numConfigs, 0); int[] surfaceAttrs { EGL14.EGL_NONE }; EGLSurface eglSurface EGL14.eglCreateWindowSurface(display, configs[0], imageReaderSurface, surfaceAttrs, 0);這段代碼里第二行的0x0040很關(guān)鍵。Android 的 EGL 頭文件對(duì)EGL_OPENGL_ES3_BIT_KHR的定義是 0x0040而EGL14.EGL_OPENGL_ES2_BIT的值是 0x0004兩者并不相同。如果只寫入 ES2 bit某些機(jī)型上依然能創(chuàng)建成功但后續(xù)eglCreateContext請(qǐng)求的 OpenGL ES 3.0 context 與 EGLConfig 的 renderable type 不匹配會(huì)得到EGL_BAD_MATCH或EGL_BAD_CONFIG。2.3 共享上下文紋理 ID 在新 EGLContext 里“仍然有效”EGLSurface 創(chuàng)建完成后下一步是創(chuàng)建 EGLContext。如果你已經(jīng)有另一個(gè)線程在渲染紋理比如相機(jī)模塊或第三方濾鏡庫(kù)在某個(gè) GL 線程上生成了紋理 ID那么新的渲染線程必須創(chuàng)建共享上下文。EGLContext 默認(rèn)擁有獨(dú)立的資源命名空間紋理 ID 只是一個(gè)小整數(shù)在不同 context 里如果不同步它在 GL 側(cè)會(huì)被當(dāng)作“不存在的對(duì)象”即使調(diào)用glBindTexture也不會(huì)報(bào)錯(cuò)繪制結(jié)果只會(huì)是黑色。創(chuàng)建共享上下文的方法是先拿到當(dāng)前線程的活躍 contextEGL14.eglGetCurrentContext()然后把它傳給eglCreateContext的第二個(gè)參數(shù)。這樣兩個(gè) context 共享紋理、FBO 等對(duì)象紋理 ID 才能跨線程使用。但如果原紋理所在線程根本沒(méi)有 EGLContext而是通過(guò)其他方式生成的那問(wèn)題就不一樣了——那種情況通常要用擴(kuò)展接口導(dǎo)出內(nèi)存句柄這里不展開(kāi)。3. 渲染 GL_TEXTURE_2D 到 ImageReader Surface 的完整實(shí)現(xiàn)有了 EGL Surface 和共享上下文渲染核心就只剩三件事創(chuàng)建 Shader 程序、綁定紋理、提交繪制。這一章給出可以直接抄進(jìn)工程的 Java 實(shí)現(xiàn)用的是 OpenGL ES 3.0 API沒(méi)有引入任何第三方依賴Android Studio 里新建工程即可運(yùn)行。3.1 初始化 EGL 環(huán)境與創(chuàng)建 EGLSurface 的代碼把上一章的邏輯收攏成一個(gè)初始化方法注意imageReader必須提前創(chuàng)建并且寬高要與紋理一致public void init(ImageReader imageReader, EGLContext sharedContext, int textureId) { mImageReader imageReader; mTextureId textureId; mWidth imageReader.getWidth(); mHeight imageReader.getHeight(); mDisplay EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY); int[] version new int[2]; EGL14.eglInitialize(mDisplay, version, 0, version, 1); int[] configAttrs { EGL14.EGL_RENDERABLE_TYPE, EGL14.EGL_OPENGL_ES2_BIT | 0x0040, EGL14.EGL_RED_SIZE, 8, EGL14.EGL_GREEN_SIZE, 8, EGL14.EGL_BLUE_SIZE, 8, EGL14.EGL_ALPHA_SIZE, 8, EGL14.EGL_NONE }; EGLConfig[] configs new EGLConfig[1]; int[] numConfigs new int[1]; EGL14.eglChooseConfig(mDisplay, configAttrs, 0, configs, 0, 1, numConfigs, 0); mSurface EGL14.eglCreateWindowSurface(mDisplay, configs[0], imageReader.getSurface(), new int[]{EGL14.EGL_NONE}, 0); int[] contextAttrs { EGL14.EGL_CONTEXT_CLIENT_VERSION, 3, EGL14.EGL_NONE }; mContext EGL14.eglCreateContext(mDisplay, configs[0], sharedContext, contextAttrs, 0); EGL14.eglMakeCurrent(mDisplay, mSurface, mSurface, mContext); setupShaders(); }參數(shù)說(shuō)明sharedContext是紋理來(lái)源線程的 EGLContext如果傳入的 textureId 就在當(dāng)前線程創(chuàng)建這里可以直接傳EGL14.EGL_NO_CONTEXT。EGL_CONTEXT_CLIENT_VERSION, 3決定創(chuàng)建的是 OpenGL ES 3.0 context注意 EGLConfig 里必須帶上 ES3 bit否則這里報(bào)錯(cuò)。eglMakeCurrent的作用是把 EGLSurface 綁定到當(dāng)前線程的渲染目標(biāo)之后所有 GLES3 指令都作用于這塊 ImageReader Surface。3.2 Shader 與繪制命令如何用三角形覆蓋紋理ImageReader 的 Surface 是一塊矩形緩沖渲染時(shí)最常見(jiàn)的方式是畫兩個(gè)三角形拼成一個(gè)全屏四邊形。頂點(diǎn)著色器負(fù)責(zé)接收頂點(diǎn)坐標(biāo)和紋理坐標(biāo)片段著色器負(fù)責(zé)從 GL_TEXTURE_2D 上采樣顏色。頂點(diǎn)著色器#version 300 es layout(location 0) in vec4 aPosition; layout(location 1) in vec2 aTexCoord; out vec2 vTexCoord; void main() { gl_Position aPosition; vTexCoord aTexCoord; }片段著色器#version 300 es precision mediump float; uniform sampler2D uTexture; in vec2 vTexCoord; out vec4 fragColor; void main() { fragColor texture(uTexture, vTexCoord); }這個(gè)著色器沒(méi)有做任何顏色變換和矩陣運(yùn)算保留紋理原始顏色。sampler2D默認(rèn)綁定紋理單元 0所以繪制前不需要顯式glActiveTexture只要把紋理 ID bind 到GL_TEXTURE_2D上即可。如果將來(lái)要接入 OES 外部紋理需要將采樣器類型換成samplerExternalOES同時(shí)把紋理目標(biāo)改成GL_TEXTURE_EXTERNAL_OES與本文標(biāo)題鎖定的 GL_TEXTURE_2D 場(chǎng)景不是同一套配置。3.3 draw 幀的調(diào)用時(shí)機(jī)與紋理參數(shù)頂點(diǎn)數(shù)據(jù)和繪制代碼private void drawFrame() { EGL14.eglMakeCurrent(mDisplay, mSurface, mSurface, mContext); GLES30.glViewport(0, 0, mWidth, mHeight); GLES30.glUseProgram(mProgram); GLES30.glBindBuffer(GLES30.GL_ARRAY_BUFFER, mVbo); GLES30.glEnableVertexAttribArray(0); GLES30.glVertexAttribPointer(0, 3, GLES30.GL_FLOAT, false, 5 * 4, 0); GLES30.glEnableVertexAttribArray(1); GLES30.glVertexAttribPointer(1, 2, GLES30.GL_FLOAT, false, 5 * 4, 3 * 4); // 關(guān)鍵綁定紋理 ID 到 GL_TEXTURE_2D 目標(biāo) GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, mTextureId); GLES30.glDrawArrays(GLES30.GL_TRIANGLE_STRIP, 0, 4); EGL14.eglSwapBuffers(mDisplay, mSurface); }glVertexAttribPointer(1, 2, ..., 5 * 4, 3 * 4)表示頂點(diǎn)數(shù)據(jù)每 5 個(gè) float 為一組前 3 個(gè)是位置后 2 個(gè)是紋理坐標(biāo)stride 為 20 字節(jié)。繪制的 4 個(gè)頂點(diǎn)可以用(-1,-1,0,0,0)到(1,1, ..., 1,1)的三角形帶覆蓋全屏。紋理綁定后建議檢查紋理對(duì)象的過(guò)濾參數(shù)。外部庫(kù)生成的紋理 ID 不一定設(shè)置了GL_TEXTURE_MIN_FILTER如果默認(rèn)值是GL_NEAREST_MIPMAP_LINEAR而紋理沒(méi)有生成 mipmap畫面會(huì)出現(xiàn)模糊接縫或黑邊??稍赿rawFrame里每次綁定時(shí)執(zhí)行一次glTexParameteriGLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MIN_FILTER, GLES30.GL_LINEAR); GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MAG_FILTER, GLES30.GL_LINEAR); GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_S, GLES30.GL_CLAMP_TO_EDGE); GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_T, GLES30.GL_CLAMP_TO_EDGE);GL_CLAMP_TO_EDGE可以避免紋理邊緣采樣到透明或黑色區(qū)域。如果紋理 ID 來(lái)源是最新一幀相機(jī) YUV 轉(zhuǎn)成的 GL_TEXTURE_2D換幀時(shí) GPU 和 CPU 之間可能還有未完成寫入需要在 draw 之前插入glFinish()或使用同步柵欄否則第一幀可能出現(xiàn)紋素錯(cuò)亂。4. 共享上下文、同步與格式最常出問(wèn)題的 3 個(gè)位置EGL 初始化完成后渲染邏輯本身很短真正消耗時(shí)間的是排錯(cuò)。這一章只討論最常導(dǎo)致黑屏、花屏、綠屏的三個(gè)因素上下文共享失效、GPU 繪制與 ImageReader 消費(fèi)之間的時(shí)序、像素格式不匹配。4.1 紋理 ID 不是“全局身份證”必須用共享上下文許多人拿到外部傳入的 textureId 后既不詢問(wèn)它的 EGLContext也不做共享直接在新線程里glBindTexture后繪制得到的結(jié)果是黑屏但不報(bào)錯(cuò)。原因是 GL 紋理 ID 在 context 的資源表里只是一個(gè)索引新 context 里沒(méi)有這張表的注冊(cè)信息。共享上下文的創(chuàng)建方法在 2.3 節(jié)已經(jīng)說(shuō)明這里補(bǔ)充一個(gè)常見(jiàn)誤用只共享 EGLDisplay卻不共享 EGLContext這種代碼在開(kāi)發(fā)機(jī)上偶爾能跑因?yàn)槟承?qū)動(dòng)廠商把資源表做成了全局的但壓測(cè)和真機(jī)更換設(shè)備后立刻崩潰。推薦的做法是在紋理生產(chǎn)方初始化時(shí)記錄一個(gè)全局變量sSharedContext EGL14.eglGetCurrentContext();然后在渲染線程 init 時(shí)把它作為創(chuàng)建參數(shù)傳進(jìn)去。如果紋理生產(chǎn)方?jīng)]有 EGLContext直接傳EGL_NO_CONTEXT。注意共享 context 只共享對(duì)象不共享 GL 狀態(tài)機(jī)所以紋理參數(shù)、Shader、VBO 都要在新 context 里重新設(shè)置。4.2 EGL 渲染先行ImageReader 異步消費(fèi)同步在哪做ImageReader 的 Image 是異步到達(dá)的onImageAvailable觸發(fā)時(shí)并不代表 GPU 繪制已經(jīng)完成。eglSwapBuffers只表示緩沖被送交 BufferQueue不保證 GPU 已結(jié)束渲染。在部分設(shè)備上ImageReader 拿到幀時(shí)紋理內(nèi)容還處于可寫狀態(tài)后面消費(fèi)線程讀取時(shí)會(huì)出現(xiàn)半幀或內(nèi)容撕裂。如果追求穩(wěn)妥最直接的做法是在eglSwapBuffers后插入 GPU 等待EGL14.eglSwapBuffers(mDisplay, mSurface); // 等待 GPU 完成所有繪制指令確保 ImageReader 能拿到已完成的幀 GLES30.glFinish();glFinish會(huì)讓 CPU 阻塞直到 buffer 可復(fù)用。對(duì)于 30fps 的抽幀需求影響不大但如果要跑 60fps建議換成 fenceEGLSyncKHR fence EGLExt.eglCreateSyncKHR(mDisplay, EGLExt.EGL_SYNC_NATIVE_FENCE_ANDROID, new int[]{ EGLExt.EGL_SYNC_NATIVE_FENCE_ANDROID, 0, EGL14.EGL_NONE }, 0); // 從 fence 里取出 native fence fd傳給消費(fèi)端等待完成后 close這是 Android 推薦的低延遲方案把 fence fd 一并傳給消費(fèi)者而不是讓 CPU 在 GPU 完成后才繼續(xù)跑。如果當(dāng)前只做總結(jié)輸出glFinish簡(jiǎn)單不易錯(cuò)。4.3 像素格式與 Size 對(duì)齊ImageReader 不是隨便創(chuàng)建的ImageReader 的構(gòu)造參數(shù)pixelFormat必須與 EGLConfig 的 RGBA 位數(shù)一致否則畫面顏色會(huì)偏移或者完全失真。RGB_565、RGBA_8888、YUV_420_888 在 BufferQueue 里是不同格式EGL 無(wú)法對(duì)一個(gè) YUV 格式的 Surface 直接執(zhí)行 RGBA 的渲染操作。標(biāo)題鎖定的場(chǎng)景是 OpenGL ES 3.0 輸出所以 ImageReader 通常這樣創(chuàng)建mImageReader ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 2);注意最后那個(gè)maxImages參數(shù)。如果設(shè)成 1渲染頻率高時(shí)消費(fèi)者來(lái)不及 closeImageReader 會(huì)停止向 BufferQueue 請(qǐng)求新緩沖eglSwapBuffers會(huì)卡死設(shè)成 4 又會(huì)成倍占用內(nèi)存。2 是絕大多數(shù)抽幀和編碼場(chǎng)景下的默認(rèn)值。寬度和高度也需要對(duì)齊。給 ImageReader 傳奇數(shù)尺寸部分設(shè)備在eglCreateWindowSurface階段就失敗部分在ImageReader.getPlanes()階段因?yàn)?stride 和 width 不一致返回錯(cuò)誤的 Buffer 布局。常規(guī)做法是先對(duì)尺寸做對(duì)齊再創(chuàng)建int alignedWidth (width 15) / 16 * 16; int alignedHeight (height 15) / 16 * 16;紋理渲染到對(duì)齊后的 Surface 上如果 UVC 相機(jī)原始尺寸是 640x480對(duì)齊后依然是這兩個(gè)數(shù)字因?yàn)?16 的倍數(shù)對(duì)齊不會(huì)改變這兩個(gè)值。5. 接入 MediaCodec 編碼器與 30fps 幀率控制一個(gè)可收尾的技巧渲染到 ImageReader 的最終目的大多離不開(kāi)編碼。一個(gè)更高效的做法是讓 OpenGL ES 3.0 直接繪制到 MediaCodec 編碼器的輸入 Surface省掉 ImageReader 這個(gè)中間層。但有時(shí)業(yè)務(wù)需要同時(shí)保留 CPU 讀幀能力那就必須雙 Surface 并行。5.1 如果你要編碼別讓 ImageReader 成為中間跳板常見(jiàn)錯(cuò)誤寫法是先渲染到 ImageReader再在onImageAvailable里把Image的 buffer 拷貝出來(lái)通過(guò)MediaCodec.queueInputBuffer喂給編碼器。這不叫 GPU 渲染等于把 GPU 畫的幀又回到了 CPU再交給編碼器性能損耗巨大。如果不需要 CPU 讀幀直接創(chuàng)建編碼器輸入 SurfacemEncoder MediaCodec.createEncoderByType(video/avc); MediaFormat format MediaFormat.createVideoFormat(video/avc, alignedWidth, alignedHeight); format.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface); format.setInteger(MediaFormat.KEY_BIT_RATE, 4_000_000); format.setInteger(MediaFormat.KEY_FRAME_RATE, 30); format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 1); mEncoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); Surface encoderSurface mEncoder.createInputSurface(); mEncoder.start();然后把encoderSurface傳給第 3 章的init方法ImageReader 那條路徑留作旁路抽幀。5.2 兩個(gè) EGLSurface 交替渲染同時(shí)保留讀像素能力為了同時(shí)滿足編碼和讀幀可以創(chuàng)建兩個(gè) EGLSurface一個(gè)綁定 ImageReader一個(gè)綁定編碼器輸入 Surface。每次drawFrame時(shí)按當(dāng)前消費(fèi)者選擇目標(biāo)EGL14.eglMakeCurrent(mDisplay, chooseSurface(), chooseSurface(), mContext); GLES30.glFinish(); EGL14.eglSwapBuffers(mDisplay, chooseSurface());chooseSurface()根據(jù)當(dāng)前是否處于檢測(cè)階段返回對(duì)應(yīng) EGLSurface。這樣編碼鏈路的每一幀都是 GPU 直接寫入不經(jīng)過(guò) CPUImageReader 路徑只在真正需要抽幀的瞬間才切換過(guò)去。幀率控制可以用Choreographer在 VSYNC 信號(hào)上回調(diào)或者用循環(huán)控制long startTime System.nanoTime(); long frameInterval 33_000_000L; // 30fps單位納秒 while (running) { drawFrame(); long elapsed System.nanoTime() - startTime; if (elapsed frameInterval) { SystemClock.sleep((frameInterval - elapsed) / 1_000_000L); } startTime System.nanoTime(); }SystemClock.sleep比Thread.sleep更精確它不受 Java 層時(shí)間調(diào)整影響適合在 GL 線程里做節(jié)奏控制。5.3 用 adb 驗(yàn)證 ImageReader 是否真的在刷新接入完成后如果無(wú)法確定 ImageReader 是否收到幀可以用 adb 查看 SurfaceFlinger 的圖層狀態(tài)。先列出所有 Surface 名稱找到 ImageReader 對(duì)應(yīng)的項(xiàng)adb shell dumpsys SurfaceFlinger --list對(duì)比渲染前后同一 Surface 的z-order或visible region變化可以確認(rèn)是否提交了緩沖。但要注意一點(diǎn)ImageReader 表面在eglSwapBuffers后不會(huì)永遠(yuǎn)可見(jiàn)如果消費(fèi)者沒(méi)有及時(shí) close 圖像Surface 圖層可能被 SurfaceFlinger 判定為無(wú)內(nèi)容而在--list中消失。遇到這種情況優(yōu)先檢查onImageAvailable是否執(zhí)行以及Image.close()是否及時(shí)調(diào)用。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日韩在线视频中文字幕| 开心激情综合| 99热在线中文字幕| 碰超亚洲| 成片免费播放| 大香蕉久艹| 亚洲日本韩国| 日韩欧美成人片| 五月婷婷六月激情在线| 五月丁香六月香香蕉| 99热久久这里只有精品| 97操在线视频| 亚洲激情另类| 精品国产va久久久| 欧美性二区| 天堂美国久久| 亚洲愉拍99热成人精品| 欧美精品18| 久久视频这里99| 激情综合五月丁香| 五月婷婷久久久| 色日本颜射| 六月婷婷av| 色色日韩无码| 六月激情婷婷综合| 日本在线视频播放91| 午夜天堂一区人妻| 超碰99在线观看| 五月丁香六月婷婷姐| 婷婷丁香六月五月天| 《久久综合九色综合97婷婷| 18久久| 熟妇人妻中文字幕无码老熟妇 | 国产欧洲欧洲精品久久| 东京热伊人| 99久久激情视频| 午夜性爱影视一区77| 婷婷五月激情图片| 亚洲av网站| 激情五月天福利| 五月天婷婷久久| 97色啪| 激情五月亚洲| 亚洲色亚洲精品| 久鲁鲁色网| 久久性操| 91Chinese在线| 婷婷激情人妻| 色色色国产| www.激情com| 五月丁香综合色婷婷| 九九热最新| 人人摸人人摸| 99热这里只有精| 丁香婷婷色五月| 久综合色| 天天日夜夜拍| 欧美激情性做爰免费视频| 99热在线播放| 被男人添B超爽视频| 九九人人操| 国产97色在线| 狠狠干夜夜干| 国产精品久久久久久久久久免费| 色婷婷香蕉在线| 五月天婷a在线| 超碰在线caop| 欧美成综合在线观看| 性爱激情久久| 日亚二欧美| 9婷婷内射| 久久婷婷东京热大香樵| 天天摸天天肏| 亚洲婷婷开心五月| 五月天天爽| 综合五月激情网| 五月婷婷九月婷婷九月婷婷| 丁香五月欧美| 99精品在这里| 久久中文网| 色吧五月| 4399在线观看免费高清毛片| 婷婷丁香花五月天| 91超碰人人操| 综合性视频99| 五月丁香婷草| 丁香五月激情网| 亚洲精品又粗又大又爽A片| 色五月激情五月| 免费无码毛片一区二区A片 | 天天爱天天做天天舔| 欧洲亚洲最新精品| 色综啪啪网| 在线中文AV| 人人操婷婷| 欧美毛卡| 婷婷五月天777| 淫荡综合网| 婷婷丁香激情综合色情| 色999亚洲人成色| 精品无码久久久久久久久| 国产精品美女久久久久AV超清| 色五月色综合| 亚洲中文字幕AV| 亚洲激情无码久久| 激情 婷婷| 久热人妻| 婷婷在线播放| wWW九九在线播放| 天天天久久久| 99九九视频精彩在线| 日韩成人综合网| 99ri在线| 色婷婷五月天久久| 超级碰碰97在线| 99艹精品在线观看| 99惹在线精品免费观看| 亚洲色网址| 五月婷婷色五月| 色色婷婷综合| 99在线精品视频在线观看| 在线看的免费网站| 噜噜色天天开心| 热99精品视频| 久久久激情| 丁香五月成人自拍| 色综合色欲综合天天免费| 天天插天天插天天插天天插| 无码少妇高潮喷水A片免费| 人操人| 人妻性爱av网站| 色噜噜婷婷| 九九综合久久| 超级碰碰碰97免费| 婷婷婷婷婷婷婷五月丁香| 超碰操网| 亚州综合色| 99爱免费在线观看| 色色五月婷| 色色网站日本91| 色欲久久综合| 91凹凸在线| 大香伊人久色| 亚洲精品V天堂中文字幕| 综合网网欲色| 久久色这里只有精品| 91人妻PORNY九色大屁股| 人人操人人妻| 深爱激情网噜噜色| 乱精品一区字幕二区| 在线天堂9| 人妻肉射免费观看| 国产精品天天狠天天看| 亚洲 综合中文| 久久五月天影院| 五月丁香婷婷啪啪综合| 另类 在线| 婷婷五月天首页激情| 欧美激情五月| 国产三级在线播放| 噜噜噜久久| 久久天堂女人| 99热| 婷婷99| 午夜一区| 98毛片| 99热一区| 亚洲色综合性| 69精品无码一区二区三区| 五月天婷婷成人资源站| 亚洲人人艹| 色五月丁香伊人| 丁香婷婷五月综合影院| 五月丁香六月婷| 99热99在线| 超碰二区| 色综合色色| 色婷婷婷婷| 九九久99免费视频| 精品久久99码| 国产白丝在线一区| 五月天开心网| 思思久久96热在精品国产,| 色综合久久天天综合网 | 99热在线爱| 久久亚洲婷婷| 欧美激情-区二区三区| 五月婷导航| 亚洲V国产V欧美V久久久久久| 337p午夜影院| 五月丁香在线观看国产| 五月丁香六月玩女人| 麻豆精品| 丁香五月婷婷色| 色婷婷视频综合| 爆乳熟妇一区二区三区四区| 五月丁香淫淫婷婷婷| 婷婷在线日韩综合| 人人摸人人| 婷婷色色丁香五月天| 99热99美国在线观看| 久99久99精品免| 五月丁香婷婷综合| 久久er免费视频| 日本色婷婷| 99热精在线九九久久保| 六月丁香成人网| 日本三级成人秘书精品片| 麻豆123区| 婷婷五月天免费99| 久99视频在线观看| 丁香婷婷六月天| 婷色天堂| 五月天停婷基地| 91热视频色网站| 婷婷五月天久久久| 婷婷激情五月综合丁| 五月婷婷九九热| 99色精品| 国产色色色色色| 99热偷拍| 综合色播| 天天干天天操| 国产欧美婷婷五月| WWW,五月天| 婷婷五月丁香基| 丁香五月婷婷色情综合| 思思re99视频在线观看| 五月色婷婷AV| 免费视频舔| www.91五月| AA久久| 婷婷久久六月天| 99热新网址| 久久久国产精品黄毛片| 色综合久久88色综合天天| 色人久夂| 婷婷酒色网| 激情四射婷婷| 六月丁香婷婷在线波多| 五月丁香色情| 色99无码| 婷婷五月丁香综合亚洲| 久久综合99| 欧美色色色| 丁香五月天.com| 午夜大香蕉| 亚洲色婷婷视频| 婷婷99| 91色欲综合| 九九热99热| 激情网婷婷婷| 狠狠爱深色婷婷综合| 丁香五月五月婷婷| 五月天婷婷丁香视频| 色偷偷色婷婷| 激情婷婷护士激情| 欧类av怡春院| 六月综合婷婷开心伊人| 色婷婷AV在线| WWW五月| 一夜福利不卡| 天天摸天天肏| 狠狠色丁香久久婷婷综合五月| 清色五月天| 碰97久久| 九月丁香婷婷| 日本婷婷丁香五月| 激情综合色婷婷啪啪六月天| 日本色色视频| www.久久99热地址发布| 丁香六月久久| 日韩AAAAA| 伊人久久婷婷| 北京熟妇搡BBBB搡BBBB| 99欧美精品99日本精品| 五月丁香888| av五月丁香婷婷网| 狠狠第四色| 五月六月播婷婷| 色狠狠婷婷| 97久久久| 婷婷亚洲综合| 在线只有精品| 成人无码精品1区2区3区免费看| 91avse| 精品无吗va视频免费观看| 色狠狠色综合久久久绯色aⅴ影视| 91精品综合久久久久久五月丁香| 久久久激情视频| 天天激情欧美美女| 色情综合| 色五月91| 97中文在线| 久久久久久久8| 九九精品免费视频99| 丁香五月成人| 香蕉AV福利精品导航| 婷婷激情四射| 久久怡红院| 久久久精品色| 日本天天色| 99久久网站| 色五月婷婷五月天| 日本欧美成人片AAAA| 婷婷五月丁香六月综合网| 夜夜操天天爽| 精品久久这里热66| 91精品无码| 婷婷的色色五月天| 大香蕉婷婷丁香天堂AV| 欧美成人va| 99这里| 日本va欧美va国产激情| 专区无日本视频高清8| 天天日夜夜| 色婷婷综合网| 色婷婷丁香五月天在线观看| 五月婷视频在线| 亚洲第一综合| 五月婷婷激情综合网| 99热这里全是精品| 夜夜爽77777妓女免费下载| 亚洲激情网| 99久久九九| 成人国产欧美大片一区| 91人人妻人人操人人爽| 久久婷婷内射| 狠狠色狠狠干| 丁香五月色综合色播五月| 亚洲五月婷婷在线| 日日夜夜狠狠操| 日本美女五月天| 亚洲婷婷五月| 五月天色影院| 日本综合99| 91人人妻人人操| 久久五月天视频| 淫视馆aV二区一区| oVV4WIB3vFi8D| 天天日天天做天天操| 亚洲欧美999| 丁香五月婷婷五月| 五月情婷婷五月| 99热99精品在线观看| 婷婷丁香色五月| www.色9| 久草五月| 婷婷激情啪啪| 99这里的视频都是精品| AV人人操| 五月丁香六月婷| 伊综合蕉| 丁香五月天偷拍| 激情五月天婷婷视频| 色吧婷婷五月亚洲| 97热视频| 99热欲| 国内一级精品| 五六月丁香激情视频| 五月激情六月综合| www,天天干| 国产精品久久久爽爽爽麻豆色哟哟| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 性爱激情久久| 婷婷五月深情丁香深爱日韩| 丁香婷婷色| 天天干天干| 国产毛片欧美毛片久久久| 日韩有码一区| 婷婷天天插天天爱| 色五月婷婷一二| 五月丁香综合激情| 婷婷五月色色| 九九在线这里只有精品视频| 五月婷视频| 激情丁香五月AV| 99re99热| 色色色婷婷五月天| 久久婷婷的综合色丁香五月| 婷婷色5月天在线。| 婷婷综合视频| 31色区视频免费看| 天天色伊人| 六月综合婷婷开心伊人| 天天躁日日躁狠狠躁日日躁2022年5月9日| 天天搡日日搡aaaaⅩ| 丁香五月停停av| 天天色亚洲| 久久天堂色| 天天干夜夜b| 97香蕉碰碰人妻国产欧美| 久久 视频这里只有精总| 91干| 久久九九玖玖| 丁香激情五月| 日本理论久久| 操日挥操日日| 婷婷五月天 丁香五月天 裸体| 亚洲婷婷五月| 色五月av| 99热精品超碰| 狠狠插狠狠操| 五月天另类小说久久小说网| 亚洲激情五月丁香久久久久| 亚洲日韩一页精品发布| 天天日日人| 成人综合AV| 99色.com| 天天天天干| 色爱爱综合网| 天天综合影院| 色色综合网。| 五月激情婷婷开心| 99久久婷婷国产综合亚洲| 婷婷六月插屄激情| 香蕉人妻AV久久久久天天| www久久五月com| 日本久久精品| 玖热精品综合视频| 99高级会所久久| 亚洲激情婷婷| 久久曰曰| 欧洲色| 欧美婷婷六月丁香综合色连续高潮抽搐| 91色综合| 五月婷婷黄色| 亚洲久热| 色五月激情基地| 黑人巨粗进入警花疼哭A片| 婷婷激情丁香五月婷婷激情丁香五月婷婷| 99性爱| 五月天婷婷基地丁香| 久久这里只有精品99| 成人噜噜网| 亚洲激情婷婷| 99热这里在线精品| 99国产精品久久久久久久久久久| 丁香5月啪啪| 天堂成人A片永久免费网站 | 久久99婷婷| 五月婷免费视频| 丁香五月婷在线| 另类丁香五月天区图| 婷婷五月色亚洲| 影音先锋自拍网| 9久热这里只有精品| 日本操逼九九九九58日本操逼| 丁香婷婷五月香蕉91| 色色色色色爱| www.久久9| 伊人久久婷| 99热最新网址| 久操欧美在线观看97| 五月婷婷伊人在线| 大香蕉久久久| 极品少妇XXXX精品少妇偷拍| 成人综合伍月天| 国产色视频网站2| 亚洲AV网址| 色频玖玖五月天| 久久久天堂国产精品女人| 天天精品视频在线观看视频| 日本精品干| 99热99色| 激情五月色综合国产精品| 大香人妻| 婷婷五月色| 色 五月婷婷基地| 亚洲av午夜精品一区二区| 特黄三级片| 天天婷婷天天| 五月天丁香婷婷社区| 操人91| 色综合xx| 神马欧美精| 襙比视频| 欧美日韩成人在线网| 激情五月小说婷婷| 婷婷开心久久| 五月婷婷综合热| 超极99精品| 五月丁香成人| 亚洲AAA| 婷婷中文字暮| 日日干夜夜干| 欧美日韩成人在线网站| 综合在线丁香五月| 91色色色18| 桃色成人网| 99狠狠| 校园激情 亚洲| 毛片新网地| 国产AV一区二区三区最新精品| 中文av网站| 精品无码av丁香五月激情| 丁香五月婷婷老师网站| 99精彩视频| 婷婷五月色情| 婷婷五月天美女视频| 久操大香蕉| 岛囯综合激情网| 99热精品中文字幕| 激情五月婷黄版| 视频这里只有精品16| 亚洲成人AV在线播放| 这里只精品热在线18| 国产67194| 99热观看| 久久五月天影院| 直接看的av| 五月天激情婷婷久久| 丁香月五月天婷婷久久| 婷婷色影院| 碰碰碰91| 狠狠色综合久久久久| 超碰在线看| 五月天最新网| 日日舔夜夜操| 五月婷婷综合色啪首页| 思思热思在线精品视频| 色婷婷激情| 一区操| 成人做爰A片免费看视频| AAA久久久| 色五月天成人| 美女五月天| 激情五月六月丁香| 婷婷六月开心网| 中文字幕成人| 亚洲色碰| 亚洲av综合网| www.91.com黄| 男人天堂99| 五月婷婷精品| 久久精品噜噜噜成人A∨色欲| 丁香8月手机综合| 久久综合天天综合| 婷婷五月天无码视频| 99色6爱9热| 久久精品视频99| 免费AV在线| 黄色91在线观看| 激情婷婷五月综合| 久久九九一區| 91 九色 入口| 91九色小视频| 國語久久婷| 99色五月| 色丁香婷婷| 秋霞A V毛片| 婷婷五月丁香综合桃花色网| 婷婷五月无码| 另类激情五月| 五月天婷婷色在线视频免费观看| 婷婷九月综合| 六月婷婷啪啪| www.五月婷婷| 五月天综合在线| 丁香九月激情| 久久五月网| 欧美婷婷五月天综合| 五月婷婷网站| 日韩高清成人| 色婷婷影院| 青草视频在线播放| 婷婷五月精品| 日韩另类在线观看| 色婷婷丁香五月| 天天干,夜夜爽| 五月婷在线| 亚洲亚洲人成综合网络| 99re资源在线视频导航| 色婷婷另类| 九色无码| 婷婷六月丁香在线| 伊人婷婷五月天av| 天天激情欧美美女| 丁香婷婷深情五月亚洲| 国产国产乱老熟女视频网站97| 欧美日韩成卜| 99久免费视频| 色婷婷av在线| 婷香五月网在线| 深爱五月中文字幕| 五月婷婷丁香五月婷婷丁香| 九九五月天| 成人国产欧美大片一区| 大香蕉人人人| 色婷婷丁香五月高清在线| 丁香六月色婷婷综合| 大香蕉五月天婷婷| 亚洲六月综合激情久久下卡| 五月婷精品| 久久草婷婷丁香网站| 久久婷婷五月综合啪| 99ER热精品视频| 黄色99热| 色欲日日躁| 亚洲午夜电影| 2050人人操免费工开爱| 天天综合色| 狠狠色狠狠色综合日日91| 色婷婷五月综合| 日日夜夜综合| 色欲天天综合网| 午夜色丁香| 99热这里只有精品手机在线观看| 精品久热69| 精品亚洲国产成AV人片传媒| 97人人操人人爽| 色婷婷五月天不卡| 五月天激情婷婷| www.97干视频| 婷婷色网站| 丁香五月性| 色婷婷色综合激情91| 丁香五月六月婷婷自拍| 天天色播| 亚洲婷婷婷| 永久地址 色| 五月天激情网图片| 五月丁香啪啪综合网| 亚洲另类久久| 欧美交换配乱吟粗大25P| 久久久ww| 99在线精品视频| 国内自拍97在线| 五五月丁香花激情综合网| 狠狠99| 丁香五月天影院| 第二色AⅤ| 香蕉久久国产AV一区二区| 另类丁香综合| 逼里香不卡| 精品久久久久成人码免费动漫 | 亚洲无码成人网| 色五月婷婷基地| 色婷婷的五月天| 日本91在线播放| 五月婷人妻| 五月婷婷色播| 99五月丁香丁| 国产超碰在线| 第四色激情网| 另类天堂| 九九99在线免费在线观看视频| 性生活视频98791| 九九99在线| 婷婷六月激情| 亚洲AV免费国产电影| 狠狠干综合网| 丁香五夜激情四射夜夜夜| 婷婷五月天在婷| 91色色五月天| 婷婷香五月综合激情| 国产精品久久久爽爽爽麻豆色哟哟 | 97人人操人人爽| 亚洲av成人在线| 久久久99视频| 9久热| 激情婷婷五月久久| 日韩无码成人电影| 激情婷婷综合| 狠狠爱深色婷婷综合| 思思热在线视频99| 操逼综合激情网| 深爱激清网| 色婷婷啪啪| 亚洲色网络| 伊人五月综合网| 久久3p| 91九色国产| 99re8这里只有精品99re8热视频| 欧美噜噜免费观看| 99re热视频这里只精品| 天天射夜夜骑| www91久久| 欧美婷婷日本| 开心五月激情| 免费在线观看AV网站| 亚洲激情在线| 五月天色婷婷激情综合| 天天做天天爱高潮片| 狠狠艹狠狠艹| 99热这里只有精品最新| 久久久久激情| 婷婷香蕉| 国产av天堂| 狠狠操狠狠狠| 国产成人高清| 婷婷激情综合网| 99久久久久| 无遮挡国产高潮视频免费观看 | 久久色五月| 91pornav在线| 天天噜天天爱| 五月婷狠狠| 丁香五月天之婷婷影院| 国产精典视频在线观看| 精品夜夜澡人妻无码AV| 五月婷婷成人| 天天成人综合| AV五月丁香| 99精品视频在线观看| 五月天涩涩| 九九热99re8热免费观看| 国产成人精品一区二三区熟女在线| 精品五月天| 精品久久99码| 婷婷色五月91啪啪| 成年人丁香五月| wwwxxx五月婷婷小说| 色婷婷性爱| 狼人久草| 思思re99视频在线观看| 天天日天天爽夜夜爽| 日韩成人电影AV| 欧美性爱中文字幕| 日本99婷婷| 久久九九网| 99热这里只有精品官网| 26uuuavcom| 五月婷婷色色色| 超碰色女人| 久草婷婷网 | 东京热免费视频| 久久激情五月婷婷| 丁香五月婷婷色播艳门照| 久久狠狠欧美| 婷婷色影院| 婷婷九月丁香天堂丁香天堂| 亚洲激情婷婷| 中美日韩成人在线| 精品国产va久久久| 成人狠狠成人狠狠成人狠狠成人狠狠| 色999五月色| 色婷婷av综合网| 大色鬼综合| 99这里| 91黄址| 五月综合视频| 五月丁香六月婷婷视频| AV五月丁香| 、激情六月天| 人妻九九九九| 中文字幕AV在线| 五月开心婷婷网| 久久久噜噜噜操操操| 婷婷色五月天色色| 欧美性交一区二区三区| 九色在线五月婷婷网址| 91日在线视频| 91 九色大美女| 色级停停| 激情婷婷99| 久久精品一区二区三区四区| 国产美女无遮挡裸体毛片A片| 激情五月综合| 丁香六月综合激情| 99热欧美| 综合久久激情久久| 色婷婷精| 一起草Av| 色色综合成人网| 99碰碰| 噜噜噜噜噜在线| 久9热视频| 伊人色综合久久久| 婷婷伊人激情婷婷| 日日夜夜狠狠干| 思思热在线观看| 亚洲欧美成人在线| 伊人久久婷婷| 26uuu成人网| 日韩野外 无套| 婷婷五月天丁香综合网| 九久9精品| 嫩草AV久久伊人妇女超级A| 亚洲妇女熟BBW| 91操女| 五月婷婷,狠狠操| 99热大| 久久五月情| 婷婷精品视频| 丁香五月视频在线观看| 6080av| 26uuu欧美激情另类| 久久久精品人妻| 色墦五月丁香| www99精品亚| 91亚洲免费片| 亚洲最大五月天成人网| 99久re热视频精品98| 色五月婷婷网| 激情久久综合网| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 97超喷视频在线观看| 五月婷狠狠| 五月丁香综合啪啪| 五月天天爽| 欧美成性色| 婷婷成人综合免费视频| 天天爽夜夜操| 丰满女老板BD高清A片| 99精品97| 三区激情四射av| 九九99精品视频| 综合五月天| 色五月天丁香婷婷| 狠狠干夜夜干| 97碰 在线视频观看| 色播五月丁香婷婷| 五月丁香综合激情| 久久婷婷五月综合| 五月婷婷亚洲色图| 丁香五月婷综合网| 日日夜夜九九| 极品人妻videosss人妻| 激情久久久| 99啊精典免费视频| 另类图片 五月激情| 另类A片| 日韩天堂久久| 激情五月天激情五月天| 一起草AV入口| 久久五月人人摸| 这里只有精品免费视频| 久99在线视频| 少妇激情五月天| 免费97碰碰| 九九热在线视频观看| 婷婷丁香红五月91C| 成人操呦av| 激情五月天丁香| 久久大香蕉视频| 色五月五月婷婷| 国产一级视频a| www.狠狠操.con| 色丁香婷婷| 1995年关宝慧版蜘蛛女| 五月婷婷综合网| 五月天婷婷深深爱| 成人婷婷色综合| 先锋av性爱成人电影| 国产精品美女久久久久AV超清 | 久久五月婷婷视频| 色综合综合网| 亚洲图片 丁香婷婷| 五月婷婷婷婷婷婷艺术| 97亚洲精品| 高清无码视频网址| 亚洲综合成人网| 婷婷五月天开心网| 久久丁香婷婷五月天| 日日干夜夜干| 日韩AAAAAAAAAAA片| 久久女人九九| 五月天另类激情在线| 久久宗合影| 牛色色碰| 五月天五月天成人网亭亭成人色网站| 激情国产综合| 人妻人人操| 六月丁香影院| 五月婷婷AV| 日产精品一线二线三线芒果| 91视屏在线观看com.wwwvv| 影音先锋一区二区资源站| 开心五月网 | www.久久久久久久久久.com| 亚洲婷婷五月| 色综合久久久久| 无码少妇高潮喷水A片免费| www.开心激情| 99热9| 色婷婷五月综合色婷婷| 97干欧美| 色婷婷丁香五月观看| 成人网站av免费网站推荐| 亚洲另类婷婷综合| 五月丁香人妻| 丁香六月成人网| 超碰在线中文字幕| 色五月婷婷网| 久久在线人妻| 大功率国产在线| 午夜在线成人网站免费观看| 无码少妇高潮喷水A片免费| 丁香婷婷九月| 五月天婷网| 那里有AV网址| 欧美伊人9| 亚洲AV久久久久久久久久久久久久久久| 久久性爱视频网站| 狠狠色综合精品视频在线| 久鲁鲁色网 | 国产avapp 网| 深夜婷婷 丁香| 桃色成人网| 婷婷久久丁香五月| 婷婷五月天激情网站| 五月丁香色五月| 九月婷婷色色| 少妇AB又爽又紧无码网站| 粉嫩av蜜桃av蜜臀av| 色五月婷婷久久| 色五月五月丁香| 99综合婷婷五月| 国产亚洲在线观看| 激情久久网 | 久久AAAA片一区二区| 久久精品一区二区三区四区| 99热久久这里只有精品2010| 五月婷婷六月激情网| 婷婷丁香六月影视| 久9无码视频| 中文AV在线播放| 六月婷婷久久| 超碰京东热av男人的天堂| 99在线视频操999| 99这里只有精品| 超碰在线日夜| 亚洲中文字幕av| 欧美黄色AA片哗啦啦啦| 久操人妻| 激情色播| 久久人妻熟女一区二区| 成人无码精品1区2区3区免费看| 91婷婷| 日本九九视频| 大地9中文在线观看免费高清| 成人做爰黄A片免费看直播室男男| 性av| 超碰人人摸人人操| 97超碰婷婷五月天| 五月亭亭欧美女人| 人人操婷婷| 激情色情五月天| www.97干视频| 综合久久综合| 亚洲美女婷婷五月天| 一区二区三区四区五区| www.av视频xx999.com| 丁香六月色婷婷欧美| 色婷婷丁香综合中文字幕| 色婷婷欧美| 丁香婷婷五月色成人网站| 色色色综合视频| 热99热9| 99热99精品| 欧美视频五区| 久久亚洲婷婷| 久久码久久无清| 2005天天干天天1| a色色色色色| 色婷婷综合网站| 国产成人精品一区二三区熟女在线| 色五月激情五月天| 182.t午在线观看| 色婷婷性爱| 丁香5月激情网| 99精品在这里| 99激情视频| 东京热人妻一区二区三区在线| 日韩无码性爱| 91黄址| 久久网思思| 超碰免费人人| 琪琪色网在线| 欧日美女Va| 色五月av| 午夜性做爰电影| 色婷婷色综合激情91| 五月丁香六月婷婷不卡免费无码| 99热这里只有精品免费观看| 操碰91| 婷婷情色开心五月天99| 92国产福利| 色区域网站视频| 91日本在线观看| 亚洲秘 无码一区二区三区妃光/1| 九九热在线视频| 字母不卡码人逼| 无码四色色色| 99在线热视频| 久久91久久精品久久| 丁香六月久久| 影音先锋天天日| 色九九九综合| 五月婷婷视频啪啪美女| 丁香五月天堂网| 99热大全在线观看| 这里只有精品免费| 婷婷婷久久| 六月丁香久久| 激情伊人五月天| 九月婷婷综合网| 五月天com| 九九爱精品网站| 天天日夜夜操五月| 久久精品一区二区三区四区| 插插插色综合网| 亚洲色啪| 黄色片区子| 色五月综合网| 丁香五月花婷婷开心| 亚洲不卡| 成人色五月天婷婷| 狠狠干婷婷| 色婷五月天| 亚洲av| 人人色性网| 日本少妇裸体做爰高潮片| 婷婷丁香五月天狠狠| 丁香五月天电影| 婷婷97狠狠干| 99天堂在线观看免费视频| 99精品亚洲| 欧美偷偷操| 亚洲小视频| 婷婷五月丁香性爱| 色婷狠狠| 玖玖热99| 夜夜爽天天爽| 亚洲天堂aaa| 91久久综合| 色播五月天激情| 丁香六月天婷婷在线| 久久人妻视频| 思思久久99热| 婷婷五月激情视频| 伊人无码高清| 色色色网站| 激情五月婷婷她| 我去色色网五雨天| 五月激情婷婷图片基地| 激情综合五月丁香六月婷婷| 五月丁香色色| 艾小青av| 日本久久视频| 99re欧美精品| AV性爱在线| 成人精品在线| 禁欲电影完整版在线播放| 五月婷婷色播网| www综合久久| 国产99久久久国产精品免费看| 午夜婷婷六月天| 激情五月图| 91操片| 欧美电影在线播放| 综合XX网| 久久精彩视频99| 综合 蜜月 婷婷| 九九色婷婷五月天| 五月天激情四射| 色噜噜婷婷| 日本免费91| 色色色五月天婷婷| 婷婷五月天av| 五月婷婷婷婷婷| 丁香五月,开心五月,成人婷婷| 超级碰碰碰碰视频| 99热这里有精品| 伊人婷婷五月天| 好激情在线综合网| 亚洲一区二区 成人网站戴套| 超碰在线成人| 九九精品在线网| 色婷婷在线视频久| 五月婷啪| 94干大香蕉| 亚洲人成网站999综合| 久久伊人大香蕉| 超碰人人操| 91热视频色网站| www,婷婷,com| 亚洲综合色色| 亚洲视频图片婷婷五月| 日韩狠狠色婷婷| 色综合网上班开心婷婷久久| 粉嫩av蜜桃av蜜臀av| 国产精品丝| 超碰免费电影| 亚洲啪| 极品五月天| 九九九干精品| 丁香香蕉射射射| 99热超碰在线| 99性爱视频| 国产激情综合五月久久| 色5月婷婷| www久| 婷婷五月天综合AV| 天天人人人人人人人人人人人| 久草热在线视频| 五月丁香龟婷婷| 天天操B| 欧美大香蕉视频| 九九自拍网| 亚洲人成网亚洲欧洲无码久久| 99婷婷五月天| 99热精品少| 天天插天天日天天爽| 777丁香六月青青草婷婷综合久月| 日本熟女视频一区二区| 五月丁香综合啪啪| 久热这里只精品| 思思国产99| 久久久精品人妻录| 国产精品美女| 亚洲网站999| 色5月婷婷| 六月色色| 人妻在线观看视频| 淫视馆aV二区一区| 播五月婷婷开心| 婷婷五月丁香基地| 亚洲天堂久久| 五月丁香婷婷钟和色图| 蜜乳人妻一区二区三区| 婷婷久久五月丁香| 能看的av片| 五月天激情久久| 欧美色五月| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 婷婷伊人网| 操操啪| 99国产精品久久久久久久久久久| 黄色高清无码| 国产精品久久久久久白浆色欲| 超碰AAAAAAV| 五月精品| 国产欧美熟妇另类久久久| 人人草碰| 婷婷深爱五月天在线| 99爱在线视频观看| 五月综合激情视频在线| 国产精产国品一二三在观看| 色99免费视频中文| www.日日日.com| 亚洲av成人在线| 国产综合久久久777777| 蜜乳国产网站| 丁香六月婷婷开心| 婷婷丁香五月综合久久| 婷婷五月天熟妇| 日韩视频99| 天天综合色99| 日本本土色网第一区| 久久婷婷综合五月趴| 夜夜干 夜夜操| 91色噜噜狠狠狠狠色综合| 99九九视屏| 国产这里只有精品| 婷婷综合五月| AV性爱网| 免费视频WWW在线观看网站| 超碰激情网| 色婷婷久久| av激情在线| 天天综合网~91| 亚洲精品视频在线| 狠狠狠狠狠狠| 九一九九黄色| 色五月婷婷基地| 九色视频91疯狂| 色婷婷啪啪| 九九热av| 欧美久人人| 五月丁香色| 国产精品99久久久久久久女警| 婷婷色五月噜噜| 天天爽天天摸天天爱| 欧美色偷偷大香| 色色色图| 久久五月婷综合网| 99只有精品| 久久一级免费黄色片| 色亚洲视频| 婷婷狠狠爱| 色色com| 日本视频欧美观看免费| 五月丁香六月婷婷激情网| 操逼视频一区| 婷婷性爱影院| 国产精品蜜臀99| 秋霞少妇AV网站| 色高清无码视频| 国内9l视频自拍老熟女九色| 欧美性爱五月天| 91婷婷在线观看| 五月天婷婷综合网| 艾小青av| 日本婷久久| 91精品久久久久久久| 五月丁香婷中文| 影音先锋噜一噜| 国产一级婬片毛片| 色婷婷aV四虎| 另类激情五月| 亚洲岛国电影| 五月香蕉婷婷| 一区二区三区视频| 五月天丁香| 色婷婷五月天激情综合| 苗黎美女四级成人版一级二级毛片| 久久这里只有精品无码| 一区三区视频有限公司| 92久久精品一区二区| 色婷婷伦理| 欧美色图天堂网色| 六月婷婷综合网2| 丁香六月激情四射| 伊人五月人妻精品| 99热在线播放精品| 26uuu国产| 五月色色激情网| 婷婷色播综合五月| 亚州欧美黄色电影| 色停停香蕉视频| 五月天开心婷婷久久| 欧美久久久中文字幕| 99日本黄站| 1995年关宝慧版蜘蛛女| 一区二区乱码视频| 久久激情四射| 国产 码在线成人网站| 色婷婷免费观看| 乱色色色| 婷婷五月天影视| 亚洲精品视频在线| 国产性爱色| 超碰成人影视| 五月丁香六月婷| 婷婷色片| 伊人青草成人| 9 7总站超级碰免费视频| 播播网色播播| 色五月婷婷亚洲| 思思精品久久艹| 五月婷婷丁香五月亚洲色| 色婷婷啪啪| 不卡的AV网站| 99人人干| 婷婷五月丁香久久| site:pnnrt.com| 天天色天天舔天天爱天天爽 | 成人丁香五月婷| 99热在线观看| 99热这里是精品| 丁香五月性| 99超碰人人| 99久99久| 99视频在线啪| 伊人在线视频| 疯狂做受XXXX高潮A片动画| 97干在线视频| 五月天播播| 97色热| av在线免费网站| 色5月丁香婷婷| 久久人妻视频| 婷婷五亚洲| 激情五月婷婷丁香|