decode_sample 应用程序是一个单元级别的实现,演示了如何使用 libv4l2
组件分配的缓冲区来解码 H.264 视频流。
该应用程序读取 H.264 基本视频文件,对其进行解码,并将原始 YUV 缓冲区写入文件,而无需任何额外的内存复制。
支持的视频格式包括
$ cd /usr/src/jetson_multimedia_api/samples/unittest_samples/decoder_unit_sample $ make
$ ./decode_sample <in-file> <out-file>
$ ./decode_sample ../../data/Video/sample_outdoor_car_1080p_10fps.h264 out_sample_outdoor_car_1080p_10fps.yuv
以下步骤展示了本示例的流程。
该示例使用以下关键类
元素 | 描述 |
---|---|
缓冲区 | 基于 v4l2_buffer 结构建模的类。 |
该示例中使用的关键结构和函数包括
函数 | 描述 |
---|---|
decode_process | 函数循环,用于在输出平面上对缓冲区进行 DQ(dequeue,出队)和 EnQ(enqueue,入队)操作,直到发出 eos(end-of-stream,流结束)信号。 |
capture_thread | 指向解码捕获循环的线程处理程序的指针。 |
dq_event | 用于出队事件的函数。 |
dq_buffer | 用于从平面出队缓冲区的函数。 |
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 事件的函数。 |