高通mm-camera平台 Camera移植


高通Cam-X平台 Camera移植

注:此文檔以在高通8916平台移植OV5648為例,給大家講解Android SOC的底層Camera。

Reference:

介紹

camera原理:外部光線穿過lens后,經過color filter濾波后照射到sensor面上,sensor將從lens上傳到過來的光線轉換成電信號,再通過內部的AD轉換為數字信號,如果sensor沒有集成DSP,則通過DVP的方式傳輸到baseband,此時的數據格式是RAW DATA。必須通過平台的isp來處理。如果集成了DSP,這RAW DATA數據經過AWB,color matrix,lens shading,gamma,sharpness,AE和de-noise處理后輸出YUV或者RGB格式的數據。最后會由CPU送到framebuffer中進行顯示。

我們所說的Camera實際上是指Camera模組,包括以下部分:

  • 感光元件:Sensor
  • 對焦馬達:Actuator
  • 儲存介質:EEPROM
  • 閃光燈:Flash
  • 總線:CSIPHY、CSID

高通平台的Camera方案

高通Camera的調試主要是以Senor的bring-up以及tuning。注意這里的Sensor是在Camera中,而不是傳統意義上的Senor(例如三軸傳感器等)。

順帶提一下,高通平台的Camera架構從以前用的mm-camera轉向camx-chi,完全是兩樣不同的東西:軟件架構不同、代碼位置不同。

CamX架構:

但是如果沒有特殊的客制化需求,一般不在框架中進行修改。后面我們會專門介紹這個部分。

准備

准備資料

調試之前,需要有下列資料:

文檔清單
Sensor 以及 AF 的 數據手冊
供應商針對高通 Chromatix 工具調試好的Chromatix代碼
AF的用戶空間驅動、以及AF效果代碼
EEPROM用戶空間驅動和EEPROM效果代碼

確定硬件

MIPI相關:MIPI CLK 以及 DATA 線

復位:下電PWDW 以及 Reset

供電:AVDD(2.8V)、DVDD(1.2V)、IOVDD(1.8V)、AFVDD(2.8V)

通信相關:I2C等通信總線,具體根據模組的情況以及SOC平台來決定。

高通 的CCI 接口,不能作為普通 i2c 使用,只能連接 camera。

Cam-x平台添加驅動

Kernel 部分

Device Tree

包括Sensor、GPIO、供電以及驅動控制所需的定義等

1、Sensor:

  • 供電:PMIC
  • GPIO、Pinctrl

2、AF:供電、最大最小電壓以及工作模式

3、EEPROM

4、閃光燈

代碼路徑:kernel/arch/arm/boot/dts/qcom

文件名:msm8916-camera-sensor-qrd-skui.dtsi

需添加的代碼:

qcom,camera@6a {  //這需要與1.3節中添加的Clock地址向對應。

    cell-index = <0>;  //唯一標識,用來區分多個攝像頭。

    compatible = "ovti,ov5648";// 這要與驅動代碼中的名字相對應,即:static const struct of_device_id ov5648_dt_match[] = {..
    {
        .compatible = "ovti,ov5648",
        .data = &ov5648_s_ctrl
    },

    reg = <0x6a 0x0>; //// 這需要與1.3節中添加的Clock地址向對應。

    qcom,slave-id = <0x6c 0x300a 0x5648>;
    // 0x6c為攝像頭的I2C地址,0x300a為攝像頭存放ID的寄存器地址,0x5648為攝像頭的ID,這都需要查看datasheet或直接問模組廠。

    qcom,csiphy-sd-index = <1>; // 用於接收傳感器數據的csiphy實例,可以配置的值:0,1,2
    qcom,csid-sd-index = <1>;   // 用於接收傳感器數據的csid核心實例,可以配置的值:0,1,2

    // 以上兩個設置需要查看主板原理圖,看主板上攝像頭是接在CSI0還是CSI1上的,一般后攝像頭都會接到CSI0上,前攝像頭會接在CSI1上。

    qcom,mount-angle = <270>; // 攝像頭在設備上的物理安裝角度(sensor raw圖默認的方向都是90或者270!)
    // 該參數為攝像頭預覽界面的方向,如果預覽方向有被旋轉,可以通過修改這個參數進行修正。

    qcom,eeprom-src = <&eeprom0>;       // 如果支持otp(eeprom)的話,就配置成各種的eeprom節點,否則不配置。
    qcom,actuator-src = <&actuator0>;   // 如果支持馬達的話,就配置成各自的馬達節點,否則不配置。
	qcom,led-flash-src = <&led_flash0>; // 如果支持閃光燈的話,就配置成各自的閃光燈節點,否則不配置。
    
    qcom,sensor-name = "ov5648_oty5f03";
    // 這個對應vendor中lib文件夾的文件名,具體可參看2.2節。

    cam_vdig-supply = <&pm8916_l2>;
    cam_vana-supply = <&pm8916_l17>;
    cam_vio-supply = <&pm8916_l6>;
    // 以上三個參數分別對應DVDD(vdig)、AVDD(vana)、DOVDD(vio)三個電壓,具體所接的是哪路電壓,需要參看主板原理圖。

    qcom,cam-vreg-name = "cam_vdig", "cam_vio", "cam_vana";
    qcom,cam-vreg-type = <0 1 0>;
    qcom,cam-vreg-min-voltage = <1200000 0 2850000>;
    qcom,cam-vreg-max-voltage = <1200000 0 2850000>;
    qcom,cam-vreg-op-mode = <200000 0 80000>;
    //這五個配置要分別與上面的三個電壓一一對應(按照從上到下的順序),如果有對焦馬達的還要在后面填一路AF的電壓,如下所示:
    cam_vaf-supply = <&pm8916_l10>; // avdd供電,是否是要配置,配置成哪路系統供電,需要和硬件溝通!
    qcom,cam-vreg-name = "cam_vdig", "cam_vio",     "cam_vana",    "cam_vaf"; 
      /* 配置sensor需要的所有電源。
         可配置選項:"cam_vdig", "cam_vana", "cam_vio", "cam_vaf"
	     分別代表含義:dvdd,avdd,iovdd,af供電
		 不一定要全部配置,用到哪路配哪路,有些電路硬件自己拉高了,具體跟硬件溝通。
	   */
    qcom,cam-vreg-type = <0 1 0 0>;  // 指定用於此sensor的電源類型,0表示ldo電源,1表示lvs電源。默認配0.
      qcom,cam-vreg-min-voltage = <1200000 0 2850000 2800000>; 
      qcom,cam-vreg-max-voltage = <1200000 0 2850000 2800000>; // 供電電源的最大值,單位mV
      qcom,cam-vreg-op-mode = <200000 0 80000 100000>;  // 供電電源的最佳電壓水平
	  //    上述電壓值分別是按`qcom,cam-vreg-name = "cam_vdig","cam_vio","cam_vana","cam_vaf";` 順序一一對應的!

    pinctrl-names = "cam_default", "cam_suspend"; // 默認就這么配置,前面代表clk,后面代表reset腳和standby腳,喚醒作用。
    pinctrl-0 = <&cam_sensor_mclk1_default   &cam_sensor_front_default>; // 按照順序一一對應的
    pinctrl-1 = <&cam_sensor_mclk1_sleep     &cam_sensor_front_sleep>;   // 按照順序一一對應的
    // 以上這兩個需要區分的就是前后攝像頭的配置不一樣,上面這種配置是前攝像頭的配置,后攝像頭的配置如下所示:
    /* 如果是后攝像頭,配置如下所示
    pinctrl-names = "cam_default", "cam_suspend";
    pinctrl-0 = <&cam_sensor_mclk0_default  &cam_sensor_rear_default>;
    pinctrl-1 = <&cam_sensor_mclk0_sleep    &cam_sensor_rear_sleep>;
    */

    gpios = <&msm_gpio 27 0>,    <&msm_gpio 28 0>,    <&msm_gpio 33 0>,    <&msm_gpio 119 0>;
    qcom,gpio-reset = <1>;    // 傳感器 reset腳的索引
    qcom,gpio-standby = <2>;  // 傳感器 standby腳的索引
    qcom,gpio-vana = <3>;
    qcom,gpio-req-tbl-num = <0 1 2 3>; // mclk,reset,stanby的索引;
        // 由於mclk為0,qcom,gpio-reset = <1>,qcom,gpio-standby = <2>;因此配置成 <0,1,2,3>
    qcom,gpio-req-tbl-flags = <1 0 0 0>; // gpio的方向,mclk為1,表示輸出,reset、standby和vana都為0,表示輸入。
    qcom,gpio-req-tbl-label = "CAMIF_MCLK",     "CAM_RESET",    "CAM_STANDBY",    "CAM_VANA";
    	/* gpio的名稱。
				常用值:
				"CAMIF_MCLK", "CAM_RESET","CAM_STANDBY";
				"CAMIF_MCLK0", "CAM_RESET0","CAM_STANDBY0";
				"CAMIF_MCLK1", "CAM_RESET1","CAM_STANDBY1";
				"CAMIF_MCLK2", "CAM_RESET2","CAM_STANDBY2";
		*/
    // 上面這部分主要是配置GPIO口,這里需要注意的是gpios的數組要與gpio-req-tbl-label的名字一一對應,即gpio 27對應CAMIF_MCLK,而reset 、standby 、vana 分別對應gpios數組中的第1、2、3參數,gpio-req-tbl-num也對應於gpios中數組的標號。

    qcom,gpio-set-tbl-num = <1 1>;
    qcom,gpio-set-tbl-flags = <0 2>;
    qcom,gpio-set-tbl-delay = <1000 4000>;
    // 這三個參數是前攝像頭的固定模式,后攝像頭不需要這個設置,在配置后攝像頭時直接去掉即可。

    qcom,csi-lane-assign = <0x4320>;
    // 該參數為主芯片mipi Lane個數配置寄存器。

    qcom,csi-lane-mask = <0x3>;
    // 該參數為配置mipi Lane個數,0x3為1組數據線加1組時鍾線,0x07為2組數據線加1組時鍾線,0x1f為4組數據線加1主時鍾線。

    qcom,sensor-position = <1>;
    // 該參數,如果添加的是前攝像頭需要配置成1,如果是后攝像頭需要配置成0

    qcom,sensor-mode = <1>; // 傳感器模式支持
    	/*
            0 -> back camera 2D
            1 -> front camera 2D
            2 -> back camera 3D
            3 -> back camera int 3D
    	*/
    qcom,cci-master = <0>; // sensor使用的master id。可選值: `0 -> MASTER 0`、`1 -> MASTER 1`

    status = "ok";

    clocks = <&clock_gcc clk_mclk1_clk_src>,    <&clock_gcc clk_gcc_camss_mclk1_clk>; // 設備使用的時鍾
    clock-names = "cam_src_clk", "cam_clk"; // 設備所需時鍾的名稱
    // 上面兩個Clocks和Clock-names是前攝像頭的配置,后攝像頭的配置如下:
    /*	
    clocks = <&clock_gcc clk_mclk0_clk_src>,    <&clock_gcc clk_gcc_camss_mclk0_clk>;
    clock-names = "cam_src_clk", "cam_clk";
	*/
};

另外如果有對焦馬達還需要修改對焦馬達的地址,如下所示:

actuator0: qcom,actuator@6e {
    cell-index = <3>;
    reg = <0x18>;
    compatible = "qcom,actuator";
    qcom,cci-master = <0>;
};

編譯系統

代碼路徑:kernel/arch/arm/configs

文件名:msm8916_defconfig msm8916-perf_defconfig

需添加的代碼:CONFIG_OV5648=y

Clock

代碼路徑:kernel/arch/arm/mach-msm

文件名:clock-8226.c

需添加的代碼:

CLK_LOOKUP("cam_src_clk", mclk0_clk_src.c, "6f.qcom,camera"),
CLK_LOOKUP("cam_src_clk", mclk1_clk_src.c, "90.qcom,camera"),
CLK_LOOKUP("cam_src_clk", mclk0_clk_src.c, "6d.qcom,camera"),
CLK_LOOKUP("cam_src_clk", mclk0_clk_src.c, "6a.qcom,camera"),
CLK_LOOKUP("cam_src_clk", mclk0_clk_src.c, "6c.qcom,camera"),
CLK_LOOKUP("cam_src_clk", mclk0_clk_src.c, "20.qcom,camera"),
CLK_LOOKUP("cam_src_clk", mclk0_clk_src.c, "78.qcom,camera"),

CLK_LOOKUP("cam_clk", camss_mclk0_clk.c, "6f.qcom,camera"),
CLK_LOOKUP("cam_clk", camss_mclk1_clk.c, "90.qcom,camera"),
CLK_LOOKUP("cam_clk", camss_mclk0_clk.c, "6d.qcom,camera"),
CLK_LOOKUP("cam_clk", camss_mclk0_clk.c, "6a.qcom,camera"),
CLK_LOOKUP("cam_clk", camss_mclk0_clk.c, "6c.qcom,camera"),
CLK_LOOKUP("cam_clk", camss_mclk0_clk.c, "78.qcom,camera"),
CLK_LOOKUP("cam_clk", camss_mclk0_clk.c, "20.qcom,camera"),

CLK_LOOKUP("cam_src_clk", mclk0_clk_src.c, "62.qcom,camera"),
CLK_LOOKUP("cam_clk", camss_mclk0_clk.c, "62.qcom,camera"),
CLK_LOOKUP("cam_src_clk", mclk0_clk_src.c, "0.qcom,camera"),
CLK_LOOKUP("cam_src_clk", mclk0_clk_src.c, "1.qcom,camera"),
CLK_LOOKUP("cam_clk", camss_mclk0_clk.c, "0.qcom,camera"),
CLK_LOOKUP("cam_clk", camss_mclk0_clk.c, "1.qcom,camera"),

需要注意的是這里的標示(如:6a)不能重復,並且添加的時候需要同時添加一組代碼。

添加編譯系統

Kconfig和Makefile文件中添加對應IC代碼:

代碼路徑:

  • Kconfig:kernel/drivers/media/platform/msm/camera_v2/Kconfig
  • Makefile:kernel/drivers/media/platform/msm/camera_v2/sensor/Makefile
添加Kconfig
config OV5648

bool "Sensor OV5648 (BAYER 5M)"
depends on MSMB_CAMERA

—help—

OmniVision 5 MP Bayer Sensor, only use 1 mipi lane,
preview set to 1296*972 at 30 fps,
snapshot set to 2592*1944 at 12 fps,
This sensor driver does not support auto focus.
添加Makefile
obj-$(CONFIG_OV5648) = ov5648.o

Camera驅動

代碼路徑:kernel/drivers/media/platform/msm/camera_v2sensor

文件名:ov5648.c

需添加的代碼

該部分主要要注意電源的設置,它包括傳感器電源信息,IO控制和Mclk。

通常情況下,無需修改該部分內容,因為大部分配置已在設備樹文件中完成;但可以修改.delay = 0 字段來和時間匹配。

static struct msm_sensor_power_setting ov5648_power_setting[] = {
    {
        .seq_type = SENSOR_VREG,
        .seq_val = CAM_VIO,
        .config_val = 0,
        .delay = 0,
    },
    {
        .seq_type = SENSOR_VREG,
        .seq_val = CAM_VAF,
        .config_val = 0,
        .delay = 5,
    },
    {
        .seq_type = SENSOR_GPIO,
        .seq_val = SENSOR_GPIO_VDIG,
        .config_val = GPIO_OUT_LOW,
        .delay = 5,
    },
    {
        .seq_type = SENSOR_GPIO,
        .seq_val = SENSOR_GPIO_VDIG,
        .config_val = GPIO_OUT_HIGH,
        .delay = 5,
    },
    {
        .seq_type = SENSOR_GPIO,
        .seq_val = SENSOR_GPIO_VANA,
        .config_val = GPIO_OUT_HIGH,
        .delay = 5,
    },
    {
        .seq_type = SENSOR_GPIO,
        .seq_val = SENSOR_GPIO_STANDBY,
        .config_val = GPIO_OUT_LOW,
        .delay = 5,
    },
    {
        .seq_type = SENSOR_GPIO,
        .seq_val = SENSOR_GPIO_STANDBY,
        .config_val = GPIO_OUT_HIGH,
        .delay = 10,
    },
    {
        .seq_type = SENSOR_GPIO,
        .seq_val = SENSOR_GPIO_RESET,
        .config_val = GPIO_OUT_LOW,
        .delay = 5,
    },
    {
        .seq_type = SENSOR_GPIO,
        .seq_val = SENSOR_GPIO_RESET,
        .config_val = GPIO_OUT_HIGH,
        .delay = 10,
    },
    {
        .seq_type = SENSOR_CLK,
        .seq_val = SENSOR_CAM_MCLK,
        .config_val = 23880000,
        .delay = 10,
    },
    {
        .seq_type = SENSOR_I2C_MUX,
        .seq_val = 0,
        .config_val = 0,
        .delay = 0,
    },
};

static struct msm_sensor_power_setting ov5648_power_down_setting[] = {
    {
        .seq_type = SENSOR_VREG,
        .seq_val = CAM_VIO,
        .config_val = 0,
        .delay = 0,
    },
    {
        .seq_type = SENSOR_VREG,
        .seq_val = CAM_VAF,
        .config_val = 0,
        .delay = 5,
    },
    {
        .seq_type = SENSOR_GPIO,
        .seq_val = SENSOR_GPIO_VANA,
        .config_val = GPIO_OUT_LOW,
        .delay = 5,
    },
    {
        .seq_type = SENSOR_GPIO,
        .seq_val = SENSOR_GPIO_STANDBY,
        .config_val = GPIO_OUT_LOW,
        .delay = 5,
    },
    {
        .seq_type = SENSOR_GPIO,
        .seq_val = SENSOR_GPIO_RESET,
        .config_val = GPIO_OUT_LOW,
        .delay = 10,
    },
    {
        .seq_type = SENSOR_CLK,
        .seq_val = SENSOR_CAM_MCLK,
        .config_val = 23880000,
        .delay = 10,
    },
    {
        .seq_type = SENSOR_I2C_MUX,
        .seq_val = 0,
        .config_val = 0,
        .delay = 0,
    },
};

Vendor部分

Makefile

Makefile文件中添加IC代碼:

代碼路徑:qcom/proprietary/common/config

文件名:device-xx-vendor.mk

需添加的代碼:

MM_CAMERA = libchromatix_ov5648_oty5f03_common
MM_CAMERA = libchromatix_ov5648_oty5f03_default_video
MM_CAMERA = libchromatix_ov5648_oty5f03_preview
MM_CAMERA = libchromatix_ov5648_oty5f03_snapshot
MM_CAMERA = libchromatix_ov5648_oty5f03_zsl
MM_CAMERA = libmmcamera_ov5648_oty5f03

注意:如果這里沒有添加以上代碼,在編譯的時候就不會生成相應的so文件。

這so文件可以在src/LINUX/android/out/target/product/msm8916_32/system/vendor/lib目錄下找到:

libchromatix_ov5648_oty5f03_common.so
libchromatix_ov5648_oty5f03_default_video.so
libchromatix_ov5648_oty5f03_preview.so
libchromatix_ov5648_oty5f03_snapshot.so
libchromatix_ov5648_oty5f03_zsl.so
libmmcamera_ov5648_oty5f03.so

Lib驅動

代碼路徑:

vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/sensor_libs

文件夾名:ov5648_oty5f03

需添加的代碼如下。

移植相機接口配置

這部分內容定義了傳感器接口配置,包括I2C和MIPI。請確認設置不會和dtsi文件中的類似內容沖突。

static struct msm_camera_sensor_slave_info sensor_slave_info = {
    .camera_id = CAMERA_0,
    .slave_addr = 0x6c,
    .addr_type = MSM_CAMERA_I2C_WORD_ADDR,
    .sensor_id_info = {
        .sensor_id_reg_addr = 0x300a,
        .sensor_id = 0x5648,
    },
    .power_setting_array = {
        .power_setting = ov5648_oty5f03_power_setting,
        .size = ARRAY_SIZE(ov5648_oty5f03_power_setting),
        .power_down_setting = ov5648_oty5f03_power_down_setting,
        .size_down = ARRAY_SIZE(ov5648_oty5f03_power_down_setting),
    },
};
static sensor_output_t sensor_output = {
    .output_format = SENSOR_BAYER,
    .connection_mode = SENSOR_MIPI_CSI,
    .raw_output = SENSOR_10_BIT_DIRECT,
};
#ifndef VFE_40
static struct csi_lane_params_t csi_lane_params = {
    .csi_lane_assign = 0xE4,
    .csi_lane_mask = 0x3,
    .csi_if = 1,
    .csid_core = {0},
    .csi_phy_sel = 0,
};
#else
static struct csi_lane_params_t csi_lane_params = {
    .csi_lane_assign = 0x4320,
    .csi_lane_mask = 0x3,
    .csi_if = 1,
    .csid_core = {0},
    .csi_phy_sel = 1,
};
#endif
移植傳感器輸出配置

這部分內容介紹了傳感器不同模式的配置和設置,包含各模式的I2C 寄存器設備、CSI參數、crop參數、傳感器輸出信息和chormatix數組。這些配置的數組大小應和傳感器支持的模式種類相同。

static struct msm_camera_i2c_reg_setting res_settings[] = {
    {
        .reg_setting = res0_reg_array,
        .size = ARRAY_SIZE(res0_reg_array),
        .addr_type = MSM_CAMERA_I2C_WORD_ADDR,
        .data_type = MSM_CAMERA_I2C_BYTE_DATA,
        .delay = 0,
    },
    {
        .reg_setting = res1_reg_array,
        .size = ARRAY_SIZE(res1_reg_array),
        .addr_type = MSM_CAMERA_I2C_WORD_ADDR,
        .data_type = MSM_CAMERA_I2C_BYTE_DATA,
        .delay = 0,
    },
};
// ……
static struct msm_camera_csi2_params *csi_params[] = {
    &ov5648_oty5f03_csi_params,
    &ov5648_oty5f03_csi_params,
};
// ……
static struct sensor_crop_parms_t crop_params[] = {
    {0, 0, 0, 0},
    {0, 0, 0, 0},
};
// ……
static struct sensor_lib_out_info_t sensor_out_info[] = {
    {
        .x_output = 2592,
        .y_output = 1944,
        .line_length_pclk = 2816,
        .frame_length_lines = 2380,
        .vt_pixel_clk = 84000000,
        .op_pixel_clk = 84000000,
        .binning_factor = 1,
        .max_fps = 12.5,
        .min_fps = 7.5,
        .mode = SENSOR_DEFAULT_MODE,
    },
    {
        .x_output = 1296,
        .y_output = 972,
        .line_length_pclk = 1408,
        .frame_length_lines = 992,
        .vt_pixel_clk = 42000000,
        .op_pixel_clk = 42000000,
        .binning_factor = 1,
        .max_fps = 30.0,
        .min_fps = 7.5,
        .mode = SENSOR_DEFAULT_MODE,
    },
};
// ……
static struct sensor_lib_chromatix_t ov5648_oty5f03_chromatix[] = {
    {
        .common_chromatix = OV5648_OTY5F03_LOAD_CHROMATIX(common),
        .camera_preview_chromatix = OV5648_OTY5F03_LOAD_CHROMATIX(snapshot),
        .camera_snapshot_chromatix = OV5648_OTY5F03_LOAD_CHROMATIX(snapshot),
        .camcorder_chromatix = OV5648_OTY5F03_LOAD_CHROMATIX(default_video),
    },
    {
        .common_chromatix = OV5648_OTY5F03_LOAD_CHROMATIX(common),
        .camera_preview_chromatix = OV5648_OTY5F03_LOAD_CHROMATIX(preview),
        .camera_snapshot_chromatix = OV5648_OTY5F03_LOAD_CHROMATIX(preview),
        .camcorder_chromatix = OV5648_OTY5F03_LOAD_CHROMATIX(default_video),
    },
};

鏡頭信息移植

相機處理流程(比如曝光計算)需要鏡頭信息。因此,以下結構需添加正確的鏡頭信息。

static sensor_lens_info_t default_lens_info = {
    .focal_length = 2.37,
    .pix_size = 1.4,
    .f_number = 2.4,
    .total_f_dist = 1.97,
    .hor_view_angle = 70.24,
    .ver_view_angle = 52.68,

};
曝光配置移植

通常情況下,不同傳感器有不同的曝光控制方式。所以,當傳感器打開后,需移植曝光配置以成功調試傳感器的曝光控制。

包括以下函數:

  • ov5648_real_to_register_gain – 將實際邏輯增益轉換為寄存器值。

  • ov5648_register_to_real_gain – 將寄存器值轉換成真實的邏輯增益。

  • ov5648_calculate_exposure – 獲取曝光時間和增益的另一個曝光配置.

  • ov5648_fill_exposure_array – 准備另一個曝光配置數組。

添加Chromatix文件

代碼路徑:vendor/qcom/proprietary/mm-camera/mm-camera2media-controller/modules/sensor/schro/matix1/libchromatix

文件夾名:chromatix_ov5648_oty5f03

需添加的代碼:該部分主要是針對raw格式是攝像頭,而yuv格式的攝像頭不需要做該步驟,而這添加的內容主要是raw攝像頭效果參數的.h文件,這需要向模組或IC廠索要該部分的文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM