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 应用开发和管线创建的信息,请参阅 Building an Application。配置 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 Function Reference。
除通用命令外,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 命令的说明,请参阅 Function Reference。
除通用命令外,VPU 驱动还为编码用例支持以下 ioctl 命令:
VIDIOC_ENUM_FRAMEINTERVALSVIDIOC_S_SELECTIONVIDIOC_S_PARMVIDIOC_G_PARMVIDIOC_TRY_ENCODER_CMDVIDIOC_ENCODER_CMD
请在两个平面上设置格式之后、在任一平面上请求缓冲区之前,设置所有静态配置选项。请在两个平面上设置格式之后调用动态参数。
有关编码器 V4L2 控制的信息,请参阅 Codec Control Reference。
编码器支持的开源事件包括:
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 覆盖配置,且该配置仅适用于编码器会话。
以下代码示例展示了要设置的静态配置参数:
- 将 I 帧的初始 QP 设置为 40
- 将 P 帧的初始 QP 设置为 35
- 为 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 的静态配置参数:

