专栏底层软件RX bypass TX问题

RX bypass TX问题

已解决
dreemseeker2022-11-18
65
12

camera数据从RX bypass给TX时,只需要配置set_bypass_channels就可以吗?bypass后串行器的初始化在哪里实现呢?

底层软件
征程5
评论1
0/1000
  • 只蓝片羽
    Lv.1

    在J5上RX bypass给TX,需要在cim配置下mipi/function内通过enable_bypass=1使能bypass,同时mipi配置文件中dev下enable=1(tx0)/2(tx1)使能对应tx。其中rx0/rx2可bypass给tx0,rx1/rx3可bypass给tx1。

    bypass后的串行器的初始化默认由接收侧统一配置解串与加串,若有单独配置bypass后的串行器需求,可参考sensor库内dummy的实现。

    谢谢~

    2022-11-18
    0
    11
    • dreemseeker回复只蓝片羽:

      了解了,非常感谢!

      2022-11-18
      0
    • dreemseeker回复只蓝片羽:

      你好兰工,我们现在2J5的板子上有两路953串行器,使用美信的模组连接96712后,可以通过上述的方法直接bypass给953吗?

      2022-11-29
      0
    • 只蓝片羽回复dreemseeker:

      您好:

      这里是否可以具体描述一下你们的硬件连接方式,是否是96712接入J5的rx后,期望bypass输出给953? 这种是可以的,但需注意96712最多可以接入4路,但953应该是只能输出1路,而且mipi速率有限制,在调试时可能要注意。并且1个rx的数据只能bypass给1个tx,此处也需注意,这里2路953应该是不能输出同一个96712接入的bypass。

      谢谢~

      2022-11-29
      0
    • dreemseeker回复只蓝片羽:

      你好兰工:

      我们现在的硬件连接方式是:模组——>96712——>J5 RX bypass给 J5 TX——>UB953,96712实际输入是四路模组,其中一路既做前视又做DVR,那么如何将这一路模组bypass给953呢?

      2022-11-29
      0
    • 只蓝片羽回复dreemseeker:

      您好:

      也就是4路模组接入96712后进J5,之后其中一路要bypass输出给UB953。

      这里是可以的,但这里的"bypass"可能有2种方式:

      一种是直接rx原数据(输入是raw还是yuv?),这种方式会将该rx的所有4路都bypass,之后由UB953内选其中1路使用,该方式注意格式与分辨率都是原sensor输入的,同时还需注UB953的MIPI速率可能不能满足输出需求。

      另一种是前视进J5之后,通过内部模块处理之后(可以scale),之后数据到DDR内,要通过IDU模块将其读取后再通过TX设备输出给UB953,该种方式可以改变分辨率,1个TX只能输出1路,格式为YUV422。

      从您描述的"既做前视又做DVR",猜测可能是上述方式2(一般前视分辨率较高,DVR可能要求不用那么高,而且如果是raw的话,应该要过ISP处理之后才能DVR录制使用吧)?

      2022-11-29
      0
    • dreemseeker回复只蓝片羽:

      感谢兰工的回答:

      现有的需求是需要将8MP转成2MP后输出给DVR。

      如果使用方式1的话,意思是说输出也只能是8MP吗?

      如果使用方式2的话,idu如何跟camera匹配,如何从ddr里读取数据,选择使用哪个模组输出,以及相应的scale处理呢?我看到idu的配置文件里有display_addr_type和display_cam_no属性,请问和这些属性有什么关联吗?

      2022-11-30
      0
    • 只蓝片羽回复dreemseeker:

      您好:

      如果使用方式1的话,意思是说输出也只能是8MP吗?” -- 是的,直接rx bypass的场景就是收什么发什么,分辨率、格式等都不变。

      使用方式2的话,可以通过idu从pym或gdc内取出转换后的2m数据进行输出,若直接使用API方式直接取图再设idu输出即可。

      若要绑定通路让idu自动取数据发送,则需要启动idu并start外,还要在初始化时使用对应的进行配置: display_cam_no-对应pipeline id,display_addr_type对应要取的数据图层(应该要取能输出2m的图层,如8M进pym,可能是bl0或ds0层),对应有:

      enum J5_DISPLAY_TYPE {

      SRC_OUTPUT = 1,

      US0,

      GS0,

      GS1,

      GS2,

      GS3,

      GS4,

      BL0,

      BL1,

      BL2,

      BL3,

      BL4,

      DS0,

      DS1,

      DS2,

      DS3,

      DS4,

      DS5 = 18,

      GDC0 = 37,

      };

      谢谢~

      2022-11-30
      0
    • dreemseeker回复只蓝片羽:

      您好兰工:

      根据回复,基于camera_test写了一段代码,有些问题还需您帮忙解答一下。

      请问以下方式符合逻辑吗?另外红色字体的个人理解如有问题请帮忙指正一下,谢谢。

      ret = hb_vio_init(vio_cfg_file);

      ret = hb_cam_init(cam_index, j5dev_file);

      for (i=0;i < port_num;i++) {

      ret = hb_vio_start_pipeline(i);

      }

      for (i=0;i < port_num;i++) {

      ret = hb_cam_start(i);

      }

      ret = hb_vin_init(0, j5dev_file);

      ret = hb_disp_init_dev_cfg(idu_num, iar_file);

      ret = hb_disp_start_id(idu_num);

      hb_disp_layer_off_id(2, idu_num);

      hb_disp_layer_off_id(3, idu_num);

      while(1)

      {

      for(i=0;i

      //此接口是从pym中获取YUV420,NV12格式数据

      ret = hb_vio_get_data(i, HB_VIO_PYM_DATA_V2 , &pym_buf_2);

      if (ret < 0) {

      printf("vio get pym info fail,port=%d\n",i);

      continue;

      } else {

      //此接口是将从pym中获取的数据,通过idu发送给mipi tx

      ret = hb_disp_set_video_bufaddr_id(g_yuv, g_yuv + 3840*2160 * 2 / 3, NULL, NULL, idu_num);

      ret = hb_disp_get_display_done_id(idu_num);

      }

      hb_vio_free_pymbuf(i, HB_VIO_PYM_DATA_V2 ,&pym_buf_2);

      }

      }

      "outputconfig":

      {

      "output_mode": 4,

      //以下宽高配置,是否可以理解为将camera的3840x2160转给tx后转换成了1920x1080

      "panel_width": 1920,

      "panel_height": 1080,

      "display_addr_type": 0,

      "display_cam_no": 0,

      "display_addr_type_layer1": 0,

      "display_cam_no_layer1": 0,

      "backlight_level": 10,

      "panel_type": 1,

      "bg_color": 16744328,

      "contrast_en": 0,

      "contrast_val": 0,

      "bright_en": 0,

      "bright_val": 0,

      "off_contrast": 0,

      "sat_en": 0,

      "sat_val": 0,

      "hue_en": 0,

      "theta_sign": 0,

      "theta_abs": 0,

      "dithering_en": 0,

      "dithering_flag": 0,

      "gamma_en": 0,

      "gamma_val": 0,

      "user_refresh": 1,

      "user_refresh_layer1": 1,

      "rotate": 0,

      "platform": 1,

      "big_endian": 0

      }

      2022-12-01
      2
    • 只蓝片羽回复dreemseeker:

      您好:

      1. ret = hb_vin_init(0, j5dev_file); -- vin init不用单独调用,前面已调用的hb_cam_init就可以了。
      2. idu是不能8m转2m的,因此不能直接将8m的图输出给idu使用,可以使用pym的2m图层(如gs0/bl0层,需要json中配置使能,之后从获取的结构中取相应的指针即可。

      hb_disp_set_video_bufaddr_id(直接用2m图层的指针)

      3. 这个看上去是要将所有pipe的数据都要通过idu输出? 是否应该只是8m这路的要idu输出?

      4. 目前的idu显示是通过api方式写的,也可能通过json中直接配置指定pipe路的2m层(参考上条答复),这样只要init与start,和正常pym取图使用即可,底层将自动将相应图层idu显示输出(不必每帧做hb_disp_set_video_bufaddr_id),如果有特别需求,如要多路交叉输出,或要在图上绘画等,还是可以用API方式;

      2022-12-02
      1
    • dreemseeker回复只蓝片羽:

      您好兰工:

      您上面说有两种方式可以输出,对于这两种方式在使用方法上我还有一些疑问:

      方式1.可以通过idu从pym内取出转换后的2m数据进行输出:

      是否可以理解为,之前调试时使用的camera_test(vio_init、cam_init、start pipeline、vio_get_data)测试程序不变,只需要修改vpm_config.json里面gs或者bl图层的配置,并且不需要配置idu.json,底层就会自动输出给tx?

      方式2.若直接使用API方式直接取图再设idu输出:

      需要添加idu init和start,以及hb_disp_set_video_bufaddr_id等相关接口,并且需要配置idu.json?

      上面两种方法个人的理解有些混乱,不太清楚vpm的配置和idu的配置是否是相互独立的还是必须同时存在的,或者说无论哪种方法这些都必须要配置,只不过是api调用上有区别呢??还请您帮忙解惑一下谢谢。
      2022-12-05
      0
    • 只蓝片羽回复dreemseeker:

      您好:

      此处方式1仍然要配置idu,只是不用每帧通过hb_disp_set_video_bufaddr_id()写下去,只管从pym拿图使用即可,底层会自动将相应已配好的图层给idu输出。方式2则完全由用户控制,需要初始化idu的同时,还要每帧通过api写到idu内才能更新输出图像。

      ”无论哪种方法这些都必须要配置,只不过是api调用上有区别呢“,是的,只是要不要调idu写addr的api区别。

      谢谢~

      2022-12-05
      0