The video_decode sample application demonstrates how to use the buffer allocated by the libv4l2
component to decode H.264, H.265, VP8, VP9, MPEG4, or MPEG2 video streams.
The application reads an H.264, H.265, VP8, VP9, MPEG4, or MPEG2 elementary video file, decodes it, and passes it to the EGL renderer to show the decoded images without any extra memory copy.
Supported video formats are:
$ cd /usr/src/jetson_multimedia_api/samples/00_video_decode $ make
$ ./video_decode <in-format> [options] <in-file>
Enter:
$ ./video_decode --help
$ ./video_decode H264 ../../data/Video/sample_outdoor_car_1080p_10fps.h264
$ ./video_decode H265 --input-nalu --enable-sld h265_ulld_1080p_30fps_10sec.265
The following diagram shows the flow through this sample.
The sample uses the following key structures and classes.
Element | Description |
---|---|
NvVideoDecoder | Contains all video decoding-related elements and functions. |
NvEglRenderer | Contains all EGL display rendering-related functions. |
dec_capture_loop | A pointer to the thread handler for the decoding capture loop. |
The NvVideoDecoder class packages all video decoding-related elements and functions. Key members used in the sample are:
Member | Description |
---|---|
output_plane | Specifies the V4L2 output plane. |
capture_plane | Specifies the V4L2 capture plane. |
createVideoDecoder | Static function to create video decode object. |
subscribeEvent | Subscribe event. |
setOutputPlaneFormat | Set output plane format. |
setCapturePlaneFormat | Set capture plane format. |
dqEvent | Dqueue the event which reports by the V4L2 device. |
isInError | Checks if under error state. |
Class NvVideoDecoder contains two key elements: output_plane
and capture_plane
. These objects are derived from class type NvV4l2ElementPlane. The sample uses the following key members:
Element | Description |
---|---|
setupPlane | Sets up the plane of V4L2 element. |
deinitPlane | Destroys the plane of the V4L2 element. |
setStreamStatus | Starts/stops the stream. |
setDQThreadCallback | Sets the callback function of the dqueue buffer thread. |
startDQThread | Starts the thread of the dqueue buffer. |
stopDQThread | Stops the thread of the dqueue buffer. |
qBuffer | Queues the V4L2 buffer. |
dqBuffer | Dequeues the V4L2 buffer. |
getNumBuffers | Gets the number of V4L2 buffers. |
getNumQueuedBuffers | Gets the number of buffers currently queued on the plane. |