Loss of frames when encoding

Hi,

We are using a TX2 to record 6 Camera modules simultaneously at 1080p@60fps and we have set the encoding to H.265 at 16 Mbps (also tried with 10Mbps) for each video pipeline. We have noticed, after breaking down the video frame by frame with ffmpeg, there were a lot of duplicate frames.

Can someone advise please? Can the TX2 not encode 6 x 1080p at 60fps?

Kind Regards,

Hi Devashish,
We have veirifed 6 1080p60 on TX2. Please refer to
https://devtalk.nvidia.com/default/topic/1009082/jetson-tx1/multiple-h-265-video-encoding-/post/5150527/#5150527

Hi DaneLLL,

The video that you are encoding are already saved videos. We are encoding while recording, I think this is what’s causing the drop in frames.

Could that be an issue?

Hi DaneLLL,

Have you had a chance to investigate on the matter?

Hi, what is your camera source? Since encoder can achieve 6 1080p60. The issue looks like the camera source cannot keep 6 1080p60

Hi DaneLLL,

I am not sure what you mean by camera source but we have custom made IMX290 modules which drivers’ was written by Leopard Imaging and they say that all is working fine on their side and I should check with NVIDIA why that issue is occurring. That’s why am here.

Hi,
Below is listed in document:
H.265
I420, NVMM:I420, NVMM:NV12
3840 x 2160 at
30 fps
Up to 100 Mbps
Supported features: control-rate, Bitrate, Iframeinterval, Quality-Level, SliceIntrarefreshEnable, Sliceintrarefreshinterval, Bit-Packetization, VBV-Size, temporal-tradeoff, Insert-SPS-PPS, Force-IDR
https://developer.nvidia.com/embedded/dlc/l4t-documentation-28-1

The spec is 4kp30. The above case is pure encoding test and may not be achieved in real camera case. It depends on implementation.

Do you implement in gstreamer or MMAPI? Which CSI ports of TX2 are connected? Does it use TX2 ISP engine?

Hi,

We specifically ask for real case encoding before we went with the Jetson TX2 for this project. Now this is very problematic, isn’t it?!

Which implementation are you referring to, where it will be suitable for the 6 x 1080p60fps real case encoding?

We are using gstreamer. All of the CSI ports are connected to the camera modules, 2 lanes each module x 6 modules. Yes it uses the TX2 ISP engine.

Hi Devashish,
How many 1080p60 can you achieve with imx290?

Hi DaneLLL,

Am not sure I understood your question.

We have 6 IMX290 connected to the Jetson TX2 and each IMX290 goes through MIPI CSI 2 lanes

Hi Devashish,
If you run one imx290 with encoding, can it achieve 1080p60 without dropping frames?
If you run two imx290 with encoding, can it achieve two 1080p60 without dropping frames?

How many can you run without dropping frames? Do you run gstreamer or MMAPI?

Hi DaneLLL,

Sorry for such late reply.

The encoding is good up to 3 x 1080p60. After that it starts dropping frames.

Best,

Hi Devashish,
If you run 4 imx290, can you see them all in 1080p60 with fpsdisplaysink?
Here is a example:
https://devtalk.nvidia.com/default/topic/1027772/jetson-tx2/two-csi-cameras-on-tx2/post/5227935/#5227935

Also do you have configure any encoder property of omxh265enc?

0:00:00.045214318  6420       0x633300 DEBUG         fpsdisplaysink fpsdisplaysink.c:440:fps_display_sink_start:<fpsdisplaysink0> Use text-overlay? 1
Setting pipeline to PAUSED ...
0:00:00.063021921  6419       0x633300 DEBUG         fpsdisplaysink fpsdisplaysink.c:440:fps_display_sink_start:<fpsdisplaysink0> Use text-overlay? 1
Setting pipeline to PAUSED ...
0:00:00.058545244  6421       0x633300 DEBUG         fpsdisplaysink fpsdisplaysink.c:440:fps_display_sink_start:<fpsdisplaysink0> Use text-overlay? 1
Setting pipeline to PAUSED ...
0:00:00.052997494  6422       0x633300 DEBUG         fpsdisplaysink fpsdisplaysink.c:440:fps_display_sink_start:<fpsdisplaysink0> Use text-overlay? 1

Available Sensor modes : 
1948 x 1096 FR=60.000000 CF=0x1009208a10 SensorModeType=4 CSIPixelBitDepth=12 DynPixelBitDepth=12

Available Sensor modes : 
1948 x 1096 FR=60.000000 CF=0x1009208a10 SensorModeType=4 CSIPixelBitDepth=12 DynPixelBitDepth=12

Available Sensor modes : 
1948 x 1096 FR=60.000000 CF=0x1009208a10 SensorModeType=4 CSIPixelBitDepth=12 DynPixelBitDepth=12
Pipeline is live and does not need PREROLL ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
New clock: GstSystemClock
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock

Available Sensor modes : 
1948 x 1096 FR=60.000000 CF=0x1009208a10 SensorModeType=4 CSIPixelBitDepth=12 DynPixelBitDepth=12

NvCameraSrc: Trying To Set Default Camera Resolution. Selected sensorModeIndex = 0 WxH = 1948x1096 FrameRate = 60.000000 ...

Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock

NvCameraSrc: Trying To Set Default Camera Resolution. Selected sensorModeIndex = 0 WxH = 1948x1096 FrameRate = 60.000000 ...


NvCameraSrc: Trying To Set Default Camera Resolution. Selected sensorModeIndex = 0 WxH = 1948x1096 FrameRate = 60.000000 ...


NvCameraSrc: Trying To Set Default Camera Resolution. Selected sensorModeIndex = 0 WxH = 1948x1096 FrameRate = 60.000000 ...

0:00:01.369121869  6419       0x642ca0 DEBUG         fpsdisplaysink fpsdisplaysink.c:372:display_current_fps:<fpsdisplaysink0> Updated max-fps to 38.854328
0:00:01.369179341  6419       0x642ca0 DEBUG         fpsdisplaysink fpsdisplaysink.c:376:display_current_fps:<fpsdisplaysink0> Updated min-fps to 38.854328
0:00:01.375454354  6421       0x642ca0 DEBUG         fpsdisplaysink fpsdisplaysink.c:372:display_current_fps:<fpsdisplaysink0> Updated max-fps to 43.551541
0:00:01.375510834  6421       0x642ca0 DEBUG         fpsdisplaysink fpsdisplaysink.c:376:display_current_fps:<fpsdisplaysink0> Updated min-fps to 43.551541
0:00:01.368113675  6422       0x642ca0 DEBUG         fpsdisplaysink fpsdisplaysink.c:372:display_current_fps:<fpsdisplaysink0> Updated max-fps to 35.943749
0:00:01.368180779  6422       0x642ca0 DEBUG         fpsdisplaysink fpsdisplaysink.c:376:display_current_fps:<fpsdisplaysink0> Updated min-fps to 35.943749
0:00:01.432283724  6420       0x642ca0 DEBUG         fpsdisplaysink fpsdisplaysink.c:372:display_current_fps:<fpsdisplaysink0> Updated max-fps to 38.858344
0:00:01.432342636  6420       0x642ca0 DEBUG         fpsdisplaysink fpsdisplaysink.c:376:display_current_fps:<fpsdisplaysink0> Updated min-fps to 38.858344
0:00:01.887399573  6419       0x642ca0 DEBUG         fpsdisplaysink fpsdisplaysink.c:376:display_current_fps:<fpsdisplaysink0> Updated min-fps to 36.660478
0:00:01.887022260  6421       0x642ca0 DEBUG         fpsdisplaysink fpsdisplaysink.c:376:display_current_fps:<fpsdisplaysink0> Updated min-fps to 35.186620
0:00:01.884682865  6422       0x642ca0 DEBUG         fpsdisplaysink fpsdisplaysink.c:372:display_current_fps:<fpsdisplaysink0> Updated max-fps to 40.652801
0:00:01.932624002  6420       0x642ca0 DEBUG         fpsdisplaysink fpsdisplaysink.c:376:display_current_fps:<fpsdisplaysink0> Updated min-fps to 35.975611
0:00:03.971997326  6419       0x642ca0 DEBUG         fpsdisplaysink fpsdisplaysink.c:372:display_current_fps:<fpsdisplaysink0> Updated max-fps to 40.541813
Got EOS from element "pipeline0".
Execution ended after 0:00:05.637941368
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Got EOS from element "pipeline0".
Execution ended after 0:00:05.663107984
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Got EOS from element "pipeline0".
Execution ended after 0:00:05.663969680
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Got EOS from element "pipeline0".
Execution ended after 0:00:05.730793105
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Socket read error. Camera Daemon stopped functioning.....
Setting pipeline to NULL ...
Freeing pipeline ...
Setting pipeline to NULL ...
Freeing pipeline ...
Setting pipeline to NULL ...
Freeing pipeline ...
Setting pipeline to NULL ...
Freeing pipeline ...
^C
[1]   Done                    GST_DEBUG=fpsdisplaysink:5 gst-launch-1.0 nvcamerasrc num-buffers=200 sensor-id=0 ! 'video/x-raw(memory:NVMM), framerate=(fraction)60/1' ! queue ! fpsdisplaysink video-sink=fakesink sync=false async=true
[2]   Done                    GST_DEBUG=fpsdisplaysink:5 gst-launch-1.0 nvcamerasrc num-buffers=200 sensor-id=1 ! 'video/x-raw(memory:NVMM), framerate=(fraction)60/1' ! queue ! fpsdisplaysink video-sink=fakesink sync=false async=true
[3]-  Done                    GST_DEBUG=fpsdisplaysink:5 gst-launch-1.0 nvcamerasrc num-buffers=200 sensor-id=2 ! 'video/x-raw(memory:NVMM), framerate=(fraction)60/1' ! queue ! fpsdisplaysink video-sink=fakesink sync=false async=true
[4]+  Done                    GST_DEBUG=fpsdisplaysink:5 gst-launch-1.0 nvcamerasrc num-buffers=200 sensor-id=3 ! 'video/x-raw(memory:NVMM), framerate=(fraction)60/1' ! queue ! fpsdisplaysink video-sink=fakesink sync=false async=true

This is the result of the fpsdisplaysink.

We set the bitrate to a specific value and set the control rate to fixed but it still varies. Other than that we did not change other properties

Hi Devashish,
The issue is in the camera sources which cannot achieve 1080p60.

Hi DaneLLL,

Does this mean that the driver is wrong?

Hi Devashish,
We have discussion with Leopard and confirms six 1080p60 camra inputs are not guaranteed. The BSP release does not support this usecase.