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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

android6.0源码分析之Camera API2.0下的Capture流程分析

發(fā)布時(shí)間:2025/3/15 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android6.0源码分析之Camera API2.0下的Capture流程分析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前面分析preview的時(shí)候,當(dāng)預(yù)覽成功后,會(huì)使能ShutterButton,即可以進(jìn)行拍照,定位到ShutterButton的監(jiān)聽(tīng)事件為onShutterButtonClick方法:

<code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//CaptureModule.java</span> <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">onShutterButtonClick</span>() {<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//Camera未打開(kāi)</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mCamera == <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> countDownDuration = mSettingsManager.getInteger(SettingsManager.SCOPE_GLOBAL,Keys.KEY_COUNTDOWN_DURATION);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (countDownDuration > <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 開(kāi)始倒計(jì)時(shí)</span>mAppController.getCameraAppUI().transitionToCancel();mAppController.getCameraAppUI().hideModeOptions();mUI.setCountdownFinishedListener(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>);mUI.startCountdown(countDownDuration);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Will take picture later via listener callback.</span>} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//即刻拍照</span>takePictureNow();} }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li></ul>

首先,讀取Camera的配置,判斷配置是否需要延時(shí)拍照,此處分析不需延時(shí)的情況,即調(diào)用takePictureNow方法:

<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//CaptureModule.java</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">takePictureNow</span>() {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mCamera == <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {Log.i(TAG, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Not taking picture since Camera is closed."</span>);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;}<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//創(chuàng)建Capture會(huì)話并開(kāi)啟會(huì)話</span>CaptureSession session = createAndStartCaptureSession();<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//獲取Camera的方向</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> orientation = mAppController.getOrientationManager().getDeviceOrientation().getDegrees();<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//初始化圖片參數(shù)</span>PhotoCaptureParameters <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">params</span> = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> PhotoCaptureParameters(session.getTitle(), orientation, session.getLocation(),mContext.getExternalCacheDir(), <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>, mPictureSaverCallback,mHeadingSensor.getCurrentHeading(), mZoomValue, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//裝配Session</span>decorateSessionAtCaptureTime(session);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//拍照</span>mCamera.takePicture(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">params</span>, session); }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li></ul>

它首先調(diào)用createAndStartCaptureSession來(lái)創(chuàng)建一個(gè)CaptureSession并且啟動(dòng)會(huì)話,這里并且會(huì)進(jìn)行初始參數(shù)的設(shè)置,譬如設(shè)置CaptureModule(此處實(shí)參為this)為圖片處理的回調(diào)(后面再分析):

<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//CaptureModule.java</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> CaptureSession <span class="hljs-title" style="box-sizing: border-box;">createAndStartCaptureSession</span>() {<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//獲取會(huì)話時(shí)間</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">long</span> sessionTime = getSessionTime();<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//當(dāng)前位置</span>Location location = mLocationManager.getCurrentLocation();<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//設(shè)置picture name</span>String title = CameraUtil.instance().createJpegName(sessionTime);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//創(chuàng)建會(huì)話</span>CaptureSession session = getServices().getCaptureSessionManager().createNewSession(title, sessionTime, location);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//開(kāi)啟會(huì)話</span>session.startEmpty(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> CaptureStats(mHdrPlusEnabled),<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Size((<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>) mPreviewArea.width(), (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>) mPreviewArea.height()));<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> session; }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li></ul>

首先,獲取會(huì)話的相關(guān)參數(shù),包括會(huì)話時(shí)間,拍照的照片名字以及位置信息等,然后調(diào)用Session管理來(lái)創(chuàng)建CaptureSession,最后將此CaptureSession啟動(dòng)。到這里,會(huì)話就創(chuàng)建并啟動(dòng)了,所以接著分析上面的拍照流程,它會(huì)調(diào)用OneCameraImpl的takePicture方法來(lái)進(jìn)行拍照:

<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//OneCameraImpl.java</span> @Override <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">takePicture</span>(final PhotoCaptureParameters <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">params</span>, final CaptureSession session) {...<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 除非拍照已經(jīng)返回,否則就廣播一個(gè)未準(zhǔn)備好狀態(tài)的廣播,即等待本次拍照結(jié)束</span>broadcastReadyState(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//創(chuàng)建一個(gè)線程</span>mTakePictureRunnable = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Runnable() {@Override<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">run</span>() {<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//拍照</span>takePictureNow(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">params</span>, session);}};<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//設(shè)置回調(diào),此回調(diào)后面將分析,它其實(shí)就是CaptureModule,它實(shí)現(xiàn)了PictureCallback</span>mLastPictureCallback = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">params</span>.callback;mTakePictureStartMillis = SystemClock.uptimeMillis();<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//如果需要自動(dòng)聚焦</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (mLastResultAFState == AutoFocusState.ACTIVE_SCAN) {mTakePictureWhenLensIsStopped = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>;} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//拍照</span>takePictureNow(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">params</span>, session);} }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li></ul>

在拍照里,首先廣播一個(gè)未準(zhǔn)備好的狀態(tài)廣播,然后進(jìn)行拍照的回調(diào)設(shè)置,并且判斷是否有自動(dòng)聚焦,如果是則將mTakePictureWhenLensIsStopped 設(shè)為ture,即即刻拍照被停止了,否則則調(diào)用OneCameraImpl的takePictureNow方法來(lái)發(fā)起拍照請(qǐng)求:

<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//OneCameraImpl.java</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">takePictureNow</span>(PhotoCaptureParameters <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">params</span>, CaptureSession session) {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">long</span> dt = SystemClock.uptimeMillis() - mTakePictureStartMillis;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> {<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 構(gòu)造JPEG圖片拍照的請(qǐng)求</span>CaptureRequest.Builder builder = mDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);builder.setTag(RequestTag.CAPTURE);addBaselineCaptureKeysToRequest(builder);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Enable lens-shading correction for even better DNGs.</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (sCaptureImageFormat == ImageFormat.RAW_SENSOR) {builder.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">set</span>(CaptureRequest.STATISTICS_LENS_SHADING_MAP_MODE,CaptureRequest.STATISTICS_LENS_SHADING_MAP_MODE_ON);} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (sCaptureImageFormat == ImageFormat.JPEG) {builder.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">set</span>(CaptureRequest.JPEG_QUALITY, JPEG_QUALITY);.getJpegRotation(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">params</span>.orientation, mCharacteristics));}<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//用于preview的控件</span>builder.addTarget(mPreviewSurface);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//用于圖片顯示的控件</span>builder.addTarget(mCaptureImageReader.getSurface());CaptureRequest request = builder.build();<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (DEBUG_WRITE_CAPTURE_DATA) {final String debugDataDir = makeDebugDir(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">params</span>.debugDataFolder,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"normal_capture_debug"</span>);Log.i(TAG, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Writing capture data to: "</span> + debugDataDir);CaptureDataSerializer.toFile(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Normal Capture"</span>, request, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> File(debugDataDir,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"capture.txt"</span>));}<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//拍照,mCaptureCallback為回調(diào)</span>mCaptureSession.capture(request, mCaptureCallback, mCameraHandler);} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (CameraAccessException e) {Log.e(TAG, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Could not access camera for still image capture."</span>);broadcastReadyState(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">params</span>.callback.onPictureTakingFailed();<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;}synchronized (mCaptureQueue) {mCaptureQueue.add(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> InFlightCapture(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">params</span>, session));} }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li></ul>

與preview類似,都是通過(guò)CaptureRequest來(lái)與Camera進(jìn)行通信的,通過(guò)session的capture來(lái)進(jìn)行拍照,并設(shè)置拍照的回調(diào)函數(shù)為mCaptureCallback:

<code class="hljs r has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">//CameraCaptureSessionImpl.java @Override public synchronized int capture(CaptureRequest request,CaptureCallback callback,Handler handler)throws CameraAccessException{<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">...</span>handler = checkHandler(handler,callback);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> addPendingSequence(mDeviceImpl.capture(request,createCaptureCallbackProxy(handler,callback),mDeviceHandler)); }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>

代碼與preview中的類似,都是將請(qǐng)求加入到待處理的請(qǐng)求集,現(xiàn)在看CaptureCallback回調(diào):

<code class="hljs r has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">//OneCameraImpl.java private final CameraCaptureSession.CaptureCallback mCaptureCallback = new CameraCaptureSession.CaptureCallback(){@Overridepublic void onCaptureStarted(CameraCaptureSession session,CaptureRequest request,long timestamp,long frameNumber){//與preview類似<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(request.getTag() == RequestTag.CAPTURE&&mLastPictureCallback!=null){mLastPictureCallback.onQuickExpose();}}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">...</span>@Overridepublic void onCaptureCompleted(CameraCaptureSession session,CaptureRequest request,TotalCaptureResult result){autofocusStateChangeDispatcher(result);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(result.get(CaptureResult.CONTROL_AF_STATE) == null){//檢查自動(dòng)聚焦的狀態(tài)AutoFocusHelper.checkControlAfState(result);}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">...</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(request.getTag() == RequestTag.CAPTURE){synchronized(mCaptureQueue){<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(mCaptureQueue.getFirst().setCaptureResult(result).isCaptureComplete()){capture = mCaptureQueue.removeFirst();}}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(capture != null){//拍照結(jié)束OneCameraImpl.this.onCaptureCompleted(capture);}}super.onCaptureCompleted(session,request,result);}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">...</span> }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li></ul>

這是Native層在處理請(qǐng)求時(shí),會(huì)調(diào)用相應(yīng)的回調(diào),如capture開(kāi)始時(shí),會(huì)回調(diào)onCaptureStarted,具體的在preview中有過(guò)分析,當(dāng)拍照結(jié)束時(shí),會(huì)回調(diào)onCaptureCompleted方法,其中會(huì)根據(jù)CaptureResult來(lái)檢查自動(dòng)聚焦的狀態(tài),并通過(guò)TAG判斷其是Capture動(dòng)作時(shí),再來(lái)看它是否是隊(duì)列中的第一個(gè)請(qǐng)求,如果是,則將請(qǐng)求移除,因?yàn)檎?qǐng)求已經(jīng)處理成功,最后再調(diào)用OneCameraImpl的onCaptureCompleted方法來(lái)進(jìn)行處理:

<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">//OneCameraImpl<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.java</span> private void onCaptureCompleted(InFlightCapture capture){if(isCaptureImageFormat == ImageFormat<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.RAW</span>_SENSOR){...File dngFile = new File(RAW_DIRECTORY,capture<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.session</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.getTitle</span>()+<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">".dng"</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>writeDngBytesAndClose(capture<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.image</span>,capture<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.totalCaptureResult</span>,mCharacteristics,dngFile)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>}else{//解析result中的圖片數(shù)據(jù)byte[] imageBytes = acquireJpegBytesAndClose(capture<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.image</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>//保存Jpeg圖片saveJpegPicture(imageBytes,capture<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.parameters</span>,capture<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.session</span>,capture<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.totalCaptureResult</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>}broadcastReadyState(true)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>//調(diào)用回調(diào)capture<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.parameters</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.callback</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.onPictureTaken</span>(capture<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.session</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span> }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li></ul>

如代碼所示,首先,對(duì)result中的圖片數(shù)據(jù)進(jìn)行了解析,然后調(diào)用saveJpegPicture方法將解析得到的圖片數(shù)據(jù)進(jìn)行保存,最后再調(diào)用里面的回調(diào)(即CaptureModule,前面在初始化Parameters時(shí)說(shuō)明了,它實(shí)現(xiàn)了PictureCallbak接口)的onPictureTaken方法,所以,接下來(lái)先分析saveJpegPicture方法:

<code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//OneCameraImpl.java</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">saveJpegPicture</span>(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">byte</span>[] jpegData,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">final</span> PhotoCaptureParameters captureParams,CaptureSession session,CaptureResult result){...ListenableFuture<Optional<Uri>> futureUri = session.saveAndFinish(jpegData,width,height,rotation,exif);Futures.addCallback(futureUri,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> FutureCallback<Optional<Uri>>(){<span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">onSuccess</span>(Optional<Uri> uriOptional){captureParams.callback.onPictureSaved(mOptional.orNull());}<span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">onFailure</span>(Throwable throwable){captureParams.callback.onPictureSaved(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>);}}); }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li></ul>

它最后會(huì)回調(diào)onPictureSaved方法來(lái)對(duì)圖片進(jìn)行保存,所以需要分析CaptureModule的onPictureSaved方法:

<code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//CaptureModule.java</span> <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">onPictureSaved</span>(Uri uri){mAppController.notifyNewMedia(uri); }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>

mAppController的實(shí)現(xiàn)為CameraActivity,所以分析notifyNewMedia方法:

<code class="hljs r has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">//CameraActivity.java @Override public void notifyNewMedia(Uri uri){<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">...</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(FilmstripItemUtils.isMimeTypeVideo(mimeType)){//如果拍攝的是videosendBroadcast(new Intent(CameraUtil.ACTION_NEW_VIDEO,uri));newData = mVideoItemFactory.queryContentUri(uri);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">...</span>}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(FilmstripItemUtils.isMimeTypeImage(mimeType)){//如果是拍攝圖片CameraUtil.broadcastNewPicture(mAppContext,uri);newData = mPhotoItemFactory.queryCotentUri(uri);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">...</span>}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>{<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>;}new AsyncTask<FilmstripItem,Void,FilmstripItem>(){@Overrideprotected FilmstripItem doInBackground(FilmstripItem... Params){FilmstripItem data = params[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>];MetadataLoader.loadMetadata(getAndroidContet(),data);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> data;}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">...</span>} }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li></ul>

由代碼可知,這里有兩種數(shù)據(jù)的處理,一種是video,另一種是image。而我們這里分析的是capture圖片數(shù)據(jù),所以首先會(huì)根據(jù)在回調(diào)函數(shù)傳入的參數(shù)Uri和PhotoItemFactory來(lái)查詢到相應(yīng)的拍照數(shù)據(jù),然后再開(kāi)啟一個(gè)異步的Task來(lái)對(duì)此數(shù)據(jù)進(jìn)行處理,即通過(guò)MetadataLoader的loadMetadata來(lái)加載數(shù)據(jù),并返回。至此,capture的流程就基本分析結(jié)束了,下面將給出capture流程的整個(gè)過(guò)程中的時(shí)序圖:?

原文地址: http://blog.csdn.net/yangzhihuiguming/article/details/51822384

總結(jié)

以上是生活随笔為你收集整理的android6.0源码分析之Camera API2.0下的Capture流程分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

欧美日韩高清一区二区 国产亚洲免费看 | 国产精品午夜在线观看 | 国产精品久久一区二区三区, | 国产精品女人网站 | 国产色婷婷 | 色噜噜色噜噜 | 日本爱爱免费视频 | 日本三级吹潮在线 | 成人av手机在线 | av黄色在线 | 久草视频在 | 亚洲国产播放 | 91最新地址永久入口 | 日日激情| 免费男女羞羞的视频网站中文字幕 | 丁香花中文字幕 | 国产精品mv在线观看 | 97理论电影 | 在线精品观看国产 | 国产探花在线看 | 久久精品专区 | 久久综合五月 | 久久国产精品小视频 | 日日夜夜精品 | 亚洲在线精品视频 | 国产在线国产 | 四虎免费在线观看视频 | 中文字幕资源网 | 午夜av网站 | 久热电影 | 久久精品96 | 欧美精品日韩 | 99久久电影| 中文字幕丝袜一区二区 | 国产日产精品一区二区三区四区 | 免费看黄网站在线 | 久久不射电影网 | 成人羞羞视频在线观看免费 | 亚洲精品乱码久久久久久9色 | 免费在线精品视频 | 探花视频在线观看免费版 | 天天久久综合 | 天天操天天舔天天爽 | av在线免费不卡 | 人人舔人人干 | 成人电影毛片 | 婷婷综合五月天 | 丁香av在线 | 久草在线视频免费资源观看 | 玖玖精品在线 | 欧美 日韩 国产 成人 在线 | 久久人人爽人人爽人人片av免费 | 久久精品中文字幕一区二区三区 | 奇米网8888| 黄色大片免费网站 | 黄色毛片网站在线观看 | 久久99久国产精品黄毛片入口 | 久久在线免费视频 | 免费在线播放黄色 | 免费观看成年人视频 | 欧美成人一区二区 | 精品久久久久久久久亚洲 | 国产aa免费视频 | av在线成人 | 国精产品999国精产品视频 | 国产精品久久久久影院 | 久久99久久99精品免费看小说 | 麻豆视频在线播放 | 国产精品观看视频 | 日韩在线观看电影 | 久久精品一区二区三区四区 | 五月天综合网站 | 免费在线91| 午夜精品久久久久久中宇69 | 国产精品一区二区你懂的 | 国产成人精品久 | 免费一级特黄毛大片 | 久久精品电影网 | 99re久久资源最新地址 | 久久久久久久国产精品视频 | 一区二区三区视频 | 欧美精品在线一区 | 麻豆视频在线看 | 亚洲狠狠丁香婷婷综合久久久 | a在线观看视频 | 一区二区精品在线观看 | 亚洲专区一二三 | 色.www| 欧美另类v | 一级淫片在线观看 | 日本久久中文 | 精品国产电影 | 日日操网 | 处女av在线| 亚洲黄色免费网站 | 精品国模一区二区 | 免费在线国产精品 | 午夜久久久久久久久久久 | 成人久久久久久久久久 | 少妇性bbb搡bbb爽爽爽欧美 | 日韩精品在线视频免费观看 | 日韩av中文在线观看 | 美女国内精品自产拍在线播放 | 国产在线精品国自产拍影院 | 久久久电影网站 | 亚洲v欧美v国产v在线观看 | 成人av在线直播 | 亚洲激情视频在线 | 色欧美视频 | 欧美另类sm图片 | 9999亚洲| 亚洲激情 | 91九色蝌蚪国产 | 999久久久免费视频 午夜国产在线观看 | 色噜噜日韩精品欧美一区二区 | 久久久久久久久久久成人 | 国产精品视频你懂的 | 日本激情视频中文字幕 | 911久久香蕉国产线看观看 | 久久黄色精品视频 | 日本一区二区三区免费看 | 美女黄频在线观看 | 欧美日韩国产欧美 | 激情五月婷婷激情 | 日韩成人免费电影 | 中国一级片视频 | 精品国产伦一区二区三区观看说明 | 国产成人久久77777精品 | 色天天天 | 最近日本韩国中文字幕 | 日韩精品一区二区三区视频播放 | 亚洲精选视频免费看 | 午夜a区| 国产一区免费在线 | 欧美一级视频免费 | 日韩黄色免费看 | 国产91精品看黄网站 | 久久久国产一区二区三区四区小说 | 久99久在线视频 | 国产女人免费看a级丨片 | 亚洲精区二区三区四区麻豆 | 二区三区在线观看 | www.99久久.com| av久久在线 | 亚州国产精品 | www.亚洲精品 | 奇米777777 | 毛片激情永久免费 | 国产97av | 日本不卡一区二区三区在线观看 | 99热 精品在线 | 欧美福利片在线观看 | 97操碰| 久久天堂网站 | 久久深夜福利免费观看 | 久久国产精品视频观看 | 欧美精品一区二区三区一线天视频 | 久久免费在线观看视频 | 国产视频一区在线播放 | 亚洲精品国产麻豆 | 国产精品第10页 | 亚州视频在线 | 久久伊人免费视频 | 国产999精品久久久久久绿帽 | 九九交易行官网 | 久久综合精品一区 | 亚洲国产日韩在线 | 午夜免费视频网站 | 亚州天堂| 丁香av在线| 91 在线视频 | 97成人资源| 国产精品毛片一区二区三区 | 丁香花五月 | 黄色的网站免费看 | 日韩高清一区 | 国产在线一卡 | av在线永久免费观看 | 日韩av一区二区在线播放 | 欧洲亚洲国产视频 | 亚洲国产精品成人va在线观看 | 日韩av网页 | 亚洲人在线7777777精品 | 亚洲精品乱码久久久久久蜜桃91 | 中文字幕在线一区二区三区 | 在线观看黄网 | 青春草免费在线视频 | 九九九电影免费看 | av千婊在线免费观看 | 夜夜躁日日躁狠狠久久88av | 亚洲最大免费成人网 | 国产精品久久久久久一区二区三区 | 99久久精品国产一区二区成人 | 欧洲精品码一区二区三区免费看 | 成人一级在线观看 | 国产黄在线免费观看 | 99国产精品视频免费观看一公开 | 日本最大色倩网站www | 亚洲欧美乱综合图片区小说区 | 国产精品专区在线 | 亚洲专区在线播放 | 久久久久久久久亚洲精品 | 97色婷婷 | 日韩欧美成人网 | 中文字幕电影网 | 91久色蝌蚪 | 国产色久| 久久久久9999亚洲精品 | 丁香激情综合 | 亚洲高清久久久 | 深夜免费福利在线 | 2019中文 | 亚州国产精品久久久 | 人人讲| 免费的成人av | 五月天亚洲激情 | 亚洲国产精品视频 | 99在线国产| 久久激情精品 | 成人综合婷婷国产精品久久免费 | 久久久www成人免费毛片麻豆 | 麻豆小视频在线观看 | 国产黄色一级片在线 | 99热在线精品观看 | 免费观看性生活大片 | 亚洲国产欧美在线看片xxoo | 日韩免费中文字幕 | 91桃色在线观看视频 | 久久国产精品99久久久久 | 久久丁香| 黄色资源网站 | 国产精品久久久久久婷婷天堂 | 亚洲精品国产综合99久久夜夜嗨 | 久久久亚洲电影 | 伊人电影天堂 | 精品视频免费久久久看 | av电影 一区二区 | 五月婷婷六月丁香激情 | 不卡av在线播放 | 成人黄色一级视频 | 久久久久久久国产精品 | 五月天中文字幕mv在线 | 免费黄色特级片 | 久久久久久久久久久久av | 亚洲高清在线精品 | 欧美国产日韩在线观看 | 久久在线视频在线 | 久久久久综合精品福利啪啪 | 免费观看www小视频的软件 | 丁香色婷婷| 在线免费中文字幕 | 在线观看涩涩 | 日韩在线观看一区二区 | 中文字幕在线不卡国产视频 | 久草视频在线新免费 | 精品日韩在线一区 | 亚洲在线综合 | 久久首页 | 91成人看片 | 久久久久久久久网站 | a级黄色片视频 | 国产剧情av在线播放 | 国产字幕在线播放 | 国产小视频在线免费观看视频 | 在线 国产一区 | 久久这里只有精品23 | 久草影视在线观看 | 99在线热播精品免费 | 国产精品久久久久久久久久久久午夜片 | 日本公乱妇视频 | 色91在线视频 | 国产无套一区二区三区久久 | 国产一级免费播放 | 久久精品影片 | 99久久精品视频免费 | 亚洲三级视频 | 日本丰满少妇免费一区 | 国产打女人屁股调教97 | 欧美日韩精品在线一区二区 | 69国产成人综合久久精品欧美 | 日本一区二区不卡高清 | 日本精品视频网站 | 人人干在线 | 狠狠色丁香婷婷综合最新地址 | 99精品热 | 日本亚洲国产 | 欧美黄色成人 | 在线视频中文字幕一区 | 亚洲高清视频一区二区三区 | 久久国产精品久久w女人spa | 97激情影院 | 99精品国产福利在线观看免费 | 91麻豆精品国产 | 亚洲 欧美变态 另类 综合 | 午夜av一区二区三区 | 中文字幕在线一二 | 久草视频视频在线播放 | 亚洲va欧美va人人爽春色影视 | 中文乱码视频在线观看 | 亚洲综合色站 | 久久精品这里热有精品 | 国产午夜av| 日本最新高清不卡中文字幕 | 欧美日韩电影在线播放 | 特级黄色视频毛片 | 天天曰 | 国产在线91在线电影 | 日韩激情片在线观看 | 九色精品在线 | 国产精品久久久久毛片大屁完整版 | 成人黄视频 | 日韩v欧美v日本v亚洲v国产v | 久久久综合香蕉尹人综合网 | 美女视频黄,久久 | 99在线精品免费视频九九视 | 九九视频在线播放 | 日韩夜夜爽 | 欧美一级免费高清 | 国产白浆视频 | 国产一级片久久 | 欧美色婷婷| 欧美国产精品久久久久久免费 | 波多野结衣久久资源 | 国产美女久久久 | 日日草天天草 | 免费看一级黄色大全 | 在线天堂中文在线资源网 | 三上悠亚一区二区在线观看 | 成年人免费电影在线观看 | 99爱这里只有精品 | 99热99re6国产在线播放 | 五月激情婷婷丁香 | 久久国产精品偷 | 在线免费观看的av网站 | 欧美aaa大片 | 91精品老司机久久一区啪 | av在线直接看| 亚洲欧美日韩国产一区二区 | 狠狠伊人 | 欧美黄色成人 | 天天操天天射天天爽 | 日韩av三区 | 日韩精品久久一区二区 | 九九热只有精品 | 成年人在线播放视频 | 免费午夜网站 | 操处女逼 | 久久福利电影 | 亚洲在线观看av | 亚洲精品视频 | wwwwww黄| 成人午夜电影网站 | 午夜91在线 | 亚洲精品va| 在线观看激情av | 福利视频一区二区 | 91精品久久久久久久99蜜桃 | 9999亚洲| 日日夜夜精品 | 在线亚洲激情 | a级一a一级在线观看 | 免费观看91视频大全 | 亚洲精品国产精品久久99热 | 亚洲毛片一区二区三区 | 手机av片 | 337p日本大胆噜噜噜噜 | 香蕉网在线播放 | 成人精品电影 | 一级一片免费视频 | 一区二区影院 | 亚洲 欧美变态 另类 综合 | 成人免费大片黄在线播放 | 国内久久久 | 亚洲三级国产 | 激情综合五月婷婷 | 欧美日韩啪啪 | 在线国产一区 | 91av视频免费在线观看 | 日本69hd| www日韩高清| 最近最新最好看中文视频 | 二区三区毛片 | 欧美污污视频 | 日本爱爱免费 | 96av视频 | 成人国产精品久久久春色 | 中文字幕免费播放 | 久久中文字幕在线视频 | 精品国产伦一区二区三区观看体验 | 最近中文字幕完整高清 | 久久视频在线免费观看 | 最近中文字幕高清字幕在线视频 | 2023亚洲精品国偷拍自产在线 | 在线之家免费在线观看电影 | 国产手机精品视频 | 韩国精品福利一区二区三区 | 91免费版在线 | 国产精品乱码一区二区视频 | 日韩视频欧美视频 | 五月花婷婷 | 久久综合中文色婷婷 | 亚洲国产人午在线一二区 | 一区二区三高清 | 婷婷新五月| 国产精彩视频一区 | 精品综合久久久 | 国产美女搞久久 | 久久99精品久久久久久久久久久久 | 国产黄色av网站 | 不卡的av中文字幕 | 在线观看黄网站 | 中国一级片免费看 | 天天天色综合 | 国产精品美女久久久久久网站 | av片无限看 | 久久综合狠狠综合久久激情 | 青青射 | 992tv在线观看 | 亚洲国产精品成人综合 | 中文字幕在线影视资源 | 国产精品青草综合久久久久99 | 色老板在线视频 | www亚洲视频 | 综合网色| 日本精a在线观看 | 五月婷婷激情五月 | 久久精品视频国产 | 国内精品久久久久影院男同志 | 中文字幕av在线免费 | 激情自拍av | 免费视频网 | 天天操人人干 | 国产女做a爱免费视频 | 在线免费日韩 | 青草视频在线免费 | 亚洲精品网站在线 | avove黑丝| 日韩在线国产 | av成人免费观看 | 久产久精国产品 | 成人在线免费观看网站 | 国产一区免费在线观看 | 欧美一级电影在线观看 | 久久亚洲综合国产精品99麻豆的功能介绍 | 精品免费久久久久 | 在线视频18在线视频4k | 国产精品久久久久四虎 | 成年人视频在线免费 | 久久人人爽人人爽人人 | 国产第一福利 | 久久精品一二三 | 久久尤物电影视频在线观看 | 久久字幕网 | 国产成人精品在线 | 中文字幕在线国产精品 | 五月婷色 | 日韩网站一区二区 | 免费视频18 | 在线综合色| 99久久999久久久精玫瑰 | 91丨九色丨91啦蝌蚪老版 | 在线免费观看黄 | 久久综合加勒比 | 久久怡红院 | 久久论理| 欧美一区二区三区在线播放 | 国产精品av免费在线观看 | 国产黄色精品在线 | 欧美激情视频在线免费观看 | 欧美日韩亚洲在线观看 | 日日夜夜狠狠操 | 美女搞黄国产视频网站 | 99精品国产在热久久下载 | 波多野结衣在线观看一区二区三区 | 狠狠狠干狠狠 | 五月婷婷综 | 黄污视频网站大全 | 在线观看视频一区二区三区 | 国产二区视频在线 | 国产精品久久久久高潮 | 欧美精彩视频 | 国产精品 日韩精品 | 91成人欧美 | 高潮久久久 | av官网| 中文在线www | av在线播放免费 | 国产精品高清一区二区三区 | 一区二区三区四区在线免费观看 | 超碰在线观看99 | 国产精品18久久久久白浆 | 玖玖色在线观看 | 97在线观看视频 | 久久久久久久久久久久久国产精品 | 久久激情视频 久久 | 插插插色综合 | 天天操欧美 | 一区二区三区电影在线播 | 激情久久网 | 中文字幕永久在线 | 热久久这里只有精品 | 看国产黄色大片 | 国产视频不卡一区 | 精品在线观看免费 | 中文字幕第一页在线 | 亚色视频在线观看 | 国产精品99久久久久人中文网介绍 | 久久人人爽人人爽 | 久久精品艹 | 国产精品美女在线 | 一区二区三区高清在线 | av片一区| 久久久精品久久日韩一区综合 | 天天躁日日躁狠狠躁av麻豆 | 日本老少交| 中文字幕在线看视频国产中文版 | 色天天久久| 亚洲精品视频第一页 | 久久国产高清视频 | 国产精品久久久久久久久久久久久久 | 亚洲男人天堂a | 久久久国产精品成人免费 | 黄污网站在线 | 一区二区三区四区精品视频 | 探花视频网站 | 五月天婷亚洲天综合网鲁鲁鲁 | 在线超碰av | 久久综合精品国产一区二区三区 | 99久久精品日本一区二区免费 | 国产精品久久久久久久久久东京 | 久草网在线| 日日爱av| 日韩免费小视频 | 天堂av在线 | 99色国产 | 亚洲精品毛片一级91精品 | 久久精品男人的天堂 | 国产精品观看在线亚洲人成网 | 久久人人爽人人爽人人片av软件 | 成人在线观看资源 | 黄色不卡av | 久久成人国产精品入口 | 91人人视频在线观看 | 亚洲三级在线免费观看 | 久久99精品波多结衣一区 | 久久艹艹| 一级黄色大片在线观看 | 亚洲美女免费精品视频在线观看 | 亚洲国产精久久久久久久 | 91最新地址永久入口 | 亚洲一级片在线观看 | 日韩中文字幕在线不卡 | 六月色丁| 国产一级h | 国产伦精品一区二区三区高清 | 99re国产 | 在线视频一二三 | 亚洲成人一区 | 精品色999 | 欧美亚洲精品在线观看 | a黄色影院 | 欧美a免费 | 亚洲黄色app | 欧美日韩国语 | 久久国产免费看 | 超碰人人舔 | 国产一区二三区好的 | 91视频91蝌蚪 | 亚洲精品国 | 99精彩视频| 久久久久久国产一区二区三区 | 国产伦精品一区二区三区免费 | 日韩免费大片 | 天天夜夜亚洲 | 丁香午夜婷婷 | 男女激情麻豆 | 日日干天天爽 | www.夜色321.com| 日韩字幕在线观看 | www.xxxx变态.com| 国产亚洲精品久久久久久电影 | 成人免费共享视频 | 永久免费精品视频网站 | 国产视频 亚洲精品 | 久久人人爽人人片 | 在线视频在线观看 | 三级av在线 | 久久久久久久综合色一本 | 免费av网站在线 | 国产综合在线观看视频 | 中文字幕在线观看播放 | 中文字幕一区二区三区精华液 | 国产三级视频在线 | 中文字幕在线视频一区二区 | 国产精品麻豆一区二区三区 | 欧美福利久久 | 一色av| 国产尤物在线观看 | 天天射天天干天天 | 日本精品一区二区三区在线观看 | 日韩精品中文字幕在线播放 | 亚洲精品视频在线观看免费 | 国产精品伦一区二区三区视频 | 亚洲精品美女久久17c | 青草视频在线播放 | 色噜噜在线观看 | 综合激情伊人 | 成人黄色国产 | 欧美日韩在线免费观看视频 | 国产成人久久av | 国产一级二级av | 99精品视频免费 | www.福利视频 | 91传媒在线观看 | 中文字幕一区二区三区视频 | 香蕉视频91 | 在线国产专区 | 国产亚洲视频系列 | 亚洲精品理论 | 免费a级观看 | 欧美日本不卡视频 | av黄色大片 | 激情电影影院 | 久久久久久毛片精品免费不卡 | 亚洲午夜av电影 | 日日日干 | 狠狠操狠狠干天天操 | 精品影院一区二区久久久 | 精品视频久久 | 欧美日韩国产欧美 | 五月天激情综合 | 视频一区在线播放 | 欧美一区二区三区在线视频观看 | 亚洲精品美女久久17c | 91av中文 | 玖玖爱在线观看 | 国产精品女教师 | 国产成人精品电影久久久 | 狠狠的操你 | 九色激情网 | 亚洲精品乱码久久久久久蜜桃91 | 国产69久久久欧美一级 | 99精品一级欧美片免费播放 | 成人丁香花 | 在线精品视频免费播放 | 国产大片免费久久 | 91私密保健| 免费观看国产视频 | 玖玖在线视频观看 | 成人免费一级 | 日韩欧美视频二区 | 精品一区二区视频 | 日韩免费区 | 国产一卡在线 | 久久久久国产视频 | 国产一级电影在线 | 亚洲一一在线 | 激情婷婷av | 亚洲电影网站 | 成人91在线| 麻豆精品国产传媒 | 99夜色 | 国产精品自在线 | 免费看的黄色小视频 | 久久综合免费视频 | 精品久久影院 | 天天射天天干天天操 | 日日操夜夜操狠狠操 | 天天操天天摸天天干 | 久久精品视频免费播放 | 天天爱天天操 | 久久理论视频 | 亚洲激情网站免费观看 | 精品久久久久久久久久国产 | 久久国产亚洲 | 欧美日韩免费观看一区=区三区 | 精品1区二区 | 91久久国产自产拍夜夜嗨 | 伊人五月在线 | 麻豆va一区二区三区久久浪 | 黄色三级视频片 | 麻豆va一区二区三区久久浪 | 不卡的av中文字幕 | 国产18精品乱码免费看 | 久久免费视频精品 | 亚洲国产精品电影 | 色网免费观看 | 狠狠狠色丁香综合久久天下网 | 99精品国产一区二区三区不卡 | 国产丝袜| 久久夜夜操 | 99在线观看免费视频精品观看 | 国产精品久久一 | 九九九九九九精品任你躁 | 欧美在线aaa | 日韩在线观看免费 | 久草视频免费在线播放 | 国产精选在线观看 | 天天操天天射天天爽 | 欧美在线观看视频免费 | 国产精品久久电影网 | av在线播放中文字幕 | 精品成人网 | 国产亚洲精品久久久久久移动网络 | 国产亚洲视频系列 | 中文字幕一区二区三区四区 | 婷婷激情5月天 | 超碰在线最新地址 | 国产精品成人品 | 2019精品手机国产品在线 | 日韩欧美在线观看一区二区 | 玖草影院 | 日韩在线观看视频中文字幕 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 色搞搞 | 婷婷久久综合九色综合 | 综合网中文字幕 | 网站免费黄 | 日韩免费一级a毛片在线播放一级 | 色婷婷成人网 | 六月激情网 | 国产无套视频 | 五月婷av | 国产黄色片网站 | 日本免费一二三区 | 99久久毛片 | 不卡精品 | 91精品国产欧美一区二区 | 欧美色精品天天在线观看视频 | 亚洲黑丝少妇 | 国产中文字幕91 | av动图| 免费看的av片 | 肉色欧美久久久久久久免费看 | 国产一区免费 | 日韩在线免费电影 | 婷婷丁香激情综合 | 国产69精品久久久久久 | a v在线视频 | 久久玖| 91大神免费视频 | 综合色伊人 | 日韩一级电影网站 | 色欧美综合 | 久久99精品国产99久久6尤 | 免费看av在线 | 成人免费视频网站在线观看 | 日本久久久久久久久久 | 国产午夜精品理论片在线 | 亚洲精品自在在线观看 | 天天综合视频在线观看 | 亚洲一区二区麻豆 | 国产亚洲精品女人久久久久久 | 中文字幕在线专区 | 一区二区视频免费在线观看 | 亚洲精品国偷拍自产在线观看蜜桃 | 91免费在线看片 | 国产a级片免费观看 | 91视频网址入口 | 中文字幕精 | 免费成人av在线 | 成 人 黄 色 视频 免费观看 | 国产视频每日更新 | 黄色精品一区 | 97理论片 | 亚洲天堂网在线观看视频 | 97操碰| 亚洲精品456在线播放第一页 | 免费成人av电影 | 国产人成精品一区二区三 | 五月天激情在线 | 中文一区在线观看 | 成人免费影院 | 国产91小视频 | 成人黄色av免费在线观看 | 久久国产成人午夜av影院宅 | 婷婷亚洲五月色综合 | 免费观看丰满少妇做爰 | 精品视频123区在线观看 | 亚洲精品在线播放视频 | 伊人黄色网 | 国产手机在线观看视频 | 久久综合五月天 | 毛片精品免费在线观看 | 在线观看中文字幕av | 国产91全国探花系列在线播放 | www.五月天激情 | www.夜夜爱 | 天天爱天天色 | 综合激情网... | 97人人爽人人 | 久久精品黄 | 日韩中文字幕免费视频 | 激情久久久久久久久久久久久久久久 | 日韩av中文字幕在线免费观看 | 免费在线观看视频一区 | 久久久国产成人 | 在线观看免费高清视频大全追剧 | 一级免费看| 久久高清精品 | 亚洲免费永久精品国产 | 婷婷播播网 | 日本一区二区高清不卡 | 最近能播放的中文字幕 | 亚洲人片在线观看 | 国产二区电影 | 国产玖玖在线 | 天天干com| 日韩午夜视频在线观看 | av不卡中文字幕 | 97国产 | 欧美综合国产 | 狠狠色狠狠色综合系列 | 91激情视频在线 | 国产成人一级电影 | 天天摸日日操 | 久久这里有| 国产a高清| 丁香五香天综合情 | 99久久精品国产观看 | 在线免费观看黄 | 91精品久久久久久粉嫩 | 天天操天天曰 | 成人在线黄色电影 | 国产成人精品999 | 亚洲精品国产成人av在线 | 菠萝菠萝在线精品视频 | 国产精品欧美久久久久三级 | 久久国产精彩视频 | 日本中文字幕视频 | 天天视频色版 | 天天干天天干天天 | 奇米影视四色8888 | 日本成人中文字幕在线观看 | 日韩免费在线观看视频 | 亚洲精品自拍视频在线观看 | 五月天免费网站 | 亚洲国产成人在线播放 | 18网站在线观看 | 欧美贵妇性狂欢 | 97精品国自产拍在线观看 | 亚洲精品国产精品乱码在线观看 | 欧美激情综合网 | 一区免费观看 | 又粗又长又大又爽又黄少妇毛片 | 欧美精品黑人性xxxx | 国产黄a三级三级三级三级三级 | 色综合婷婷 | 麻豆国产网站入口 | 欧美激情精品久久久 | 在线观看黄色 | 男女视频91 | 久人人| 欧美一级片免费 | 久久1区 | 精品免费一区二区三区 | 日韩小视频网站 | 久草在线视频免赞 | 成人午夜网址 | 成人国产精品久久久 | 日本超碰在线 | 国产精品久久久影视 | 日免费视频 | 欧美大片大全 | 成人av在线一区二区 | 国产精品久久久久久五月尺 | 免费在线观看视频一区 | 99视频在线精品 | 婷婷色六月天 | 久久久久欠精品国产毛片国产毛生 | 久久久黄视频 | 天天做日日爱夜夜爽 | 国产伦精品一区二区三区照片91 | 国产一区二区久久久久 | 婷婷性综合 | 久亚洲 | 国产自在线 | 久久在线观看视频 | 国产视频精品在线 | 久久久久成人精品免费播放动漫 | 国产日韩高清在线 | 亚洲精品美女 | 911国产在线观看 | av7777777| 97精品久久人人爽人人爽 | 国产精品久久久精品 | 欧美色精品天天在线观看视频 | 国产精品成人国产乱一区 | 国产精品一区二区三区在线免费观看 | 免费在线a| 亚洲精品五月 | 国产一级做a爱片久久毛片a | 日本深夜福利视频 | 亚洲国产高清在线观看视频 | 狠狠干天天 | 久久久久国产精品免费免费搜索 | 久草在线视频国产 | 夜夜躁天天躁很躁波 | 国产精品高清免费在线观看 | 亚洲激情综合 | av官网在线 | 91人人插 | www夜夜操com| 欧美日韩一级在线 | wwwwww黄 | 色吊丝在线永久观看最新版本 | 在线91精品 | 成人久久亚洲 | av电影亚洲 | 亚洲手机天堂 | 久久夜夜夜 | 在线视频观看91 | www.五月婷婷 | 国产生活一级片 | 国产中文字幕视频在线 | 伊人久在线 | 国产99精品| 免费在线观看国产精品 | 色多多在线观看 | 日韩影视在线观看 | 亚洲美女在线国产 | 中文区中文字幕免费看 | 国产一区成人在线 | 成人免费一区二区三区在线观看 | 欧美 日韩 成人 | 永久免费的av电影 | 人人视频网站 | 五月综合激情网 | www欧美日韩 | 日韩成人邪恶影片 | 欧美一区二区精品在线 | 看片网站黄色 | av在观看| 国产九色视频在线观看 | av一区二区三区在线 | 91精品在线观看入口 | 狠狠久久 | 日韩影视大全 | 日日干av | 中文字幕在线影视资源 | 国产综合香蕉五月婷在线 | 欧美一二三区在线观看 | 国产精品毛片一区视频播不卡 | 午夜精品久久久久久久99水蜜桃 | 久草在线免费色站 | 五月婷婷av在线 | 国产永久免费观看 | 国产91丝袜在线播放动漫 | 中文字幕在 | 日韩欧美精品在线观看视频 | 一区二区三区日韩视频在线观看 | 成人黄色小视频 | 国产精品免费观看国产网曝瓜 | 四虎永久视频 | 国产精品毛片网 | 日韩一区二区三区高清免费看看 | 1024手机看片国产 | 国产五月天婷婷 | 日韩电影在线观看一区二区三区 | 亚洲精品日韩一区二区电影 | 天天操综| 黄色成人在线观看 | 亚洲禁18久人片 | 成人丝袜 | 国产精品a久久 | 亚洲伊人成综合网 | 97视频在线观看视频免费视频 | 午夜影视剧场 | 国内少妇自拍视频一区 | 成人永久在线 | 麻豆久久久久 | 国产黄视频在线观看 | 有码一区二区三区 | 特级毛片爽www免费版 | 免费看网站在线 | 日韩av在线高清 | 免费在线观看国产精品 | 欧美另类v | www五月婷婷 | 天天操,夜夜操 | 欧美视频xxx | 超碰在线观看av.com | 九九九九免费视频 | 亚洲91中文字幕无线码三区 | 色综合久久久久综合 | 中文字幕中文字幕在线中文字幕三区 | 国产成人一区二区三区在线观看 | 成人在线观看资源 | 欧美日韩精品电影 | 91精品国产91久久久久福利 | 黄色片网站av | 亚洲天堂毛片 | 久久久久久国产精品 | 99在线精品免费视频九九视 | 久久中文精品视频 | 亚洲国产精品资源 | 国产成人久久77777精品 | 国产 成人 久久 |