smaple_drivenetNcameras "ImageStreamer: cannot receive, EGLstream busy"

when I run smaple_drivenetNcameras twice at the same time(selector-mask are 1111 and 000000010001), it will report error after working well for about 10s.

[19-6-2019 14:27:42] CameraGMSL: Frame: 509 CaptureTimestamp: 3888641276 - ICP DROP in camera 1
ImgAddFences: Couldn’t find a place to store the fences
NvMediaEglStreamProducerGetImage: Failed to add read fence
[19-6-2019 14:27:42] ImageStreamer: timeout waitPosted, producer waited for 33 ms.
[19-6-2019 14:27:42] ImageStreamer: cannot post, no available slot
[19-6-2019 14:27:42] CameraGMSL: Frame: 524 CaptureTimestamp: 3888676266 - ICP DROP in camera 0
[19-6-2019 14:27:42] CameraGMSL: Frame: 511 CaptureTimestamp: 3888707927 - ICP DROP in camera 1
[19-6-2019 14:27:42] ImageStreamer: cannot receive, EGLstream busy
[19-6-2019 14:27:42] Driveworks exception thrown: DW_INVALID_ARGUMENT: Cannot cast to C handle, given instance is a nullptr

terminate called after throwing an instance of ‘std::runtime_error’
what(): [2019-06-19 14:27:42] DW Error DW_INVALID_ARGUMENT executing DW function:
dwSensorCamera_getImage(&rawImageCUDA, DW_CAMERA_OUTPUT_CUDA_RAW_UINT16, frameHandle)
at /builds/driveav/dw/sdk/samples/drivenet/drivenet_ncameras/main.cpp:477
Aborted (core dumped)

The main.cpp:477 is “dwSensorCamera_getImage” function.
Also there is no eglstreamer code here.

Dear jinj,

Could you please let me know what your case is for this scenario?

And could you please re-try the sample if this symptom happens after “export CUDA_VISIBLE_DEVICES=1” setting up? Thanks.

Thank you for your reply.

I want to identify objects using sample_drivenetNcameras with 6 cameras on PX2.
When I run the modified sample_drivenetNcameras, or the original sample_drivenetNcameras twice at the same time, get the same error.

Dear jinj,

Could you please check this symptom with iGPU? Thanks.

That’s great!It works well.

But the FPS is only 4.

Can I run one process on iGPU, and another one on dGPU?

Dear jinj,

When run the sample, please set CUDA_VISIBLE_DEVICES first and try to run it like below.

Terminal 1
export CUDA_VISIBLE_DEVICES=1 ./sample_drivenetNcameras --input-type=camera --selector-mask=1111

Terminal 2
export CUDA_VISIBLE_DEVICES=0 ./sample_drivenetNcameras --input-type=camera --selector-mask=000000010001

Thanks a lot!

Thank you very much!

Hi Steve,

I used multi-threads get image and processed it, and use type DW_CAMERA_OUTPUT_CUDA_RGBA_UINT8 to directly get cuda image. I used producer-consumer mode to make thread synchronization, and thread 2 process() is much slower than thread 1 getimage().

//Thread 1:
    dwCameraFrameHandle_t frame_handle;
    dwSensorCamera_readFrame(frame_handle, ..);
    dwImageHandle_t image_handle;
    dwSensorCamera_getImage(image_handle, DW_CAMERA_OUTPUT_CUDA_RGBA_UINT8, frame_handle);
    dwImage_copyConvert(frames_produced.frame_handle, image_handle, sdk);
//Thread 2:
    dwImageCUDA *rgba_image;
    dwImage_getCUDA(rgba_image, frames_consumed.frame_handle);
    Process(rgba_image);//cost about 100ms

When I run, it failed and printed error “Driveworks exception thrown: DW_CUDA_ERROR: Call failed cuEGLStreamConsumerAcquireFrame : unspecified launch fahanksilure”.
If I $export CUDA_VISIBLE_DEVICES=1 it run success but fps is 4.
If I $export CUDA_VISIBLE_DEVICES=0 it also run failed.
How did it happen, how can I solve this question?