• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 获取支持的编解码能力
2
3不同设备支持的编解码能力存在差异,开发者在调用编解码或配置编解码器前,需要先查询当前系统支持的编解码器规格。
4
5开发者可以调用本模块的Native API接口,查询相关能力的支持情况。
6
7## 开发步骤
8
9详细的API说明请参考[API文档](../reference/native-apis/_a_v_capability.md)。
10
111. 获得能力
12
13    ```c
14    // 根据mime type、是否编码器获得能力
15    OH_AVCapability *capability = OH_AVCodec_GetCapability(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false);
16
17    // 根据mime type、是否编码器以及软硬件类别获得能力
18    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, SOFTWARE);
19    ```
20
212. 查询参数
22    ```c
23    // 查询当前能力是否支持硬件
24    bool isHardware = OH_AVCapability_IsHardware(capability);
25
26    // 查询当前能力codec名称
27    const char *codecName = OH_AVCapability_GetName(capability);
28
29    // 查询当前能力中,最大支持的实例数
30    int32_t maxSupportedInstances = OH_AVCapability_GetMaxSupportedInstances(capability);
31
32    // 查询当前能力中,编码支持的码率范围
33    OH_AVRange bitrateRange;
34    int32_t ret = OH_AVCapability_GetEncoderBitrateRange(capability, &bitrateRange);
35    if (ret != AV_ERR_OK) {
36        // 处理异常
37    }
38
39    // 查询当前能力中,码控模式是否支持
40    bool isEncoderBitrateModeSupported = OH_AVCapability_IsEncoderBitrateModeSupported(capability, BITRATE_MODE_CBR);
41
42    // 查询当前能力中,编码质量范围
43    OH_AVRange qualityRange;
44    int32_t ret = OH_AVCapability_GetEncoderQualityRange(capability, &qualityRange);
45    if (ret != AV_ERR_OK) {
46        // 处理异常
47    }
48
49    // 查询当前能力中,编码复杂度范围
50    OH_AVRange complexityRange;
51    int32_t ret = OH_AVCapability_GetEncoderComplexityRange(capability, &complexityRange);
52    if (ret != AV_ERR_OK) {
53        // 处理异常
54    }
55
56    // 查询当前能力中,支持的音频采样率
57    const int32_t *sampleRates;
58    uint32_t sampleRateNum = 0;
59    int32_t ret = OH_AVCapability_GetAudioSupportedSampleRates(capability, &sampleRates, &sampleRateNum);
60    if (ret != AV_ERR_OK) {
61        // 处理异常
62    }
63
64    // 查询当前能力中,支持的音频通道数范围
65    OH_AVRange channelCountRange;
66    int32_t ret = OH_AVCapability_GetAudioChannelCountRange(capability, &channelCountRange);
67    if (ret != AV_ERR_OK) {
68        // 处理异常
69    }
70
71    // 查询当前能力中,宽的对齐值
72    int32_t widthAlignment;
73    int32_t ret = OH_AVCapability_GetVideoWidthAlignment(capability, &widthAlignment);
74    if (ret != AV_ERR_OK) {
75        // 处理异常
76    }
77
78    // 查询当前能力中,高的对齐值
79    int32_t heightAlignment;
80    int32_t ret = OH_AVCapability_GetVideoHeightAlignment(capability, &heightAlignment);
81    if (ret != AV_ERR_OK) {
82        // 处理异常
83    }
84
85    // 查询当前能力中,高为1080时,宽的范围
86    OH_AVRange widthRange;
87    int32_t ret = OH_AVCapability_GetVideoWidthRangeForHeight(capability, 1080, &widthRange);
88    if (ret != AV_ERR_OK) {
89        // 处理异常
90    }
91
92    // 查询当前能力中,宽为1920时,高的范围
93    OH_AVRange heightRange;
94    int32_t ret = OH_AVCapability_GetVideoHeightRangeForWidth(capability, 1920, &heightRange);
95    if (ret != AV_ERR_OK) {
96        // 处理异常
97    }
98
99    // 查询当前能力中,宽的范围
100    OH_AVRange widthRange;
101    int32_t ret = OH_AVCapability_GetVideoWidthRange(capability, &widthRange);
102    if (ret != AV_ERR_OK) {
103        // 处理异常
104    }
105
106    // 查询当前能力中,高的范围
107    OH_AVRange heightRange;
108    int32_t ret = OH_AVCapability_GetVideoWidthRange(capability, &heightRange);
109    if (ret != AV_ERR_OK) {
110        // 处理异常
111    }
112
113    // 校验当前能力是否支持分辨率1080p
114    bool isVideoSizeSupported = OH_AVCapability_IsVideoSizeSupported(capability, 1920, 1080);
115
116    // 查询当前能力中,视频帧率范围
117    OH_AVRange frameRateRange;
118    int32_t ret = OH_AVCapability_GetVideoFrameRateRange(capability, &frameRateRange);
119    if (ret != AV_ERR_OK) {
120        // 处理异常
121    }
122
123    // 查询当前能力中,分辨率为1920x1080时视频帧率范围
124    OH_AVRange frameRateRange;
125    int32_t ret =  OH_AVCapability_GetVideoFrameRateRangeForSize(capability, 1920, 1080, &frameRateRange);
126    if (ret != AV_ERR_OK) {
127        // 处理异常
128    }
129
130    // 校验当前能力是否支持分辨率1080p、帧率30的场景
131    bool areVideoSizeAndFrameRateSupported = OH_AVCapability_AreVideoSizeAndFrameRateSupported(capability, 1920, 1080, 30);
132
133    // 查询当前能力中,支持的颜色格式以及个数
134    const int32_t *pixFormats;
135    uint32_t pixFormatNum = 0;
136    int32_t ret = OH_AVCapability_GetVideoSupportedPixelFormats(capability, &pixFormats, &pixFormatNum);
137    if (ret != AV_ERR_OK) {
138        // 处理异常
139    }
140
141    // 查询当前能力中,支持的模板
142    const int32_t *profiles;
143    uint32_t profileNum = 0;
144    int32_t ret =  OH_AVCapability_GetSupportedProfiles(capability, &profiles, &profileNum);
145    if (ret != AV_ERR_OK) {
146        // 处理异常
147    }
148
149    // 查询当前能力中,特定模板情况下的等级范围
150    const int32_t *levels;
151    uint32_t levelNum = 0;
152    int32_t ret = OH_AVCapability_GetSupportedLevelsForProfile(capability, 0, &levels, &levelNum);
153
154    // 检查编解码器是否支持配置文件和级别的特定组合
155    bool areProfileAndLevelSupported = OH_AVCapability_AreProfileAndLevelSupported(capability, AVC_PROFILE_BASELINE, 1);
156    ```