# 接口

Source: [https://docs.qualcomm.com/doc/80-70014-20Y/topic/interfaces.html](https://docs.qualcomm.com/doc/80-70014-20Y/topic/interfaces.html)

Qualcomm Linux 平台支持以下视频 API：
- **[V4L2 API](https://docs.qualcomm.com/doc/80-70014-20Y/topic/interfaces.html#concept_bpj_kg3_bzb__section_nss_w1z_k1c_eputla_02-14-24-2315-20-633)**：Adreno VPU 驱动程序遵循符合 V4L2 的标准调用流程。可以在此处找到有关 V4L2 API、命令、控件和事件的信息。
- **[GStreamer API](https://docs.qualcomm.com/doc/80-70014-20Y/topic/interfaces.html#concept_bpj_kg3_bzb__section_r53_mv3_n1c_eputla_02-23-24-1111-38-601)**：Qualcomm GStreamer 插件兼容开源 GStreamer 框架。可以在 QIM SDK 中找到有关各种基于 Gstreamer 的插件的信息。

## V4L2 API

Adreno VPU 驱动程序基于 V4L2 接口，支持所有遵循 V4L2 指南的客户端的视频编码和解码。

本节介绍解码器和编码器的 V4L2 设备节点、文件操作、命令、控件和事件。

**VPU 驱动程序节点**

VPU 驱动程序在启动过程中注册并分配设备节点编号。下面是有关解码器和编码器的 VPU 驱动程序节点的信息：

- 解码器的 VPU 驱动程序节点：`/dev/video32`
- 编码器的 VPU 驱动程序节点： `/dev/video33`

**V4L2 文件操作**

Adreno VPU 驱动程序支持以下 V4L2 文件操作：

| 操作 | 说明 |
| --- | --- |
| `Open` | 打开视频设备文件描述符 (FD)，该描述符有助于使用 ioctl 命令与 VPU 驱动程序通信 |
| `Close` | 在视频用例完成后关闭视频设备，并释放与视频设备相关的所有 VPU 驱动程序资源 |
| `Poll` | 等待来自 VPU 驱动程序的事件 |
| `Ioctl` | 向 VPU 设备发送命令或控件 |

**V4L2 视频解码器**

此处介绍了 Adreno VPU 解码器设备节点、支持的控件、命令和事件。有关打开 VPU 解码器节点的步骤，可参见 [VPU 驱动程序节点](https://docs.qualcomm.com/doc/80-70014-20Y/topic/interfaces.html#concept_bpj_kg3_bzb__p_lg1_3cs_s1c_eputla_03-13-24-1448-52-615)主题。

**解码器的 V4L2 ioctl 命令**

有关标准 ioctl 命令的说明，参见 [Linux API 视频函数参考](https://www.kernel.org/doc/html/v4.9/media/uapi/v4l/user-func.html)。

对于视频解码器用例，VPU 驱动程序中提供的受支持 ioctl 命令列表如下：
- VIDIOC_ENUM_FMTCopy to clipboard
- VIDIOC_TRY_FMTCopy to clipboard
- VIDIOC_G_FMTCopy to clipboard
- VIDIOC_S_FMTCopy to clipboard
- VIDIOC_ENUM_FRAMESIZESCopy to clipboard
- VIDIOC_REQBUFSCopy to clipboard
- VIDIOC_QUERY_BUFCopy to clipboard
- VIDIOC_CREATE_BUFSCopy to clipboard
- VIDIOC_PREPARE_BUFCopy to clipboard
- VIDIOC_QBUFCopy to clipboard
- VIDIOC_DQBUFCopy to clipboard
- VIDIOC_STREAMONCopy to clipboard
- VIDIOC_STREAMOFFCopy to clipboard
- VIDIOC_QUERYCAPCopy to clipboard
- VIDIOC_QUERYCTRLCopy to clipboard
- VIDIOC_QUERYMENUCopy to clipboard
- VIDIOC_SUBSCRIBE_EVENTCopy to clipboard
- VIDIOC_UNSUBSCRIBE_EVENTCopy to clipboard
- VIDIOC_G_SELECTIONCopy to clipboard
- VIDIOC_TRY_DECODER_CMDCopy to clipboard
- VIDIOC_DECODER_CMDCopy to clipboard
- VIDIOC_G_CTRLCopy to clipboard
- VIDIOC_S_CTRLCopy to clipboard

支持[视频解码器接口](https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/dev-decoder.html)中提到的视频解码器用例所需的所有必需命令。

**解码器的 V4L2 开源控件**

有关标准开源控件的说明，参见[编解码器控件参考](https://www.kernel.org/doc/html/v5.5/media/uapi/v4l/ext-ctrls-codec.html)。

下表列出了视频解码器用例的 VPU 驱动程序中支持的开源控件：

| 控件 ID | 用途 | 动态/静态 |
| --- | --- | --- |
| V4L2_CID_MPEG_VIDEO_H264_PROFILECopy to clipboard | H.264 解码器配置文件 | 静态 |
| V4L2_CID_MPEG_VIDEO_HEVC_PROFILECopy to clipboard | HEVC 解码器配置文件 | 静态 |
| V4L2_CID_MPEG_VIDEO_VP9_PROFILECopy to clipboard | VP9 解码器配置文件 | 静态 |
| V4L2_CID_MPEG_VIDEO_H264_LEVELCopy to clipboard | H.264 解码器级别 | 静态 |
| V4L2_CID_MPEG_VIDEO_HEVC_LEVELCopy to clipboard | HEVC 解码器级别 | 静态 |
| V4L2_CID_MPEG_VIDEO_VP9_LEVELCopy to clipboard | VP9 解码器级别 | 静态 |
| V4L2_CID_MPEG_VIDEO_HEVC_TIERCopy to clipboard | HEVC 解码器层级 | 静态 |

解码器支持的 V4L2 开源事件列表如下：
- V4L2_EVENT_EOSCopy to clipboard
- V4L2_EVENT_SOURCE_CHANGECopy to clipboard
- V4L2_EVENT_CTRLCopy to clipboard

解码器支持的 V4L2 命令列表如下：
- V4L2_DEC_CMD_STARTCopy to clipboard
- V4L2_DEC_CMD_STOPCopy to clipboard

**V4L2 视频编码器**

此处介绍了 Adreno VPU 编码器设备节点、支持的控件、命令和事件。有关打开 VPU 编码器节点的步骤，可参见 [VPU 驱动程序节点](https://docs.qualcomm.com/doc/80-70014-20Y/topic/interfaces.html#concept_bpj_kg3_bzb__p_lg1_3cs_s1c_eputla_03-13-24-1448-52-615)主题。

**编码器的 V4l2 ioctl 命令**

有关标准 ioctl 命令的说明，参见 [Linux API 视频函数参考](https://www.kernel.org/doc/html/v4.9/media/uapi/v4l/user-func.html)。

对于编码用例，VPU 驱动程序中提供的受支持 ioctl 命令列表如下：
- VIDIOC_ENUM_FMTCopy to clipboard
- VIDIOC_TRY_FMTCopy to clipboard
- VIDIOC_G_FMTCopy to clipboard
- VIDIOC_S_FMTCopy to clipboard
- VIDIOC_ENUM_FRAMESIZESCopy to clipboard
- VIDIOC_ENUM_FRAMEINTERVALSCopy to clipboard
- VIDIOC_REQBUFSCopy to clipboard
- VIDIOC_QUERY_BUFCopy to clipboard
- VIDIOC_CREATE_BUFCopy to clipboard
- VIDIOC_PREPARE_BUFCopy to clipboard
- VIDIOC_QBUFCopy to clipboard
- VIDIOC_DQBUFCopy to clipboard
- VIDIOC_STREAMONCopy to clipboard
- VIDIOC_STREAMOFFCopy to clipboard
- VIDIOC_QUERYCAPCopy to clipboard
- VIDIOC_QUERYCTRLCopy to clipboard
- VIDIOC_QUERYMENUCopy to clipboard
- VIDIOC_SUBSCRIBE_EVENTCopy to clipboard
- VIDIOC_UNSUBSCRIBE_EVENTCopy to clipboard
- VIDIOC_G_SELECTIONCopy to clipboard
- VIDIOC_S_SELECTIONCopy to clipboard
- VIDIOC_S_PARMCopy to clipboard
- VIDIOC_G_PARMCopy to clipboard
- VIDIOC_TRY_ENCODER_CMDCopy to clipboard
- VIDIOC_ENCODER_CMDCopy to clipboard
- VIDIOC_G_CTRLCopy to clipboard
- VIDIOC_S_CTRLCopy to clipboard

支持[视频编码器接口](https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/dev-encoder.html)中提到的视频编码器用例所需的所有必需命令。

**编码器的 V4L2 开源控件**

有关标准开源控件的说明，参见[编解码器控件参考](https://www.kernel.org/doc/html/v5.5/media/uapi/v4l/ext-ctrls-codec.html)。

下表列出了视频编码器用例的 VPU 驱动程序中支持的开源控件：

| 控件 ID | 用途 | 动态/静态 |
| --- | --- | --- |
| V4L2_CID_MPEG_VIDEO_H264_PROFILECopy to clipboard | H.264 编码器配置文件 | 静态 |
| V4L2_CID_MPEG_VIDEO_HEVC_PROFILECopy to clipboard | HEVC 编码器配置文件 | 静态 |
| V4L2_CID_MPEG_VIDEO_H264_LEVELCopy to clipboard | H.264 编码器级别 | 静态 |
| V4L2_CID_MPEG_VIDEO_HEVC_LEVELCopy to clipboard | HEVC 编码器级别 | 静态 |
| V4L2_CID_MPEG_VIDEO_HEVC_TIERCopy to clipboard | H.264 编码器层级 | 静态 |
| V4L2_CID_HFLIPCopy to clipboard | 水平翻转 | 两者 |
| V4L2_CID_VFLIPCopy to clipboard | 垂直翻转 | 两者 |
| V4L2_CID_ROTATECopy to clipboard | 旋转 | 静态 |
| V4L2_CID_MPEG_VIDEO_HEADER_MODECopy to clipboard | 标头模式 | 静态 |
| V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDRCopy to clipboard | 带 IDR 帧的 SPS/PPS | 静态 |
| V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAMECopy to clipboard | 请求强制同步帧 | 两者 |
| V4L2_CID_MPEG_VIDEO_BITRATECopy to clipboard | 平均比特率 | 两者 |
| V4L2_CID_MPEG_VIDEO_BITRATE_PEAKCopy to clipboard | 峰值比特率 | 两者 |
| V4L2_CID_MPEG_VIDEO_BITRATE_MODECopy to clipboard | 码率控制 | 静态 |
| V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODECopy to clipboard | 跳帧模式 | 静态 |
| V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLECopy to clipboard | RC 使能/禁用 | 静态 |
| V4L2_CID_MPEG_VIDEO_GOP_SIZECopy to clipboard | 图片组大小 | 两者 |
| V4L2_CID_MPEG_VIDEO_B_FRAMESCopy to clipboard | B 帧 | 静态 |
| V4L2_CID_MPEG_VIDEO_LTR_COUNTCopy to clipboard | LTR 帧数 | 静态 |
| V4L2_CID_MPEG_VIDEO_USE_LTR_FRAMESCopy to clipboard | 使用 LTR | 两者 |
| V4L2_CID_MPEG_VIDEO_FRAME_LTR_INDEXCopy to clipboard | 标记 LTR | 两者 |
| V4L2_CID_MPEG_VIDEO_BASELAYER_PRIORITY_IDCopy to clipboard | 设置层编码的基本层 ID | 静态 |
| V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPECopy to clipboard | 内部刷新 | 静态 |
| V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIODCopy to clipboard | 内部刷新周期 | 两者 |
| V4L2_CID_MPEG_VIDEO_H264_MIN_QPCopy to clipboard | H.264 最小 QP | 静态 |
| V4L2_CID_MPEG_VIDEO_HEVC_MIN_QPCopy to clipboard | HEVC 最小 QP | 静态 |
| V4L2_CID_MPEG_VIDEO_H264_MAX_QPCopy to clipboard | H.264 最大 QP | 静态 |
| V4L2_CID_MPEG_VIDEO_HEVC_MAX_QPCopy to clipboard | HEVC 最大 QP | 静态 |
| V4L2_CID_MPEG_VIDEO_H264_I_FRAME_MIN_QPCopy to clipboard | H.264 I 帧最小 QP | 静态 |
| V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_MIN_QPCopy to clipboard | HEVC I 帧最小 QP | 静态 |
| V4L2_CID_MPEG_VIDEO_H264_P_FRAME_MIN_QPCopy to clipboard | H.264 P 帧最小 QP | 静态 |
| V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_MIN_QPCopy to clipboard | HEVC P 帧最小 QP | 静态 |
| V4L2_CID_MPEG_VIDEO_H264_B_FRAME_MIN_QPCopy to clipboard | H.264 B 帧最小 QP | 静态 |
| V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_MIN_QPCopy to clipboard | HEVC B 帧最小 QP | 静态 |
| V4L2_CID_MPEG_VIDEO_H264_I_FRAME_MAX_QPCopy to clipboard | H.264 I 帧最大 QP | 静态 |
| V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_MAX_QPCopy to clipboard | HEVC I 帧最大 QP | 静态 |
| V4L2_CID_MPEG_VIDEO_H264_P_FRAME_MAX_QPCopy to clipboard | H.264 P 帧最大 QP | 静态 |
| V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_MAX_QPCopy to clipboard | HEVC P 帧最大 QP | 静态 |
| V4L2_CID_MPEG_VIDEO_H264_B_FRAME_MAX_QPCopy to clipboard | H.264 B 帧最大 QP | 静态 |
| V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_MAX_QPCopy to clipboard | HEVC B 帧最大 QP | 静态 |
| V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QPCopy to clipboard | HEVC I 帧 QP | 两者 |
| V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QPCopy to clipboard | H.264 I 帧 QP | 两者 |
| V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QPCopy to clipboard | HEVC P 帧 QP | 两者 |
| V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QPCopy to clipboard | H.264 P 帧 QP | 两者 |
| V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QPCopy to clipboard | HEVC B 帧 QP | 两者 |
| V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QPCopy to clipboard | H.264 B 帧 QP | 两者 |
| V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPECopy to clipboard | HEVC Hier 编码类型 | 静态 |
| V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPECopy to clipboard | H.264 Hier 编码类型 | 静态 |
| V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODINGCopy to clipboard | 启用 H.264 Hier 编码 | 静态 |
| V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYERCopy to clipboard | HEVC Hier 层数 | 两者 |
| V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYERCopy to clipboard | H.264 Hier 层数 | 两者 |
| V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L0_BRCopy to clipboard | H.264 层 0 比特率 | 两者 |
| V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BRCopy to clipboard | HEVC 层 0 比特率 | 两者 |
| V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L1_BRCopy to clipboard | H.264 层 1 比特率 | 两者 |
| V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BRCopy to clipboard | HEVC 层 1 比特率 | 两者 |
| V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L2_BRCopy to clipboard | H.264 层 2 比特率 | 两者 |
| V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BRCopy to clipboard | HEVC 层 2 比特率 | 两者 |
| V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L3_BRCopy to clipboard | H.264 层 3 比特率 | 两者 |
| V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BRCopy to clipboard | HEVC 层 3 比特率 | 两者 |
| V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L4_BRCopy to clipboard | H.264 层 4 比特率 | 两者 |
| V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BRCopy to clipboard | HEVC 层 4 比特率 | 两者 |
| V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L5_BRCopy to clipboard | H.264 层 5 比特率 | 两者 |
| V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BRCopy to clipboard | HEVC 层 5 比特率 | 两者 |
| V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODECopy to clipboard | H.264 熵模式 | 静态 |
| V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODECopy to clipboard | 编码分片模式 | 静态 |
| V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTESCopy to clipboard | 分片中的最大字节数 | 静态 |
| V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MBCopy to clipboard | 分片中的最大宏块数 | 静态 |

所有静态配置选项都必须在设置两个平面上的格式之后以及在任一平面上请求缓冲区之前进行设置。在两个平面上设置格式后，可以调用动态参数。

有关编码器的 V4L2 控件的详细信息，参见[编解码器控件参考](https://www.kernel.org/doc/html/v5.5/media/uapi/v4l/ext-ctrls-codec.html)。

编码器支持的开源事件列表如下：
- V4L2_EVENT_EOSCopy to clipboard
- V4L2_EVENT_CTRLCopy to clipboard

编码器支持的开源命令列表如下：
- V4L2_ENC_CMD_STARTCopy to clipboard
- V4L2_ENC_CMD_STOPCopy to clipboard

## GStreamer API

Qualcomm 提供了基于 Gstreamer 的插件。您可以将这些插件添加到您的媒体 pipeline 中。有关 Qualcomm 提供的基于 GStreamer 的插件的更多信息，参见 [Qualcomm GST 插件](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-50Y/qim-sdk-plugins.html)。

有关 GStreamer 应用程序开发和pipeline创建的详细信息，参见[编译应用程序](https://gstreamer.freedesktop.org/documentation/application-development/basics/index.html)。

Last Published: Aug 22, 2024

[Previous Topic
架构](https://docs.qualcomm.com/bundle/publicresource/80-70014-20Y/topics/architecture.md) [Next Topic
软件](https://docs.qualcomm.com/bundle/publicresource/80-70014-20Y/topics/software.md)