Cross eglstream gstreamer record loss frame

Argus version 0.97.3(multi-process)
Just refer to
cuda/samples/3_Imaging/EGLStream_CUDA_CrossGPU and tegra_multimedia_api/argus/samples/gstVideoEncode/
My project use argus to produce frame in one process,and consumer process consumer the frame in one process and use gstVideoEncode to mp4 file;
But the original argus fps is 30;the consumer process fps is also 30;but the gst record mp4 file is only 2fps(vlc can play,fsp info is 2.07),

Producer Process:
EGLStreamReceivefd–FIFO
cuEGLStreamConsumerAcquireFrame–m_InputStreamConnection
cuEGLStreamProducerPresentFrame–m_OutputStreamConnection
cuEGLStreamConsumerReleaseFrame

Consumer Process:
EGLStreamSendfd --FIFO
cuEGLStreamConsumerConnect–cudaConnection
cuEGLStreamProducerConnect–m_cudaRGBAStreamConnection
cuEGLStreamConsumerAcquireFrame–cudaConnection
cuGraphicsResourceGetMappedEglFrame
cuEGLStreamProducerPresentFrame–m_cudaRGBAStreamConnection
cuEGLStreamConsumerReleaseFrame–cudaConnection
EGLGlobal.cpp (19.4 KB)
main.cpp (31.8 KB)

Dear @happy886,
Could you confirm if the issue related to DRIVE AGX platform?


agx xavier

i change the issue to jetson AGX Xavier

Hi,
Please share your release version for reference:

$ cat /etc/nv_tegra_release



just on the pic,producer fps:30,consumer acquered fps:30,nveglstreamsrc record mp4 file only 2 fps

Hi happy886,

Please share the Makefile, make command and detail steps.
We can try to reproduce your issue.

argus-20211012.tar.gz (1.4 MB)
argus gst sample
cd argus/build
cmake …
make
just as the above pic,cd argus/build/samples/gstVideoEncode,and execute for consumer:[ ./argustest 1 ] and for producer [ ./argustest 0 ]

how about the issue?

hi,how about this issue?

Hi,
Somehow we are not able to see 30fps in running the sample. We have checked the code and there is another gstreamer pipeline:

m_pipeline = gst_parse_launch("nveglstreamsrc name=egl_src ! video/x-raw(memory:NVMM),format=NV12,width=1920,height=1080,framerate=30/1  ! nvvidconv ! fpsdisplaysink video-sink=fakesink --verbose ",NULL);

If you run this pipeline, do yo observe 30fps?

no fps info printf;
static void cb_fps_measurements(GstElement *fpsdisplaysink,gdouble arg0,gdouble arg1,gdouble arg2,gpointer user_data)
{
printf("###dropped: %.0f, current: %.2f, average: %.2f\n", arg1, arg0, arg2);
}

GstElement *fpsSink=gst_bin_get_by_name(GST_BIN(m_pipeline),“fpssink”);
if(!GST_IS_ELEMENT(fpsSink))
ORIGINATE_ERROR(“Failed to get video pipeline fpsSink”);
//g_object_set(G_OBJECT(fpsSink), “last-message”,&fps_msg, NULL);
g_object_set(G_OBJECT(fpsSink), “signal-fps-measurements”,true, NULL);
g_signal_connect (fpsSink, “fps-measurements”, G_CALLBACK(cb_fps_measurements), NULL);

main.cpp (26.9 KB)