J784S4XEVM: CSI_RX_IF: Capture video from two cameras at two V4L2 video nodes

Part Number: J784S4XEVM

Tool/software:

Hi expert,

I am currently bring up two Ommivision OX03A10 based cameras using MAX9296 deserializer chip binded to CSI-A port 0 on the J784S4-EVM board as shown in Configuration 1 in below figure.

I see the captured streams from both camera are multiplexing at the output V4L2 video node, i.e. /dev/video4 in configuration 1.

My question is to how to split the captured streams of the two cameras into two different video nodes?  For example, camera A and camera B can be captured at /dev/video4 and /dev/video5, respectively, as shown configuration 2 in below figure:

Same question also applied to a single camera that sends multiple streams in multiple VC, how can we split output each stream  to an independent video output node? Can it be done by CSI_RX_IF hardware?

Thanks,

Minh

  • Hi Minh,

    Each VC-DT pair maps to an individual /dev/video4. 

    For the tested IMX390 camera at our end, the mapping is such that each camera will be mapped to different /dev/videoX

    Please refer to the device tree of k3-fpdlink-imx390-rcm-0-0.dtso, k3-fpdlink-imx390-rcm-0-1.dtso and k3-j721s2-evm-fusion.dtso in the Linux SDK for the reference flow 

    Regards,

    Nikhil

  • Thanks Nikhil,

    Looking at the reference to IMX390 camera, it turned out that I have to make a major change to my MAX9296 kernel module to make it work same way as UB960 module.

    I am thinking about an alternative approach to use TIOVX capture kernel and VPAC VISS kernel in R5F. We definitely need to use VPAC to offload image preprocessing from A72 to VPAC accelerator as brief below:

    A72 side (Linux)

    - MAX9296 module is responsible to communicate and configure two OX03A10 sensors

    - Multiplexed video frames from both sensor output from MAX9296 port A ( 4-lanes) routes to CSI0 IF of the TDA4VH-EVM board

    R5F (MCU2_0)

    - Create a new sensor named OX03A10 without any I2C transaction to MAX9296 deserializer, MAX9252 serializer and  OX03A10 sensor itself. Because the sensor has already configured in A72 side

    - Register sensor OX03A10 in ISS_sensor frame work

    - Recompile vx_app_rtos_linux_mcu2_0

    - Recompile app_single_cam demo application against new sensor added in ISS_sensor list

    - Perform test and validation using app_single_cam with OX03A10 sensor.

    Do you think this approach makes sense?

    Thanks

    Minh

  • Hi,

    Do you think this approach makes sense?

    Sounds right. 
    Do ensure that the CSIRX is configured as per the data rate at which the Maxim is transmitting.

    Regards,

    Nikhil

  • Hi Nikhil,

    From my understanding, the app_single_cam demo is able  processed frame to display output and write image to storage in A72 side.

    Do you think it is feasible to link VPAC output to v4l2 video output? The j721e-csi2rx is replaced a new module that links to VPAC output as shown in below diagram.

  • Hi,

    The drivers used by the single cam demo are RTOS based drivers running on R5 core. So there is no cdns-csirx and j721e-csirx linux drivers used here in this path. 

    You can capture the frames using the capture node (which is an OpenVX based node) and then pass these frames to the VISS node and get the output of VISS node in the application on A72. 

    You can then pass this to another node or use this in the application itself (i.e. saving the file)

    Regards,

    Nikhil

  • Hi Nikhil,

    For the moment, I have modified the deserializer kernel module to have stream 0 and stream 1 at source pad  0 so that I can re-create media-bus routing streams in cdns-csi2rx and j721e-csri2rx entities.

    At the end, I got video for VC=0, and VC=1 at /dev/video4, and /dev/video5 nodes, respectively.

  • That is great. Let me know if we could close this thread, if there are no other queries on this topic.

  • Please close this thread.