Jetson Linux API Reference

32.7.3 Release
01_video_encode (video encode)

Overview

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:

  • H.264
  • H.265
  • VP8
  • VP9

Supported YUV formats are:

  • YUV420
  • YUV444
  • NV24
  • P010_10LE
  • NV24_10LE
    Note
    For 10-bit encoding, YUV input must be 16-bit MSB aligned.

Building and Running

Prerequisites

To build

  • Enter:
     $ cd /usr/src/jetson_multimedia_api/samples/01_video_encode
     $ make
    

To run

  • Enter:
    $ video_encode <in-file> <in-width> <in-height> <encoder-type> <out-file> [OPTIONS]
    

To view supported options

Enter:

   $ ./video_encode --help

Example

   $ ./video_encode ../../data/Video/sample_outdoor_car_1080p_10fps.yuv 1920 1080 H264 sample_outdoor_car_1080p_10fps.h264


Flow

The following diagram shows the flow through this sample.

  • The Output Plane receives input in YUV frame format and delivers it to the Encoder for encoding.
  • The Capture Plane transfers encoded frames to the application in bitstream format.
  • The encoded bitstream is written to a file.
  • For the Output Plane the application supports MMAP, DMABUF, and USRPTR memory types. For the Capture Plane it supports MMAP memory type.


Key Structure and Classes

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.