跳转至

点sensor程序说明


1. sensor图像显示功能介绍

该demo 主要展示了从Sensor到RTSP 整条Pipeline该如何串接, 如上图所示,具体支持如下功能:

  1. 功能场景:sensor采集到的视频显示到RTSP上

  2. 视频流:sensor->vif->isp->scl->venc->rtsp

  3. 支持配置双摄

  4. 支持配置iqbin的路径


2. 编译环境说明

Note

一般默认板端已经打包好了相应程序,因此sample_code程序编译并非必须。你可以直接在板端/customer/sample_code/bin文件夹中找到prog_vif_sensor_demo。如果你没有找到文件或有自己修改程序的需求,可参考如下步骤。

  1. 如果没有找到prog_vif_sensor_demo,可以查看\sdk\verify\sample_code\source\iford\vif\sensor_demo\sensor_demo.mk内是否包含APP_REL_PREFIX:= bin,如果没有,可以在sensor_demo.mk补上,这样就会在编译project时一同打包到image中;

  2. 在project路径下根据板子(nand/nor,ddr型号等)选择defconfig进行整包编译

    例如Comake PI D2型号板子,使用emmc,ddr4的配置,使用以下defconfig,其他板子型号详细参考用户手册

    ipc_iford.emmc.glibc-11.1.0-ext4fs.ssc029d.256.bga8_lpddr4x_d2_full_defconfig

    在project目录执行以下命令进行编译;

    export PATH=/tools/toolchain/gcc-sigmastar-9.1.0-2019.11-x86_64_arm-eabi/bin:/tools/toolchain/gcc-11.1.0-20210608-sigmastar-glibc-x86_64_arm-linux-gnueabihf/bin:$PATH

    export CROSS_COMPILE=arm-linux-gnueabihf-

    export ARCH=arm

    make ipc_iford.emmc.glibc-11.1.0-ext4fs.ssc029d.256.bga8_lpddr4x_d2_full_defconfig

    make clean && make image -j8

  3. 如有修改程序的需求,可以cd进到sdk/verify/sample_code目录执行make clean && make source/iford/vif/sensor_demo进行编译;

  4. sample_code/out/arm/app/prog_vif_sensor_demo获取可执行文件;

  5. 将可执行文件prog_vif_sensor_demo放到板子/customer/sample_code/bin路径上,修改权限777。


3. 运行环境说明

3.1 单sensor运行环境说明

  • 板端环境

    单Sensor有两种接法,一种是默认SJ5 IMX681 SENSOR,另外一种是SJ6接 IMX681 SENSOR,使用SJ6/SJ1需要改动硬件,详情参考 Comake Pi D2 硬件说明3.15 MIPI01 PAD2 2LANE接口(SJ1)的说明。

    SJ5连接Sensor如下图所示

    SJ6连接Sensor如下图所示

  • dts配置:

    mipi snr0 2lane 开发板上使用,使用D2 full对应的defconfig的情况下,默认dts已配好,无需修改

  • sensor 驱动配置:

    /customer/demo.sh路径修改insmod对应的sensor ko,例如imx681 sensor时,可配置为:

    insmod /config/modules/5.10/imx681_MIPI.ko chmap=1(跑单sensor)

3.2 双sensor运行环境说明

  • 板端环境

    双Sensor连接需要SJ1/SJ5/SJ6,可以选择SJ5-SJ1组合,或者SJ6-SJ1组合,其中SJ6-SJ1组合还需要改动硬件。详情参考 Comake Pi D2 硬件说明3.15 MIPI01 PAD2 2LANE接口(SJ1)的说明。

    同时为了稳定高帧率,如1080P60,需要扩展板给Sensor供电如JP53所示,I2C需要1V8供电如JP52所示

    SJ5-SJ1连接Sensor如下如所示

    SJ6-SJ1连接Sensor如下如所示

    注意 MIPI排线不能接反,否则会烧坏Sensor

  • dts配置:

    确认\kernel\arch\arm\boot\dts\iford-ssz029d-s01a-d2-full-camdriver.dtsi文件的dts配置:

    csi: csi {
            compatible = "sstar,csi";
            io_phy_addr = <0x1f000000>;
            banks = <0x153C>,<0x153D>,<0x153E>,<0x1538>,<0x153A>,<0x153B>;
            atop_banks = <0x153F>;
            clkgen_banks = <0x1038>;
            interrupts=  <GIC_SPI INT_IRQ_MIPI_CSI2 IRQ_TYPE_LEVEL_HIGH>;
            clocks = <&CLK_csi0_mac_lptx_top_i>, <&CLK_csi0_mac_top_i>, <&CLK_csi0_ns_top_i>, <&CLK_csi1_mac_lptx_top_i>, <&CLK_csi1_mac_top_i>, <&CLK_csi1_ns_top_i>;
            status = "ok";
            /* Config max lane number */
            csi_sr0_lane_num = <2>;
            csi_sr2_lane_num = <2>;
            /* Config lane selection */
            csi_sr0_lane_select = <2 1 0 3 4>;
            csi_sr2_lane_select = <2 1 0>;
            /* Config lane P/N swap */
            csi_sr0_lane_pn_swap = <0 0 0 0 0>;
            csi_sr2_lane_pn_swap = <0 0 0>;
        };
    
        sensorif: sensorif {
        compatible = "sstar,sensorif";
        clocks = <&CLK_sr00_mclk>, <&CLK_sr01_mclk>;
    
        snr0_mipi_i2c = <1>;
        snr2_mipi_i2c = <2>;
    
        /* Config sensor 0 pad mux */
        snr_sr0_mipi_mode         = <5>;
        snr_sr0_mipi_rst_mode     = <1>;
        snr_sr0_rst_pol           = <1>;
        snr_sr0_mipi_pdn_mode     = <0>;
        snr_sr0_mipi_mclk_mode    = <1>;
        snr_sr0_rst_gpio          = <PAD_SR_RST0>;
    
        /* Config sensor 2 pad mux */
        snr_sr2_mipi_mode         = <5>;
        snr_sr2_mipi_rst_mode     = <1>;
        snr_sr2_rst_pol           = <1>;
        snr_sr2_mipi_pdn_mode     = <0>;
        snr_sr2_mipi_mclk_mode    = <1>;
        snr_sr2_rst_gpio          = <PAD_SR_RST1>;
    
        /* Config mclk 37.125MHz supported */
        vif_sr0_mclk_37p125 = <1>;
        vif_sr2_mclk_37p125 = <1>;
    };
    

    mipi snr0+snr1 2+2lane 开发板上使用,使用D2 full对应的defconfig的情况下,默认dts已配好,无需修改

  • sensor 驱动配置:

    /customer/demo.sh路径修改insmod对应的sensor ko,例如imx681 sensor时,可配置为:

    insmod /config/modules/5.10/imx681_MIPI.ko chmap=5(跑双sensor)


4. 运行说明

cd到板端/customer/sample_code/bin路径,运行prog_vif_sensor_demo

参数解释如下:

prog_vif_sensor_demo cmdIndex index sensorIndex iqbin iqBinPath
  • cmdIndex

    cmdIndex:0表示单sensor输出,1表示双sensor输出

  • index + sensorIndex

    执行./prog_vif_sensor_demo 0 index 1第一个参数选择单sensor,第二个参数index,则第三个参数输入为选择sensorIndex,范围是0-7,resolution列表参考执行实例下表,index0/index5为picture格式,VENC暂不支持这两种resource stream

    index 0, Crop(0,0,4032,3024), outputsize(4032,3024), maxfps 15, minfps 3, ResDesc 4032x3024@15fps
    index 1, Crop(0,0,3840,2160), outputsize(3840,2160), maxfps 21, minfps 3, ResDesc 3840x2160@21fps
    index 2, Crop(0,0,2016,1512), outputsize(2016,1512), maxfps 30, minfps 3, ResDesc 2016x1512@30fps
    index 3, Crop(0,0,1920,1080), outputsize(1920,1080), maxfps 30, minfps 3, ResDesc 1920x1080@30fps
    index 4, Crop(0,0,3264,2448), outputsize(3264,2448), maxfps 30, minfps 3, ResDesc 3264x2448@30fps
    index 5, Crop(0,0,4032,3024), outputsize(4032,3024), maxfps 30, minfps 3, ResDesc 4032x3024@30fps
    index 6, Crop(0,0,3840,2160), outputsize(3840,2160), maxfps 30, minfps 3, ResDesc 3840x2160@30fps
    index 7, Crop(0,0,1920,1080), outputsize(1920,1080), maxfps 60, minfps 3, ResDesc 1920x1080@60fps
    choice which resolution use, cnt 8
    
  • iqbin + iqBinPath

    执行./prog_vif_sensor_demo 0 iqbin /config/iqfile/imx681_3m_comake_1201.bin第一个参数选择单sensor场景,第二个参数iqbin,则第三个参数输入为iqbin的文件路径。

注意

选择IQ BIN的时候请注意参考下表与分辨率对应。

分辨率 IQ File 注意
4032x3024@15fps NA 不支持
3840x2160@21fps imx681_8m_comake_1201_30fps.bin NA
2016x1512@30fps imx681_3m_comake_1201_30fps.bin NA
1920x1080@30fps imx681_3m_comake_1201_30fps.bin NA
3264x2448@30fps imx681_8m_comake_1201_30fps.bin NA
4032x3024@30fps NA 不支持
3840x2160@30fps imx681_8m_comake_1201_30fps.bin NA
1920x1080@60fps imx681_2m_comake_1201_60fps.bin NA

执行示例

  1. 配置USB为rndis网卡,cd到/customer/sample_code/bin/resource,运行./setup_rndis.sh,默认会拉起usb0网卡,输入ifconfig会出现以下log:

    usb0      Link encap:Ethernet  HWaddr E6:46:AC:2F:77:56
        inet addr:192.168.7.2  Bcast:192.168.7.255  Mask:255.255.255.0
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RX packets:48 errors:0 dropped:31 overruns:0 frame:0
        TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000
        RX bytes:3400 (3.3 KiB)  TX bytes:0 (0.0 B)
    

    此时PC端会枚举出一个虚拟的RNDIS网卡,可以通过“右键->开始->设备管理器->网络适配器查看,通常名字为USB Ethernet/RNDIS Gadget,如果没有该设备可能电脑没有安装RNDIS驱动,可以参考链接第四章进行安装:https://dev.comake.online/home/article/7672

  2. 运行单sensor示例: ./prog_vif_sensor_demo 0 index 3 iqbin /config/iqfile/imx681_3m_comake_1201.bin

    运行双sensor示例: ./prog_vif_sensor_demo 1 index 3 iqbin /config/iqfile/imx681_3m_comake_1201.bin

    运行demo后,如果prog_vif_sensor_demo不带index + sensorIndex会打印sensor可选择输入的res,输入你想选择preview的res(sensor resolution),例如imx618sensor,会打印以下log:

  3. 注意同一型号sensor,跑两路流,请输入同一个res index

    index 0, Crop(0,0,4032,3024), outputsize(4032,3024), maxfps 15, minfps 3, ResDesc 4032x3024@15fps
    index 1, Crop(0,0,3840,2160), outputsize(3840,2160), maxfps 21, minfps 3, ResDesc 3840x2160@21fps
    index 2, Crop(0,0,2016,1512), outputsize(2016,1512), maxfps 30, minfps 3, ResDesc 2016x1512@30fps
    index 3, Crop(0,0,1920,1080), outputsize(1920,1080), maxfps 30, minfps 3, ResDesc 1920x1080@30fps
    index 4, Crop(0,0,3264,2448), outputsize(3264,2448), maxfps 30, minfps 3, ResDesc 3264x2448@30fps
    index 5, Crop(0,0,4032,3024), outputsize(4032,3024), maxfps 30, minfps 3, ResDesc 4032x3024@30fps
    index 6, Crop(0,0,3840,2160), outputsize(3840,2160), maxfps 30, minfps 3, ResDesc 3840x2160@30fps
    index 7, Crop(0,0,1920,1080), outputsize(1920,1080), maxfps 60, minfps 3, ResDesc 1920x1080@60fps
    choice which resolution use, cnt 8
    3
    You select 3 res
    Res 3
    

5. 运行结果说明

  • preview 单sensor效果查看

    正常出流会打印rtsp url,单sensor打印一个url,双sensor打印两个url,例如以下log:

    使用vlc media player 或 potplayer 等视频播放软件,以打开链接方式播放,播放成功可看到sensor画面。

    =================URL===================
    rtsp://192.168.7.2/6600
    =================URL===================
    Create Rtsp H265 Session, FPS: 30
    

  • 双sensor效果查看

    =================URL===================
    rtsp://192.168.7.2/6600
    =================URL===================
    Create Rtsp H265 Session, FPS: 60
    (ST_DualSensorPipline_Preview 467)exec function pass
    rtsp venc dev0, chn 1, type 3, url 6601
    video width: 1920, height: 1080, Max buf size: 0xfd200
    =================URL===================
    rtsp://192.168.7.2:555/6601
    =================URL===================
    Create Rtsp H265 Session, FPS: 60
    


  • 退出命令

    输入q即可退出demo,退出sensor0拍摄画面,显示黑色。