【高通SDM660平台 Android 10.0】(12) --- Camera Chromatix 代码分析


【高通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.mk

ifeq ($(BUILD_SERVER), true)
  	CHROMATIX_VERSION := 0208
else 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
  	endif
endif

我们进入目录 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_common</ISPCommon>
      <PostProc>imx258_lc898217xc_postproc</PostProc>
      <CPPPreview>imx258_lc898217xc_cpp_preview</CPPPreview>
      <CPPSnapshot>imx258_lc898217xc_cpp_snapshot</CPPSnapshot>
      <CPPLiveshot>imx258_lc898217xc_cpp_liveshot</CPPLiveshot>
    </ChromatixName>
  </CommonChromatixInfo>
  <ResolutionChromatixInfo>
    <ChromatixName sensor_resolution_index="0">
      <ISPPreview>imx258_lc898217xc_snapshot</ISPPreview>
      <ISPSnapshot>imx258_lc898217xc_snapshot</ISPSnapshot>
      <ISPVideo>imx258_lc898217xc_default_video</ISPVideo>
      <CPPVideo>imx258_lc898217xc_cpp_video</CPPVideo>
      <A3Preview>imx258_lc898217xc_zsl_preview_3a</A3Preview>
      <A3Video>imx258_lc898217xc_zsl_video_3a</A3Video>
    </ChromatixName>
    <ChromatixName sensor_resolution_index="1">
      <ISPPreview>imx258_lc898217xc_preview</ISPPreview>
      <ISPSnapshot>imx258_lc898217xc_preview</ISPSnapshot>
      <ISPVideo>imx258_lc898217xc_preview</ISPVideo>
      <CPPVideo>imx258_lc898217xc_cpp_video</CPPVideo>
      <A3Preview>imx258_lc898217xc_4k_preview_3a</A3Preview>
      <A3Video>imx258_lc898217xc_4k_video_3a</A3Video>
    </ChromatixName>
    <ChromatixName sensor_resolution_index="2">
      <ISPPreview>imx258_lc898217xc_preview</ISPPreview>
      <ISPSnapshot>imx258_lc898217xc_preview</ISPSnapshot>
      <ISPVideo>imx258_lc898217xc_preview</ISPVideo>
      <CPPVideo>imx258_lc898217xc_cpp_video</CPPVideo>
      <A3Preview>imx258_lc898217xc_default_preview_3a</A3Preview>
      <A3Video>imx258_lc898217xc_default_video_3a</A3Video>
    </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.c

LOCAL_MODULE           := libchromatix_imx258_lc898217xc_common
LOCAL_SHARED_LIBRARIES := libcutils
ifeq ($(MM_DEBUG),true)
LOCAL_SHARED_LIBRARIES += liblog
endif

include $(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.h

LOCAL_SRC_FILES:= chromatix_imx258_lc898217xc_preview.c

LOCAL_MODULE           := libchromatix_imx258_lc898217xc_preview

LOCAL_SHARED_LIBRARIES := libcutils
LOCAL_SHARED_LIBRARIES += liblog

include $(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;
}

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

"小夜猫&小懒虫&小财迷"的男人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值