此示例演示了如何使用 NVIDIA® Tegra® Direct Rendering Manager (DRM) 渲染视频流或 UI。此示例在非 X11 和轻量级显示系统上提供渲染支持。DRM 在用户空间中实现,并与 DRM 2.0 兼容。
DRM 是 Linux 内核的一个子系统,它与 GPU 接口。
该示例支持两种运行模式,具体取决于 --disable-video
选项
该示例演示了支持的 DRM 缓冲区分配策略
该示例支持以下视频格式
$ cd /usr/src/jetson_multimedia_api/samples/08_video_dec_drm $ make
$ sudo sh -c 'echo 4 > /sys/class/graphics/fb1/blank' $ sudo sh -c 'echo 4 > /sys/class/graphics/fb2/blank' $ sudo sh -c 'echo 4 > /sys/class/graphics/fb0/blank' $ sudo sh -c 'echo 0x0 > /sys/class/graphics/fb1/device/win_mask' $ sudo sh -c 'echo 0x0 > /sys/class/graphics/fb2/device/win_mask' $ sudo sh -c 'echo 0x0 > /sys/class/graphics/fb0/device/win_mask' $ sudo sh -c 'echo 0x3f > /sys/class/graphics/fb0/device/win_mask' $ sudo sh -c 'echo 0 > /sys/class/graphics/fb0/blank'
$ sudo systemctl stop gdm $ sudo loginctl terminate-seat seat0
$ sudo modprobe nvidia-drm modeset=1
$ sudo sh -c 'echo 0 > /sys/class/graphics/fb1/blank'
$ sudo ./video_dec_drm <in-file> <in-format> [options]
$ ./video_dec_drm --help
$ sudo ./video_dec_drm --disable-video
$ sudo ./video_dec_drm ../../data/Video/sample_outdoor_car_1080p_10fps.h264 H264 --disable-ui
$ sudo ./video_dec_drm ../../data/Video/sample_outdoor_car_1080p_10fps.h264 H264
$ sudo systemctl start gdm
下图显示了数据流经示例的流程。
下图显示了示例中各个线程之间的交互。
如果选项包括 --disable-video
,则示例执行以下操作
否则
下表显示了此示例使用的主要类和函数。
类 | 描述 |
---|---|
类 NvDrmRenderer | 包含使用 tegra DRM 渲染帧的元素和函数。 |
类 NvVideoDecoder | 包含所有视频解码相关的元素和函数。 |
类 NvVideoConverter | 包含用于视频格式转换的元素和函数。 |
函数 | 描述 |
---|---|
ui_render_loop_fcn | 用于渲染 UI 图像的线程函数。 |
renderer_dequeue_loop_fcn | 用于从 NvDrmRenderer() 中出队翻转帧的线程函数。 |
conv0_capture_dqbuf_thread_callback | 用于将新帧入队到 NvDrmRenderer 的回调函数。 |
conv0_output_dqbuf_thread_callback | 用于从解码器接收帧并处理格式转换的回调函数。 |