Takes too long to read ISP0 output (100 ms)

Please provide the following info:
Hardware Platform: [DRIVE AGX Xavier™ Developer Kit]
Software Version: [DRIVE Software 10]
Host Machine Version: [native Ubuntu 18.04]
SDK Manager Version: [1.2.0.6733]

While trying to record camera frames using NvSIPL APIs, I noticed that reading ISP0 output takes too long.

Relevant code segment:

    auto StartTime = chrono::steady_clock::now();
    nvmStatus = NvMediaImageLock(ISP0imagePtr, NVMEDIA_IMAGE_ACCESS_READ, &surfaceMap);
    nvmStatus = NvMediaImageGetBits(ISP0imagePtr, nullptr, (void **)m_pSurfaceBuff, m_pSurfacePitches);
    NvMediaImageUnlock(ISP0imagePtr);
    auto getBitsTime = chrono::duration<double, std::milli> (chrono::steady_clock::now() - StartTime).count();

This code block, which is reading bits from 1 ISP0 output frames takes ~100ms to execute.
In contrast, call to the same NvMediaImageGetBits function with a raw ICP output frame takes ~5ms to execute.

I am trying to understand why ISP0 output frame performs so much worse? Is it related to the image format (yuv:420) for ISP0?

Dear @anurag08upx,
Could you share code/steps to repro it on our end.

Hi @SivaRamaKrishnaNV, While putting together a simplified sample code for you to repro the issue, I found a line of code that I had copied over from the jpeg encode sample application:

ispOutImgAttr.surfaceAllocAttr.push_back({NVM_SURF_ATTR_CPU_ACCESS, NVM_SURF_ATTR_CPU_ACCESS_UNCACHED});

Turns out this was causing the performance degradation I noticed.

After removing this line, NvMediaImageGetBits for yuv image takes ~15-20ms. Still more that raw frame (~5ms) but acceptable.

Thanks