1da853ecaSopenharmony_ci/*
2da853ecaSopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd.
3da853ecaSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4da853ecaSopenharmony_ci * you may not use this file except in compliance with the License.
5da853ecaSopenharmony_ci * You may obtain a copy of the License at
6da853ecaSopenharmony_ci *
7da853ecaSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8da853ecaSopenharmony_ci *
9da853ecaSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10da853ecaSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11da853ecaSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12da853ecaSopenharmony_ci * See the License for the specific language governing permissions and
13da853ecaSopenharmony_ci * limitations under the License.
14da853ecaSopenharmony_ci */
15da853ecaSopenharmony_ci
16da853ecaSopenharmony_ci#ifndef NATIVE_AVCAPABILITY_H
17da853ecaSopenharmony_ci#define NATIVE_AVCAPABILITY_H
18da853ecaSopenharmony_ci
19da853ecaSopenharmony_ci#include <stdint.h>
20da853ecaSopenharmony_ci#include "native_averrors.h"
21da853ecaSopenharmony_ci#include "native_avformat.h"
22da853ecaSopenharmony_ci
23da853ecaSopenharmony_ci#ifdef __cplusplus
24da853ecaSopenharmony_ciextern "C" {
25da853ecaSopenharmony_ci#endif
26da853ecaSopenharmony_ci
27da853ecaSopenharmony_citypedef struct OH_AVCapability OH_AVCapability;
28da853ecaSopenharmony_ci
29da853ecaSopenharmony_ci/**
30da853ecaSopenharmony_ci * @brief The bitrate mode of encoder.
31da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
32da853ecaSopenharmony_ci * @since 10
33da853ecaSopenharmony_ci */
34da853ecaSopenharmony_citypedef enum OH_BitrateMode {
35da853ecaSopenharmony_ci    /* Constant Bit rate mode. */
36da853ecaSopenharmony_ci    BITRATE_MODE_CBR = 0,
37da853ecaSopenharmony_ci    /* Variable Bit rate mode. */
38da853ecaSopenharmony_ci    BITRATE_MODE_VBR = 1,
39da853ecaSopenharmony_ci    /* Constant Quality mode. */
40da853ecaSopenharmony_ci    BITRATE_MODE_CQ = 2
41da853ecaSopenharmony_ci} OH_BitrateMode;
42da853ecaSopenharmony_ci
43da853ecaSopenharmony_ci/**
44da853ecaSopenharmony_ci * @brief Range contain min and max value
45da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
46da853ecaSopenharmony_ci * @since 10
47da853ecaSopenharmony_ci */
48da853ecaSopenharmony_citypedef struct OH_AVRange {
49da853ecaSopenharmony_ci    int32_t minVal;
50da853ecaSopenharmony_ci    int32_t maxVal;
51da853ecaSopenharmony_ci} OH_AVRange;
52da853ecaSopenharmony_ci
53da853ecaSopenharmony_ci/**
54da853ecaSopenharmony_ci * @brief The codec category
55da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
56da853ecaSopenharmony_ci * @since 10
57da853ecaSopenharmony_ci */
58da853ecaSopenharmony_citypedef enum OH_AVCodecCategory {
59da853ecaSopenharmony_ci    HARDWARE = 0,
60da853ecaSopenharmony_ci    SOFTWARE
61da853ecaSopenharmony_ci} OH_AVCodecCategory;
62da853ecaSopenharmony_ci
63da853ecaSopenharmony_ci/**
64da853ecaSopenharmony_ci * @brief The enum of optional features that can be used in specific codec seenarios.
65da853ecaSopenharmony_ci *
66da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
67da853ecaSopenharmony_ci * @since 12
68da853ecaSopenharmony_ci */
69da853ecaSopenharmony_citypedef enum OH_AVCapabilityFeature {
70da853ecaSopenharmony_ci    /** Feature for codec supports temporal scalability. It is only used in video encoder. */
71da853ecaSopenharmony_ci    VIDEO_ENCODER_TEMPORAL_SCALABILITY = 0,
72da853ecaSopenharmony_ci    /** Feature for codec supports long-term reference. It is only used in video encoder. */
73da853ecaSopenharmony_ci    VIDEO_ENCODER_LONG_TERM_REFERENCE = 1,
74da853ecaSopenharmony_ci    /** Feature for codec supports low latency. It is used in video encoder and video decoder. */
75da853ecaSopenharmony_ci    VIDEO_LOW_LATENCY = 2,
76da853ecaSopenharmony_ci} OH_AVCapabilityFeature;
77da853ecaSopenharmony_ci
78da853ecaSopenharmony_ci/**
79da853ecaSopenharmony_ci * @brief Get a system-recommended codec's capability.
80da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
81da853ecaSopenharmony_ci * @param mime Mime type
82da853ecaSopenharmony_ci * @param isEncoder True for encoder, false for decoder
83da853ecaSopenharmony_ci * @return Returns a capability instance if an existing codec matches,
84da853ecaSopenharmony_ci * if the specified mime type doesn't match any existing codec, returns NULL.
85da853ecaSopenharmony_ci * @since 10
86da853ecaSopenharmony_ci */
87da853ecaSopenharmony_ciOH_AVCapability *OH_AVCodec_GetCapability(const char *mime, bool isEncoder);
88da853ecaSopenharmony_ci
89da853ecaSopenharmony_ci/**
90da853ecaSopenharmony_ci * @brief Get a codec's capability within the specified category. By specifying the category,
91da853ecaSopenharmony_ci * the matched codec is limited to either hardware codecs or software codecs.
92da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
93da853ecaSopenharmony_ci * @param mime Mime type
94da853ecaSopenharmony_ci * @param isEncoder True for encoder, false for decoder
95da853ecaSopenharmony_ci * @param category The codec category
96da853ecaSopenharmony_ci * @return Returns a capability instance if an existing codec matches,
97da853ecaSopenharmony_ci * if the specified mime type doesn't match any existing codec, returns NULL
98da853ecaSopenharmony_ci * @since 10
99da853ecaSopenharmony_ci */
100da853ecaSopenharmony_ciOH_AVCapability *OH_AVCodec_GetCapabilityByCategory(const char *mime, bool isEncoder, OH_AVCodecCategory category);
101da853ecaSopenharmony_ci
102da853ecaSopenharmony_ci/**
103da853ecaSopenharmony_ci * @brief Check if the capability instance is describing a hardware codec.
104da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
105da853ecaSopenharmony_ci * @param capability Codec capability pointer
106da853ecaSopenharmony_ci * @return Returns true if the capability instance is describing a hardware codec,
107da853ecaSopenharmony_ci * false if the capability instance is describing a software codec
108da853ecaSopenharmony_ci * @since 10
109da853ecaSopenharmony_ci */
110da853ecaSopenharmony_cibool OH_AVCapability_IsHardware(OH_AVCapability *capability);
111da853ecaSopenharmony_ci
112da853ecaSopenharmony_ci/**
113da853ecaSopenharmony_ci * @brief Get the codec name.
114da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
115da853ecaSopenharmony_ci * @param capability Codec capability pointer
116da853ecaSopenharmony_ci * @return Returns codec name string
117da853ecaSopenharmony_ci * @since 10
118da853ecaSopenharmony_ci */
119da853ecaSopenharmony_ciconst char *OH_AVCapability_GetName(OH_AVCapability *capability);
120da853ecaSopenharmony_ci
121da853ecaSopenharmony_ci/**
122da853ecaSopenharmony_ci * @brief Get the supported max instance number of the codec.
123da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
124da853ecaSopenharmony_ci * @param capability Codec capability pointer
125da853ecaSopenharmony_ci * @return Returns the max supported codec instance number
126da853ecaSopenharmony_ci * @since 10
127da853ecaSopenharmony_ci */
128da853ecaSopenharmony_ciint32_t OH_AVCapability_GetMaxSupportedInstances(OH_AVCapability *capability);
129da853ecaSopenharmony_ci
130da853ecaSopenharmony_ci/**
131da853ecaSopenharmony_ci * @brief Get the encoder's supported bitrate range.
132da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
133da853ecaSopenharmony_ci * @param capability Encoder capability pointer. Do not give a decoder capability pointer
134da853ecaSopenharmony_ci * @param bitrateRange Output parameter. Encoder bitrate range
135da853ecaSopenharmony_ci * @return Returns AV_ERR_OK if the execution is successful,
136da853ecaSopenharmony_ci * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
137da853ecaSopenharmony_ci * {@link AV_ERR_INVALID_VAL}, the capability is invalid, or the bitrateRange is nullptr.
138da853ecaSopenharmony_ci * @since 10
139da853ecaSopenharmony_ci */
140da853ecaSopenharmony_ciOH_AVErrCode OH_AVCapability_GetEncoderBitrateRange(OH_AVCapability *capability, OH_AVRange *bitrateRange);
141da853ecaSopenharmony_ci
142da853ecaSopenharmony_ci/**
143da853ecaSopenharmony_ci * @brief Check if the encoder supports the specific bitrate mode.
144da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
145da853ecaSopenharmony_ci * @param capability Encoder capability pointer. Do not give a decoder capability pointer
146da853ecaSopenharmony_ci * @param bitrateMode Bitrate mode
147da853ecaSopenharmony_ci * @return Returns true if the bitrate mode is supported, false if the bitrate mode is not supported
148da853ecaSopenharmony_ci * @since 10
149da853ecaSopenharmony_ci */
150da853ecaSopenharmony_cibool OH_AVCapability_IsEncoderBitrateModeSupported(OH_AVCapability *capability, OH_BitrateMode bitrateMode);
151da853ecaSopenharmony_ci
152da853ecaSopenharmony_ci/**
153da853ecaSopenharmony_ci * @brief Get the encoder's supported quality range.
154da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
155da853ecaSopenharmony_ci * @param capability Encoder capability pointer. Do not give a decoder capability pointer
156da853ecaSopenharmony_ci * @param qualityRange Output parameter. Encoder quality range
157da853ecaSopenharmony_ci * @return Returns AV_ERR_OK if the execution is successful,
158da853ecaSopenharmony_ci * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
159da853ecaSopenharmony_ci * {@link AV_ERR_INVALID_VAL}, the capability is invalid, or the qualityRange is nullptr.
160da853ecaSopenharmony_ci * @since 10
161da853ecaSopenharmony_ci */
162da853ecaSopenharmony_ciOH_AVErrCode OH_AVCapability_GetEncoderQualityRange(OH_AVCapability *capability, OH_AVRange *qualityRange);
163da853ecaSopenharmony_ci
164da853ecaSopenharmony_ci/**
165da853ecaSopenharmony_ci * @brief Get the encoder's supported encoder complexity range.
166da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
167da853ecaSopenharmony_ci * @param capability Encoder capability pointer. Do not give a decoder capability pointer
168da853ecaSopenharmony_ci * @param complexityRange Output parameter. Encoder complexity range
169da853ecaSopenharmony_ci * @return Returns AV_ERR_OK if the execution is successful,
170da853ecaSopenharmony_ci * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
171da853ecaSopenharmony_ci * {@link AV_ERR_INVALID_VAL}, the capability is invalid, or the complexityRange is nullptr.
172da853ecaSopenharmony_ci * @since 10
173da853ecaSopenharmony_ci */
174da853ecaSopenharmony_ciOH_AVErrCode OH_AVCapability_GetEncoderComplexityRange(OH_AVCapability *capability, OH_AVRange *complexityRange);
175da853ecaSopenharmony_ci
176da853ecaSopenharmony_ci/**
177da853ecaSopenharmony_ci * @brief Get the audio codec's supported sample rates.
178da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
179da853ecaSopenharmony_ci * @param capability Audio codec capability pointer. Do not give a video codec capability pointer
180da853ecaSopenharmony_ci * @param sampleRates Output parameter. A pointer to the sample rates array
181da853ecaSopenharmony_ci * @param sampleRateNum Output parameter. The element number of the sample rates array
182da853ecaSopenharmony_ci * @return Returns AV_ERR_OK if the execution is successful,
183da853ecaSopenharmony_ci * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
184da853ecaSopenharmony_ci * {@link AV_ERR_INVALID_VAL}, the capability is invalid, the sampleRates is nullptr, or sampleRateNum is nullptr.
185da853ecaSopenharmony_ci * {@link AV_ERR_UNKNOWN}, unknown error.
186da853ecaSopenharmony_ci * {@link AV_ERR_NO_MEMORY}, internal use memory malloc failed.
187da853ecaSopenharmony_ci * @since 10
188da853ecaSopenharmony_ci */
189da853ecaSopenharmony_ciOH_AVErrCode OH_AVCapability_GetAudioSupportedSampleRates(OH_AVCapability *capability, const int32_t **sampleRates,
190da853ecaSopenharmony_ci                                                          uint32_t *sampleRateNum);
191da853ecaSopenharmony_ci
192da853ecaSopenharmony_ci/**
193da853ecaSopenharmony_ci * @brief Get the audio codec's supported audio channel count range.
194da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
195da853ecaSopenharmony_ci * @param capability Audio codec capability pointer. Do not give a video codec capability pointer
196da853ecaSopenharmony_ci * @param channelCountRange Output parameter. Audio channel count range
197da853ecaSopenharmony_ci * @return Returns AV_ERR_OK if the execution is successful,
198da853ecaSopenharmony_ci * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
199da853ecaSopenharmony_ci * {@link AV_ERR_INVALID_VAL}, the capability is invalid, or the channelCountRange is nullptr.
200da853ecaSopenharmony_ci * @since 10
201da853ecaSopenharmony_ci */
202da853ecaSopenharmony_ciOH_AVErrCode OH_AVCapability_GetAudioChannelCountRange(OH_AVCapability *capability, OH_AVRange *channelCountRange);
203da853ecaSopenharmony_ci
204da853ecaSopenharmony_ci/**
205da853ecaSopenharmony_ci * @brief Get the video codec's supported video width alignment.
206da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
207da853ecaSopenharmony_ci * @param capability Video codec capability pointer. Do not give an audio codec capability pointer
208da853ecaSopenharmony_ci * @param widthAlignment Output parameter. Video width alignment
209da853ecaSopenharmony_ci * @return Returns AV_ERR_OK if the execution is successful,
210da853ecaSopenharmony_ci * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
211da853ecaSopenharmony_ci * {@link AV_ERR_INVALID_VAL}, the capability is invalid, or the widthAlignment is nullptr.
212da853ecaSopenharmony_ci * @since 10
213da853ecaSopenharmony_ci */
214da853ecaSopenharmony_ciOH_AVErrCode OH_AVCapability_GetVideoWidthAlignment(OH_AVCapability *capability, int32_t *widthAlignment);
215da853ecaSopenharmony_ci
216da853ecaSopenharmony_ci/**
217da853ecaSopenharmony_ci * @brief Get the video codec's supported video height alignment.
218da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
219da853ecaSopenharmony_ci * @param capability Video codec capability pointer. Do not give an audio codec capability pointer
220da853ecaSopenharmony_ci * @param heightAlignment Output parameter. Video height alignment
221da853ecaSopenharmony_ci * @return Returns AV_ERR_OK if the execution is successful,
222da853ecaSopenharmony_ci * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
223da853ecaSopenharmony_ci * {@link AV_ERR_INVALID_VAL}, the capability is invalid, or the heightAlignment is nullptr.
224da853ecaSopenharmony_ci * @since 10
225da853ecaSopenharmony_ci */
226da853ecaSopenharmony_ciOH_AVErrCode OH_AVCapability_GetVideoHeightAlignment(OH_AVCapability *capability, int32_t *heightAlignment);
227da853ecaSopenharmony_ci
228da853ecaSopenharmony_ci/**
229da853ecaSopenharmony_ci * @brief Get the video codec's supported video width range for a specific height.
230da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
231da853ecaSopenharmony_ci * @param capability video codec capability pointer. Do not give an audio codec capability pointer
232da853ecaSopenharmony_ci * @param height Vertical pixel number of the video
233da853ecaSopenharmony_ci * @param widthRange Output parameter. Video width range
234da853ecaSopenharmony_ci * @return Returns AV_ERR_OK if the execution is successful,
235da853ecaSopenharmony_ci * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
236da853ecaSopenharmony_ci * {@link AV_ERR_INVALID_VAL}, the capability is invalid, the height is not within the supported range
237da853ecaSopenharmony_ci * obtained through {@link OH_AVCapability_GetVideoHeightRange}, or the widthRange is nullptr.
238da853ecaSopenharmony_ci * @since 10
239da853ecaSopenharmony_ci */
240da853ecaSopenharmony_ciOH_AVErrCode OH_AVCapability_GetVideoWidthRangeForHeight(OH_AVCapability *capability, int32_t height,
241da853ecaSopenharmony_ci                                                         OH_AVRange *widthRange);
242da853ecaSopenharmony_ci
243da853ecaSopenharmony_ci/**
244da853ecaSopenharmony_ci * @brief Get the video codec's supported video height range for a specific width.
245da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
246da853ecaSopenharmony_ci * @param capability Video codec capability pointer. Do not give an audio codec capability pointer
247da853ecaSopenharmony_ci * @param width Horizontal pixel number of the video
248da853ecaSopenharmony_ci * @param heightRange Output parameter. Video height range
249da853ecaSopenharmony_ci * @return Returns AV_ERR_OK if the execution is successful,
250da853ecaSopenharmony_ci * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
251da853ecaSopenharmony_ci * {@link AV_ERR_INVALID_VAL}, the capability is invalid, the width is not within the supported range
252da853ecaSopenharmony_ci * obtained through {@link OH_AVCapability_GetVideoWidthRange}, or the heightRange is nullptr.
253da853ecaSopenharmony_ci * @since 10
254da853ecaSopenharmony_ci */
255da853ecaSopenharmony_ciOH_AVErrCode OH_AVCapability_GetVideoHeightRangeForWidth(OH_AVCapability *capability, int32_t width,
256da853ecaSopenharmony_ci                                                         OH_AVRange *heightRange);
257da853ecaSopenharmony_ci
258da853ecaSopenharmony_ci/**
259da853ecaSopenharmony_ci * @brief Get the video codec's supported video width range.
260da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
261da853ecaSopenharmony_ci * @param capability Video codec capability pointer. DO not give an audio codec capability pointer
262da853ecaSopenharmony_ci * @param widthRange Output parameter. Video width range
263da853ecaSopenharmony_ci * @return Returns AV_ERR_OK if the execution is successful,
264da853ecaSopenharmony_ci * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
265da853ecaSopenharmony_ci * {@link AV_ERR_INVALID_VAL}, the capability is invalid, or the widthRange is nullptr.
266da853ecaSopenharmony_ci * @since 10
267da853ecaSopenharmony_ci */
268da853ecaSopenharmony_ciOH_AVErrCode OH_AVCapability_GetVideoWidthRange(OH_AVCapability *capability, OH_AVRange *widthRange);
269da853ecaSopenharmony_ci
270da853ecaSopenharmony_ci/**
271da853ecaSopenharmony_ci * @brief Get the video codec's supported video height range.
272da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
273da853ecaSopenharmony_ci * @param capability Video codec capability pointer. Do not give an audio codec capability pointer
274da853ecaSopenharmony_ci * @param heightRange Output parameter. Video height range
275da853ecaSopenharmony_ci * @return Returns AV_ERR_OK if the execution is successful,
276da853ecaSopenharmony_ci * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
277da853ecaSopenharmony_ci * {@link AV_ERR_INVALID_VAL}, the capability is invalid, or the heightRange is nullptr.
278da853ecaSopenharmony_ci * @since 10
279da853ecaSopenharmony_ci */
280da853ecaSopenharmony_ciOH_AVErrCode OH_AVCapability_GetVideoHeightRange(OH_AVCapability *capability, OH_AVRange *heightRange);
281da853ecaSopenharmony_ci
282da853ecaSopenharmony_ci/**
283da853ecaSopenharmony_ci * @brief Check if the video codec supports the specific video size.
284da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
285da853ecaSopenharmony_ci * @param capability Video codec capability pointer. Do not give an audio codec capability pointer
286da853ecaSopenharmony_ci * @param width Horizontal pixel number of the video
287da853ecaSopenharmony_ci * @param height Vertical pixel number of the video
288da853ecaSopenharmony_ci * @return Returns true if the video size is supported, false if the video size is not supported
289da853ecaSopenharmony_ci * @since 10
290da853ecaSopenharmony_ci */
291da853ecaSopenharmony_cibool OH_AVCapability_IsVideoSizeSupported(OH_AVCapability *capability, int32_t width, int32_t height);
292da853ecaSopenharmony_ci
293da853ecaSopenharmony_ci/**
294da853ecaSopenharmony_ci * @brief Get the video codec's supported video frame rate range.
295da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
296da853ecaSopenharmony_ci * @param capability Video codec capability pointer. Do not give an audio codec capability pointer
297da853ecaSopenharmony_ci * @param frameRateRange Output parameter. Video frame rate range
298da853ecaSopenharmony_ci * @return Returns AV_ERR_OK if the execution is successful,
299da853ecaSopenharmony_ci * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
300da853ecaSopenharmony_ci * {@link AV_ERR_INVALID_VAL}, the capability is invalid, or the frameRateRange is nullptr.
301da853ecaSopenharmony_ci * @since 10
302da853ecaSopenharmony_ci */
303da853ecaSopenharmony_ciOH_AVErrCode OH_AVCapability_GetVideoFrameRateRange(OH_AVCapability *capability, OH_AVRange *frameRateRange);
304da853ecaSopenharmony_ci
305da853ecaSopenharmony_ci/**
306da853ecaSopenharmony_ci * @brief Get the Video codec's supported video frame rate range for a specified video size.
307da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
308da853ecaSopenharmony_ci * @param capability Video codec capability pointer. Do not give an audio codec capability pointer
309da853ecaSopenharmony_ci * @param width Horizontal pixel number of the video
310da853ecaSopenharmony_ci * @param height Vertical pixel number of the video
311da853ecaSopenharmony_ci * @param frameRateRange Output parameter. Frame rate range
312da853ecaSopenharmony_ci * @return Returns AV_ERR_OK if the execution is successful,
313da853ecaSopenharmony_ci * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
314da853ecaSopenharmony_ci * {@link AV_ERR_INVALID_VAL}, the capability is invalid, the combination of width and height is
315da853ecaSopenharmony_ci * not supported, or the frameRateRange is nullptr.
316da853ecaSopenharmony_ci * @since 10
317da853ecaSopenharmony_ci */
318da853ecaSopenharmony_ciOH_AVErrCode OH_AVCapability_GetVideoFrameRateRangeForSize(OH_AVCapability *capability, int32_t width, int32_t height,
319da853ecaSopenharmony_ci                                                           OH_AVRange *frameRateRange);
320da853ecaSopenharmony_ci
321da853ecaSopenharmony_ci/**
322da853ecaSopenharmony_ci * @brief Check if the video codec supports the specific combination of video size and frame rate.
323da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
324da853ecaSopenharmony_ci * @param capability Video codec capability pointer. Do not give an audio codec capability pointer
325da853ecaSopenharmony_ci * @param width Horizontal pixel number of the video
326da853ecaSopenharmony_ci * @param height Vertical pixel number of the video
327da853ecaSopenharmony_ci * @param frameRate Frame number per second
328da853ecaSopenharmony_ci * @return Returns true if the combination of video size and frame rate is supported,
329da853ecaSopenharmony_ci * false if it is not supported
330da853ecaSopenharmony_ci * @since 10
331da853ecaSopenharmony_ci */
332da853ecaSopenharmony_cibool OH_AVCapability_AreVideoSizeAndFrameRateSupported(OH_AVCapability *capability, int32_t width, int32_t height,
333da853ecaSopenharmony_ci                                                       int32_t frameRate);
334da853ecaSopenharmony_ci
335da853ecaSopenharmony_ci/**
336da853ecaSopenharmony_ci * @brief Get the video codec's supported video pixel format.
337da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
338da853ecaSopenharmony_ci * @param capability Video codec capability pointer. Do not give an audio codec capability pointer
339da853ecaSopenharmony_ci * @param pixelFormats Output parameter. A pointer to the video pixel format array
340da853ecaSopenharmony_ci * @param pixelFormatNum Output parameter. The element number of the pixel format array
341da853ecaSopenharmony_ci * @return Returns AV_ERR_OK if the execution is successful,
342da853ecaSopenharmony_ci * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
343da853ecaSopenharmony_ci * {@link AV_ERR_INVALID_VAL}, the capability is invalid, the pixelFormats is nullptr,
344da853ecaSopenharmony_ci * or the pixelFormatNum is nullptr.
345da853ecaSopenharmony_ci * {@link AV_ERR_UNKNOWN}, unknown error.
346da853ecaSopenharmony_ci * {@link AV_ERR_NO_MEMORY}, internal use memory malloc failed.
347da853ecaSopenharmony_ci * @since 10
348da853ecaSopenharmony_ci */
349da853ecaSopenharmony_ciOH_AVErrCode OH_AVCapability_GetVideoSupportedPixelFormats(OH_AVCapability *capability, const int32_t **pixelFormats,
350da853ecaSopenharmony_ci                                                           uint32_t *pixelFormatNum);
351da853ecaSopenharmony_ci
352da853ecaSopenharmony_ci/**
353da853ecaSopenharmony_ci * @brief Get the codec's supported profiles.
354da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
355da853ecaSopenharmony_ci * @param capability Codec capability pointer
356da853ecaSopenharmony_ci * @param profiles Output parameter. A pointer to the profile array
357da853ecaSopenharmony_ci * @param profileNum Output parameter. The element number of the profile array
358da853ecaSopenharmony_ci * @return Returns AV_ERR_OK if the execution is successful,
359da853ecaSopenharmony_ci * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
360da853ecaSopenharmony_ci * {@link AV_ERR_INVALID_VAL}, the capability is invalid, the profiles is nullptr, or the profileNum is nullptr.
361da853ecaSopenharmony_ci * {@link AV_ERR_UNKNOWN}, unknown error.
362da853ecaSopenharmony_ci * {@link AV_ERR_NO_MEMORY}, internal use memory malloc failed.
363da853ecaSopenharmony_ci * @since 10
364da853ecaSopenharmony_ci */
365da853ecaSopenharmony_ciOH_AVErrCode OH_AVCapability_GetSupportedProfiles(OH_AVCapability *capability, const int32_t **profiles,
366da853ecaSopenharmony_ci                                                  uint32_t *profileNum);
367da853ecaSopenharmony_ci
368da853ecaSopenharmony_ci/**
369da853ecaSopenharmony_ci * @brief Get codec's supported levels for a specific profile.
370da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
371da853ecaSopenharmony_ci * @param capability Codec capability pointer
372da853ecaSopenharmony_ci * @param profile Codec profile
373da853ecaSopenharmony_ci * @param levels Output parameter. A pointer to the level array
374da853ecaSopenharmony_ci * @param levelNum Output parameter. The element number of the level array
375da853ecaSopenharmony_ci * @return Returns AV_ERR_OK if the execution is successful,
376da853ecaSopenharmony_ci * otherwise returns a specific error code, refer to {@link OH_AVErrCode}
377da853ecaSopenharmony_ci * {@link AV_ERR_INVALID_VAL}, the capability is invalid, the profile is not within the supported profile array
378da853ecaSopenharmony_ci * obtained through {@link OH_AVCapability_GetSupportedProfiles}, the levels is nullptr, or the levelNum is nullptr.
379da853ecaSopenharmony_ci * {@link AV_ERR_UNKNOWN}, unknown error.
380da853ecaSopenharmony_ci * {@link AV_ERR_NO_MEMORY}, internal use memory malloc failed.
381da853ecaSopenharmony_ci * @since 10
382da853ecaSopenharmony_ci */
383da853ecaSopenharmony_ciOH_AVErrCode OH_AVCapability_GetSupportedLevelsForProfile(OH_AVCapability *capability, int32_t profile,
384da853ecaSopenharmony_ci                                                          const int32_t **levels, uint32_t *levelNum);
385da853ecaSopenharmony_ci
386da853ecaSopenharmony_ci/**
387da853ecaSopenharmony_ci * @brief Check if the codec supports the specific combination of the profile and level.
388da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
389da853ecaSopenharmony_ci * @param capability Codec capability pointer
390da853ecaSopenharmony_ci * @param profile Codec profile
391da853ecaSopenharmony_ci * @param level Codec level
392da853ecaSopenharmony_ci * @return Returns true if the combination of profile and level is supported,
393da853ecaSopenharmony_ci * false if it is not supported
394da853ecaSopenharmony_ci * @since 10
395da853ecaSopenharmony_ci */
396da853ecaSopenharmony_cibool OH_AVCapability_AreProfileAndLevelSupported(OH_AVCapability *capability, int32_t profile, int32_t level);
397da853ecaSopenharmony_ci
398da853ecaSopenharmony_ci/**
399da853ecaSopenharmony_ci * @brief Check if the codec supports the specified feature.
400da853ecaSopenharmony_ci *
401da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
402da853ecaSopenharmony_ci * @param capability Codec capability pointer
403da853ecaSopenharmony_ci * @param feature Feature enum, refer to {@link OH_AVCapabilityFeature} for details
404da853ecaSopenharmony_ci * @return Returns true if the feature is supported, false if it is not supported
405da853ecaSopenharmony_ci * @since 12
406da853ecaSopenharmony_ci */
407da853ecaSopenharmony_cibool OH_AVCapability_IsFeatureSupported(OH_AVCapability *capability, OH_AVCapabilityFeature feature);
408da853ecaSopenharmony_ci
409da853ecaSopenharmony_ci/**
410da853ecaSopenharmony_ci * @brief Get the properties of the specified feature. It should be noted that the life cycle of the OH_AVFormat
411da853ecaSopenharmony_ci * instance pointed to by the return value * needs to be manually released by the caller.
412da853ecaSopenharmony_ci *
413da853ecaSopenharmony_ci * @syscap SystemCapability.Multimedia.Media.CodecBase
414da853ecaSopenharmony_ci * @param capability Codec capability pointer
415da853ecaSopenharmony_ci * @param feature Feature enum, refer to {@link OH_AVCapabilityFeature} for details
416da853ecaSopenharmony_ci * @return Returns a pointer to an OH_AVFormat instance
417da853ecaSopenharmony_ci * @since 12
418da853ecaSopenharmony_ci */
419da853ecaSopenharmony_ciOH_AVFormat *OH_AVCapability_GetFeatureProperties(OH_AVCapability *capability, OH_AVCapabilityFeature feature);
420da853ecaSopenharmony_ci
421da853ecaSopenharmony_ci#ifdef __cplusplus
422da853ecaSopenharmony_ci}
423da853ecaSopenharmony_ci#endif
424da853ecaSopenharmony_ci#endif // NATIVE_AVCAPABILITY_H