I am trying to simultaneously compress 4 GigE Vision camera streams coming into the TX2 via ethernet.
The frame rate for each camera is around 5Hz. Each video stream is around 4 mega pixels at 10 bits per pixel (monochrome).
I need the compression to be lossless or very near lossless.
Each compressed video stream will need to be written to disk as new frames are processed.
Is this possible?
I have seen this NVEnc library, but I think this is only for x86 desktop PCs
I have also looked at the Jetson MultiMedia API. Another possibility is GStreamer.
Which is the correct API to do what I want?
Does any example code exist? I have not so far seen any examples with lossless or monochrome video compression.
We’d like to compress 10-bit grayscale to lossless 10-bit HEVC (H.265) on a TX2.
I’d prefer to use ffmpeg rather than gstreamer since the documentation seems much easier to understand. Do I understand correctly that only gstreamer is supported with NVENC on a TX2 (as compared with desktop/laptop GPUs where there are more options)?
Could you suggest how we might setup a gstreamer pipeline to accomplish 10-bit Lossless HEVC encoding? We can’t find documentation on using 10-bit channels with gstreamer, and gst-inspect seems to suggest that only 8-bit YUV color planes are supported as inputs. I hope we’re misunderstanding!
VP of Engineering @ Ceres Imaging
which will result in close to lossless video compression. I am seeing maximum errors around 1%
(i.e. the gray values are off by 1 to 2 counts) after compression is performed on the TX2.
Are there any other parameters that I need to set on the context_t struct that will enable fully lossless compression using the TX2 compression hardware block?
enum v4l2_mpeg_video_bitrate_mode ratecontrol;
enum v4l2_mpeg_video_h264_level level;
uint32_t gdr_start_frame_number; /* Frame number where GDR has to be started */
uint32_t gdr_num_frames; /* Number of frames where GDR to be applied */
uint32_t gdr_out_frame_number; /* Frames number from where encoded buffers are to be dumped */
enum v4l2_enc_temporal_tradeoff_level_type temporal_tradeoff_level;
enum v4l2_enc_hw_preset_type hw_preset_type;
uint32_t nMinQpI; /* Minimum QP value to use for index frames */
uint32_t nMaxQpI; /* Maximum QP value to use for index frames */
uint32_t nMinQpP; /* Minimum QP value to use for P frames */
uint32_t nMaxQpP; /* Maximum QP value to use for P frames */
uint32_t nMinQpB; /* Minimum QP value to use for B frames */
uint32_t nMaxQpB; /* Maximum QP value to use for B frames */
uint32_t sMaxQp; /* Session Maximum QP value */
uint32_t rl; /* Reconstructed surface Left cordinate */
uint32_t rt; /* Reconstructed surface Top cordinate */
uint32_t rw; /* Reconstructed surface width */
uint32_t rh; /* Reconstructed surface height */