GStreamer 示例
Qualcomm IM SDK 包含用于视频播放的 GStreamer 示例应用程序。 注意 有关不同 SoC 上支持的 GStreamer 示例应用程序的信息,请参阅多媒体示例应用程序。 有关 GStreamer 应用程序先决条件的信息,请参阅运行视频和音频示例应用程序。 下表列出了各种方法及相应的示例视频测试用例:V4L2 示例
iris_v4l2_test 示例视频测试应用程序使用 Linux V4L2 接口来模拟若干基本的编码器和解码器行为。有关更多信息,请参阅示例 V4L2 应用程序。
Qualcomm Linux 支持以下视频 API:
- GStreamer API:Qualcomm GStreamer 插件符合开源 GStreamer 框架。有关基于 GStreamer 的插件的更多信息,请参阅 Qualcomm IM SDK。
- V4L2 API:Adreno VPU 驱动遵循符合 V4L2 标准的调用流程。V4L2 API 部分提供与 V4L2 API、命令、控制和事件相关的信息。
配置 GStreamer 和 V4L2 API
- Qualcomm 提供可集成到您的媒体管道中的基于 GStreamer 的插件。有关基于 GStreamer 的插件的信息,请参阅配置 Qualcomm GStreamer 插件。
- Adreno VPU 驱动使用 V4L2 接口,为所有遵循 V4L2 指导的客户端提供视频编码和解码支持。
GStreamer API
有关 GStreamer 应用程序开发和管道创建的信息,请参阅构建应用程序。配置 GStreamer API
有关为不同功能及相应插件配置 GStreamer 元素属性的信息,请参阅配置 Qualcomm GStreamer 插件。V4L2 API
本节介绍解码器和编码器的 V4L2 设备节点、文件操作、命令、控制和事件。VPU 驱动节点
设备在启动过程中注册 VPU 驱动,并将设备节点号分配给 qcom-multimedia-proprietary-image。- 解码器的 VPU 驱动节点:
/dev/video32 - 编码器的 VPU 驱动节点:
/dev/video33
注意:
对于 qcom-multimedia-image,VPU 驱动会将设备节点分配给从 video0 到 video27 范围内任意两个设备节点之一。
V4L2 文件操作
Adreno VPU 驱动支持以下 V4L2 文件操作:解码器和编码器的 V4L2 通用命令
VPU 驱动为视频解码器和编码器用例支持以下ioctl 命令:
VIDIOC_ENUM_FMTVIDIOC_TRY_FMTVIDIOC_G_FMTVIDIOC_S_FMTVIDIOC_ENUM_FRAMESIZESVIDIOC_REQBUFSVIDIOC_QUERY_BUFVIDIOC_CREATE_BUFVIDIOC_PREPARE_BUFVIDIOC_QBUFVIDIOC_DQBUFVIDIOC_STREAMONVIDIOC_STREAMOFFVIDIOC_QUERYCAPVIDIOC_QUERYCTRLVIDIOC_QUERYMENUVIDIOC_SUBSCRIBE_EVENTVIDIOC_UNSUBSCRIBE_EVENTVIDIOC_G_SELECTIONVIDIOC_G_CTRLVIDIOC_S_CTRL
V4L2 视频解码器
本节提供有关 Adreno VPU 解码器设备节点、支持的控制、命令和事件的信息。有关打开 VPU 解码器节点的过程,请参阅 VPU 驱动节点。 解码器的 V4L2 ioctl 命令 有关标准ioctl 命令的描述,请参阅 Video for Linux API 函数参考。
除通用命令外,VPU 驱动还为视频解码器用例支持以下 ioctl 命令:
VIDIOC_TRY_DECODER_CMDVIDIOC_DECODER_CMD
解码器支持以下 V4L2 开源事件:
V4L2_EVENT_EOSV4L2_EVENT_SOURCE_CHANGEV4L2_EVENT_CTRL
V4L2_DEC_CMD_STARTV4L2_DEC_CMD_STOP
V4L2 视频编码器
本节提供有关 Adreno VPU 编码器设备节点、支持的控制、命令和事件的信息。有关打开 VPU 编码器节点的过程,请参阅 VPU 驱动节点。 编码器的 V4L2 ioctl 命令 有关标准ioctl 命令的描述,请参阅函数参考。
除通用命令外,VPU 驱动还为编码用例支持以下 ioctl 命令:
VIDIOC_ENUM_FRAMEINTERVALSVIDIOC_S_SELECTIONVIDIOC_S_PARMVIDIOC_G_PARMVIDIOC_TRY_ENCODER_CMDVIDIOC_ENCODER_CMD
请在两个平面上都设置好格式之后、在任一平面上请求缓冲区之前,设置所有静态配置选项。在两个平面上设置好格式之后再调用动态参数。
有关编码器 V4L2 控制的信息,请参阅编解码器控制参考。
编码器支持的开源事件包括:
V4L2_EVENT_EOSV4L2_EVENT_CTRL
V4L2_ENC_CMD_STARTV4L2_ENC_CMD_STOP
配置 V4L2 API
使用本节提供的 V4L2 控制 ID、接受的格式、接受的范围和示例代码信息,在您的设备上配置和管理不同的视频功能。 B 帧编码 您可以使用VIDIOC_S_CTRL ioctl 系统调用配置 VPU 驱动,在编码器会话中设置 B 帧。请在输出平面上设置 VIDIOC_STREAMON 之前设置 B 帧编码配置。VPU 驱动仅在使用分层编码时支持 B 帧编码。此功能不支持动态配置。
以下代码示例显示单个 B 帧的静态配置:
VIDIOC_S_CTRL ioctl 系统调用进行覆盖。QP 覆盖提供了灵活性,可以仅为 I 帧、仅为 P 帧、仅为 B 帧、仅为 I 帧和 P 帧、仅为 P 帧和 B 帧或这些帧的组合设置初始帧 QP。请在输出平面上执行 VIDIOC_STREAMON 之前设置编码器初始 QP 覆盖配置,且该配置仅适用于编码器会话。
以下代码示例显示要设置的静态配置参数:
- 将 40 作为 I 帧的初始 QP
- 将 35 作为 P 帧的初始 QP
- H.264 会话的 B 帧
VIDIOC_S_CTRL ioctl 系统调用配置 VPU 驱动,将单个帧编码为多个切片。每个切片的位数或每个切片的宏块数即为切片边界。请在输出平面上执行 VIDIOC_STREAMON 之前设置切片编码配置。切片编码功能不支持动态配置,且该配置仅适用于编码器会话。
以下代码示例显示将帧编码为多个切片、且每个切片的最大宏块数设置为 400 的静态配置:
VIDIOC_S_CTRL ioctl 系统调用配置 VPU 驱动以激活帧内刷新模式和帧内刷新周期。请在输出平面上发出 VIDIOC_STREAMON 之前设置帧内刷新配置。您可以在会话期间动态更改帧内刷新周期,此功能仅适用于编码器会话。
以下代码示例显示每 10 帧激活一次随机帧内刷新的静态配置:
VIDIOC_S_CTRL ioctl 系统调用配置 VPU 驱动,在编码前旋转输入帧。请在输出平面上执行 VIDIOC_STREAMON 之前设置旋转配置。旋转功能不支持动态配置,且仅适用于编码器会话。
以下代码示例显示将输入帧旋转 90 度的静态配置:
VIDIOC_S_CTRL ioctl 系统调用配置 VPU 驱动,将 I 帧、P 帧和 B 帧的最小和最大帧 QP 范围参数设置为编码帧的预期值。请在输出平面上执行 VIDIOC_STREAMON 之前设置帧 QP 范围配置。这些值在整个会话中有效。不支持动态配置,且帧 QP 功能仅适用于编码器会话。
以下代码示例显示在 H.264 会话中为 I 帧、P 帧和 B 帧选择 40 作为最大 QP、10 作为最小 QP 的静态配置参数:

