encode_sample 应用程序是一个单元级别的实现,演示了如何编码 H.264 视频流。
该应用程序从文件中读取 YUV 输入缓冲区,执行 H.264 视频编码,并将编码后的比特流保存到基本的 .264
文件中。
该应用程序在文件源模拟输入缓冲区上运行,因此不需要摄像头。
支持的视频格式有
$ 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_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 事件的函数。 |