The decode_sample application is a unit level implementation that demonstrates how to use the buffer allocated by the libv4l2 component to decode H.264 video streams.
The application reads an H.264 elementary video file, decodes it, and writes the raw YUV buffer into a file without any extra memory copy.
The application includes comprehensive CUDA support for GPU-accelerated decoding:
On Thor platforms, the application utilizes GPU-accelerated encoding for:
Supported video formats are:
$ cd /usr/src/jetson_multimedia_api/samples/unittest_samples/decoder_unit_sample $ make
$ ./decode_sample <in-file> <out-file>
$ ./decode_sample ../../data/Video/sample_outdoor_car_1080p_10fps.h264 out_sample_outdoor_car_1080p_10fps.yuv
The following steps show the flow through this sample.
cuInit(0) is called to initialize the CUDA driver before opening the decoder device./dev/v4l2-nvdec for Orin, /dev/nvidia0 & /dev/nvidia1 for OpenRM).VIDIOC_QUERYCAP.V4L2_EVENT_RESOLUTION_CHANGE event is subscribed to handle resolution changes.VIDIOC_STREAMON).The sample uses the following key class:
| Element | Description |
|---|---|
| Buffer | Class modeled on v4l2_buffer structure. |
The key structures and functions used in the sample are:
| Function | Description |
|---|---|
| decode_process | Function loop to DQ and EnQ buffers on output plane till eos is signalled. |
| capture_thread | A pointer to the thread handler for the decoding capture loop. |
| dq_event | Function to dequeue an event. |
| dq_buffer | Function to dequeue a buffer from the plane. |
| q_buffer | Function to queue a buffer on the plane. |
| req_buffers_on_capture_plane | Function to request for buffers on the decoder capture plane. |
| req_buffers_on_output_plane | Function to request for buffers on the decoder output plane. |
| set_capture_plane_format | Function to set the format on the decoder capture plane. |
| set_output_plane_format | Function to set the format on the decoder output plane. |
| set_ext_controls | Function to set the value of controls. |
| subscribe_event | Function to subscribes to a V4L2 event. |