【高通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;}

更多相关文章

  1. android EditText设置不可写
  2. android 使用html5作布局文件: webview跟javascript交互
  3. android studio调试c/c++代码
  4. Android(安卓)Wifi模块分析(三)
  5. Android中dispatchDraw分析
  6. IM-A820L限制GSM,WCDMA上网的原理(其他泛泰机型可参考)7.13
  7. 锁屏界面
  8. Android(安卓)Chromium WebView html js 开发系列
  9. Android平台上优秀的开源项目

随机推荐

  1. 代孕123
  2. 全球气候变冷
  3. JavaScript 点击事件 - 一个按钮触发另一
  4. MYSQL 死锁
  5. MYSQL ACID
  6. MYSQL锁
  7. 分布式事务(ACID)
  8. 17、华为 华三中小型企业网络架构搭建 【
  9. MYSQL 源码阅读 六
  10. 分布式数据库中间件设想