The video_encode sample application demonstrates how to encode H.264/H.265/ VP8/VP9 video streams.
The application YUV reads input buffers from a file, performs video encoding, and saves the encoded bitstream to an elementary .264
, .265
, vp8
or vp9
file.
The application runs on file source simulated input buffers, and so does not require a camera.
Supported video formats are:
Supported YUV formats are:
$ cd /usr/src/jetson_multimedia_api/samples/01_video_encode $ make
$ video_encode <in-file> <in-width> <in-height> <encoder-type> <out-file> [OPTIONS]
Enter:
$ ./video_encode --help
$ ./video_encode ../../data/Video/sample_outdoor_car_1080p_10fps.yuv 1920 1080 H264 sample_outdoor_car_1080p_10fps.h264
The following diagram shows the flow through this sample.
The sample uses the following key structures and classes.
Element | Description |
---|---|
NvVideoEncoder | Contains all video encoding-related elements and functions. |
Enc_pollthread | A pointer to the thread handler for the encoding capture loop. |
The NvVideoEncoder class packages all video encoding-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. |
createVideoEncoder | Static function to create video encode 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 NvVideoEncoder 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. |