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 MEDIA_AVCODEC_INFO_H
17da853ecaSopenharmony_ci#define MEDIA_AVCODEC_INFO_H
18da853ecaSopenharmony_ci
19da853ecaSopenharmony_ci#include <cstdint>
20da853ecaSopenharmony_ci#include <memory>
21da853ecaSopenharmony_ci#include <vector>
22da853ecaSopenharmony_ci#include "av_common.h"
23da853ecaSopenharmony_ci#include "nocopyable.h"
24da853ecaSopenharmony_ci#include "avcodec_audio_common.h"
25da853ecaSopenharmony_ci
26da853ecaSopenharmony_cinamespace OHOS {
27da853ecaSopenharmony_cinamespace MediaAVCodec {
28da853ecaSopenharmony_ci/**
29da853ecaSopenharmony_ci * @brief AVCodec Type
30da853ecaSopenharmony_ci *
31da853ecaSopenharmony_ci * @since 3.1
32da853ecaSopenharmony_ci * @version 4.0
33da853ecaSopenharmony_ci */
34da853ecaSopenharmony_cienum AVCodecType : int32_t {
35da853ecaSopenharmony_ci    AVCODEC_TYPE_NONE = -1,
36da853ecaSopenharmony_ci    AVCODEC_TYPE_VIDEO_ENCODER = 0,
37da853ecaSopenharmony_ci    AVCODEC_TYPE_VIDEO_DECODER,
38da853ecaSopenharmony_ci    AVCODEC_TYPE_AUDIO_ENCODER,
39da853ecaSopenharmony_ci    AVCODEC_TYPE_AUDIO_DECODER,
40da853ecaSopenharmony_ci};
41da853ecaSopenharmony_ci
42da853ecaSopenharmony_ci/**
43da853ecaSopenharmony_ci * @brief AVCodec Category
44da853ecaSopenharmony_ci *
45da853ecaSopenharmony_ci * @since 3.1
46da853ecaSopenharmony_ci * @version 4.0
47da853ecaSopenharmony_ci */
48da853ecaSopenharmony_cienum class AVCodecCategory : int32_t {
49da853ecaSopenharmony_ci    AVCODEC_NONE = -1,
50da853ecaSopenharmony_ci    AVCODEC_HARDWARE = 0,
51da853ecaSopenharmony_ci    AVCODEC_SOFTWARE,
52da853ecaSopenharmony_ci};
53da853ecaSopenharmony_ci
54da853ecaSopenharmony_ci/**
55da853ecaSopenharmony_ci * @brief The enum of optional features that can be used in specific codec seenarios.
56da853ecaSopenharmony_ci *
57da853ecaSopenharmony_ci * @since 5.0
58da853ecaSopenharmony_ci * @version 5.0
59da853ecaSopenharmony_ci */
60da853ecaSopenharmony_cienum class AVCapabilityFeature : int32_t {
61da853ecaSopenharmony_ci    VIDEO_ENCODER_TEMPORAL_SCALABILITY = 0,
62da853ecaSopenharmony_ci    VIDEO_ENCODER_LONG_TERM_REFERENCE = 1,
63da853ecaSopenharmony_ci    VIDEO_LOW_LATENCY = 2,
64da853ecaSopenharmony_ci    VIDEO_WATERMARK = 3,
65da853ecaSopenharmony_ci    VIDEO_RPR = 4,
66da853ecaSopenharmony_ci    MAX_VALUE
67da853ecaSopenharmony_ci};
68da853ecaSopenharmony_ci
69da853ecaSopenharmony_ci/**
70da853ecaSopenharmony_ci * @brief Range contain min and max value
71da853ecaSopenharmony_ci *
72da853ecaSopenharmony_ci * @since 3.1
73da853ecaSopenharmony_ci * @version 5.0
74da853ecaSopenharmony_ci */
75da853ecaSopenharmony_cistruct Range {
76da853ecaSopenharmony_ci    int32_t minVal;
77da853ecaSopenharmony_ci    int32_t maxVal;
78da853ecaSopenharmony_ci    Range() : minVal(0), maxVal(0) {}
79da853ecaSopenharmony_ci    Range(const int32_t &min, const int32_t &max)
80da853ecaSopenharmony_ci    {
81da853ecaSopenharmony_ci        if (min <= max) {
82da853ecaSopenharmony_ci            this->minVal = min;
83da853ecaSopenharmony_ci            this->maxVal = max;
84da853ecaSopenharmony_ci        } else {
85da853ecaSopenharmony_ci            this->minVal = 0;
86da853ecaSopenharmony_ci            this->maxVal = 0;
87da853ecaSopenharmony_ci        }
88da853ecaSopenharmony_ci    }
89da853ecaSopenharmony_ci
90da853ecaSopenharmony_ci    Range Create(const int32_t &min, const int32_t &max)
91da853ecaSopenharmony_ci    {
92da853ecaSopenharmony_ci        return Range(min, max);
93da853ecaSopenharmony_ci    }
94da853ecaSopenharmony_ci
95da853ecaSopenharmony_ci    Range Intersect(const int32_t &min, const int32_t &max)
96da853ecaSopenharmony_ci    {
97da853ecaSopenharmony_ci        int32_t minCmp = this->minVal > min ? this->minVal : min;
98da853ecaSopenharmony_ci        int32_t maxCmp = this->maxVal < max ? this->maxVal : max;
99da853ecaSopenharmony_ci        return this->Create(minCmp, maxCmp);
100da853ecaSopenharmony_ci    }
101da853ecaSopenharmony_ci
102da853ecaSopenharmony_ci    Range Intersect(const Range &range)
103da853ecaSopenharmony_ci    {
104da853ecaSopenharmony_ci        int32_t minCmp = this->minVal > range.minVal ? this->minVal : range.minVal;
105da853ecaSopenharmony_ci        int32_t maxCmp = this->maxVal < range.maxVal ? this->maxVal : range.maxVal;
106da853ecaSopenharmony_ci        return this->Create(minCmp, maxCmp);
107da853ecaSopenharmony_ci    }
108da853ecaSopenharmony_ci
109da853ecaSopenharmony_ci    bool InRange(int32_t value)
110da853ecaSopenharmony_ci    {
111da853ecaSopenharmony_ci        return (value >= minVal && value <= maxVal);
112da853ecaSopenharmony_ci    }
113da853ecaSopenharmony_ci};
114da853ecaSopenharmony_ci
115da853ecaSopenharmony_ci/**
116da853ecaSopenharmony_ci * @brief ImgSize contain width and height
117da853ecaSopenharmony_ci *
118da853ecaSopenharmony_ci * @since 3.1
119da853ecaSopenharmony_ci * @version 4.0
120da853ecaSopenharmony_ci */
121da853ecaSopenharmony_cistruct ImgSize {
122da853ecaSopenharmony_ci    int32_t width;
123da853ecaSopenharmony_ci    int32_t height;
124da853ecaSopenharmony_ci
125da853ecaSopenharmony_ci    ImgSize() : width(0), height(0) {}
126da853ecaSopenharmony_ci
127da853ecaSopenharmony_ci    ImgSize(const int32_t &width, const int32_t &height)
128da853ecaSopenharmony_ci    {
129da853ecaSopenharmony_ci        this->width = width;
130da853ecaSopenharmony_ci        this->height = height;
131da853ecaSopenharmony_ci    }
132da853ecaSopenharmony_ci
133da853ecaSopenharmony_ci    bool operator<(const ImgSize &p) const
134da853ecaSopenharmony_ci    {
135da853ecaSopenharmony_ci        return (width < p.width) || (width == p.width && height < p.height);
136da853ecaSopenharmony_ci    }
137da853ecaSopenharmony_ci};
138da853ecaSopenharmony_ci
139da853ecaSopenharmony_ci/**
140da853ecaSopenharmony_ci * @brief Capability Data struct of Codec, parser from config file
141da853ecaSopenharmony_ci *
142da853ecaSopenharmony_ci * @since 3.1
143da853ecaSopenharmony_ci * @version 4.0
144da853ecaSopenharmony_ci */
145da853ecaSopenharmony_cistruct CapabilityData {
146da853ecaSopenharmony_ci    std::string codecName = "";
147da853ecaSopenharmony_ci    int32_t codecType = AVCODEC_TYPE_NONE;
148da853ecaSopenharmony_ci    std::string mimeType = "";
149da853ecaSopenharmony_ci    bool isVendor = false;
150da853ecaSopenharmony_ci    int32_t maxInstance = 0;
151da853ecaSopenharmony_ci    Range bitrate;
152da853ecaSopenharmony_ci    Range channels;
153da853ecaSopenharmony_ci    Range complexity;
154da853ecaSopenharmony_ci    ImgSize alignment;
155da853ecaSopenharmony_ci    Range width;
156da853ecaSopenharmony_ci    Range height;
157da853ecaSopenharmony_ci    Range frameRate;
158da853ecaSopenharmony_ci    Range encodeQuality;
159da853ecaSopenharmony_ci    Range blockPerFrame;
160da853ecaSopenharmony_ci    Range blockPerSecond;
161da853ecaSopenharmony_ci    ImgSize blockSize;
162da853ecaSopenharmony_ci    std::vector<int32_t> sampleRate;
163da853ecaSopenharmony_ci    std::vector<int32_t> pixFormat;
164da853ecaSopenharmony_ci    std::vector<int32_t> bitDepth;
165da853ecaSopenharmony_ci    std::vector<int32_t> profiles;
166da853ecaSopenharmony_ci    std::vector<int32_t> bitrateMode;
167da853ecaSopenharmony_ci    std::map<int32_t, std::vector<int32_t>> profileLevelsMap;
168da853ecaSopenharmony_ci    std::map<ImgSize, Range> measuredFrameRate;
169da853ecaSopenharmony_ci    bool supportSwapWidthHeight = false;
170da853ecaSopenharmony_ci    std::map<int32_t, Format> featuresMap;
171da853ecaSopenharmony_ci};
172da853ecaSopenharmony_ci
173da853ecaSopenharmony_cistruct LevelParams {
174da853ecaSopenharmony_ci    int32_t maxBlockPerFrame = 0;
175da853ecaSopenharmony_ci    int32_t maxBlockPerSecond = 0;
176da853ecaSopenharmony_ci    int32_t maxFrameRate = 0;
177da853ecaSopenharmony_ci    int32_t maxWidth = 0;
178da853ecaSopenharmony_ci    int32_t maxHeight = 0;
179da853ecaSopenharmony_ci    LevelParams(const int32_t &blockPerSecond, const int32_t &blockPerFrame, const int32_t &frameRate,
180da853ecaSopenharmony_ci                const int32_t &width, const int32_t height)
181da853ecaSopenharmony_ci    {
182da853ecaSopenharmony_ci        this->maxBlockPerFrame = blockPerFrame;
183da853ecaSopenharmony_ci        this->maxBlockPerSecond = blockPerSecond;
184da853ecaSopenharmony_ci        this->maxFrameRate = frameRate;
185da853ecaSopenharmony_ci        this->maxWidth = width;
186da853ecaSopenharmony_ci        this->maxHeight = height;
187da853ecaSopenharmony_ci    }
188da853ecaSopenharmony_ci    LevelParams(const int32_t &blockPerSecond, const int32_t &blockPerFrame)
189da853ecaSopenharmony_ci    {
190da853ecaSopenharmony_ci        this->maxBlockPerFrame = blockPerFrame;
191da853ecaSopenharmony_ci        this->maxBlockPerSecond = blockPerSecond;
192da853ecaSopenharmony_ci    }
193da853ecaSopenharmony_ci};
194da853ecaSopenharmony_ci
195da853ecaSopenharmony_ciclass __attribute__((visibility("default"))) AVCodecInfo {
196da853ecaSopenharmony_cipublic:
197da853ecaSopenharmony_ci    explicit AVCodecInfo(CapabilityData *capabilityData);
198da853ecaSopenharmony_ci    ~AVCodecInfo();
199da853ecaSopenharmony_ci
200da853ecaSopenharmony_ci    /**
201da853ecaSopenharmony_ci     * @brief Get name of this codec, used to create the codec instance.
202da853ecaSopenharmony_ci     * @return Returns codec name.
203da853ecaSopenharmony_ci     * @since 3.1
204da853ecaSopenharmony_ci     * @version 4.0
205da853ecaSopenharmony_ci     */
206da853ecaSopenharmony_ci    std::string GetName();
207da853ecaSopenharmony_ci
208da853ecaSopenharmony_ci    /**
209da853ecaSopenharmony_ci     * @brief Get type of this codec
210da853ecaSopenharmony_ci     * @return Returns codec type, see {@link AVCodecType}
211da853ecaSopenharmony_ci     * @since 3.1
212da853ecaSopenharmony_ci     * @version 4.0
213da853ecaSopenharmony_ci     */
214da853ecaSopenharmony_ci    AVCodecType GetType();
215da853ecaSopenharmony_ci
216da853ecaSopenharmony_ci    /**
217da853ecaSopenharmony_ci     * @brief Get mime type of this codec
218da853ecaSopenharmony_ci     * @return Returns codec mime type, see {@link CodecMimeType}
219da853ecaSopenharmony_ci     * @since 3.1
220da853ecaSopenharmony_ci     * @version 4.0
221da853ecaSopenharmony_ci     */
222da853ecaSopenharmony_ci    std::string GetMimeType();
223da853ecaSopenharmony_ci
224da853ecaSopenharmony_ci    /**
225da853ecaSopenharmony_ci     * @brief Check whether the codec is accelerated by hardware.
226da853ecaSopenharmony_ci     * @return Returns true if the codec is hardware accelerated; false otherwise.
227da853ecaSopenharmony_ci     * @since 3.1
228da853ecaSopenharmony_ci     * @version 4.0
229da853ecaSopenharmony_ci     */
230da853ecaSopenharmony_ci    bool IsHardwareAccelerated();
231da853ecaSopenharmony_ci
232da853ecaSopenharmony_ci    /**
233da853ecaSopenharmony_ci     * @brief Check whether the codec is accelerated by hardware.
234da853ecaSopenharmony_ci     * @return Returns true if the codec is hardware accelerated; false otherwise.
235da853ecaSopenharmony_ci     * @since 3.1
236da853ecaSopenharmony_ci     * @version 4.0
237da853ecaSopenharmony_ci     */
238da853ecaSopenharmony_ci    int32_t GetMaxSupportedInstances();
239da853ecaSopenharmony_ci
240da853ecaSopenharmony_ci    /**
241da853ecaSopenharmony_ci     * @brief Check whether the codec is software implemented only.
242da853ecaSopenharmony_ci     * @return Returns true if the codec is software implemented only; false otherwise.
243da853ecaSopenharmony_ci     * @since 3.1
244da853ecaSopenharmony_ci     * @version 4.0
245da853ecaSopenharmony_ci     */
246da853ecaSopenharmony_ci    bool IsSoftwareOnly();
247da853ecaSopenharmony_ci
248da853ecaSopenharmony_ci    /**
249da853ecaSopenharmony_ci     * @brief Check whether the codec is provided by vendor.
250da853ecaSopenharmony_ci     * @return Returns true if the codec is provided by vendor; false otherwise.
251da853ecaSopenharmony_ci     * @since 3.1
252da853ecaSopenharmony_ci     * @version 4.0
253da853ecaSopenharmony_ci     */
254da853ecaSopenharmony_ci    bool IsVendor();
255da853ecaSopenharmony_ci
256da853ecaSopenharmony_ci    /**
257da853ecaSopenharmony_ci     * @brief Get supported codec profile number.
258da853ecaSopenharmony_ci     * @return Returns an array of supported codec profile number. For details, see {@link AACProfile}.
259da853ecaSopenharmony_ci     * @since 3.1
260da853ecaSopenharmony_ci     * @version 4.0
261da853ecaSopenharmony_ci     */
262da853ecaSopenharmony_ci    std::map<int32_t, std::vector<int32_t>> GetSupportedLevelsForProfile();
263da853ecaSopenharmony_ci
264da853ecaSopenharmony_ci    /**
265da853ecaSopenharmony_ci     * @brief Check if the codec supports a specified feature.
266da853ecaSopenharmony_ci     * @param feature Feature enum, refer to {@link AVCapabilityFeature} for details
267da853ecaSopenharmony_ci     * @return Returns true if the feature is supported, false if it is not supported
268da853ecaSopenharmony_ci     * @since 5.0
269da853ecaSopenharmony_ci     * @version 5.0
270da853ecaSopenharmony_ci     */
271da853ecaSopenharmony_ci    bool IsFeatureSupported(AVCapabilityFeature feature);
272da853ecaSopenharmony_ci
273da853ecaSopenharmony_ci    /**
274da853ecaSopenharmony_ci     * @brief Get the properties of a specified feature.
275da853ecaSopenharmony_ci     * @param feature Feature enum, refer to {@link AVCapabilityFeature} for details
276da853ecaSopenharmony_ci     * @param format Output parameter, get parametr of specified feature
277da853ecaSopenharmony_ci     * @return Returns {@link AVCS_ERR_OK} if success, returns an error code otherwise
278da853ecaSopenharmony_ci     * @since 5.0
279da853ecaSopenharmony_ci     * @version 5.0
280da853ecaSopenharmony_ci     */
281da853ecaSopenharmony_ci    int32_t GetFeatureProperties(AVCapabilityFeature feature, Format &format);
282da853ecaSopenharmony_ci
283da853ecaSopenharmony_ciprivate:
284da853ecaSopenharmony_ci    bool IsFeatureValid(AVCapabilityFeature feature);
285da853ecaSopenharmony_ci    CapabilityData *data_;
286da853ecaSopenharmony_ci};
287da853ecaSopenharmony_ci
288da853ecaSopenharmony_ciclass __attribute__((visibility("default"))) VideoCaps {
289da853ecaSopenharmony_cipublic:
290da853ecaSopenharmony_ci    explicit VideoCaps(CapabilityData *capabilityData);
291da853ecaSopenharmony_ci    ~VideoCaps();
292da853ecaSopenharmony_ci
293da853ecaSopenharmony_ci    /**
294da853ecaSopenharmony_ci     * @brief Get codec information,  such as the codec name, codec type,
295da853ecaSopenharmony_ci     * whether hardware acceleration is supported, whether only software is supported,
296da853ecaSopenharmony_ci     * and whether the codec is provided by the vendor.
297da853ecaSopenharmony_ci     * @return Returns the pointer of {@link AVCodecInfo}.
298da853ecaSopenharmony_ci     * @since 3.1
299da853ecaSopenharmony_ci     * @version 4.0
300da853ecaSopenharmony_ci     */
301da853ecaSopenharmony_ci    std::shared_ptr<AVCodecInfo> GetCodecInfo();
302da853ecaSopenharmony_ci
303da853ecaSopenharmony_ci    /**
304da853ecaSopenharmony_ci     * @brief Get supported bitrate range.
305da853ecaSopenharmony_ci     * @return Returns the range of supported bitrates.
306da853ecaSopenharmony_ci     * @since 3.1
307da853ecaSopenharmony_ci     * @version 4.0
308da853ecaSopenharmony_ci     */
309da853ecaSopenharmony_ci    Range GetSupportedBitrate();
310da853ecaSopenharmony_ci
311da853ecaSopenharmony_ci    /**
312da853ecaSopenharmony_ci     * @brief Get supported video raw formats.
313da853ecaSopenharmony_ci     * @return Returns an array of supported formats. For Details, see {@link VideoPixelFormat}.
314da853ecaSopenharmony_ci     * @since 3.1
315da853ecaSopenharmony_ci     * @version 4.0
316da853ecaSopenharmony_ci     */
317da853ecaSopenharmony_ci    std::vector<int32_t> GetSupportedFormats();
318da853ecaSopenharmony_ci
319da853ecaSopenharmony_ci    /**
320da853ecaSopenharmony_ci     * @brief Get supported alignment of video height, only used for video codecs.
321da853ecaSopenharmony_ci     * @return Returns the supported alignment of video height (in pixels).
322da853ecaSopenharmony_ci     * @since 3.1
323da853ecaSopenharmony_ci     * @version 4.0
324da853ecaSopenharmony_ci     */
325da853ecaSopenharmony_ci    int32_t GetSupportedHeightAlignment();
326da853ecaSopenharmony_ci
327da853ecaSopenharmony_ci    /**
328da853ecaSopenharmony_ci     * @brief Get supported alignment of video width, only used for video codecs.
329da853ecaSopenharmony_ci     * @return Returns the supported alignment of video width (in pixels).
330da853ecaSopenharmony_ci     * @since 3.1
331da853ecaSopenharmony_ci     * @version 4.0
332da853ecaSopenharmony_ci     */
333da853ecaSopenharmony_ci    int32_t GetSupportedWidthAlignment();
334da853ecaSopenharmony_ci
335da853ecaSopenharmony_ci    /**
336da853ecaSopenharmony_ci     * @brief Get supported width range of video.
337da853ecaSopenharmony_ci     * @return Returns the supported width range of video.
338da853ecaSopenharmony_ci     * @since 3.1
339da853ecaSopenharmony_ci     * @version 4.0
340da853ecaSopenharmony_ci     */
341da853ecaSopenharmony_ci    Range GetSupportedWidth();
342da853ecaSopenharmony_ci
343da853ecaSopenharmony_ci    /**
344da853ecaSopenharmony_ci     * @brief Get supported height range of video.
345da853ecaSopenharmony_ci     * @return Returns the supported height range of video.
346da853ecaSopenharmony_ci     * @since 3.1
347da853ecaSopenharmony_ci     * @version 4.0
348da853ecaSopenharmony_ci     */
349da853ecaSopenharmony_ci    Range GetSupportedHeight();
350da853ecaSopenharmony_ci
351da853ecaSopenharmony_ci    /**
352da853ecaSopenharmony_ci     * @brief Get supported profiles of this codec.
353da853ecaSopenharmony_ci     * @return Returns an array of supported profiles:
354da853ecaSopenharmony_ci     * returns {@link H263Profile} array if codec is h263,
355da853ecaSopenharmony_ci     * returns {@link AVCProfile} array if codec is h264,
356da853ecaSopenharmony_ci     * returns {@link HEVCProfile} array if codec is h265,
357da853ecaSopenharmony_ci     * returns {@link MPEG2Profile} array if codec is mpeg2,
358da853ecaSopenharmony_ci     * returns {@link MPEG4Profile} array if codec is mpeg4,
359da853ecaSopenharmony_ci     * returns {@link VP8Profile} array if codec is vp8.
360da853ecaSopenharmony_ci     * @since 3.1
361da853ecaSopenharmony_ci     * @version 4.0
362da853ecaSopenharmony_ci     */
363da853ecaSopenharmony_ci    std::vector<int32_t> GetSupportedProfiles();
364da853ecaSopenharmony_ci
365da853ecaSopenharmony_ci    /**
366da853ecaSopenharmony_ci     * @brief Get supported codec level array.
367da853ecaSopenharmony_ci     * @return Returns an array of supported codec level number.
368da853ecaSopenharmony_ci     * @since 3.1
369da853ecaSopenharmony_ci     * @version 4.0
370da853ecaSopenharmony_ci     */
371da853ecaSopenharmony_ci    std::vector<int32_t> GetSupportedLevels();
372da853ecaSopenharmony_ci
373da853ecaSopenharmony_ci    /**
374da853ecaSopenharmony_ci     * @brief Get supported video encode quality Range.
375da853ecaSopenharmony_ci     * @return Returns an array of supported video encode quality Range.
376da853ecaSopenharmony_ci     * @since 3.1
377da853ecaSopenharmony_ci     * @version 4.0
378da853ecaSopenharmony_ci     */
379da853ecaSopenharmony_ci    Range GetSupportedEncodeQuality();
380da853ecaSopenharmony_ci
381da853ecaSopenharmony_ci    /**
382da853ecaSopenharmony_ci     * @brief Check whether the width and height is supported.
383da853ecaSopenharmony_ci     * @param width Indicates the specified video width (in pixels).
384da853ecaSopenharmony_ci     * @param height Indicates the specified video height (in pixels).
385da853ecaSopenharmony_ci     * @return Returns true if the codec supports {@link width} * {@link height} size video, false otherwise.
386da853ecaSopenharmony_ci     * @since 3.1
387da853ecaSopenharmony_ci     * @version 4.0
388da853ecaSopenharmony_ci     */
389da853ecaSopenharmony_ci    bool IsSizeSupported(int32_t width, int32_t height);
390da853ecaSopenharmony_ci
391da853ecaSopenharmony_ci    /**
392da853ecaSopenharmony_ci     * @brief Get supported frameRate.
393da853ecaSopenharmony_ci     * @return Returns the supported frameRate range of video.
394da853ecaSopenharmony_ci     * @since 3.1
395da853ecaSopenharmony_ci     * @version 4.0
396da853ecaSopenharmony_ci     */
397da853ecaSopenharmony_ci    Range GetSupportedFrameRate();
398da853ecaSopenharmony_ci
399da853ecaSopenharmony_ci    /**
400da853ecaSopenharmony_ci     * @brief Get supported frameRate range for the specified width and height.
401da853ecaSopenharmony_ci     * @param width Indicates the specified video width (in pixels).
402da853ecaSopenharmony_ci     * @param height Indicates the specified video height (in pixels).
403da853ecaSopenharmony_ci     * @return Returns the supported frameRate range for the specified width and height.
404da853ecaSopenharmony_ci     * @since 3.1
405da853ecaSopenharmony_ci     * @version 4.0
406da853ecaSopenharmony_ci     */
407da853ecaSopenharmony_ci    Range GetSupportedFrameRatesFor(int32_t width, int32_t height);
408da853ecaSopenharmony_ci
409da853ecaSopenharmony_ci    /**
410da853ecaSopenharmony_ci     * @brief Check whether the size and frameRate is supported.
411da853ecaSopenharmony_ci     * @param width Indicates the specified video width (in pixels).
412da853ecaSopenharmony_ci     * @param height Indicates the specified video height (in pixels).
413da853ecaSopenharmony_ci     * @param frameRate Indicates the specified video frameRate.
414da853ecaSopenharmony_ci     * @return Returns true if the codec supports the specified size and frameRate; false otherwise.
415da853ecaSopenharmony_ci     * @since 3.1
416da853ecaSopenharmony_ci     * @version 4.0
417da853ecaSopenharmony_ci     */
418da853ecaSopenharmony_ci    bool IsSizeAndRateSupported(int32_t width, int32_t height, double frameRate);
419da853ecaSopenharmony_ci
420da853ecaSopenharmony_ci    /**
421da853ecaSopenharmony_ci     * @brief Get preferred frameRate range for the specified width and height,
422da853ecaSopenharmony_ci     * these framerates can be reach the performance.
423da853ecaSopenharmony_ci     * @param width Indicates the specified video width (in pixels).
424da853ecaSopenharmony_ci     * @param height Indicates the specified video height (in pixels).
425da853ecaSopenharmony_ci     * @return Returns preferred frameRate range for the specified width and height.
426da853ecaSopenharmony_ci     * @since 3.1
427da853ecaSopenharmony_ci     * @version 4.0
428da853ecaSopenharmony_ci     */
429da853ecaSopenharmony_ci    Range GetPreferredFrameRate(int32_t width, int32_t height);
430da853ecaSopenharmony_ci
431da853ecaSopenharmony_ci    /**
432da853ecaSopenharmony_ci     * @brief Get supported encode bitrate mode.
433da853ecaSopenharmony_ci     * @return Returns an array of supported encode bitrate mode. For details, see {@link VideoEncodeBitrateMode}.
434da853ecaSopenharmony_ci     * @since 3.1
435da853ecaSopenharmony_ci     * @version 4.0
436da853ecaSopenharmony_ci     */
437da853ecaSopenharmony_ci    std::vector<int32_t> GetSupportedBitrateMode();
438da853ecaSopenharmony_ci
439da853ecaSopenharmony_ci    /**
440da853ecaSopenharmony_ci     * @brief Get supported encode qualit range.
441da853ecaSopenharmony_ci     * @return Returns supported encode qualit range.
442da853ecaSopenharmony_ci     * @since 3.1
443da853ecaSopenharmony_ci     * @version 4.0
444da853ecaSopenharmony_ci     */
445da853ecaSopenharmony_ci    Range GetSupportedQuality();
446da853ecaSopenharmony_ci
447da853ecaSopenharmony_ci    /**
448da853ecaSopenharmony_ci     * @brief Get supported encode complexity range.
449da853ecaSopenharmony_ci     * @return Returns supported encode complexity range.
450da853ecaSopenharmony_ci     * @since 3.1
451da853ecaSopenharmony_ci     * @version 4.0
452da853ecaSopenharmony_ci     */
453da853ecaSopenharmony_ci    Range GetSupportedComplexity();
454da853ecaSopenharmony_ci
455da853ecaSopenharmony_ci    /**
456da853ecaSopenharmony_ci     * @brief Check video encoder wether support request key frame dynamicly.
457da853ecaSopenharmony_ci     * @return Returns true if support, false not support.
458da853ecaSopenharmony_ci     * @since 3.1
459da853ecaSopenharmony_ci     * @version 4.0
460da853ecaSopenharmony_ci     */
461da853ecaSopenharmony_ci    bool IsSupportDynamicIframe();
462da853ecaSopenharmony_ci
463da853ecaSopenharmony_ci    Range GetVideoHeightRangeForWidth(int32_t width);
464da853ecaSopenharmony_ci    Range GetVideoWidthRangeForHeight(int32_t height);
465da853ecaSopenharmony_ci
466da853ecaSopenharmony_ciprivate:
467da853ecaSopenharmony_ci    CapabilityData *data_;
468da853ecaSopenharmony_ci    int32_t blockWidth_ = 0;
469da853ecaSopenharmony_ci    int32_t blockHeight_ = 0;
470da853ecaSopenharmony_ci    Range horizontalBlockRange_;
471da853ecaSopenharmony_ci    Range verticalBlockRange_;
472da853ecaSopenharmony_ci    Range blockPerFrameRange_;
473da853ecaSopenharmony_ci    Range blockPerSecondRange_;
474da853ecaSopenharmony_ci    Range widthRange_;
475da853ecaSopenharmony_ci    Range heightRange_;
476da853ecaSopenharmony_ci    Range frameRateRange_;
477da853ecaSopenharmony_ci    void InitParams();
478da853ecaSopenharmony_ci    void UpdateParams();
479da853ecaSopenharmony_ci    void LoadLevelParams();
480da853ecaSopenharmony_ci    void LoadAVCLevelParams();
481da853ecaSopenharmony_ci    void LoadMPEGLevelParams(const std::string &mime);
482da853ecaSopenharmony_ci    ImgSize MatchClosestSize(const ImgSize &imgSize);
483da853ecaSopenharmony_ci    int32_t DivCeil(const int32_t &dividend, const int32_t &divisor);
484da853ecaSopenharmony_ci    Range DivRange(const Range &range, const int32_t &divisor);
485da853ecaSopenharmony_ci    void UpdateBlockParams(const int32_t &blockWidth, const int32_t &blockHeight, Range &blockPerFrameRange,
486da853ecaSopenharmony_ci                           Range &blockPerSecondRange);
487da853ecaSopenharmony_ci};
488da853ecaSopenharmony_ci
489da853ecaSopenharmony_ciconstexpr uint32_t MAX_MAP_SIZE = 20;
490da853ecaSopenharmony_ci
491da853ecaSopenharmony_ciclass __attribute__((visibility("default"))) AudioCaps {
492da853ecaSopenharmony_cipublic:
493da853ecaSopenharmony_ci    explicit AudioCaps(CapabilityData *capabilityData);
494da853ecaSopenharmony_ci    ~AudioCaps();
495da853ecaSopenharmony_ci
496da853ecaSopenharmony_ci    /**
497da853ecaSopenharmony_ci     * @brief Get codec information,  such as the codec name, codec type,
498da853ecaSopenharmony_ci     * whether hardware acceleration is supported, whether only software is supported,
499da853ecaSopenharmony_ci     * and whether the codec is provided by the vendor.
500da853ecaSopenharmony_ci     * @return Returns the pointer of {@link AVCodecInfo}
501da853ecaSopenharmony_ci     * @since 3.1
502da853ecaSopenharmony_ci     * @version 4.0
503da853ecaSopenharmony_ci     */
504da853ecaSopenharmony_ci    std::shared_ptr<AVCodecInfo> GetCodecInfo();
505da853ecaSopenharmony_ci
506da853ecaSopenharmony_ci    /**
507da853ecaSopenharmony_ci     * @brief Get supported bitrate range.
508da853ecaSopenharmony_ci     * @return Returns the range of supported bitrates.
509da853ecaSopenharmony_ci     * @since 3.1
510da853ecaSopenharmony_ci     * @version 4.0
511da853ecaSopenharmony_ci     */
512da853ecaSopenharmony_ci    Range GetSupportedBitrate();
513da853ecaSopenharmony_ci
514da853ecaSopenharmony_ci    /**
515da853ecaSopenharmony_ci     * @brief Get supported channel range.
516da853ecaSopenharmony_ci     * @return Returns the range of supported channel.
517da853ecaSopenharmony_ci     * @since 3.1
518da853ecaSopenharmony_ci     * @version 4.0
519da853ecaSopenharmony_ci     */
520da853ecaSopenharmony_ci    Range GetSupportedChannel();
521da853ecaSopenharmony_ci
522da853ecaSopenharmony_ci    /**
523da853ecaSopenharmony_ci     * @brief Get supported audio raw format range.
524da853ecaSopenharmony_ci     * @return Returns the range of supported audio raw format. For details, see {@link AudioSampleFormat}.
525da853ecaSopenharmony_ci     * @since 3.1
526da853ecaSopenharmony_ci     * @version 4.0
527da853ecaSopenharmony_ci     */
528da853ecaSopenharmony_ci    std::vector<int32_t> GetSupportedFormats();
529da853ecaSopenharmony_ci
530da853ecaSopenharmony_ci    /**
531da853ecaSopenharmony_ci     * @brief Get supported audio samplerates.
532da853ecaSopenharmony_ci     * @return Returns an array of supported samplerates.
533da853ecaSopenharmony_ci     * @since 3.1
534da853ecaSopenharmony_ci     * @version 4.0
535da853ecaSopenharmony_ci     */
536da853ecaSopenharmony_ci    std::vector<int32_t> GetSupportedSampleRates();
537da853ecaSopenharmony_ci
538da853ecaSopenharmony_ci    /**
539da853ecaSopenharmony_ci     * @brief Get supported codec profile number.
540da853ecaSopenharmony_ci     * @return Returns an array of supported codec profile number. For details, see {@link AACProfile}.
541da853ecaSopenharmony_ci     * @since 3.1
542da853ecaSopenharmony_ci     * @version 4.0
543da853ecaSopenharmony_ci     */
544da853ecaSopenharmony_ci    std::vector<int32_t> GetSupportedProfiles();
545da853ecaSopenharmony_ci
546da853ecaSopenharmony_ci    /**
547da853ecaSopenharmony_ci     * @brief Get supported codec level array.
548da853ecaSopenharmony_ci     * @return Returns an array of supported codec level number.
549da853ecaSopenharmony_ci     * @since 3.1
550da853ecaSopenharmony_ci     * @version 4.0
551da853ecaSopenharmony_ci     */
552da853ecaSopenharmony_ci    std::vector<int32_t> GetSupportedLevels();
553da853ecaSopenharmony_ci
554da853ecaSopenharmony_ci    /**
555da853ecaSopenharmony_ci     * @brief Get supported encode complexity range.
556da853ecaSopenharmony_ci     * @return Returns supported encode complexity range.
557da853ecaSopenharmony_ci     * @since 3.1
558da853ecaSopenharmony_ci     * @version 4.0
559da853ecaSopenharmony_ci     */
560da853ecaSopenharmony_ci    Range GetSupportedComplexity();
561da853ecaSopenharmony_ci
562da853ecaSopenharmony_ciprivate:
563da853ecaSopenharmony_ci    CapabilityData *data_;
564da853ecaSopenharmony_ci};
565da853ecaSopenharmony_ci
566da853ecaSopenharmony_ci/**
567da853ecaSopenharmony_ci * @brief Enumerates the codec mime type.
568da853ecaSopenharmony_ci */
569da853ecaSopenharmony_ciclass CodecMimeType {
570da853ecaSopenharmony_cipublic:
571da853ecaSopenharmony_ci    static constexpr std::string_view VIDEO_H263 = "video/h263";
572da853ecaSopenharmony_ci    static constexpr std::string_view VIDEO_AVC = "video/avc";
573da853ecaSopenharmony_ci    static constexpr std::string_view VIDEO_MPEG2 = "video/mpeg2";
574da853ecaSopenharmony_ci    static constexpr std::string_view VIDEO_HEVC = "video/hevc";
575da853ecaSopenharmony_ci    static constexpr std::string_view VIDEO_MPEG4 = "video/mp4v-es";
576da853ecaSopenharmony_ci    static constexpr std::string_view VIDEO_VP8 = "video/x-vnd.on2.vp8";
577da853ecaSopenharmony_ci    static constexpr std::string_view VIDEO_VP9 = "video/x-vnd.on2.vp9";
578da853ecaSopenharmony_ci    static constexpr std::string_view AUDIO_AMR_NB = "audio/3gpp";
579da853ecaSopenharmony_ci    static constexpr std::string_view AUDIO_AMR_WB = "audio/amr-wb";
580da853ecaSopenharmony_ci    static constexpr std::string_view AUDIO_MPEG = "audio/mpeg";
581da853ecaSopenharmony_ci    static constexpr std::string_view AUDIO_AAC = "audio/mp4a-latm";
582da853ecaSopenharmony_ci    static constexpr std::string_view AUDIO_VORBIS = "audio/vorbis";
583da853ecaSopenharmony_ci    static constexpr std::string_view AUDIO_OPUS = "audio/opus";
584da853ecaSopenharmony_ci    static constexpr std::string_view AUDIO_FLAC = "audio/flac";
585da853ecaSopenharmony_ci    static constexpr std::string_view AUDIO_RAW = "audio/raw";
586da853ecaSopenharmony_ci    static constexpr std::string_view AUDIO_G711MU = "audio/g711mu";
587da853ecaSopenharmony_ci    static constexpr std::string_view IMAGE_JPG = "image/jpeg";
588da853ecaSopenharmony_ci    static constexpr std::string_view IMAGE_PNG = "image/png";
589da853ecaSopenharmony_ci    static constexpr std::string_view IMAGE_BMP = "image/bmp";
590da853ecaSopenharmony_ci    static constexpr std::string_view AUDIO_AVS3DA = "audio/av3a";
591da853ecaSopenharmony_ci    static constexpr std::string_view AUDIO_LBVC = "audio/lbvc";
592da853ecaSopenharmony_ci    static constexpr std::string_view AUDIO_APE = "audio/x-ape";
593da853ecaSopenharmony_ci};
594da853ecaSopenharmony_ci
595da853ecaSopenharmony_ci/**
596da853ecaSopenharmony_ci * @brief AVC Profile
597da853ecaSopenharmony_ci *
598da853ecaSopenharmony_ci * @since 3.1
599da853ecaSopenharmony_ci * @version 4.0
600da853ecaSopenharmony_ci */
601da853ecaSopenharmony_cienum AVCProfile : int32_t {
602da853ecaSopenharmony_ci    AVC_PROFILE_BASELINE = 0,
603da853ecaSopenharmony_ci    AVC_PROFILE_CONSTRAINED_BASELINE = 1,
604da853ecaSopenharmony_ci    AVC_PROFILE_CONSTRAINED_HIGH = 2,
605da853ecaSopenharmony_ci    AVC_PROFILE_EXTENDED = 3,
606da853ecaSopenharmony_ci    AVC_PROFILE_HIGH = 4,
607da853ecaSopenharmony_ci    AVC_PROFILE_HIGH_10 = 5,
608da853ecaSopenharmony_ci    AVC_PROFILE_HIGH_422 = 6,
609da853ecaSopenharmony_ci    AVC_PROFILE_HIGH_444 = 7,
610da853ecaSopenharmony_ci    AVC_PROFILE_MAIN = 8,
611da853ecaSopenharmony_ci};
612da853ecaSopenharmony_ci
613da853ecaSopenharmony_ci/**
614da853ecaSopenharmony_ci * @brief HEVC Profile
615da853ecaSopenharmony_ci *
616da853ecaSopenharmony_ci * @since 3.1
617da853ecaSopenharmony_ci * @version 4.0
618da853ecaSopenharmony_ci */
619da853ecaSopenharmony_cienum HEVCProfile : int32_t {
620da853ecaSopenharmony_ci    HEVC_PROFILE_MAIN = 0,
621da853ecaSopenharmony_ci    HEVC_PROFILE_MAIN_10 = 1,
622da853ecaSopenharmony_ci    HEVC_PROFILE_MAIN_STILL = 2,
623da853ecaSopenharmony_ci    HEVC_PROFILE_MAIN_10_HDR10 = 3,
624da853ecaSopenharmony_ci    HEVC_PROFILE_MAIN_10_HDR10_PLUS = 4,
625da853ecaSopenharmony_ci    HEVC_PROFILE_UNKNOW = -1,
626da853ecaSopenharmony_ci};
627da853ecaSopenharmony_ci
628da853ecaSopenharmony_ci/**
629da853ecaSopenharmony_ci * @brief MPEG2 Profile
630da853ecaSopenharmony_ci *
631da853ecaSopenharmony_ci * @since 3.1
632da853ecaSopenharmony_ci * @version 4.0
633da853ecaSopenharmony_ci */
634da853ecaSopenharmony_cienum MPEG2Profile : int32_t {
635da853ecaSopenharmony_ci    MPEG2_PROFILE_422 = 0,
636da853ecaSopenharmony_ci    MPEG2_PROFILE_HIGH = 1,
637da853ecaSopenharmony_ci    MPEG2_PROFILE_MAIN = 2,
638da853ecaSopenharmony_ci    MPEG2_PROFILE_SNR = 3,
639da853ecaSopenharmony_ci    MPEG2_PROFILE_SIMPLE = 4,
640da853ecaSopenharmony_ci    MPEG2_PROFILE_SPATIAL = 5,
641da853ecaSopenharmony_ci};
642da853ecaSopenharmony_ci
643da853ecaSopenharmony_ci/**
644da853ecaSopenharmony_ci * @brief MPEG4 Profile
645da853ecaSopenharmony_ci *
646da853ecaSopenharmony_ci * @since 3.1
647da853ecaSopenharmony_ci * @version 4.0
648da853ecaSopenharmony_ci */
649da853ecaSopenharmony_cienum MPEG4Profile : int32_t {
650da853ecaSopenharmony_ci    MPEG4_PROFILE_ADVANCED_CODING = 0,
651da853ecaSopenharmony_ci    MPEG4_PROFILE_ADVANCED_CORE = 1,
652da853ecaSopenharmony_ci    MPEG4_PROFILE_ADVANCED_REAL_TIME = 2,
653da853ecaSopenharmony_ci    MPEG4_PROFILE_ADVANCED_SCALABLE = 3,
654da853ecaSopenharmony_ci    MPEG4_PROFILE_ADVANCED_SIMPLE = 4,
655da853ecaSopenharmony_ci    MPEG4_PROFILE_BASIC_ANIMATED = 5,
656da853ecaSopenharmony_ci    MPEG4_PROFILE_CORE = 6,
657da853ecaSopenharmony_ci    MPEG4_PROFILE_CORE_SCALABLE = 7,
658da853ecaSopenharmony_ci    MPEG4_PROFILE_HYBRID = 8,
659da853ecaSopenharmony_ci    MPEG4_PROFILE_MAIN = 9,
660da853ecaSopenharmony_ci    MPEG4_PROFILE_NBIT = 10,
661da853ecaSopenharmony_ci    MPEG4_PROFILE_SCALABLE_TEXTURE = 11,
662da853ecaSopenharmony_ci    MPEG4_PROFILE_SIMPLE = 12,
663da853ecaSopenharmony_ci    MPEG4_PROFILE_SIMPLE_FBA = 13,
664da853ecaSopenharmony_ci    MPEG4_PROFILE_SIMPLE_FACE = 14,
665da853ecaSopenharmony_ci    MPEG4_PROFILE_SIMPLE_SCALABLE = 15,
666da853ecaSopenharmony_ci};
667da853ecaSopenharmony_ci
668da853ecaSopenharmony_ci/**
669da853ecaSopenharmony_ci * @brief H263 Profile
670da853ecaSopenharmony_ci *
671da853ecaSopenharmony_ci * @since 3.1
672da853ecaSopenharmony_ci * @version 4.0
673da853ecaSopenharmony_ci */
674da853ecaSopenharmony_cienum H263Profile : int32_t {
675da853ecaSopenharmony_ci    H263_PROFILE_BACKWARD_COMPATIBLE = 0,
676da853ecaSopenharmony_ci    H263_PROFILE_BASELINE = 1,
677da853ecaSopenharmony_ci    H263_PROFILE_H320_CODING = 2,
678da853ecaSopenharmony_ci    H263_PROFILE_HIGH_COMPRESSION = 3,
679da853ecaSopenharmony_ci    H263_PROFILE_HIGH_LATENCY = 4,
680da853ecaSopenharmony_ci    H263_PROFILE_ISW_V2 = 5,
681da853ecaSopenharmony_ci    H263_PROFILE_ISW_V3 = 6,
682da853ecaSopenharmony_ci    H263_PROFILE_INTERLACE = 7,
683da853ecaSopenharmony_ci    H263_PROFILE_INTERNET = 8,
684da853ecaSopenharmony_ci};
685da853ecaSopenharmony_ci
686da853ecaSopenharmony_ci/**
687da853ecaSopenharmony_ci * @brief
688da853ecaSopenharmony_ci *
689da853ecaSopenharmony_ci * @since 3.1
690da853ecaSopenharmony_ci * @version 4.0
691da853ecaSopenharmony_ci */
692da853ecaSopenharmony_cienum VP8Profile : int32_t {
693da853ecaSopenharmony_ci    VP8_PROFILE_MAIN = 0,
694da853ecaSopenharmony_ci};
695da853ecaSopenharmony_ci
696da853ecaSopenharmony_ci/**
697da853ecaSopenharmony_ci * @brief
698da853ecaSopenharmony_ci *
699da853ecaSopenharmony_ci * @since 3.1
700da853ecaSopenharmony_ci * @version 4.0
701da853ecaSopenharmony_ci */
702da853ecaSopenharmony_cienum AVCLevel : int32_t {
703da853ecaSopenharmony_ci    AVC_LEVEL_1 = 0,
704da853ecaSopenharmony_ci    AVC_LEVEL_1b = 1,
705da853ecaSopenharmony_ci    AVC_LEVEL_11 = 2,
706da853ecaSopenharmony_ci    AVC_LEVEL_12 = 3,
707da853ecaSopenharmony_ci    AVC_LEVEL_13 = 4,
708da853ecaSopenharmony_ci    AVC_LEVEL_2 = 5,
709da853ecaSopenharmony_ci    AVC_LEVEL_21 = 6,
710da853ecaSopenharmony_ci    AVC_LEVEL_22 = 7,
711da853ecaSopenharmony_ci    AVC_LEVEL_3 = 8,
712da853ecaSopenharmony_ci    AVC_LEVEL_31 = 9,
713da853ecaSopenharmony_ci    AVC_LEVEL_32 = 10,
714da853ecaSopenharmony_ci    AVC_LEVEL_4 = 11,
715da853ecaSopenharmony_ci    AVC_LEVEL_41 = 12,
716da853ecaSopenharmony_ci    AVC_LEVEL_42 = 13,
717da853ecaSopenharmony_ci    AVC_LEVEL_5 = 14,
718da853ecaSopenharmony_ci    AVC_LEVEL_51 = 15,
719da853ecaSopenharmony_ci    AVC_LEVEL_52 = 16,
720da853ecaSopenharmony_ci    AVC_LEVEL_6 = 17,
721da853ecaSopenharmony_ci    AVC_LEVEL_61 = 18,
722da853ecaSopenharmony_ci    AVC_LEVEL_62 = 19,
723da853ecaSopenharmony_ci};
724da853ecaSopenharmony_ci
725da853ecaSopenharmony_ci/**
726da853ecaSopenharmony_ci * @brief
727da853ecaSopenharmony_ci *
728da853ecaSopenharmony_ci * @since 3.1
729da853ecaSopenharmony_ci * @version 4.0
730da853ecaSopenharmony_ci */
731da853ecaSopenharmony_cienum HEVCLevel : int32_t {
732da853ecaSopenharmony_ci    HEVC_LEVEL_1 = 0,
733da853ecaSopenharmony_ci    HEVC_LEVEL_2 = 1,
734da853ecaSopenharmony_ci    HEVC_LEVEL_21 = 2,
735da853ecaSopenharmony_ci    HEVC_LEVEL_3 = 3,
736da853ecaSopenharmony_ci    HEVC_LEVEL_31 = 4,
737da853ecaSopenharmony_ci    HEVC_LEVEL_4 = 5,
738da853ecaSopenharmony_ci    HEVC_LEVEL_41 = 6,
739da853ecaSopenharmony_ci    HEVC_LEVEL_5 = 7,
740da853ecaSopenharmony_ci    HEVC_LEVEL_51 = 8,
741da853ecaSopenharmony_ci    HEVC_LEVEL_52 = 9,
742da853ecaSopenharmony_ci    HEVC_LEVEL_6 = 10,
743da853ecaSopenharmony_ci    HEVC_LEVEL_61 = 11,
744da853ecaSopenharmony_ci    HEVC_LEVEL_62 = 12,
745da853ecaSopenharmony_ci    HEVC_LEVEL_UNKNOW = -1,
746da853ecaSopenharmony_ci};
747da853ecaSopenharmony_ci
748da853ecaSopenharmony_ci/**
749da853ecaSopenharmony_ci * @brief
750da853ecaSopenharmony_ci *
751da853ecaSopenharmony_ci * @since 3.1
752da853ecaSopenharmony_ci * @version 4.0
753da853ecaSopenharmony_ci */
754da853ecaSopenharmony_cienum MPEG2Level : int32_t {
755da853ecaSopenharmony_ci    MPEG2_LEVEL_LL = 0,
756da853ecaSopenharmony_ci    MPEG2_LEVEL_ML = 1,
757da853ecaSopenharmony_ci    MPEG2_LEVEL_H14 = 2,
758da853ecaSopenharmony_ci    MPEG2_LEVEL_HL = 3,
759da853ecaSopenharmony_ci};
760da853ecaSopenharmony_ci
761da853ecaSopenharmony_ci/**
762da853ecaSopenharmony_ci * @brief
763da853ecaSopenharmony_ci *
764da853ecaSopenharmony_ci * @since 3.1
765da853ecaSopenharmony_ci * @version 4.0
766da853ecaSopenharmony_ci */
767da853ecaSopenharmony_cienum MPEG4Level : int32_t {
768da853ecaSopenharmony_ci    MPEG4_LEVEL_0 = 0,
769da853ecaSopenharmony_ci    MPEG4_LEVEL_0B = 1,
770da853ecaSopenharmony_ci    MPEG4_LEVEL_1 = 2,
771da853ecaSopenharmony_ci    MPEG4_LEVEL_2 = 3,
772da853ecaSopenharmony_ci    MPEG4_LEVEL_3 = 4,
773da853ecaSopenharmony_ci    MPEG4_LEVEL_4 = 5,
774da853ecaSopenharmony_ci    MPEG4_LEVEL_4A = 6,
775da853ecaSopenharmony_ci    MPEG4_LEVEL_5 = 7,
776da853ecaSopenharmony_ci};
777da853ecaSopenharmony_ci
778da853ecaSopenharmony_ci/**
779da853ecaSopenharmony_ci * @brief
780da853ecaSopenharmony_ci *
781da853ecaSopenharmony_ci * @since 3.1
782da853ecaSopenharmony_ci * @version 4.0
783da853ecaSopenharmony_ci */
784da853ecaSopenharmony_cienum VideoEncodeBitrateMode : int32_t {
785da853ecaSopenharmony_ci    /**
786da853ecaSopenharmony_ci     * constant bit rate mode.
787da853ecaSopenharmony_ci     */
788da853ecaSopenharmony_ci    CBR = 0,
789da853ecaSopenharmony_ci    /**
790da853ecaSopenharmony_ci     * variable bit rate mode.
791da853ecaSopenharmony_ci     */
792da853ecaSopenharmony_ci    VBR = 1,
793da853ecaSopenharmony_ci    /**
794da853ecaSopenharmony_ci     * constant quality mode.
795da853ecaSopenharmony_ci     */
796da853ecaSopenharmony_ci    CQ = 2,
797da853ecaSopenharmony_ci    /**
798da853ecaSopenharmony_ci     * constant bit rate mode for video call or meeting scene
799da853ecaSopenharmony_ci     */
800da853ecaSopenharmony_ci    CBR_VIDEOCALL = 3,
801da853ecaSopenharmony_ci};
802da853ecaSopenharmony_ci
803da853ecaSopenharmony_ci/**
804da853ecaSopenharmony_ci * @brief File type
805da853ecaSopenharmony_ci *
806da853ecaSopenharmony_ci * @since 4.0
807da853ecaSopenharmony_ci * @version 4.0
808da853ecaSopenharmony_ci */
809da853ecaSopenharmony_cienum FileType : int32_t {
810da853ecaSopenharmony_ci    FILE_TYPE_UNKNOW = 0,
811da853ecaSopenharmony_ci    FILE_TYPE_MP4 = 101,
812da853ecaSopenharmony_ci    FILE_TYPE_MPEGTS = 102,
813da853ecaSopenharmony_ci    FILE_TYPE_MKV = 103,
814da853ecaSopenharmony_ci    FILE_TYPE_AMR = 201,
815da853ecaSopenharmony_ci    FILE_TYPE_AAC = 202,
816da853ecaSopenharmony_ci    FILE_TYPE_MP3 = 203,
817da853ecaSopenharmony_ci    FILE_TYPE_FLAC = 204,
818da853ecaSopenharmony_ci    FILE_TYPE_OGG = 205,
819da853ecaSopenharmony_ci    FILE_TYPE_M4A = 206,
820da853ecaSopenharmony_ci    FILE_TYPE_WAV = 207,
821da853ecaSopenharmony_ci};
822da853ecaSopenharmony_ci} // namespace MediaAVCodec
823da853ecaSopenharmony_ci} // namespace OHOS
824da853ecaSopenharmony_ci#endif // MEDIA_AVCODEC_INFO_H