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 ÷nd, 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