How to configure Xavier VI5 to DMA RGB888 directly to memory and ready for processing

I have configured vi5_video_formats with the following entry and I’m able to capture images with our RGB888 camera using this format:

TEGRA_VIDEO_FORMAT(RGB888, 24, RGB888_1X24, 4, 1, T_A8R8G8B8, RGB888, RGB24, “RGB-8-8-8”),

We’re forced to get the 4th A channel in the resulting frame. Is there a way to remove that at the VI block layer so we don’t require a software conversion from ARGB8888 to RGB888 later?

or is there a way to make this conversion in hardware in the pipeline? I know we can do this using CUDA calls later but it means we need to touch the data again.

The TRM states only 16/32 vi5 video formats are supported and source code in enum tegra_image_format confirms it.

How best can we get RGB888 image ready for processing by our software stack?

hello kurt_ottaway,

may I know which JetPack release you’re working with.
please refer to several discussion threads that enable Raw8 camera sensors. for example, Topic 1050604, and Topic 1046071.
thanks

Hi Jerry,

We are using r32.1 of the device driver package. The latest r32.2 doesn’t make any changes to help our problem.

I’m familiar with the threads you sent us links to.

We do NOT want to use the Xavier ISP. Our intention is to bypass the Xavier ISP.

We are using the V4L2 API and NOT using Argus API. We would consider moving to Argus if that stack had a way to offload the processing of RGBA8888 to RGB888 in hardware. NOTE: Our camera is sending RGB888 and it is the Xavier VI5 block that is converting it to RGBA8888. It would be ironic if we had to route the frame through the Xavier ISP to convert it back to RGB888. We would like to avoid having software solution using the CPU or GPU handling the conversion.

Both “gst-launch-1.0 -v nvcamerasrc” and “v4l2src” are CPU software conversion solutions which we would like to avoid. We already have a software solution working. We’re looking for a hardware solution for the conversion.

I’m surprised that the Xavier can’t output RGB888 directly to the Target device’s memory (16/32 bit limitation?). Can you confirm that this is a hardware limitation please? or if there is another option for how we can get RGB888 w/o requiring a software conversion.

thanks,

hello kurt_ottaway,

even though there’s RGB888 format definition,

<i>$l4t-r32.2/public_sources/kernel_src/kernel/kernel-4.9/include/uapi/linux/videodev2.h</i>

...
#define V4L2_PIX_FMT_RGB24   v4l2_fourcc('R', 'G', 'B', '3') /* 24  RGB-8-8-8     */

VI did not support RGB888 memory formats due to it’ll add luminance format.
you may also check the Xavier TRM, please refer to [RGB Memory Formats] session, and check [Table 7.35 RGB Formats Supported by VI] for details.
thanks