【高通SDM660平台 Android(安卓)10.0】(12) --- Camera Chromatix 代码分析
【高通SDM660平台 Android 10.0】Qcom Camera Daemon 代码分析
- 一、chromatix_imx258_lc898217xc 目录
- 1.1 例:imx258_lc898217xc_common
- 1.1.1 chromatix_imx258_lc898217xc_common.c
- 1.1.2 chromatix_common.h
- 1.2 例:imx258_lc898217xc_preview
- 1.2.1 chromatix_imx258_lc898217xc_preview.c
《【高通SDM660平台】(1) — Camera 驱动 Bringup Guide》
《【高通SDM660平台】(2) — Camera Kernel 驱动层代码逻辑分析》
《【高通SDM660平台】(3) — Camera V4L2 驱动层分析 》
《【高通SDM660平台】(4) — Camera Init 初始化流程 》
《【高通SDM660平台】(5) — Camera Open 流程》
《【高通SDM660平台】(6) — Camera getParameters 及 setParameters 流程》
《【高通SDM660平台】(7) — Camera onPreview 代码流程》
《【高通SDM660平台】(8) — Camera MetaData介绍》
《【高通SDM660平台 Android 10.0】(9) — Qcom Camera Daemon 代码分析》
《【高通SDM660平台 Android 10.0】(10) — Camera Sensor lib 与 Kernel Camera Probe 代码分析》
《【高通SDM660平台 Android 10.0】(11) — Eeprom lib 与 Kernel eeprom代码分析》
《【高通SDM660平台 Android 10.0】(12) — Camera Chromatix 代码分析》
《【高通SDM660平台】Camera Capture 流程》
《【高通SDM660平台】Camera mm-qcamera-app 代码分析》
《【高通SDM660平台 Android 10.0】 — 高通马达、eeprom、flash 等外设代码分析》
由文章篇幅太长,本文是对前面的文章第1.1.1.6章的补充《【高通SDM660平台 Android 10.0】(9) — Qcom Camera Daemon 代码分析》,
主要是分析下 Camera Chromatix lib 库的内容(以 libchromatix_imx258_lc898217xc_common.so 为列),加载 chromatix 库文件主要是加载 lib 库中 头文件的 结构体参数。
详细看下。
一、chromatix_imx258_lc898217xc 目录
在进入目录前,我们会看到 0309 和 0310 这两个目录,
其主要是根据平台来决定的,定位地方位于如下:
可以看出,我们使用的是下 BUILD_MM_CAMERA2
且平台是 sdm660
,所以 CHROMATIX_VERSION := 0310
# /vendor/qcom/proprietary/mm-camera/Android.mkifeq ($(BUILD_SERVER), true) CHROMATIX_VERSION := 0208else ifeq ($(BUILD_MM_CAMERA2), true) ifeq ($(OEM_CHROMATIX_0308), 1) CHROMATIX_VERSION := 0308E else ifeq ($(call is-board-platform-in-list,msm8937 msm8953 sdm660 msm8998 apq8098_latv $(TRINKET)),true) CHROMATIX_VERSION := 0310 else CHROMATIX_VERSION := 0309 endifendif
我们进入目录 mm-camera/mm-camera2/media-controller/modules/sensors/chromatix/0310/chromatix_imx258_lc898217xc
在它下面,我们看到很多目录,
其实这些目录,每个 目录对应着一个lib库,所有用到的定义在
mm-camera/mm-camera2/media-controller/modules/sensors/configs/imx258_lc898217xc_chromatix.xml<ChromatixConfigurationRoot> <CommonChromatixInfo> <ChromatixName> <ISPCommon>imx258_lc898217xc_commonISPCommon> <PostProc>imx258_lc898217xc_postprocPostProc> <CPPPreview>imx258_lc898217xc_cpp_previewCPPPreview> <CPPSnapshot>imx258_lc898217xc_cpp_snapshotCPPSnapshot> <CPPLiveshot>imx258_lc898217xc_cpp_liveshotCPPLiveshot> ChromatixName> CommonChromatixInfo> <ResolutionChromatixInfo> <ChromatixName sensor_resolution_index="0"> <ISPPreview>imx258_lc898217xc_snapshotISPPreview> <ISPSnapshot>imx258_lc898217xc_snapshotISPSnapshot> <ISPVideo>imx258_lc898217xc_default_videoISPVideo> <CPPVideo>imx258_lc898217xc_cpp_videoCPPVideo> <A3Preview>imx258_lc898217xc_zsl_preview_3aA3Preview> <A3Video>imx258_lc898217xc_zsl_video_3aA3Video> ChromatixName> <ChromatixName sensor_resolution_index="1"> <ISPPreview>imx258_lc898217xc_previewISPPreview> <ISPSnapshot>imx258_lc898217xc_previewISPSnapshot> <ISPVideo>imx258_lc898217xc_previewISPVideo> <CPPVideo>imx258_lc898217xc_cpp_videoCPPVideo> <A3Preview>imx258_lc898217xc_4k_preview_3aA3Preview> <A3Video>imx258_lc898217xc_4k_video_3aA3Video> ChromatixName> <ChromatixName sensor_resolution_index="2"> <ISPPreview>imx258_lc898217xc_previewISPPreview> <ISPSnapshot>imx258_lc898217xc_previewISPSnapshot> <ISPVideo>imx258_lc898217xc_previewISPVideo> <CPPVideo>imx258_lc898217xc_cpp_videoCPPVideo> <A3Preview>imx258_lc898217xc_default_preview_3aA3Preview> <A3Video>imx258_lc898217xc_default_video_3aA3Video> ChromatixName>
我们举例来看下,以 imx258_lc898217xc_common 和 imx258_lc898217xc_preview 这两个为例:
1.1 例:imx258_lc898217xc_common
imx258_lc898217xc_common 对应的库文件位于:
/vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/chromatix/0310/chromatix_imx258_lc898217xc/common/Android.mk
我们来看下它的内容:
可以看到 ,
是将 chromatix_imx258_lc898217xc_common.c
编译成 libchromatix_imx258_lc898217xc_common.so
共享库
LOCAL_SRC_FILES:= chromatix_imx258_lc898217xc_common.cLOCAL_MODULE := libchromatix_imx258_lc898217xc_commonLOCAL_SHARED_LIBRARIES := libcutilsifeq ($(MM_DEBUG),true)LOCAL_SHARED_LIBRARIES += liblogendifinclude $(BUILD_SHARED_LIBRARY)
1.1.1 chromatix_imx258_lc898217xc_common.c
可以看到 ,包该C 文件,包含了两个头文件 ,及 实现了一个方法。
#include "chromatix_common.h"static chromatix_VFE_common_type chromatix_imx258_lc898217xc_parms = {#include "chromatix_imx258_lc898217xc_common.h"};/*============================================================================ * FUNCTION - load_chromatix - * DESCRIPTION: *==========================================================================*/void *load_chromatix(void){ return &chromatix_imx258_lc898217xc_parms;}
1.1.2 chromatix_common.h
chromatix_common.h 中,包含了 chromatix 所有的结构体定义。
比如 chromatix_imx258_lc898217xc_parms 的 结构体的定义如下:
typedef struct{ //========================================================================= // Chromatix header version info (MUST BE THE FIRST PARAMETER) //========================================================================= ChromatixVersionInfoType chromatix_version_info; //========================================================================= // Pedestal correction type: // 2-D black correction to To replace the single black point in 0x304 //========================================================================= chromatix_pedestalcorrection_type chromatix_pedestal_correction; //========================================================================= // Linearization //========================================================================= chromatix_L_type chromatix_L; //========================================================================= // Black Level Subtract and Scaling //========================================================================= Chromatix_blk_subtract_scale_type Chromatix_BLSS_data; //========================================================================= // Lens Rolloff (Rolloff) //========================================================================= chromatix_rolloff_type chromatix_rolloff; //========================================================================= // Luma adaptation // These are parameters for special effects, manual BSM //========================================================================= chromatix_LA_special_effects_type chromatix_LA_special_effects;} chromatix_VFE_common_type;
1.2 例:imx258_lc898217xc_preview
imx258_lc898217xc_preview 对应的库文件位于:
mm-camera/mm-camera2/media-controller/modules/sensors/chromatix/0310/chromatix_imx258_lc898217xc/isp/preview/Android.mk
最终会编译成 libchromatix_imx258_lc898217xc_preview.so 共享库
LOCAL_C_INCLUDES += chromatix_imx258_lc898217xc_preview.hLOCAL_SRC_FILES:= chromatix_imx258_lc898217xc_preview.cLOCAL_MODULE := libchromatix_imx258_lc898217xc_previewLOCAL_SHARED_LIBRARIES := libcutilsLOCAL_SHARED_LIBRARIES += libloginclude $(BUILD_SHARED_LIBRARY)
1.2.1 chromatix_imx258_lc898217xc_preview.c
在 c 代码中,方法也一样,调用 load_chromatix 会直接返接 chromatix_parms_type 结构体。
在 chromatix_parms_type 结构体中,会包含 preview 时使用到的 camera chromatix ,详细可以进入 chromatix_imx258_lc898217xc_preview.h 看下,
这些数据是由 Camera Turnning 工程师来调试的,有机会我们同样后续会出一系列 Turnning 的文章
(不过Turnning 是要有实操的,并不是看文档就能够学会的,还是非常看重经验的)
#include "chromatix.h"static chromatix_parms_type chromatix_imx258_lc898217xc_parms = {#include "chromatix_imx258_lc898217xc_preview.h"};/*============================================================================ * FUNCTION - load_chromatix - * DESCRIPTION: *==========================================================================*/void *load_chromatix(void){ return &chromatix_imx258_lc898217xc_parms;}
更多相关文章
- android EditText设置不可写
- android 使用html5作布局文件: webview跟javascript交互
- android studio调试c/c++代码
- Android(安卓)Wifi模块分析(三)
- Android中dispatchDraw分析
- IM-A820L限制GSM,WCDMA上网的原理(其他泛泰机型可参考)7.13
- 锁屏界面
- Android(安卓)Chromium WebView html js 开发系列
- Android平台上优秀的开源项目