Jetson Linux API 参考文档

32.7.4 版本
encoder_unit_sample (视频编码单元示例)

概述

encode_sample 应用程序是一个单元级别的实现,演示了如何编码 H.264 视频流。

该应用程序从文件中读取 YUV 输入缓冲区,执行 H.264 视频编码,并将编码后的比特流保存到基本的 .264 文件中。

该应用程序在文件源模拟输入缓冲区上运行,因此不需要摄像头。

支持的视频格式有

  • H.264


构建和运行

前提条件

  • 您已按照 构建和运行 中的步骤 1-3 操作。
  • 如果您是从主机 Linux PC (x86) 构建,则已按照 构建和运行 中的步骤 4 操作。

构建

  • 输入
     $ cd /usr/src/jetson_multimedia_api/samples/unittest_samples/encoder_unit_sample
     $ make
    

运行

  • 输入
    $ ./encode_sample <in-file> <in-width> <in-height> <out-file>
    

示例

   $ ./encode_sample ../../data/Video/sample_outdoor_car_1080p_10fps.yuv 1920 1080 sample_outdoor_car_1080p_10fps.h264


流程

以下步骤展示了通过此示例的流程。

  • 编码器实例已创建。
  • 已订阅 V4L2_EVENT_EOS。
  • 输出平面和捕获平面已设置。
  • 外部控制已设置。
  • 输出平面接收 YUV 帧格式的输入,并将其传递给编码器进行编码。
  • 捕获平面以比特流格式将编码帧传输到应用程序。
  • 编码后的比特流被写入文件。
  • 对于输出平面,应用程序支持 MMAP 内存类型。对于捕获平面,它支持 MMAP 内存类型。


关键结构和类

该示例使用以下关键类

元素描述
缓冲区基于 v4l2_buffer 结构建模的类。

该示例中使用的关键结构和函数包括

函数描述
encoder_process_blocking函数循环,用于在输出平面上 DQ 和 EnQ 缓冲区,直到 eos 信号发出。
dq_buffer从平面出队缓冲区的函数。
capture_plane_callback当创建 enc_cap_thread 时的回调函数。
q_buffer在平面上排队缓冲区的函数。
req_buffers_on_capture_plane请求编码器捕获平面上的缓冲区的函数。
req_buffers_on_output_plane请求编码器输出平面上的缓冲区的函数。
set_capture_plane_format设置编码器捕获平面格式的函数。
set_output_plane_format设置编码器输出平面格式的函数。
set_ext_controls设置控件值的函数。
subscribe_event订阅 V4L2 事件的函数。
. All rights reserved.