国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

Camera Framework 代碼分析

共 19021字,需瀏覽 39分鐘

 ·

2020-08-05 18:50

和你一起終身學(xué)習(xí),這里是程序員Android

通過(guò)閱讀本文您將收獲以下知識(shí)點(diǎn):

一、 Camera Framework 列文件目錄
二、 JNI 相關(guān)
三、 AIDL 相關(guān)
四、 IInterface 類(lèi)型文件
五、Parcelable 類(lèi)型文件
六、ICameraService 相關(guān)
七、 ICameraServiceProxy.aidl 文件
八、 ICamera 相關(guān)
九、 ICameraDevice 相關(guān)
十、 Services 目錄下的文件介紹
十一、API1/API2
十二、QTICamera2Client
十三、Device1/Device3

一、 Camera Framework 列文件目錄

1.API1:(frameworks/base/core/java/android/hardware/Camera.java)
2.API2:(frameworks/base/core/java/android/hardware/camera2/)
3.JNI:?(frameworks/base/core/jni/)
4.AIDL:( frameworks/av/camera/aidl/)
5.Native:?(frameworks/av/camera/)
6.Service:?(frameworks/av/services/camera/libcameraservice/)
7.Qcom Hal:?(vendor/qcom/propietary/camx/)
8.Qcom Kernel:(kernel/msm-4.19/techpack/camera/)

二、 JNI 相關(guān)

主目錄為?frameworks/base/core/jni

//frameworks/base/core/jni
./android_hardware_camera2_legacy_LegacyCameraDevice.cpp
./android_hardware_Camera.cpp
./android/graphics/Camera.cpp
./
include/android_runtime/android_hardware_camera2_CameraMetadata.h
./android_hardware_camera2_DngCreator.cpp
./android_hardware_camera2_CameraMetadata.cpp
./android_hardware_camera2_legacy_PerfMeasurement.cpp

API 1 中,使用 jni 通過(guò) Binder 機(jī)制和 CameraService 通信。

API 2 中,直接在 CameraManager.java 中通過(guò) Binder 機(jī)制和 CameraService 通信。

三、 AIDL 相關(guān)

Framework Camera AIDL 是 Camera 中客戶(hù)端和服務(wù)端跨進(jìn)程通信時(shí)使用的 AIDL 文件,代碼都在frameworks/av/camera/目錄下,其中 aidl 文件一共有 16 個(gè)

xmt@server005:~/frameworks/av/camera/aidl/android/hardware$ tree
.
├—— camera2
│?? ├—— CaptureRequest.aidl
│?? ├—— ICameraDeviceCallbacks.aidl
│?? ├—— ICameraDeviceUser.aidl
│?? ├—— impl
│?? │??├—— CameraMetadataNative.aidl
│?? │??└—— CaptureResultExtras.aidl
│?? ├—— params
│?? │??├—— OutputConfiguration.aidl
│?? │??├—— VendorTagDescriptor.aidl
│?? │??└—— VendorTagDescriptorCache.aidl
│?? └—— utils
│?????? └—— SubmitInfo.aidl
├—— CameraInfo.aidl
├—— CameraStatus.aidl
├—— ICamera.aidl
├—— ICameraClient.aidl
├—— ICameraService.aidl
├—— ICameraServiceListener.aidl
└—— ICameraServiceProxy.aidl

4directories, 16 files

frameworks/av/camera/aidl/目錄下的 aidl 文件有兩種類(lèi)型:

  • 作為 Binder 中的 IInterface 跨進(jìn)程通信中能提供的方法

  • 作為 Binder 中的 parcelable 跨進(jìn)程通信數(shù)據(jù)傳輸?shù)臄?shù)據(jù)結(jié)構(gòu)

很容易從名字上區(qū)分這兩種類(lèi)型的文件,IInterface 類(lèi)型的文件都是以 I 開(kāi)頭的,比如:ICameraService.aidl, ICameraDeviceUser.aidl等。不管是哪種類(lèi)型的 aidl 文件,它們都會(huì)生成對(duì)應(yīng)的 .java, .h, .cpp 文件,分別供 Java 層和 CPP 層調(diào)用。

四、 IInterface 類(lèi)型文件

IInterface 類(lèi)型文件一共有 7 個(gè),它們的 .java, .h, .cpp 文件,絕大部分都是自動(dòng)生成的。

Java 文件是在?frameworks/base/Android.mk?中定義規(guī)則,在編譯時(shí)自動(dòng)生成:

//frameworks/base/Android.mk
LOCAL_SRC_FILES +=
??? ...
???../av/camera/aidl/android/hardware/ICameraService.aidl
???../av/camera/aidl/android/hardware/ICameraServiceListener.aidl
???../av/camera/aidl/android/hardware/ICameraServiceProxy.aidl
???../av/camera/aidl/android/hardware/ICamera.aidl
??? ../av/camera/aidl/android/hardware/ICameraClient.aidl
???../av/camera/aidl/android/hardware/camera2/ICameraDeviceUser.aidl
???../av/camera/aidl/android/hardware/camera2/ICameraDeviceCallbacks.aidl
??? ...
?...

在?out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/dotdot/?目錄下生成對(duì)應(yīng)的?Java?文件:

//out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/dotdot/
av/camera/aidl/android/hardware/ICameraService.java
av/camera/aidl/android/hardware/ICameraServiceListener.java
av/camera/aidl/android/hardware/ICameraServiceProxy.java
av/camera/aidl/android/hardware/ICamera.java
av/camera/aidl/android/hardware/ICameraClient.java
av/camera/aidl/android/hardware/camera2/ICameraDeviceUser.java
av/camera/aidl/android/hardware/camera2/ICameraDeviceCallbacks.java

.h, .cpp?文件中,ICamera.aidl, ICameraClient.aidl?兩個(gè)文件是直接以代碼形式手動(dòng)實(shí)現(xiàn)的:

// 1. ICameraClient.aidl
frameworks/av/camera/aidl/android/hardware/ICameraClient.aidl
frameworks/av/camera/
include/camera/android/hardware/ICameraClient.h
frameworks/av/camera/ICameraClient.cpp

// 2.ICamera.aidl
frameworks/av/camera/aidl/android/hardware/ICamera.aidl
frameworks/av/camera/
include/camera/android/hardware/ICamera.h
frameworks/av/camera/ICamera.cpp

其他 5 個(gè)?aidl?文件是在?frameworks/av/camera/Android.bp?中定義規(guī)則,編譯時(shí)自動(dòng)生成對(duì)應(yīng)的?.h, .cpp?文件:

//frameworks/av/camera/Android.bp
cc_library_shared {
??? name:
"libcamera_client",

??? aidl: {
??????? export_aidl_headers:
true,
??????? local_include_dirs: [
"aidl"],
??????? include_dirs: [
???????????
"frameworks/native/aidl/gui",
??????? ],
??? },

??? srcs: [
???????
// AIDL files for camerainterfaces
???????
// The headers for theseinterfaces will be
???????
// available to anymodules that
???????
// include libcamera_client,at the path "aidl/package/path/BnFoo.h"
???????
"aidl/android/hardware/ICameraService.aidl",
???????
"aidl/android/hardware/ICameraServiceListener.aidl",
???????
"aidl/android/hardware/ICameraServiceProxy.aidl",
???????
"aidl/android/hardware/camera2/ICameraDeviceCallbacks.aidl",
???????
"aidl/android/hardware/camera2/ICameraDeviceUser.aidl",


???????
// Source for camerainterface parcelables,
???????
// and manually-writteninterfaces
???????
"Camera.cpp",
???????
"CameraMetadata.cpp",
???????
"CameraParameters.cpp",
??????? ...
}

在?out/soong/.intermediates/frameworks/av/camera/libcamera_client/?目錄下生成對(duì)應(yīng)的?.h, .cpp?文件,通常在該目錄下會(huì)同時(shí)生成 32 和 64 位兩套代碼,但實(shí)際兩份代碼是一樣的,這里選取 64 位的:

  • 64 位:android_arm64_armv8-a_shared_core

  • 32 位:android_arm_armv7-a-neon_cortex-a53_shared_core

// 目錄out/soong/.intermediates/frameworks/av/camera/libcamera_client// 64 android_arm64_armv8-a_shared_core/gen/aidl/
android/hardware/ICameraService.h
android/hardware/BnCameraService.h
frameworks/av/camera/aidl/android/hardware/ICameraService.cpp

android/hardware/ICameraServiceListener.h
android/hardware/BnCameraServiceListener.h
frameworks/av/camera/aidl/android/hardware/ICameraServiceListener.cpp

android/hardware/ICameraServiceProxy.h
android/hardware/BnCameraServiceProxy.h
frameworks/av/camera/aidl/android/hardware/ICameraServiceProxy.cpp

android/hardware/camera2/ICameraDeviceUser.h
android/hardware/camera2/BnCameraDeviceUser.h
frameworks/av/camera/aidl/android/hardware/camera2/ICameraDeviceUser.cpp

android/hardware/camera2/ICameraDeviceCallbacks.h
android/hardware/camera2/BnCameraDeviceCallbacks.h
frameworks/av/camera/aidl/android/hardware/camera2/ICameraDeviceCallbacks.cpp

五、 parcelable 類(lèi)型文件

parcelable?類(lèi)型文件一共有 9 個(gè),它們都是手動(dòng)編寫(xiě)的代碼。

Java?文件目錄為?frameworks/base/core/java/android/hardware/?:

//frameworks/base/core/java/android/hardware/
camera2/CaptureRequest.java
camera2/impl/CameraMetadataNative.java
camera2/impl/CaptureResultExtras.java
camera2/params/OutputConfiguration.java
camera2/params/VendorTagDescriptor.java
camera2/params/VendorTagDescriptorCache.java
camera2/utils/SubmitInfo.java
CameraInfo.java
CameraStatus.java

.h, .cpp?文件并不一定是和?aidl?文件名稱(chēng)一一對(duì)應(yīng)的,而是在?aidl?文件中定義的,比如?CameraStatus.aidl?定義如下:

packageandroid.hardware;

/** @hide */
parcelable CameraStatus cpp_header
"camera/CameraBase.h";

parcelable?類(lèi)型的?aidl?文件對(duì)應(yīng)的?.h, .cpp?文件目錄為?frameworks/av/camera?,對(duì)應(yīng)關(guān)系整理如下:

// .h, .cpp 文件目錄 frameworks/av/camera//CaptureRequest.aidlinclude/camera/camera2/CaptureRequest.h
camera2/CaptureRequest.cpp

//CameraMetadataNative.aidlinclude/camera/CameraMetadata.h
CameraMetadata.cpp

//CaptureResultExtras.aidlinclude/camera/CaptureResult.h
CaptureResult.cpp

//OutputConfiguration.aidlinclude/camera/camera2/OutputConfiguration.h
camera2/OutputConfiguration.cpp

//VendorTagDescriptor.aidl VendorTagDescriptorCache.aidlinclude/camera/VendorTagDescriptor.h
VendorTagDescriptor.cpp

//SubmitInfo.aidlinclude/camera/camera2/SubmitInfo.h
camera2/SubmitInfo.cpp

//CameraInfo.aidl CameraStatus.aidlinclude/camera/CameraBase.h
CameraBase.cpp

六、ICameraService 相關(guān)

分為客戶(hù)端向服務(wù)端的請(qǐng)求?ICameraService.aidl?和客戶(hù)端監(jiān)聽(tīng)服務(wù)端的變化?ICameraServiceListener.aidl?。這兩個(gè)?AIDL?是在?CameraService.cpp?中實(shí)現(xiàn)對(duì)應(yīng)功能的。

interface
{
??? ...
???
constintCAMERA_TYPE_BACKWARD_COMPATIBLE = 0;
???
constint CAMERA_TYPE_ALL= 1;

???
// 返回指定類(lèi)型的相機(jī)設(shè)備數(shù)量
???
intgetNumberOfCameras(int type);
???
// 根據(jù) id 返回當(dāng)前相機(jī)設(shè)備信息
??? CameraInfo
getCameraInfo(intcameraId);

??? ...
???
constintCAMERA_HAL_API_VERSION_UNSPECIFIED = -1;
???
// api1 + hal1
??? ICamera
connect(ICameraClientclient,
???????????
int cameraId,
??????????? String opPackageName,
???????????
intclientUid, intclientPid);

???
// api2 + hal3
??? ICameraDeviceUser
connectDevice(ICameraDeviceCallbackscallbacks,
??????????? String cameraId,
??????????? String opPackageName,
???????????
intclientUid);

???
// api1 + 指定 hal 版本(通常為 hal1
??? ICamera
connectLegacy(ICameraClientclient,
???????????
int cameraId,
???????????
inthalVersion,
??????????? String opPackageName,
???????????
intclientUid);

???
// 添加和移除 ICameraServiceListener 監(jiān)聽(tīng)
??? CameraStatus[] addListener(ICameraServiceListenerlistener);
???
voidremoveListener(ICameraServiceListenerlistener);

???
// 根據(jù) id 返回相機(jī)支持的屬性
??? CameraMetadataNative
getCameraCharacteristics(StringcameraId);

???
// 獲取 vendor tag
??? VendorTagDescriptor
getCameraVendorTagDescriptor();
??? VendorTagDescriptorCache
getCameraVendorTagCache();

???
// camera api 1 獲取參數(shù)信息
??? String
getLegacyParameters(intcameraId);

???
constintAPI_VERSION_1 = 1;
???
constintAPI_VERSION_2 = 2;
???
// 指定 id 支持的 API 版本
???
booleansupportsCameraApi(StringcameraId, intapiVersion);
???
// 指定 id 設(shè)置手電筒模式
???
voidsetTorchMode(StringcameraId, boolean enabled,
??????? IBinder clientBinder);

???
// 服務(wù)端向系統(tǒng)打印系統(tǒng)消息
???
constintEVENT_NONE = 0;
???
constintEVENT_USER_SWITCHED = 1;
??? oneway
voidnotifySystemEvent(int eventId,in int[] args);
}

// 2.ICameraServiceListener.aidlinterfaceICameraServiceListener
{
???
constintSTATUS_NOT_PRESENT????? = 0;
???
constintSTATUS_PRESENT????????? = 1;
???
constintSTATUS_ENUMERATING????? = 2;
???
constintSTATUS_NOT_AVAILABLE??? = -2;
???
constintSTATUS_UNKNOWN????????? = -1;
???
// 相機(jī)設(shè)備狀態(tài)變化事件
??? oneway
voidonStatusChanged(int status,String cameraId);

???
constintTORCH_STATUS_NOT_AVAILABLE = 0;
???
constintTORCH_STATUS_AVAILABLE_OFF = 1;
???
constintTORCH_STATUS_AVAILABLE_ON? = 2;
???
constintTORCH_STATUS_UNKNOWN = -1;
???
// 手電筒狀態(tài)變化事件
??? oneway
voidonTorchStatusChanged(int status,String cameraId);
}

七、 ICameraServiceProxy.aidl 文件

CameraServiceProxy?服務(wù)是在?Java?層注冊(cè)的

interfaceICameraServiceProxy
{
???
// CameraService 向代理服務(wù)發(fā)送消息,通知用戶(hù)更新
???
onewayvoidpingForUserUpdate();

???
constintCAMERA_STATE_OPEN = 0;
???
constintCAMERA_STATE_ACTIVE = 1;
???
constintCAMERA_STATE_IDLE = 2;
???
constintCAMERA_STATE_CLOSED = 3;
???
constintCAMERA_FACING_BACK = 0;
???
constintCAMERA_FACING_FRONT = 1;
???
constintCAMERA_FACING_EXTERNAL = 2;

???
// CameraService 向代理服務(wù)發(fā)送消息,通知相機(jī)設(shè)備狀態(tài)更新
???
onewayvoidnotifyCameraState(String cameraId, int facing,
???????????
intnewCameraState, String clientName);
}

八、 ICamera 相關(guān)

Camera API1 才會(huì)使用到,分為 ICamera.aidl, ICameraClient.aidl
它們的代碼是手動(dòng)實(shí)現(xiàn)的,參考:CameraClient.h/cpp, Camera.h/cpp

九、ICameraDevice 相關(guān)

Camera API2 才會(huì)使用到,分為客戶(hù)端向服務(wù)端的請(qǐng)求 ICameraDeviceUser.aidl 和服務(wù)端發(fā)給客戶(hù)端的回調(diào) ICameraDeviceCallbacks.aidl 。
表示相機(jī)設(shè)備具備的能力,能夠提供的函數(shù);這兩個(gè) AIDL 是在 CameraDeviceClient 中實(shí)現(xiàn)對(duì)應(yīng)功能的

// 1.ICameraDeviceUser.aidl interfaceICameraDeviceUser
{
?? ?
voiddisconnect();

???
constintNO_IN_FLIGHT_REPEATING_FRAMES = -1;
???
// 向設(shè)備提交捕獲請(qǐng)求
??? SubmitInfo
submitRequest(inCaptureRequest request, boolean streaming);
??? SubmitInfo
submitRequestList(inCaptureRequest[] requestList,
???????
boolean streaming);
???
// 取消置頂 id 的重復(fù)請(qǐng)求,并返回上次請(qǐng)求的幀 id
???
longcancelRequest(intrequestId);

???
constintNORMAL_MODE = 0;
???
constintCONSTRAINED_HIGH_SPEED_MODE = 1;
???
constintVENDOR_MODE_START = 0x8000;

???
// 在流處理前執(zhí)行配置請(qǐng)求
???
voidbeginConfigure();
???
// 根據(jù)指定輸出配置,創(chuàng)建流
???
intcreateStream(inOutputConfiguration outputConfiguration);
???
voidendConfigure(intoperatingMode);
???
voiddeleteStream(intstreamId);

???
// 創(chuàng)建輸入流,返回流 id
???
intcreateInputStream(int width, int height, int format);
???
// 返回輸入流的 Surface
??? Surface
getInputSurface();

???
// Keep in sync withpublic API in
???
//frameworks/base/core/java/android/hardware/camera2/CameraDevice.java
???
constintTEMPLATE_PREVIEW = 1;
???
constintTEMPLATE_STILL_CAPTURE = 2;
???
constintTEMPLATE_RECORD = 3;
???
constintTEMPLATE_VIDEO_SNAPSHOT = 4;
???
constintTEMPLATE_ZERO_SHUTTER_LAG = 5;
???
constintTEMPLATE_MANUAL = 6;
???
// 根據(jù)模板創(chuàng)建默認(rèn)請(qǐng)求,返回相機(jī)參數(shù)信息
??? CameraMetadataNative
createDefaultRequest(inttemplateId);
???
// 獲取相機(jī)參數(shù)信息
??? CameraMetadataNative
getCameraInfo();
???
voidwaitUntilIdle();
???
longflush();
???
voidprepare(intstreamId);
???
voidtearDown(intstreamId);
???
voidprepare2(int maxCount,intstreamId);
???
voidfinalizeOutputConfigurations(int streamId,
??????? in OutputConfigurationoutputConfiguration);
}

// 2.ICameraDeviceCallbacks.aidlinterfaceICameraDeviceCallbacks
{
??? ...
??? oneway
voidonDeviceError(interrorCode,
??????? in CaptureResultExtrasresultExtras);
??? oneway
voidonDeviceIdle();
??? oneway
voidonCaptureStarted(inCaptureResultExtras resultExtras,
???????
longtimestamp);
??? oneway
voidonResultReceived(inCameraMetadataNative result,
???????????????????????????????? inCaptureResultExtras resultExtras);
??? oneway
voidonPrepared(intstreamId);
???
// 重復(fù)請(qǐng)求引起的錯(cuò)誤回調(diào)
??? oneway
voidonRepeatingRequestError(in longlastFrameNumber,
???????????????????????????????????????in
intrepeatingRequestId);
??? oneway
voidonRequestQueueEmpty();
}

十、Services 目錄下的文件介紹

frameworks/av/services/camera/libcameraservice?AOSP 中這個(gè)目錄下是 87 個(gè)文件,而 Qcom 的基線中增加了 27 個(gè)文件,分別為 api1/qticlient2 目錄下的 25 個(gè)文件,以及 QTICamera2Client.cpp, QTICamera2Client.h 兩個(gè)文件。

.
├——
Android.mk
├——
api1
│?? ├——
client2
│?? └——
qticlient2
├——
api2
├——
CameraFlashlight.cpp
├——
CameraFlashlight.h
├——
CameraService.cpp
├——
CameraService.h
├——
common
├——
device1
├——
device3
├——
gui
├——
MODULE_LICENSE_APACHE2
├——
NOTICE
├——
tests
└——
utils

從目錄結(jié)構(gòu)上可以看出,API1/2?和?HAL1/3?就是在這一層體現(xiàn)的。

十一、 API1/API2

APP Java 客戶(hù)端調(diào)用服務(wù)端方法時(shí),Camera API1/2 接口對(duì)應(yīng)功能都是在 CameraService 中實(shí)現(xiàn)的,而這里的 API1/2 目錄對(duì)應(yīng)的就是對(duì)上層不同版本接口的處理

api1
├——
Camera2Client.cpp
├——
Camera2Client.h
├——
CameraClient.cpp
├——
CameraClient.h
├——
client2
│?? ├——
CallbackProcessor.cpp
│?? ├——
CallbackProcessor.h
│?? ├——
Camera2Heap.h
│?? ├——
CaptureSequencer.cpp
│?? ├——
CaptureSequencer.h
│ ??├——
FrameProcessor.cpp
│?? ├——
FrameProcessor.h
│?? ├——
JpegCompressor.cpp
│?? ├——
JpegCompressor.h
│?? ├——
JpegProcessor.cpp
│?? ├——
JpegProcessor.h
│?? ├——
Parameters.cpp
│?? ├——
Parameters.h
│?? ├——
StreamingProcessor.cpp
│?? ├——
StreamingProcessor.h
│?? ├——
ZslProcessor.cpp
│?? └——
ZslProcessor.h
├——
QTICamera2Client.cpp
├——
QTICamera2Client.h
└——
qticlient2
??? ├——
CallbackProcessor.cpp
??? ├——
CallbackProcessor.h
??? ├——
Camera2Heap.h
??? ├——
CaptureSequencer.cpp
??? ├——
CaptureSequencer.h
??? ├——
FrameProcessor.cpp
??? ├——
FrameProcessor.h
??? ├——
JpegCompressor.cpp
??? ├——
JpegCompressor.h
??? ├——
JpegProcessor.cpp
??? ├——
JpegProcessor.h
??? ├——
Parameters.cpp
??? ├——
Parameters.h
??? ├——
QTICaptureSequencer.cpp
??? ├——
QTICaptureSequencer.h
??? ├——
QTIFrameProcessor.cpp
??? ├——
QTIFrameProcessor.h
??? ├——
QTIParameters.cpp
??? ├——
QTIParameters.h
??? ├——
RawProcessor.cpp
??? ├——
RawProcessor.h
??? ├——
StreamingProcessor.cpp
??? ├——
StreamingProcessor.h
??? ├——
ZslProcessor.cpp
??? └——
ZslProcessor.hapi2
├——
CameraDeviceClient.cpp
└——
CameraDeviceClient.h


BasicClient 有三個(gè)重要的子類(lèi):

  • CameraClient
    如果平臺(tái)僅支持 HAL 1,即 CAMERA_DEVICE_API_VERSION_1_0 ;使用 API 1/2 + HAL 1 都會(huì)對(duì)應(yīng)該客戶(hù)端。

  • Camera2Client
    如果平臺(tái)支持 HAL 3 ,即 CAMERA_DEVICE_API_VERSION_3_0 及以上版本;使用 API 1 + HAL 3 對(duì)應(yīng)的客戶(hù)端。Camera2Client 會(huì)將 API1 中的接口轉(zhuǎn)換為 API2 中對(duì)應(yīng)的功能。

  • CameraDeviceClient
    如果平臺(tái)支持 HAL 3 ,使用 API 2 + HAL 3 對(duì)應(yīng)的客戶(hù)端。
    平臺(tái)僅支持 HAL 1 時(shí),API 2 在 openCamera 時(shí),通過(guò) CameraDeviceUserShim 將 API 2 轉(zhuǎn)換為 API 1 ,即 HAL 1 + API 1 向下發(fā)起請(qǐng)求。
    LegacyCameraDevice 會(huì)將 CAMERA API2 轉(zhuǎn)換為 CAMERA API1 ,而 CameraDeviceUserShim 封裝了 LegacyCameraDevice 。

十二、 QTICamera2Client

Qcom 的基線中增加了 27 個(gè)文件,分別為 api1/qticlient2 目錄下的 25 個(gè)文件,以及 QTICamera2Client.cpp, QTICamera2Client.h 兩個(gè)文件。
而 QTICamera2Client 是高通針對(duì) API1 做的優(yōu)化?在什么情況下會(huì)轉(zhuǎn)換為 QTICamera2Client 呢?看如下源碼

classCamera2Client :
???????
publicCamera2ClientBase
{

friendclassQTICamera2Client;
#endif
...

??? spmRawProcessor;
#endif
...

??? spmQTICamera2Client;
#endif
...
}

// 2.Camera2Client.cpptemplate<typenameTProviderPtr>
status_tCamera2Client::initializeImpl(TProviderPtr providerPtr)
{
...

??? mQTICamera2Client =
newQTICamera2Client(this);
#endif
...

??? mRawProcessor =
newRawProcessor(this,mCaptureSequencer);
??? threadName = String8::format(
"C2-%d-RawProc",mCameraId);
??? mRawProcessor->run(threadName.
string());
#endif
...
}

QTICamera2Client 是高通對(duì) API 1 中 Camera2Client 做的一層封裝,添加了部分功能,主要是向上提供 raw 數(shù)據(jù)。

// 1. QTICamera2Client.hclassQTICamera2Client: publicvirtual RefBase{
private:
??? wpmParentClient;
???
status_tstopPreviewExtn();

public:
???QTICamera2Client(sp client);
??? ~QTICamera2Client();
??? ...
}

// 2.QTICamera2Client.cpp
QTICamera2Client::QTICamera2Client(sp client):
??????? mParentClient(client) {
}

十三、 device1/device3

device1/device3 可以理解為 Framework 層對(duì)應(yīng) HAL 層的 HAL 1/3 。

device1
├——
CameraHardwareInterface.cpp
└——
CameraHardwareInterface.hdevice3
├——
Camera3BufferManager.cpp
├——
Camera3BufferManager.h
├——
Camera3Device.cpp
├——
Camera3Device.h
├——
Camera3DummyStream.cpp
├——
Camera3DummyStream.h
├——
Camera3InputStream.cpp
├——
Camera3InputStream.h
├——
Camera3IOStreamBase.cpp
├——
Camera3IOStreamBase.h
├——
Camera3OutputStream.cpp
├——
Camera3OutputStream.h
├——
Camera3OutputStreamInterface.h
├——
Camera3SharedOutputStream.cpp
├——
Camera3SharedOutputStream.h
├——
Camera3StreamBufferFreedListener.h
├——
Camera3StreamBufferListener.h
├——
Camera3Stream.cpp
├——
Camera3Stream.h
├——
Camera3StreamInterface.h
├——
Camera3StreamSplitter.cpp
├——
Camera3StreamSplitter.h
├——
StatusTracker.cpp
└——
StatusTracker.h

  • API1/device1/HAL1?的連接過(guò)程

// API1: CameraClient.h
sp????mHardware;
//device1: CameraHardwareInterface.h
sp mHidlDevice;
// 這里的 ICameraDevice 即為 HAL1API1 的客戶(hù)端 CameraClient 對(duì)應(yīng)的 device1: CameraHardwareInterface,而它直接包含了 HAL1 中 ICameraDevice

  • API1/3/device3/HAL3?的連接過(guò)程

// API1: Camera2Client.hclassCamera2Client :
???
publicCamera2ClientBase{...}

// API2:CameraDeviceClient.hclassCameraDeviceClient :
???
publicCamera2ClientBase,
???
publiccamera2::FrameProcessorBase::FilteredListener{...}

//Camera2ClientBase.h
sp? mDevice;

//Camera2ClientBase.cpptemplate <typenameTClientBase>
Camera2ClientBase::Camera2ClientBase(
???
constsp& cameraService,
???
constsp& remoteCallback,
???
constString16& clientPackageName,
???
constString8& cameraId,
???
intcameraFacing,
???
intclientPid,
???
uid_tclientUid,
???
intservicePid):
??? TClientBase(cameraService,remoteCallback, clientPackageName,
??????????? cameraId, cameraFacing,clientPid, clientUid, servicePid),
???mSharedCameraCallbacks(remoteCallback),
???mDeviceVersion(cameraService->getDeviceVersion(
??????????? TClientBase::mCameraIdStr)),
??? mDeviceActive(
false)
{
??? ...
??? mInitialClientPid = clientPid;
???
// 只要是 HAL3 ,則 device 都是對(duì)應(yīng)的 Camera3Device
??? mDevice =
newCamera3Device(cameraId);
??? ...
}

從源碼可以看出,不管是 API1/2 ,只要是 HAL 3 ,Camera2Client, CameraDeviceClient 兩個(gè)客戶(hù)端對(duì)應(yīng)的都是 device3: Camera3Device 。

Camera3Device::HalInterface 內(nèi)部類(lèi),用于和 HAL 層通信,實(shí)現(xiàn)了 HAL 層 ICameraDeviceSession.hal 部分代碼:

// Camera3Device.hclassCamera3Device :
??? ...
???
classHalInterface : publiccamera3::Camera3StreamBufferFreedListener {
?????
public:
??????? ...
???????
// Calls into the HALinterface

???????
// Caller takes ownershipof requestTemplate
???????
status_tconstructDefaultRequestSettings(
???????????????
camera3_request_template_ttemplateId,
???????????????
/*out*/camera_metadata_t**requestTemplate);
???????
status_tconfigureStreams(
???????????
/*inout*/camera3_stream_configuration *config);
???????
status_tprocessCaptureRequest(camera3_capture_request_t*request);
???????
status_t flush();
???????
status_t close();
??????? ...
??? }
??? ...
}

?原文鏈接:https://www.dazhuanlan.com/2019/10/16/5da68019bdbe3/

相關(guān)文章友情推薦?

1. Android開(kāi)發(fā)干貨分享

至此,本篇已結(jié)束。轉(zhuǎn)載網(wǎng)絡(luò)的文章,小編覺(jué)得很優(yōu)秀,如有侵權(quán),懇請(qǐng)聯(lián)系小編刪除,歡迎您的建議與指正。同時(shí)期待您的關(guān)注,感謝您的閱讀,謝謝!

點(diǎn)個(gè)在看,方便您使用時(shí)快速查看!

瀏覽 88
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 婷婷五月天AV| 91AV一区二区三区| 中文字幕永久在线| 日本黄色视频在线播放| 男人的天堂亚洲| 97人人爽人人爽人人爽人人爽| 国产精品久久久久国产A级| 精品偷拍| 九九九中文字幕| www.人人摸| 婷婷五月激情小说| 青草av在| 成人做爰A片AAA毛真人| 日韩麻豆| 人妻人人骑| 大香蕉青娱乐| 天天干天天射天天| 长泽梓黑人初解禁BDD07| 91蝌蚪丨人妻丨丝袜| 中文字幕不卡无码| 一区二区三区精品无码| 91免费成人视频| 日韩AV无码网站| 欧美黄色网| www.一区二区三区| 久久做爱视频| 日韩性爱一区| 一区二区国产视频| 天天视频狠狠狠狠| 在线观看高清无码| 91国产爽黄在线| 欧美三级黄色| 一级电影视频去去去| 制服丝袜一区| 国产美女18毛片水真多| 就去se超碰| 一区二区无码在线| 亚洲有码在线| 中文字幕+乱码+中文字幕电视剧 | 99欧美| 色婷婷中文字幕| 国产2页| 99爱精品| 欧美18成人| 国模一区二区三区| 亚洲污网| 亚洲综合区| 91国产爽黄| 激情五月天网址| 水蜜桃网站在线观看| 靠逼网站免费观看| 一本色道无码人妻精品| 99久久精品一区二区成人| 牛牛AV| 国内自拍第一页| 在线观看视频黄| 亚洲成人Av| 欧美性猛交XXXX乱大交HD| 精品人妻一区二区三区蜜桃| 五月天黄色电影网站| 国产性爱一级片| 日韩不卡在线| 黄色成人网站在线免费观看| 成人伊人大香蕉| 国产一级A片久久久免费看快餐| 欧美在线大香蕉| 国产毛片一区| 色视频免费在线观看| 国产3p绿帽骚妻视频| 亚洲综合五月天| 日韩视频免费观看高清完整版在线观| 国产无码免费视频| 亚洲三级免费| 乱伦三级| 欧美日韩操逼视频| 操操操影院| 三级网站免费观看| 人人操人人骑| 精品国产重口乱子伦| 国产免费av网站| 人人爽人人爽人人| 黄色三极片| 美女裸体视频网站| 精品无码一区二区人妻久久蜜桃 | 日韩乱伦小说| 国产精品1| 国产精品秘麻豆免费版现看视频| 日韩AV免费在线| 无码精品电影| 狠狠色狠狠干| 中文字幕无码人妻在线视频| 91毛片在线观看| 日韩AV一区二区三区四区| 欧美A片免费| 欧美一级a视频免费放| 永久中文字幕| 99视频+国产日韩欧美| 婷婷色大师| 国产精品视频你懂的| 成人免费内射视频| 国产色秘乱码一区二区三区| 超碰天天干天天摸| 久久久久亚洲AV成人片| 就去色色五月丁香婷婷久久久 | 91叉叉叉| 综合色网站| 亚洲AV大片| 久久精品视频网站| 1024在线| 九九九九色| 国产91精品久久久天天| 国产精品乱子伦一区二区三区视频| 日韩WWW| www免费视频在线观看播放| 日韩三级片在线视频| 日韩五码在线| 欧美热热| 人人看人人摸人人草| 永久久久久久久| 四川BBB嫩BBBB爽BBBB| 蜜桃av无码一区三区| 精品成人影视| 欧美A黄片| 东方av在线播放| 亚洲观看黄色网| 亚洲A片一区二区三区电影网| 亚洲GV成人无码久久精品| 欧美熟妇搡BBBB搡BBBBB| jizz免费在线观看| 亚洲国产成人AV| 3D动漫精品一区二区在线播放免费| 亚洲av大全| 亚洲成人AAAAA| 综合亚洲视频| 精品无码视频在线观看| 天天操人人| 中文电视剧字幕在线播放免费视频 | 午夜精品18视频国产17c| 蜜桃影视| 亚洲色人妻| 日韩AV网站在线观看| www.毛片| 免费高清无码| 无码人妻精品一区二区蜜桃漫画 | 牛牛影视av| 黄色小视频免费观看| 四虎884| 911亚洲精品| 91人妻无码一区二区三区| 中文字幕第4页| 97国产在线| 加勒比日日综合| 日本黄色影视| 中国熟女视频| 69性影院| 日韩一本道在线| 午夜人妻AV| 亚洲色婷婷五月天| 中文无码专区| 久久99久久99精品免视看婷婷| 午夜男女福利| 婷婷丁香激情五月天| 亚洲第一在线| 国产精品三级片| 影音先锋人妻资源| 欧美激情伊人| 懂色AV无码中字幕一区| 免费无码毛片一区二区A片| 18禁污网站| 爱爱视频天天干| 欧美色视频在线观看| 亚洲视频免费完整版在线播放| 亚洲视频播放| www日韩| 中文字幕高清免费看| 99成人精品| 精品国产久久久久| 青青草娱乐视频| 97操| 操屄视频在线| 国产人妖在线观看| 亚洲成人无码在线| 午夜精品18码视频国产17c| 北条麻妃精品青青久久价格| 精品国产精品三级精品AV网址| 欧美日韩网| 一级午夜福利| 中文无码一区二区三区| 91精品国自产在线观看| 成人无码www在线看免费| 五月天干美女| 日韩毛片在线视频x| 毛片小电影| 狠狠躁日日躁夜夜躁A片男男视频| 欧美深夜福利| 91视频色| 免费毛片基地| 亚洲视频中文字母| 久热中文在线观看精品视频| 国产成人综合电影| 国产夫妻自拍AV| 亚洲精品国产精品国自产曰本| 国产女人18毛片18精品| 无码在线高清| 又大又黄又爽| 国产精品99久久久久的广告情况 | 黄片视频链接| 久久一级A片| 黄色成人视频免费看| 国内成人AV| 色婷五月天| 日韩不卡| 黄色成年人视频在线观看| 在线视频福利导航| 一区二区无码高清| 福利导航网| 99精品视频免费观看| 婷婷五月大香蕉| 骚骚肥肥一区二区三区| 青青草日逼视频| 天天日天天射天天操| 四川BBBB擦BBBB| 综合五月婷婷| 97视频网站| 成人无码久久| 97人人爱| 日韩国产欧美精品一区| 热热热热色| 青青草原在线免费| 在线视频免费观看| 亚洲一区二区视频| 日产精品久久| 少妇搡BBBB搡BBB搡小说| 黄片无遮挡| 高清无码一区二区三区四区| 91乱子伦国产乱子伦无码| 色五月婷婷五月天激情| 91麻豆视频在线观看| 18禁黄色免费网站| 成人黄色A片| 在线观看av中文字幕| 日韩欧美性爱视频| 欧美成人免费A级在线观看| 国产乱国产乱300精品| 亚洲中文字幕电影| 影音先锋色色| 国产精品久久久久久久久久久久久久久 | 人妻av无码| 亚洲精品成人7777777| 99精品视频在线| 色色色色网| 夸克看成人片一级A片| 99热青青草| 国产91无码精品秘入口在线观看| 亚洲一级婬片A片AAAA网址| 国产无码AV成在线| 91亚洲精品乱码久久久久久蜜桃| 人人色人人| 三级不卡视频| 国产成人激情视频| 五月丁香婷中文| 日韩在线免费视频| 黄色片一级片| 成人片免费看| 色欲99| 免费在线国产| 色婷婷五月天激情| 91女人18毛片水多的意思| 色tv在线| 精品免费一区二区三区四区| 很很干在线视频| 无码三级片在线观看| 五月亭亭在线视频| 97操| 91免费视频在线| 亚洲AV无码一区毛片AV| www.日韩av| 五月丁香大香蕉| 男人天堂成人| 成人影视在线免费观看| 国产一级A片久久久免费看快餐| 黄片网站免费观看| 中文字幕国产综合| 日韩中文无| AAA黄片| 亚洲网站在线免费观看| 欧美精品系列| 大香蕉A片| 大香蕉99热| 国产男女无套免费视频| 久久h| 91av在线免费播放| 亚洲逼逼| 欧美成人视频在线观看| 久操久操久操| 久久久精品午夜人成欧洲亚洲韩国 | 奇米狠狠色| av干在线| 国产精品美女在线观看| 人人干人人操人人摸| 制服丝袜无码| 国产精品久久久久久久9999| 黄色片毛片| 在线观看三级网址| 无码不卡av| 精品乱子伦一区二区三区| 超碰在线日韩| 国产精品视频无码| 国精产品一区二区三区| 亚洲AV无码成人精品区www| 边吃边摸| 在线观看一区| 亚洲黄色一级电影| 另类日韩| 九九九色视频| 国产一区二区免费| 人妻少妇精品视频| www.操逼网| 人妻二区| 伊人久久大综合中文无码| 四川BBB搡BBB爽爽爽电影| 日本乱伦视频| 久久久久99| 日韩人妻无码一区二区三区| 91大神久久| 日日搔AV一区二区三区| 黄片aaa| 怡红院成人AV| 日韩中文字幕高清| 激情片AAA| 黄色A片免费观看| 一级女婬片A片AAAA片| 午夜免费福利视频| 在线观看国产一区| 色婷婷黄色| 精品一区二区三区四区五区六区 | 99久久久久久| 东方AV免费在线观看| 亚洲日韩免费观看| 色色色色色色色色欧美| 婷婷午夜精品久久久久久| 国产伦子伦一级A片免费看小说 | 色五月激情网| 毛片二区| 一级AAAAA片裸体做受| 日逼www| 人人操人人爱人人摸| 男女日逼网站| 国产十欧洲十美国+亚洲一二三区在线午夜 | 电家庭影院午夜| 麻豆久久久久| 国产人国产视频成人免费观看…| 国产成人免费在线视频| 伊人午夜| 99re国产视频| 一级A片在线观看| 国产系列第一页| 国产传媒视频| 日韩AV资源网| 性欧美| 亚洲成人电影AV| 狠狠操狠狠操狠狠操| 操屄视频播放| 一区二区无码高清| 六月丁香五月天| 国产乱伦内射| 欧美成人视频。| 77久久| 97精品视频| 男女av免费| 欧洲三级片| 午夜福利站| 奇米影视亚洲春色| aaa三级片| 五月AV| 91丨九色丨老熟女探花| 欧美成人视频在线观看| 欧美女人日逼视频| 亚州成熟少妇视频在线观看| 国产69精品久久| 免费一级电影| 53岁露大奶熟女偷情贴吧| 中文字幕日韩欧美| 99久久国产精| 18禁在线播放| 国产人体视频| 午夜黄色| 欧美成人高清无码| 亚洲免费清高| 北条麻纪无码视频| 日本成人午夜福利| 伊人影院在线观看| 大香蕉伊人成人网| 日韩欧美精品一区二区| 福利老湿69| 麻豆av在线观看| 成年人毛片视频| 99黄色| 天天干在线观看视频| 欧美一道本| 日本成人不卡| www.18禁| 少妇人妻一区二区三区| 亚洲无码在线电影| 99在线精品视频观看| 人人操人人摸人人干| 亚洲视频精品| 免费黄色视频在线观看| 日皮视频在线免费观看| 一级A片视频免费看| 久草新视频| 操逼电影免费| 成人h在线观看| 欧美日韩国产成人在线观看| 日本一区二区三区在线视频| 男人天堂网av| 狠狠干在线| 日本爱爱免费播放视频| 肏逼网| 成人综合网站| 无码不卡视频在线| 99超碰在线观看| 国产美女被爽到高潮免费A片软件| 久久久久成人片免费观看蜜芽| 黄色香蕉视频| 日韩小视频| 国产AV中文| 激情乱伦网| 中文字幕免费视频在线观看| 人人操人人看人人| 99人妻视频| 色婷婷五月天激情| 狠狠色一区| 成人a视频| 五月丁香成人电影| 国产成人AV在线| 三级黄色免费网站| 底流量AV电影在线| 任我操在线视频| 成人亚洲精品一区二区三区| 日韩二区三区| 啊啊啊啊啊在线观看| 日韩欧美视频| 韩日AV| 最新毛片网站〖网:.〗| 久久99热这里只频精品6学生| 三级在线网| 91在线观看18| 亚洲免费观看高清完整版在线| 中文字幕精品综合| 欧美人与禽乱婬A片| 成人一区在线观看| 欧美午夜精品一区二区蜜桃| 加勒比精品在线| 毛片a级| 先锋AV资源| 亚洲AV大片| 免费高清无码在线| 大鸡巴在线观看| 99久久夜色精品国产亚洲| 青青啪啪啪| 亚洲欧美在线观看视频| 成人无码91| 欧美淫秽视频| 人人色在线| 婷婷六月色| 最新va在线观看| 超碰A片| 婷婷久热| 夜夜撸视频| 婷婷社区五月天| 久久久精品在线| 69无码| 黄色小视频在线免费看| 1024大香蕉| 97无码| 色婷婷六月天| 一级一级a免一级a做免费线看内裤| 无码一区二区三区免费| 中文字幕高清无码在线观看| 日韩二级片| 精品视频一区二区三区| 亚洲最大黄色视频| 精品国产999久久久免费| 国产免费无码一区二区| 乱子伦国产精品一区二区| 2021国产精品视频| 久久AV电影| 91ThePorn国产在线观看| 午夜视频成人| 亚洲一区| 99久在线精品99re8热| 黄色在线观看国产| 成人午夜精品福利免费| 欧美日韩一区在线| 欧美A黄片| 人人人操人人| 中文字幕在线日韩| 亚洲日产专区| 西西人体BBBBBB| 久热在线视频| www男人天堂| 国产小福利| 欧美操B电影| 日韩欧美午夜成人无码| 日逼网站视频| 波多野结衣高清av久久直播免| 免费A级毛片在线播放不收费| 欧美久久性爱| 成年人免费公开视频| 久久久大香蕉| 北条麻妃无码精品AV| 日韩在线观看网址| 人妻人人干| 插插视频| jizz在线观看| 靠逼网站免费观看| 444444免费高清在线观看电视剧的注意| 五月丁香中文字幕| 91黄色视频网站| 亚洲一在线| 国产无套在线| 激情乱伦五月天| 四虎AV在线| 国产最新福利| 亚洲AⅤ欧美AⅤ| 精品国产三级| 三上悠亚无码破解69XXX| 日韩做爱网站| 翔田千里与黑人50分钟| 中文天堂| 麻豆三级片在线观看| jlzz18| 豆花成人在线| 亚洲国产91| 91久久国产综合久久91精品网站 | AV无码免费一区二区三区不卡| 一道本无码视频| 欧洲黑人成人A版免费视频| 51成人网| 欧美亚洲动漫| 欧美性生交18XXXXX无码| 中文字幕无码一区二区| 大鸡巴在线| 粉嫩小泬BBBBBB免费| 人妻av中文无码| 黄色片在线视频| 欧美日韩视频| 学生妹做爱视频| 黄片小视频在线观看| 欧美粗大| 小黃片秘嗯嗯啊| 五月丁香婷婷综合| 久久视频免费| 亚洲网站在线播放| 天天视频入口| 91丨九色丨熟女老版| 中文字幕精品视频| 青青草视频| 无码av一区二区| www.蜜桃av| 手机免费Av| 日韩三级片网站| 国产免费黄色片| 囯产精品99久久久久久WWW| 97资源在线视频| 欧美黄色免费| 日韩无码高清视频| 91.xxxxx| 91无码在线视频| 亚洲大逼| 超碰1999| 日韩av一级| 最近中文字幕高清2019中文字幕 | 午夜熟睡乱子伦视频| 91露脸熟女四川熟女在线观看| 成人片毛片| 艹逼无码| 亚洲精品系列| 91最新在线播放| 欧美三P囗交做爰| 四川女人毛多水多A片| 色碰碰| 最新免费一区二区三区| 操b视频免费| 国产欧美一区二区三区国产幕精品| 亚洲欧美成人在线| 日日夜夜天天| 久久无码高清| 欧一美一婬一伦一区二区三区黑人-亚 | 五月丁香综合在线| av无码导航| 国产成人电影免费在线观看| 在线黄网| 亚洲性爱视频在线观看| av无码电影| 亚洲精品中文字幕在线观看| 国产一级a毛一级a毛视频在线网站? | 久久久久99| av大片在线观看| 北条麻妃一区二区三区-免费免费高清观看 | 丝瓜视频| 男人色天堂网| 天堂а√在线中文在线新版| www.五月丁香| 国产精品秘ThePorn| 潮喷AV| 五月天黄色电影网站| 乱子伦一区二区三区视频在线观看 | 欧美一区二区三区免费| 免费看黄色的视频| 黄色内射视频| 国产三级一区二区| 一级内射片在线网站观看| 午夜无码免费| 亚洲国产精品欧美久久| 开心色色五月天| 亚洲一级片| 超碰9| 日韩美女视频19| 亚洲一级在线观看| 久久666| 成人欧美视频| 一道本视频| AA片视频| 成人性爱在线播放| 久久精品在线播放| 学生妹内射| 樱桃性爱视频| 国产av综合网| 特黄色A级片视频| 亚洲日韩在线视频播放| 国产高清精品在线| 一级a片在线| 91精品国产成人www| 成人视频三级| 日韩精品一区二区三区免费观看高清| 天天干夜夜爽| 69无码| 日韩视频在线免费观看| 男人的天堂在线视频| 日韩av电影在线观看| 国产免费操逼视频| 天天干天天拍| 成人免费视频国产免费麻豆,| 99久久久久久久无码| 色九九视频| 麻豆91精品91久久久| 色六月婷婷| 99视频免费| 在线亚洲免费观看| 青青草免费在线观看| 永久免费一区二区| 国产A区| 中文字幕五月久久婷婷| 久草国产在线视频| 黄色a视频| 国产AV影视| 国产又粗又猛又黄又爽无遮挡| 国产五月天婷婷| 人人澡人人添人人爽人人| 亚洲黄色av| 亚洲一区高清无码| 日韩成人无码专区| www99热| 无码毛片在线观看| 无码视频在线看| 青娱乐超碰在线| 九月丁香| 色色网五月天| 中文一级片| 中文字幕成人在线播放| 久久久久成人精品无码| 久草手机在线| 91福利区| 69AV视频在线观看| 国产拍拍拍| 黄片在线网站| 婷婷五月天小说| 日韩强操逼网| 精品av在线观看| 操BBBB| 国际精品久久久| 骚逼自拍| 免费黄色视频观看| 国产欧美欧洲| 国产精品揄拍100视频| 操日本老女人| 国产乱色精品成人免费视频| 成人无码区免费A片久久| ⅴA日本成人| 亚洲免费成人电影| 婷婷五月丁香网| 成人精品二区| 国产插穴| 亚洲高清无码视频| 成人A片在线| 欧美成人性爱网| 亚洲成av| 亚洲欧美性爱视频| 伊人三级| 密臀AV在线| 精品| 国产成人精品一区| 日韩一区二区在线观看| 四虎在线免费视频| 日本不卡一区二区三区| 青娱乐成人在线视频| 国产灬性灬淫灬欲水灬| 亚洲无吗在线视频| 精品无码久久久| 看操b视频| 手机av在线观看| 国产黄片视频| 亚洲第一综合| 黄色大片免费观看| 女人久久久久| 日本内射在线观看| 日韩在线视频网| 蜜桃久久久亚洲精品| 美女视频一区二区三区| 色色网五月天| 国产不卡网| 久久精品毛片| 日日夜夜天天操| 自拍偷拍AV| 亚洲午夜无码精品专区| 深夜福利18| 国产综合亚洲精品一区二| 亚洲va中文字幕| 天天日夜| 欧美成人三级| 无码一区二区三区四季| 成人在线免费电影| 88海外华人免费一区| 久久久久久久麻豆| 日韩老熟妇| 熟女18p| 996热re视频精品视频这里| 国产色无码网站www色视频| 99久久成人| 午夜激情视频在线观看| 成人无码91| 五月天网址| 无码黄页| 久久久久久麻豆| 九九热在线精品| 911国产视频| 熟女人妻人蜜桃视频| sm国产在线调教视频| 国产一级黄色| 99热精品免费| 日韩欧美在线播放| av无码免费观看| 粉嫩一区二区三区四区| av天堂中文字幕| 欧美深夜福利视频| 奇米影视亚洲春色| 成人A片免费观看| 欧美一区电影| 一级片| 91麻豆精品无码人妻| 欧美伊人网在线观看| 男人天堂色| 99精品国产一区二区| 日本A片在线观看| 曰曰摸日日碰| 色老板在线精品免费观看| 91绿帽人妻-ThePorn| 国产女人高潮毛片| 一级黄色电影A片| 精品国产一区二区三区久久久蜜月 | 1024国产| 伊人色五月天| 91大神免费观看| 无码理论片| 久久久77| 在线中文字幕在线观看| www.17c嫩嫩草色蜜桃网站| 婷婷丁香色| 黄色3A片在线观看| 七十路の高齡熟妇无码| 日韩三级在线播放| 干欧美美女| 俺也去在线视频| 国产av一区二区三区四区| 一级操逼大片| 18XXX亚洲HD护士JD| 高清无码视频观看| 国产一级a毛一级a毛片视频黑人 | 大香蕉av一区二区三区在线观看| 永久免费看片视频| 国产精品无码免费| 亚洲国产精品成人网站| 日日夜夜精品视频| 国产理论在线| 乱伦a片| 久操国产| 特級西西444WWw高清大膽| 色香蕉在线视频| 免费岛国av大片| 欧美精品在线视频| WWW色色| 日日摸日日添日日躁AV| 乱伦无码高清麻豆视频一区二区| 老熟女-ThePorn| 玖玖爱在线精品视频| 草久av| 黑人又粗又大XXXXOO| 国产精品一二区| 国产AV久久| www免费视频| 99久久国产视频| 做爱网站| 狼友在线观看| AV小说在线观看| 在线se| 五月天四房播播| 日本特级黄色毛片| 一级A片一毛片大全| 一区二区日本| 一级黄色性爱视频| 先锋成人影音| 亚洲第一区欧美日韩| 西西444www| 视频一区二区三区在线观看| 精品动漫一区二区三区| 日韩欧美大香蕉| 精品少妇3p| 大香蕉精品在线| 91精品国自产在线观看| 日本熟妇高潮BBwBBwBBw| 老司机午夜视频| 日本三级片无码| 俺来也俺去也www色| 五月丁香在线视频| 成人网| 在线观看免费A片| 影音先锋国产av| 大地影视官网第三页入口| 成人性生交大片免费看小芳| 无码一区二区三区四季| 91精品久久久久久| 国产偷拍网站| 伊人无码在线| 毛片A级| 人人干视频| 动漫3D成人H无码国漫| 在线观看无码AV| 影音先锋三级| 成人第一页| 成人国产精品在线看| 天天看片天天爽| 欧美三p| 亚洲毛片亚洲毛片亚洲毛片| 无码婬片A片AAA毛片艳谭| 一级大毛片| 日本黄色免费网站| 亚洲成人AV在线| 小處女末发育嫩苞AV| 91在线无码精品秘蜜桃入口 | 91白浆| 亚洲操| 国产精品天天干| 国产在线观看| 国产黄A片免费网站免费| 人人操人人干人人爽| 久久永久视频| 青草青在线视频| 超碰爱爱| 中文字幕在线免费播放| 日本aa视频| 91无码人妻一区二区成人aⅴ| 免费伊人大香蕉| 18成人网站在线观看| 亚洲爱爱网站| 无码人妻一区二区三一区免费n狂飙 | 午夜av在线| 91狠狠综合| 高潮视频在线观看| 亚洲在线免费视频| 亚洲AV成人无码| 亚洲精品自拍| 午夜aaa| 一区精品| 毛片网页| 91视频网| 东京热在线观看| 女色综合| 蜜桃影视| 婷婷天天干| 免费日本A片| 国产精品一级A片| 伊人三级网| 无码人妻av一区| 男人的天堂视频在线| 99精品999| 日韩无码一二三区| 欧美成人免费在线| 日韩一级片网站|