1fa7767c5Sopenharmony_ci/* 2fa7767c5Sopenharmony_ci * Copyright (c) 2023-2023 Huawei Device Co., Ltd. 3fa7767c5Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4fa7767c5Sopenharmony_ci * you may not use this file except in compliance with the License. 5fa7767c5Sopenharmony_ci * You may obtain a copy of the License at 6fa7767c5Sopenharmony_ci * 7fa7767c5Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8fa7767c5Sopenharmony_ci * 9fa7767c5Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10fa7767c5Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11fa7767c5Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12fa7767c5Sopenharmony_ci * See the License for the specific language governing permissions and 13fa7767c5Sopenharmony_ci * limitations under the License. 14fa7767c5Sopenharmony_ci */ 15fa7767c5Sopenharmony_ci 16fa7767c5Sopenharmony_ci#include "meta/meta.h" 17fa7767c5Sopenharmony_ci#include <functional> 18fa7767c5Sopenharmony_ci#include "common/log.h" 19fa7767c5Sopenharmony_ci#include "meta.h" 20fa7767c5Sopenharmony_ci 21fa7767c5Sopenharmony_ci/** 22fa7767c5Sopenharmony_ci * Steps of Adding New Tag 23fa7767c5Sopenharmony_ci * 24fa7767c5Sopenharmony_ci * 1. In meta_key.h, Add a Tag. 25fa7767c5Sopenharmony_ci * 2. In meta.h, Register Tag key Value mapping. 26fa7767c5Sopenharmony_ci * Example: DEFINE_INSERT_GET_FUNC(tagCharSeq == Tag::TAGNAME, TAGTYPE, AnyValueType::VALUETYPE) 27fa7767c5Sopenharmony_ci * 3. In meta.cpp, Register default value to g_metadataDefaultValueMap ({Tag::TAGNAME, defaultTAGTYPE}). 28fa7767c5Sopenharmony_ci * 4. In order to support Enum/Bool Value Getter Setter from AVFormat, 29fa7767c5Sopenharmony_ci * In meta.cpp, Register Tag key getter setter function mapping. 30fa7767c5Sopenharmony_ci * Example: DEFINE_METADATA_SETTER_GETTER_FUNC(SrcTAGNAME, int32_t/int64_t) 31fa7767c5Sopenharmony_ci * For Int32/Int64 Type, update g_metadataGetterSetterMap/g_metadataGetterSetterInt64Map. 32fa7767c5Sopenharmony_ci * For Bool Type, update g_metadataBoolVector. 33fa7767c5Sopenharmony_ci * 5. Update meta_func_unit_test.cpp to add the testcase of new added Tag Type. 34fa7767c5Sopenharmony_ci * 35fa7767c5Sopenharmony_ci * Theory: 36fa7767c5Sopenharmony_ci * App --> AVFormat(ndk) --> Meta --> Parcel(ipc) --> Meta 37fa7767c5Sopenharmony_ci * AVFormat only support: int, int64(Long), float, double, string, buffer 38fa7767c5Sopenharmony_ci * Parcel only support: bool, int8, int16, int32, int64, uint8, uint16, uint32, uint64, float, double, pointer, buffer 39fa7767c5Sopenharmony_ci * Meta (based on any) support : all types in theory. 40fa7767c5Sopenharmony_ci * 41fa7767c5Sopenharmony_ci * Attention: Use AVFormat with Meta, with or without ipc, be care of the difference of supported types. 42fa7767c5Sopenharmony_ci * Currently, The ToParcel/FromParcel function(In Any.h) supports single value convert to/from parcel. 43fa7767c5Sopenharmony_ci * you can use meta's helper functions to handle the key and the correct value type: 44fa7767c5Sopenharmony_ci * GetDefaultAnyValue: get the specified key's default value, It can get the value type. 45fa7767c5Sopenharmony_ci * SetMetaData/GetMetaData: AVFormat use them to set/get enum/bool/int values, 46fa7767c5Sopenharmony_ci * It can convert the integer to/from enum/bool automatically. 47fa7767c5Sopenharmony_ci **/ 48fa7767c5Sopenharmony_ci 49fa7767c5Sopenharmony_cinamespace { 50fa7767c5Sopenharmony_ciconstexpr OHOS::HiviewDFX::HiLogLabel LABEL = { LOG_CORE, LOG_DOMAIN_FOUNDATION, "Meta" }; 51fa7767c5Sopenharmony_ci} 52fa7767c5Sopenharmony_ci 53fa7767c5Sopenharmony_cinamespace OHOS { 54fa7767c5Sopenharmony_cinamespace Media { 55fa7767c5Sopenharmony_ciusing namespace Plugins; 56fa7767c5Sopenharmony_ci 57fa7767c5Sopenharmony_ci#define DEFINE_METADATA_SETTER_GETTER_FUNC(EnumTypeName, ExtTypeName) \ 58fa7767c5Sopenharmony_cistatic bool Set##EnumTypeName(Meta& meta, const TagType& tag, ExtTypeName& value) \ 59fa7767c5Sopenharmony_ci{ \ 60fa7767c5Sopenharmony_ci if (__is_enum(EnumTypeName)) { \ 61fa7767c5Sopenharmony_ci meta.SetData(tag, EnumTypeName(value)); \ 62fa7767c5Sopenharmony_ci } else { \ 63fa7767c5Sopenharmony_ci meta.SetData(tag, value); \ 64fa7767c5Sopenharmony_ci } \ 65fa7767c5Sopenharmony_ci return true; \ 66fa7767c5Sopenharmony_ci} \ 67fa7767c5Sopenharmony_ci \ 68fa7767c5Sopenharmony_cistatic bool Get##EnumTypeName(const Meta& meta, const TagType& tag, ExtTypeName& value) \ 69fa7767c5Sopenharmony_ci{ \ 70fa7767c5Sopenharmony_ci EnumTypeName tmpValue; \ 71fa7767c5Sopenharmony_ci if (meta.GetData(tag, tmpValue)) { \ 72fa7767c5Sopenharmony_ci value = static_cast<ExtTypeName>(tmpValue); \ 73fa7767c5Sopenharmony_ci return true; \ 74fa7767c5Sopenharmony_ci } \ 75fa7767c5Sopenharmony_ci return false; \ 76fa7767c5Sopenharmony_ci} 77fa7767c5Sopenharmony_ci 78fa7767c5Sopenharmony_ciDEFINE_METADATA_SETTER_GETTER_FUNC(SrcInputType, int32_t) 79fa7767c5Sopenharmony_ciDEFINE_METADATA_SETTER_GETTER_FUNC(AudioSampleFormat, int32_t) 80fa7767c5Sopenharmony_ciDEFINE_METADATA_SETTER_GETTER_FUNC(VideoPixelFormat, int32_t) 81fa7767c5Sopenharmony_ciDEFINE_METADATA_SETTER_GETTER_FUNC(MediaType, int32_t) 82fa7767c5Sopenharmony_ciDEFINE_METADATA_SETTER_GETTER_FUNC(VideoH264Profile, int32_t) 83fa7767c5Sopenharmony_ciDEFINE_METADATA_SETTER_GETTER_FUNC(VideoRotation, int32_t) 84fa7767c5Sopenharmony_ciDEFINE_METADATA_SETTER_GETTER_FUNC(VideoOrientationType, int32_t) 85fa7767c5Sopenharmony_ciDEFINE_METADATA_SETTER_GETTER_FUNC(ColorPrimary, int32_t) 86fa7767c5Sopenharmony_ciDEFINE_METADATA_SETTER_GETTER_FUNC(TransferCharacteristic, int32_t) 87fa7767c5Sopenharmony_ciDEFINE_METADATA_SETTER_GETTER_FUNC(MatrixCoefficient, int32_t) 88fa7767c5Sopenharmony_ciDEFINE_METADATA_SETTER_GETTER_FUNC(HEVCProfile, int32_t) 89fa7767c5Sopenharmony_ciDEFINE_METADATA_SETTER_GETTER_FUNC(HEVCLevel, int32_t) 90fa7767c5Sopenharmony_ciDEFINE_METADATA_SETTER_GETTER_FUNC(ChromaLocation, int32_t) 91fa7767c5Sopenharmony_ciDEFINE_METADATA_SETTER_GETTER_FUNC(FileType, int32_t) 92fa7767c5Sopenharmony_ciDEFINE_METADATA_SETTER_GETTER_FUNC(VideoEncodeBitrateMode, int32_t) 93fa7767c5Sopenharmony_ciDEFINE_METADATA_SETTER_GETTER_FUNC(TemporalGopReferenceMode, int32_t) 94fa7767c5Sopenharmony_ci 95fa7767c5Sopenharmony_ciDEFINE_METADATA_SETTER_GETTER_FUNC(AudioChannelLayout, int64_t) 96fa7767c5Sopenharmony_ci 97fa7767c5Sopenharmony_ci#define DEFINE_METADATA_SETTER_GETTER(tag, EnumType) {tag, std::make_pair(Set##EnumType, Get##EnumType)} 98fa7767c5Sopenharmony_ci 99fa7767c5Sopenharmony_ciusing MetaSetterFunction = std::function<bool(Meta&, const TagType&, int32_t&)>; 100fa7767c5Sopenharmony_ciusing MetaGetterFunction = std::function<bool(const Meta&, const TagType&, int32_t&)>; 101fa7767c5Sopenharmony_ci 102fa7767c5Sopenharmony_cistatic std::map<TagType, std::pair<MetaSetterFunction, MetaGetterFunction>> g_metadataGetterSetterMap = { 103fa7767c5Sopenharmony_ci DEFINE_METADATA_SETTER_GETTER(Tag::SRC_INPUT_TYPE, SrcInputType), 104fa7767c5Sopenharmony_ci DEFINE_METADATA_SETTER_GETTER(Tag::AUDIO_SAMPLE_FORMAT, AudioSampleFormat), 105fa7767c5Sopenharmony_ci DEFINE_METADATA_SETTER_GETTER(Tag::VIDEO_PIXEL_FORMAT, VideoPixelFormat), 106fa7767c5Sopenharmony_ci DEFINE_METADATA_SETTER_GETTER(Tag::MEDIA_TYPE, MediaType), 107fa7767c5Sopenharmony_ci DEFINE_METADATA_SETTER_GETTER(Tag::VIDEO_H264_PROFILE, VideoH264Profile), 108fa7767c5Sopenharmony_ci DEFINE_METADATA_SETTER_GETTER(Tag::VIDEO_ROTATION, VideoRotation), 109fa7767c5Sopenharmony_ci DEFINE_METADATA_SETTER_GETTER(Tag::VIDEO_ORIENTATION_TYPE, VideoOrientationType), 110fa7767c5Sopenharmony_ci DEFINE_METADATA_SETTER_GETTER(Tag::VIDEO_COLOR_PRIMARIES, ColorPrimary), 111fa7767c5Sopenharmony_ci DEFINE_METADATA_SETTER_GETTER(Tag::VIDEO_COLOR_TRC, TransferCharacteristic), 112fa7767c5Sopenharmony_ci DEFINE_METADATA_SETTER_GETTER(Tag::VIDEO_COLOR_MATRIX_COEFF, MatrixCoefficient), 113fa7767c5Sopenharmony_ci DEFINE_METADATA_SETTER_GETTER(Tag::VIDEO_H265_PROFILE, HEVCProfile), 114fa7767c5Sopenharmony_ci DEFINE_METADATA_SETTER_GETTER(Tag::VIDEO_H265_LEVEL, HEVCLevel), 115fa7767c5Sopenharmony_ci DEFINE_METADATA_SETTER_GETTER(Tag::VIDEO_CHROMA_LOCATION, ChromaLocation), 116fa7767c5Sopenharmony_ci DEFINE_METADATA_SETTER_GETTER(Tag::MEDIA_FILE_TYPE, FileType), 117fa7767c5Sopenharmony_ci DEFINE_METADATA_SETTER_GETTER(Tag::VIDEO_ENCODE_BITRATE_MODE, VideoEncodeBitrateMode), 118fa7767c5Sopenharmony_ci DEFINE_METADATA_SETTER_GETTER(Tag::VIDEO_ENCODER_TEMPORAL_GOP_REFERENCE_MODE, TemporalGopReferenceMode), 119fa7767c5Sopenharmony_ci}; 120fa7767c5Sopenharmony_ci 121fa7767c5Sopenharmony_ciusing MetaSetterInt64Function = std::function<bool(Meta&, const TagType&, int64_t&)>; 122fa7767c5Sopenharmony_ciusing MetaGetterInt64Function = std::function<bool(const Meta&, const TagType&, int64_t&)>; 123fa7767c5Sopenharmony_cistatic std::map<TagType, std::pair<MetaSetterInt64Function, MetaGetterInt64Function>> g_metadataGetterSetterInt64Map = { 124fa7767c5Sopenharmony_ci DEFINE_METADATA_SETTER_GETTER(Tag::AUDIO_CHANNEL_LAYOUT, AudioChannelLayout), 125fa7767c5Sopenharmony_ci DEFINE_METADATA_SETTER_GETTER(Tag::AUDIO_OUTPUT_CHANNEL_LAYOUT, AudioChannelLayout) 126fa7767c5Sopenharmony_ci}; 127fa7767c5Sopenharmony_ci 128fa7767c5Sopenharmony_cistatic std::vector<TagType> g_metadataBoolVector = { 129fa7767c5Sopenharmony_ci Tag::VIDEO_COLOR_RANGE, 130fa7767c5Sopenharmony_ci Tag::VIDEO_REQUEST_I_FRAME, 131fa7767c5Sopenharmony_ci Tag::VIDEO_IS_HDR_VIVID, 132fa7767c5Sopenharmony_ci Tag::MEDIA_HAS_VIDEO, 133fa7767c5Sopenharmony_ci Tag::MEDIA_HAS_AUDIO, 134fa7767c5Sopenharmony_ci Tag::MEDIA_HAS_SUBTITLE, 135fa7767c5Sopenharmony_ci Tag::MEDIA_HAS_TIMEDMETA, 136fa7767c5Sopenharmony_ci Tag::MEDIA_END_OF_STREAM, 137fa7767c5Sopenharmony_ci Tag::VIDEO_FRAME_RATE_ADAPTIVE_MODE, 138fa7767c5Sopenharmony_ci Tag::VIDEO_ENCODER_ENABLE_TEMPORAL_SCALABILITY, 139fa7767c5Sopenharmony_ci Tag::VIDEO_ENCODER_PER_FRAME_MARK_LTR, 140fa7767c5Sopenharmony_ci Tag::VIDEO_PER_FRAME_IS_LTR, 141fa7767c5Sopenharmony_ci Tag::VIDEO_PER_FRAME_IS_SKIP, 142fa7767c5Sopenharmony_ci Tag::VIDEO_ENABLE_LOW_LATENCY, 143fa7767c5Sopenharmony_ci Tag::VIDEO_ENCODER_ENABLE_SURFACE_INPUT_CALLBACK, 144fa7767c5Sopenharmony_ci Tag::VIDEO_BUFFER_CAN_DROP, 145fa7767c5Sopenharmony_ci Tag::AUDIO_RENDER_SET_FLAG, 146fa7767c5Sopenharmony_ci Tag::SCREEN_CAPTURE_USER_AGREE, 147fa7767c5Sopenharmony_ci Tag::SCREEN_CAPTURE_REQURE_MIC, 148fa7767c5Sopenharmony_ci Tag::SCREEN_CAPTURE_ENABLE_MIC, 149fa7767c5Sopenharmony_ci Tag::AV_PLAYER_IS_DRM_PROTECTED, 150fa7767c5Sopenharmony_ci Tag::AV_PLAYER_DOWNLOAD_TIME_OUT, 151fa7767c5Sopenharmony_ci Tag::VIDEO_ENCODER_PER_FRAME_DISCARD, 152fa7767c5Sopenharmony_ci Tag::VIDEO_ENCODER_ENABLE_WATERMARK, 153fa7767c5Sopenharmony_ci Tag::VIDEO_ENCODER_ENABLE_PARAMS_FEEDBACK 154fa7767c5Sopenharmony_ci}; 155fa7767c5Sopenharmony_ci 156fa7767c5Sopenharmony_cibool SetMetaData(Meta& meta, const TagType& tag, int32_t value) 157fa7767c5Sopenharmony_ci{ 158fa7767c5Sopenharmony_ci auto iter = g_metadataGetterSetterMap.find(tag); 159fa7767c5Sopenharmony_ci if (iter == g_metadataGetterSetterMap.end()) { 160fa7767c5Sopenharmony_ci if (std::find(g_metadataBoolVector.begin(), g_metadataBoolVector.end(), tag) != g_metadataBoolVector.end()) { 161fa7767c5Sopenharmony_ci meta.SetData(tag, value != 0 ? true : false); 162fa7767c5Sopenharmony_ci return true; 163fa7767c5Sopenharmony_ci } 164fa7767c5Sopenharmony_ci meta.SetData(tag, value); 165fa7767c5Sopenharmony_ci return true; 166fa7767c5Sopenharmony_ci } 167fa7767c5Sopenharmony_ci return iter->second.first(meta, tag, value); 168fa7767c5Sopenharmony_ci} 169fa7767c5Sopenharmony_ci 170fa7767c5Sopenharmony_cibool GetMetaData(const Meta& meta, const TagType& tag, int32_t& value) 171fa7767c5Sopenharmony_ci{ 172fa7767c5Sopenharmony_ci auto iter = g_metadataGetterSetterMap.find(tag); 173fa7767c5Sopenharmony_ci if (iter == g_metadataGetterSetterMap.end()) { 174fa7767c5Sopenharmony_ci if (std::find(g_metadataBoolVector.begin(), g_metadataBoolVector.end(), tag) != g_metadataBoolVector.end()) { 175fa7767c5Sopenharmony_ci bool valueBool = false; 176fa7767c5Sopenharmony_ci FALSE_RETURN_V(meta.GetData(tag, valueBool), false); 177fa7767c5Sopenharmony_ci value = valueBool ? 1 : 0; 178fa7767c5Sopenharmony_ci return true; 179fa7767c5Sopenharmony_ci } 180fa7767c5Sopenharmony_ci return meta.GetData(tag, value); 181fa7767c5Sopenharmony_ci } 182fa7767c5Sopenharmony_ci return iter->second.second(meta, tag, value); 183fa7767c5Sopenharmony_ci} 184fa7767c5Sopenharmony_ci 185fa7767c5Sopenharmony_cibool SetMetaData(Meta& meta, const TagType& tag, int64_t value) 186fa7767c5Sopenharmony_ci{ 187fa7767c5Sopenharmony_ci auto iter = g_metadataGetterSetterInt64Map.find(tag); 188fa7767c5Sopenharmony_ci if (iter == g_metadataGetterSetterInt64Map.end()) { 189fa7767c5Sopenharmony_ci meta.SetData(tag, value); 190fa7767c5Sopenharmony_ci return true; 191fa7767c5Sopenharmony_ci } 192fa7767c5Sopenharmony_ci return iter->second.first(meta, tag, value); 193fa7767c5Sopenharmony_ci} 194fa7767c5Sopenharmony_ci 195fa7767c5Sopenharmony_cibool GetMetaData(const Meta& meta, const TagType& tag, int64_t& value) 196fa7767c5Sopenharmony_ci{ 197fa7767c5Sopenharmony_ci auto iter = g_metadataGetterSetterInt64Map.find(tag); 198fa7767c5Sopenharmony_ci if (iter == g_metadataGetterSetterInt64Map.end()) { 199fa7767c5Sopenharmony_ci return meta.GetData(tag, value); 200fa7767c5Sopenharmony_ci } 201fa7767c5Sopenharmony_ci return iter->second.second(meta, tag, value); 202fa7767c5Sopenharmony_ci} 203fa7767c5Sopenharmony_ci 204fa7767c5Sopenharmony_cibool IsIntEnum(const TagType &tag) 205fa7767c5Sopenharmony_ci{ 206fa7767c5Sopenharmony_ci return (g_metadataGetterSetterMap.find(tag) != g_metadataGetterSetterMap.end()); 207fa7767c5Sopenharmony_ci} 208fa7767c5Sopenharmony_ci 209fa7767c5Sopenharmony_cibool IsLongEnum(const TagType &tag) 210fa7767c5Sopenharmony_ci{ 211fa7767c5Sopenharmony_ci return g_metadataGetterSetterInt64Map.find(tag) != g_metadataGetterSetterInt64Map.end(); 212fa7767c5Sopenharmony_ci} 213fa7767c5Sopenharmony_ci 214fa7767c5Sopenharmony_cistatic Any defaultString = std::string(); 215fa7767c5Sopenharmony_cistatic Any defaultInt8 = (int8_t)0; 216fa7767c5Sopenharmony_cistatic Any defaultUInt8 = (uint8_t)0; 217fa7767c5Sopenharmony_cistatic Any defaultInt32 = (int32_t)0; 218fa7767c5Sopenharmony_cistatic Any defaultUInt32 = (uint32_t)0; 219fa7767c5Sopenharmony_cistatic Any defaultInt64 = (int64_t)0; 220fa7767c5Sopenharmony_cistatic Any defaultUInt64 = (uint64_t)0; 221fa7767c5Sopenharmony_cistatic Any defaultFloat = 0.0f; 222fa7767c5Sopenharmony_cistatic Any defaultDouble = (double)0.0; 223fa7767c5Sopenharmony_cistatic Any defaultBool = (bool) false; 224fa7767c5Sopenharmony_cistatic Any defaultSrcInputType = SrcInputType::UNKNOWN; 225fa7767c5Sopenharmony_cistatic Any defaultAudioSampleFormat = AudioSampleFormat::INVALID_WIDTH; 226fa7767c5Sopenharmony_cistatic Any defaultVideoPixelFormat = VideoPixelFormat::UNKNOWN; 227fa7767c5Sopenharmony_cistatic Any defaultMediaType = MediaType::UNKNOWN; 228fa7767c5Sopenharmony_cistatic Any defaultVideoH264Profile = VideoH264Profile::UNKNOWN; 229fa7767c5Sopenharmony_cistatic Any defaultVideoRotation = VideoRotation::VIDEO_ROTATION_0; 230fa7767c5Sopenharmony_cistatic Any defaultVideoOrientationType = VideoOrientationType::ROTATE_NONE; 231fa7767c5Sopenharmony_cistatic Any defaultColorPrimary = ColorPrimary::BT2020; 232fa7767c5Sopenharmony_cistatic Any defaultTransferCharacteristic = TransferCharacteristic::BT1361; 233fa7767c5Sopenharmony_cistatic Any defaultMatrixCoefficient = MatrixCoefficient::BT2020_CL; 234fa7767c5Sopenharmony_cistatic Any defaultHEVCProfile = HEVCProfile::HEVC_PROFILE_UNKNOW; 235fa7767c5Sopenharmony_cistatic Any defaultHEVCLevel = HEVCLevel::HEVC_LEVEL_UNKNOW; 236fa7767c5Sopenharmony_cistatic Any defaultChromaLocation = ChromaLocation::BOTTOM; 237fa7767c5Sopenharmony_cistatic Any defaultFileType = FileType::UNKNOW; 238fa7767c5Sopenharmony_cistatic Any defaultVideoEncodeBitrateMode = VideoEncodeBitrateMode::CBR; 239fa7767c5Sopenharmony_cistatic Any defaultTemporalGopReferenceMode = TemporalGopReferenceMode::ADJACENT_REFERENCE; 240fa7767c5Sopenharmony_ci 241fa7767c5Sopenharmony_cistatic Any defaultAudioChannelLayout = AudioChannelLayout::UNKNOWN; 242fa7767c5Sopenharmony_cistatic Any defaultAudioAacProfile = AudioAacProfile::ELD; 243fa7767c5Sopenharmony_cistatic Any defaultAudioAacStreamFormat = AudioAacStreamFormat::ADIF; 244fa7767c5Sopenharmony_cistatic Any defaultVectorUInt8 = std::vector<uint8_t>(); 245fa7767c5Sopenharmony_cistatic Any defaultVectorUInt32 = std::vector<uint32_t>(); 246fa7767c5Sopenharmony_cistatic Any defaultVectorVideoBitStreamFormat = std::vector<VideoBitStreamFormat>(); 247fa7767c5Sopenharmony_cistatic std::map<TagType, const Any &> g_metadataDefaultValueMap = { 248fa7767c5Sopenharmony_ci {Tag::SRC_INPUT_TYPE, defaultSrcInputType}, 249fa7767c5Sopenharmony_ci {Tag::AUDIO_SAMPLE_FORMAT, defaultAudioSampleFormat}, 250fa7767c5Sopenharmony_ci {Tag::VIDEO_PIXEL_FORMAT, defaultVideoPixelFormat}, 251fa7767c5Sopenharmony_ci {Tag::MEDIA_TYPE, defaultMediaType}, 252fa7767c5Sopenharmony_ci {Tag::VIDEO_H264_PROFILE, defaultVideoH264Profile}, 253fa7767c5Sopenharmony_ci {Tag::VIDEO_ROTATION, defaultVideoRotation}, 254fa7767c5Sopenharmony_ci {Tag::VIDEO_ORIENTATION_TYPE, defaultVideoOrientationType}, 255fa7767c5Sopenharmony_ci {Tag::VIDEO_COLOR_PRIMARIES, defaultColorPrimary}, 256fa7767c5Sopenharmony_ci {Tag::VIDEO_COLOR_TRC, defaultTransferCharacteristic}, 257fa7767c5Sopenharmony_ci {Tag::VIDEO_COLOR_MATRIX_COEFF, defaultMatrixCoefficient}, 258fa7767c5Sopenharmony_ci {Tag::VIDEO_H265_PROFILE, defaultHEVCProfile}, 259fa7767c5Sopenharmony_ci {Tag::VIDEO_H265_LEVEL, defaultHEVCLevel}, 260fa7767c5Sopenharmony_ci {Tag::VIDEO_CHROMA_LOCATION, defaultChromaLocation}, 261fa7767c5Sopenharmony_ci {Tag::MEDIA_FILE_TYPE, defaultFileType}, 262fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODE_BITRATE_MODE, defaultVideoEncodeBitrateMode}, 263fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_TEMPORAL_GOP_REFERENCE_MODE, defaultTemporalGopReferenceMode}, 264fa7767c5Sopenharmony_ci // Int8 265fa7767c5Sopenharmony_ci {Tag::RECORDER_HDR_TYPE, defaultInt8}, 266fa7767c5Sopenharmony_ci // Uint_8 267fa7767c5Sopenharmony_ci {Tag::SCREEN_CAPTURE_AV_TYPE, defaultUInt8}, 268fa7767c5Sopenharmony_ci {Tag::SCREEN_CAPTURE_DATA_TYPE, defaultUInt8}, 269fa7767c5Sopenharmony_ci {Tag::SCREEN_CAPTURE_STOP_REASON, defaultUInt8}, 270fa7767c5Sopenharmony_ci // Int32 271fa7767c5Sopenharmony_ci {Tag::APP_UID, defaultInt32}, 272fa7767c5Sopenharmony_ci {Tag::APP_PID, defaultInt32}, 273fa7767c5Sopenharmony_ci {Tag::APP_TOKEN_ID, defaultInt32}, 274fa7767c5Sopenharmony_ci {Tag::REQUIRED_IN_BUFFER_CNT, defaultInt32}, 275fa7767c5Sopenharmony_ci {Tag::REQUIRED_IN_BUFFER_SIZE, defaultInt32}, 276fa7767c5Sopenharmony_ci {Tag::REQUIRED_OUT_BUFFER_CNT, defaultInt32}, 277fa7767c5Sopenharmony_ci {Tag::REQUIRED_OUT_BUFFER_SIZE, defaultInt32}, 278fa7767c5Sopenharmony_ci {Tag::BUFFERING_SIZE, defaultInt32}, 279fa7767c5Sopenharmony_ci {Tag::WATERLINE_HIGH, defaultInt32}, 280fa7767c5Sopenharmony_ci {Tag::WATERLINE_LOW, defaultInt32}, 281fa7767c5Sopenharmony_ci {Tag::AUDIO_CHANNEL_COUNT, defaultInt32}, 282fa7767c5Sopenharmony_ci {Tag::AUDIO_SAMPLE_RATE, defaultInt32}, 283fa7767c5Sopenharmony_ci {Tag::AUDIO_SAMPLE_PER_FRAME, defaultInt32}, 284fa7767c5Sopenharmony_ci {Tag::AUDIO_OUTPUT_CHANNELS, defaultInt32}, 285fa7767c5Sopenharmony_ci {Tag::AUDIO_MPEG_VERSION, defaultInt32}, 286fa7767c5Sopenharmony_ci {Tag::AUDIO_MPEG_LAYER, defaultInt32}, 287fa7767c5Sopenharmony_ci {Tag::AUDIO_AAC_LEVEL, defaultInt32}, 288fa7767c5Sopenharmony_ci {Tag::AUDIO_OBJECT_NUMBER, defaultInt32}, 289fa7767c5Sopenharmony_ci {Tag::AUDIO_MAX_INPUT_SIZE, defaultInt32}, 290fa7767c5Sopenharmony_ci {Tag::AUDIO_MAX_OUTPUT_SIZE, defaultInt32}, 291fa7767c5Sopenharmony_ci {Tag::VIDEO_WIDTH, defaultInt32}, 292fa7767c5Sopenharmony_ci {Tag::VIDEO_HEIGHT, defaultInt32}, 293fa7767c5Sopenharmony_ci {Tag::VIDEO_DELAY, defaultInt32}, 294fa7767c5Sopenharmony_ci {Tag::VIDEO_MAX_SURFACE_NUM, defaultInt32}, 295fa7767c5Sopenharmony_ci {Tag::VIDEO_H264_LEVEL, defaultInt32}, 296fa7767c5Sopenharmony_ci {Tag::MEDIA_TRACK_COUNT, defaultInt32}, 297fa7767c5Sopenharmony_ci {Tag::AUDIO_AAC_IS_ADTS, defaultInt32}, 298fa7767c5Sopenharmony_ci {Tag::AUDIO_COMPRESSION_LEVEL, defaultInt32}, 299fa7767c5Sopenharmony_ci {Tag::AUDIO_BITS_PER_CODED_SAMPLE, defaultInt32}, 300fa7767c5Sopenharmony_ci {Tag::AUDIO_BITS_PER_RAW_SAMPLE, defaultInt32}, 301fa7767c5Sopenharmony_ci {Tag::REGULAR_TRACK_ID, defaultInt32}, 302fa7767c5Sopenharmony_ci {Tag::VIDEO_SCALE_TYPE, defaultInt32}, 303fa7767c5Sopenharmony_ci {Tag::VIDEO_I_FRAME_INTERVAL, defaultInt32}, 304fa7767c5Sopenharmony_ci {Tag::MEDIA_PROFILE, defaultInt32}, 305fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODE_QUALITY, defaultInt32}, 306fa7767c5Sopenharmony_ci {Tag::AUDIO_AAC_SBR, defaultInt32}, 307fa7767c5Sopenharmony_ci {Tag::AUDIO_FLAC_COMPLIANCE_LEVEL, defaultInt32}, 308fa7767c5Sopenharmony_ci {Tag::MEDIA_LEVEL, defaultInt32}, 309fa7767c5Sopenharmony_ci {Tag::VIDEO_STRIDE, defaultInt32}, 310fa7767c5Sopenharmony_ci {Tag::VIDEO_DISPLAY_WIDTH, defaultInt32}, 311fa7767c5Sopenharmony_ci {Tag::VIDEO_DISPLAY_HEIGHT, defaultInt32}, 312fa7767c5Sopenharmony_ci {Tag::VIDEO_PIC_WIDTH, defaultInt32}, 313fa7767c5Sopenharmony_ci {Tag::VIDEO_PIC_HEIGHT, defaultInt32}, 314fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_TEMPORAL_GOP_SIZE, defaultInt32}, 315fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_LTR_FRAME_COUNT, defaultInt32}, 316fa7767c5Sopenharmony_ci {Tag::VIDEO_PER_FRAME_POC, defaultInt32}, 317fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_PER_FRAME_USE_LTR, defaultInt32}, 318fa7767c5Sopenharmony_ci {Tag::VIDEO_CROP_TOP, defaultInt32}, 319fa7767c5Sopenharmony_ci {Tag::VIDEO_CROP_BOTTOM, defaultInt32}, 320fa7767c5Sopenharmony_ci {Tag::VIDEO_CROP_LEFT, defaultInt32}, 321fa7767c5Sopenharmony_ci {Tag::VIDEO_CROP_RIGHT, defaultInt32}, 322fa7767c5Sopenharmony_ci {Tag::VIDEO_SLICE_HEIGHT, defaultInt32}, 323fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_QP_MAX, defaultInt32}, 324fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_QP_MIN, defaultInt32}, 325fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_QP_START, defaultInt32}, 326fa7767c5Sopenharmony_ci {Tag::FEATURE_PROPERTY_VIDEO_ENCODER_MAX_LTR_FRAME_COUNT, defaultInt32}, 327fa7767c5Sopenharmony_ci {Tag::OH_MD_KEY_AUDIO_OBJECT_NUMBER, defaultInt32}, 328fa7767c5Sopenharmony_ci {Tag::AV_CODEC_CALLER_PID, defaultInt32}, 329fa7767c5Sopenharmony_ci {Tag::AV_CODEC_CALLER_UID, defaultInt32}, 330fa7767c5Sopenharmony_ci {Tag::AV_CODEC_FORWARD_CALLER_PID, defaultInt32}, 331fa7767c5Sopenharmony_ci {Tag::AV_CODEC_FORWARD_CALLER_UID, defaultInt32}, 332fa7767c5Sopenharmony_ci {Tag::VIDEO_DECODER_RATE_UPPER_LIMIT, defaultInt32}, 333fa7767c5Sopenharmony_ci {Tag::SCREEN_CAPTURE_ERR_CODE, defaultInt32}, 334fa7767c5Sopenharmony_ci {Tag::SCREEN_CAPTURE_DURATION, defaultInt32}, 335fa7767c5Sopenharmony_ci {Tag::SCREEN_CAPTURE_START_LATENCY, defaultInt32}, 336fa7767c5Sopenharmony_ci {Tag::DRM_ERROR_CODE, defaultInt32}, 337fa7767c5Sopenharmony_ci {Tag::RECORDER_ERR_CODE, defaultInt32}, 338fa7767c5Sopenharmony_ci {Tag::RECORDER_DURATION, defaultInt32}, 339fa7767c5Sopenharmony_ci {Tag::RECORDER_VIDEO_BITRATE, defaultInt32}, 340fa7767c5Sopenharmony_ci {Tag::RECORDER_AUDIO_SAMPLE_RATE, defaultInt32}, 341fa7767c5Sopenharmony_ci {Tag::RECORDER_AUDIO_CHANNEL_COUNT, defaultInt32}, 342fa7767c5Sopenharmony_ci {Tag::RECORDER_AUDIO_BITRATE, defaultInt32}, 343fa7767c5Sopenharmony_ci {Tag::RECORDER_START_LATENCY, defaultInt32}, 344fa7767c5Sopenharmony_ci {Tag::TIMED_METADATA_SRC_TRACK, defaultInt32}, 345fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_FRAME_I_RATIO, defaultInt32}, 346fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_FRAME_MADI, defaultInt32}, 347fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_FRAME_MADP, defaultInt32}, 348fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_SUM_MADI, defaultInt32}, 349fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_REAL_BITRATE, defaultInt32}, 350fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_FRAME_QP, defaultInt32}, 351fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_QP_AVERAGE, defaultInt32}, 352fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_FRAME_TEMPORAL_ID, defaultInt32}, 353fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_ERR_CODE, defaultInt32}, 354fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_PLAY_DURATION, defaultInt32}, 355fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_SOURCE_TYPE, defaultInt32}, 356fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_AVG_DOWNLOAD_RATE, defaultInt32}, 357fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_VIDEO_BITRATE, defaultInt32}, 358fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_AUDIO_BITRATE, defaultInt32}, 359fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_START_LATENCY, defaultInt32}, 360fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_AVG_DOWNLOAD_SPEED, defaultInt32}, 361fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_MAX_SEEK_LATENCY, defaultInt32}, 362fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_MAX_ACCURATE_SEEK_LATENCY, defaultInt32}, 363fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_LAG_TIMES, defaultInt32}, 364fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_MAX_LAG_DURATION, defaultInt32}, 365fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_AVG_LAG_DURATION, defaultInt32}, 366fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_MAX_SURFACESWAP_LATENCY, defaultInt32}, 367fa7767c5Sopenharmony_ci {Tag::VIDEO_COORDINATE_X, defaultInt32}, 368fa7767c5Sopenharmony_ci {Tag::VIDEO_COORDINATE_Y, defaultInt32}, 369fa7767c5Sopenharmony_ci {Tag::VIDEO_COORDINATE_W, defaultInt32}, 370fa7767c5Sopenharmony_ci {Tag::VIDEO_COORDINATE_H, defaultInt32}, 371fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_REPEAT_PREVIOUS_FRAME_AFTER, defaultInt32}, 372fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_REPEAT_PREVIOUS_MAX_COUNT, defaultInt32}, 373fa7767c5Sopenharmony_ci {Tag::VIDEO_DECODER_OUTPUT_COLOR_SPACE, defaultInt32}, 374fa7767c5Sopenharmony_ci {Tag::VIDEO_DECODER_ENABLE_VRR, defaultInt32}, 375fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_ERR_CODE, defaultInt32}, 376fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_SOURCE_DURATION, defaultInt32}, 377fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_TRANSCODER_DURATION, defaultInt32}, 378fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_SRC_VIDEO_BITRATE, defaultInt32}, 379fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_SRC_HDR_TYPE, defaultInt32}, 380fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_SRC_AUDIO_SAMPLE_RATE, defaultInt32}, 381fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_SRC_AUDIO_CHANNEL_COUNT, defaultInt32}, 382fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_SRC_AUDIO_BITRATE, defaultInt32}, 383fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_DST_VIDEO_BITRATE, defaultInt32}, 384fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_DST_HDR_TYPE, defaultInt32}, 385fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_DST_AUDIO_SAMPLE_RATE, defaultInt32}, 386fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_DST_AUDIO_CHANNEL_COUNT, defaultInt32}, 387fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_DST_AUDIO_BITRATE, defaultInt32}, 388fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_VIDEO_DECODER_DURATION, defaultInt32}, 389fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_VIDEO_ENCODER_DURATION, defaultInt32}, 390fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_VIDEO_VPE_DURATION, defaultInt32}, 391fa7767c5Sopenharmony_ci // String 392fa7767c5Sopenharmony_ci {Tag::MIME_TYPE, defaultString}, 393fa7767c5Sopenharmony_ci {Tag::MEDIA_FILE_URI, defaultString}, 394fa7767c5Sopenharmony_ci {Tag::MEDIA_TITLE, defaultString}, 395fa7767c5Sopenharmony_ci {Tag::MEDIA_ARTIST, defaultString}, 396fa7767c5Sopenharmony_ci {Tag::MEDIA_LYRICIST, defaultString}, 397fa7767c5Sopenharmony_ci {Tag::MEDIA_ALBUM, defaultString}, 398fa7767c5Sopenharmony_ci {Tag::MEDIA_ALBUM_ARTIST, defaultString}, 399fa7767c5Sopenharmony_ci {Tag::MEDIA_DATE, defaultString}, 400fa7767c5Sopenharmony_ci {Tag::MEDIA_COMMENT, defaultString}, 401fa7767c5Sopenharmony_ci {Tag::MEDIA_GENRE, defaultString}, 402fa7767c5Sopenharmony_ci {Tag::MEDIA_COPYRIGHT, defaultString}, 403fa7767c5Sopenharmony_ci {Tag::MEDIA_LANGUAGE, defaultString}, 404fa7767c5Sopenharmony_ci {Tag::MEDIA_DESCRIPTION, defaultString}, 405fa7767c5Sopenharmony_ci {Tag::USER_TIME_SYNC_RESULT, defaultString}, 406fa7767c5Sopenharmony_ci {Tag::USER_AV_SYNC_GROUP_INFO, defaultString}, 407fa7767c5Sopenharmony_ci {Tag::USER_SHARED_MEMORY_FD, defaultString}, 408fa7767c5Sopenharmony_ci {Tag::MEDIA_AUTHOR, defaultString}, 409fa7767c5Sopenharmony_ci {Tag::MEDIA_COMPOSER, defaultString}, 410fa7767c5Sopenharmony_ci {Tag::MEDIA_LYRICS, defaultString}, 411fa7767c5Sopenharmony_ci {Tag::MEDIA_CODEC_NAME, defaultString}, 412fa7767c5Sopenharmony_ci {Tag::PROCESS_NAME, defaultString}, 413fa7767c5Sopenharmony_ci {Tag::MEDIA_CREATION_TIME, defaultString}, 414fa7767c5Sopenharmony_ci {Tag::AV_CODEC_CALLER_PROCESS_NAME, defaultString}, 415fa7767c5Sopenharmony_ci {Tag::AV_CODEC_FORWARD_CALLER_PROCESS_NAME, defaultString}, 416fa7767c5Sopenharmony_ci {Tag::SCREEN_CAPTURE_ERR_MSG, defaultString}, 417fa7767c5Sopenharmony_ci {Tag::SCREEN_CAPTURE_VIDEO_RESOLUTION, defaultString}, 418fa7767c5Sopenharmony_ci {Tag::DRM_APP_NAME, defaultString}, 419fa7767c5Sopenharmony_ci {Tag::DRM_INSTANCE_ID, defaultString}, 420fa7767c5Sopenharmony_ci {Tag::DRM_ERROR_MESG, defaultString}, 421fa7767c5Sopenharmony_ci {Tag::TIMED_METADATA_SRC_TRACK_MIME, defaultString}, 422fa7767c5Sopenharmony_ci {Tag::TIMED_METADATA_KEY, defaultString}, 423fa7767c5Sopenharmony_ci {Tag::TIMED_METADATA_LOCALE, defaultString}, 424fa7767c5Sopenharmony_ci {Tag::TIMED_METADATA_SETUP, defaultString}, 425fa7767c5Sopenharmony_ci {Tag::RECORDER_ERR_MSG, defaultString}, 426fa7767c5Sopenharmony_ci {Tag::RECORDER_CONTAINER_MIME, defaultString}, 427fa7767c5Sopenharmony_ci {Tag::RECORDER_VIDEO_MIME, defaultString}, 428fa7767c5Sopenharmony_ci {Tag::RECORDER_VIDEO_RESOLUTION, defaultString}, 429fa7767c5Sopenharmony_ci {Tag::RECORDER_AUDIO_MIME, defaultString}, 430fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_ERR_MSG, defaultString}, 431fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_CONTAINER_MIME, defaultString}, 432fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_VIDEO_MIME, defaultString}, 433fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_VIDEO_RESOLUTION, defaultString}, 434fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_AUDIO_MIME, defaultString}, 435fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_ERR_MSG, defaultString}, 436fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_SRC_FORMAT, defaultString}, 437fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_SRC_AUDIO_MIME, defaultString}, 438fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_SRC_VIDEO_MIME, defaultString}, 439fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_DST_FORMAT, defaultString}, 440fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_DST_AUDIO_MIME, defaultString}, 441fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_DST_VIDEO_MIME, defaultString}, 442fa7767c5Sopenharmony_ci // Float 443fa7767c5Sopenharmony_ci {Tag::MEDIA_LATITUDE, defaultFloat}, 444fa7767c5Sopenharmony_ci {Tag::MEDIA_LONGITUDE, defaultFloat}, 445fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_VIDEO_FRAMERATE, defaultFloat}, 446fa7767c5Sopenharmony_ci // Double 447fa7767c5Sopenharmony_ci {Tag::VIDEO_CAPTURE_RATE, defaultDouble}, 448fa7767c5Sopenharmony_ci {Tag::VIDEO_FRAME_RATE, defaultDouble}, 449fa7767c5Sopenharmony_ci {Tag::VIDEO_SAR, defaultDouble}, 450fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_MSE, defaultDouble}, 451fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_SRC_VIDEO_FRAME_RATE, defaultDouble}, 452fa7767c5Sopenharmony_ci {Tag::AV_TRANSCODER_DST_VIDEO_FRAME_RATE, defaultDouble}, 453fa7767c5Sopenharmony_ci // Bool 454fa7767c5Sopenharmony_ci {Tag::VIDEO_COLOR_RANGE, defaultBool}, 455fa7767c5Sopenharmony_ci {Tag::VIDEO_REQUEST_I_FRAME, defaultBool}, 456fa7767c5Sopenharmony_ci {Tag::VIDEO_IS_HDR_VIVID, defaultBool}, 457fa7767c5Sopenharmony_ci {Tag::MEDIA_HAS_VIDEO, defaultBool}, 458fa7767c5Sopenharmony_ci {Tag::MEDIA_HAS_AUDIO, defaultBool}, 459fa7767c5Sopenharmony_ci {Tag::MEDIA_HAS_SUBTITLE, defaultBool}, 460fa7767c5Sopenharmony_ci {Tag::MEDIA_HAS_TIMEDMETA, defaultBool}, 461fa7767c5Sopenharmony_ci {Tag::MEDIA_END_OF_STREAM, defaultBool}, 462fa7767c5Sopenharmony_ci {Tag::VIDEO_FRAME_RATE_ADAPTIVE_MODE, defaultBool}, 463fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_ENABLE_TEMPORAL_SCALABILITY, defaultBool}, 464fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_PER_FRAME_MARK_LTR, defaultBool}, 465fa7767c5Sopenharmony_ci {Tag::VIDEO_PER_FRAME_IS_LTR, defaultBool}, 466fa7767c5Sopenharmony_ci {Tag::VIDEO_PER_FRAME_IS_SKIP, defaultBool}, 467fa7767c5Sopenharmony_ci {Tag::VIDEO_ENABLE_LOW_LATENCY, defaultBool}, 468fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_ENABLE_SURFACE_INPUT_CALLBACK, defaultBool}, 469fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_ENABLE_PARAMS_FEEDBACK, defaultBool}, 470fa7767c5Sopenharmony_ci {Tag::VIDEO_BUFFER_CAN_DROP, defaultBool}, 471fa7767c5Sopenharmony_ci {Tag::AUDIO_RENDER_SET_FLAG, defaultBool}, 472fa7767c5Sopenharmony_ci {Tag::SCREEN_CAPTURE_USER_AGREE, defaultBool}, 473fa7767c5Sopenharmony_ci {Tag::SCREEN_CAPTURE_REQURE_MIC, defaultBool}, 474fa7767c5Sopenharmony_ci {Tag::SCREEN_CAPTURE_ENABLE_MIC, defaultBool}, 475fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_IS_DRM_PROTECTED, defaultBool}, 476fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_DOWNLOAD_TIME_OUT, defaultBool}, 477fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_PER_FRAME_DISCARD, defaultBool}, 478fa7767c5Sopenharmony_ci {Tag::VIDEO_ENCODER_ENABLE_WATERMARK, defaultBool}, 479fa7767c5Sopenharmony_ci // Int64 480fa7767c5Sopenharmony_ci {Tag::MEDIA_FILE_SIZE, defaultUInt64}, 481fa7767c5Sopenharmony_ci {Tag::MEDIA_POSITION, defaultUInt64}, 482fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_DOWNLOAD_TOTAL_BITS, defaultUInt64}, 483fa7767c5Sopenharmony_ci {Tag::APP_FULL_TOKEN_ID, defaultInt64}, 484fa7767c5Sopenharmony_ci {Tag::MEDIA_DURATION, defaultInt64}, 485fa7767c5Sopenharmony_ci {Tag::MEDIA_BITRATE, defaultInt64}, 486fa7767c5Sopenharmony_ci {Tag::MEDIA_START_TIME, defaultInt64}, 487fa7767c5Sopenharmony_ci {Tag::USER_FRAME_PTS, defaultInt64}, 488fa7767c5Sopenharmony_ci {Tag::USER_PUSH_DATA_TIME, defaultInt64}, 489fa7767c5Sopenharmony_ci {Tag::MEDIA_TIME_STAMP, defaultInt64}, 490fa7767c5Sopenharmony_ci {Tag::MEDIA_CONTAINER_START_TIME, defaultInt64}, 491fa7767c5Sopenharmony_ci {Tag::BUFFER_DECODING_TIMESTAMP, defaultInt64}, 492fa7767c5Sopenharmony_ci {Tag::BUFFER_DURATION, defaultInt64}, 493fa7767c5Sopenharmony_ci {Tag::VIDEO_DECODER_DESIRED_PRESENT_TIMESTAMP, defaultInt64}, 494fa7767c5Sopenharmony_ci // AudioChannelLayout UINT64_T 495fa7767c5Sopenharmony_ci {Tag::AUDIO_CHANNEL_LAYOUT, defaultAudioChannelLayout}, 496fa7767c5Sopenharmony_ci {Tag::AUDIO_OUTPUT_CHANNEL_LAYOUT, defaultAudioChannelLayout}, 497fa7767c5Sopenharmony_ci // AudioAacProfile UInt8 498fa7767c5Sopenharmony_ci {Tag::AUDIO_AAC_PROFILE, defaultAudioAacProfile}, 499fa7767c5Sopenharmony_ci // AudioAacStreamFormat UInt8 500fa7767c5Sopenharmony_ci {Tag::AUDIO_AAC_STREAM_FORMAT, defaultAudioAacStreamFormat}, 501fa7767c5Sopenharmony_ci // vector<uint8_t> 502fa7767c5Sopenharmony_ci {Tag::MEDIA_CODEC_CONFIG, defaultVectorUInt8}, 503fa7767c5Sopenharmony_ci {Tag::AUDIO_VIVID_METADATA, defaultVectorUInt8}, 504fa7767c5Sopenharmony_ci {Tag::MEDIA_COVER, defaultVectorUInt8}, 505fa7767c5Sopenharmony_ci {Tag::AUDIO_VORBIS_IDENTIFICATION_HEADER, defaultVectorUInt8}, 506fa7767c5Sopenharmony_ci {Tag::AUDIO_VORBIS_SETUP_HEADER, defaultVectorUInt8}, 507fa7767c5Sopenharmony_ci {Tag::OH_MD_KEY_AUDIO_VIVID_METADATA, defaultVectorUInt8}, 508fa7767c5Sopenharmony_ci // vector<Plugins::VideoBitStreamFormat> 509fa7767c5Sopenharmony_ci {Tag::VIDEO_BIT_STREAM_FORMAT, defaultVectorVideoBitStreamFormat}, 510fa7767c5Sopenharmony_ci // vector<uint8_t> 511fa7767c5Sopenharmony_ci {Tag::DRM_CENC_INFO, defaultVectorUInt8}, 512fa7767c5Sopenharmony_ci {Tag::MEDIA_AVAILABLE_BITRATES, defaultVectorUInt8}, 513fa7767c5Sopenharmony_ci // Uint32 514fa7767c5Sopenharmony_ci {Tag::DRM_DECRYPT_AVG_SIZE, defaultUInt32}, 515fa7767c5Sopenharmony_ci {Tag::DRM_DECRYPT_AVG_DURATION, defaultUInt32}, 516fa7767c5Sopenharmony_ci {Tag::DRM_DECRYPT_MAX_SIZE, defaultUInt32}, 517fa7767c5Sopenharmony_ci {Tag::DRM_DECRYPT_MAX_DURATION, defaultUInt32}, 518fa7767c5Sopenharmony_ci {Tag::DRM_DECRYPT_TIMES, defaultUInt32}, 519fa7767c5Sopenharmony_ci //int8 520fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_VIDEO_BITDEPTH, defaultInt8}, 521fa7767c5Sopenharmony_ci {Tag::AV_PLAYER_HDR_TYPE, defaultInt8}, 522fa7767c5Sopenharmony_ci}; 523fa7767c5Sopenharmony_ci 524fa7767c5Sopenharmony_cistatic std::map<AnyValueType, const Any &> g_ValueTypeDefaultValueMap = { 525fa7767c5Sopenharmony_ci {AnyValueType::INVALID_TYPE, defaultString}, 526fa7767c5Sopenharmony_ci {AnyValueType::BOOL, defaultBool}, 527fa7767c5Sopenharmony_ci {AnyValueType::UINT8_T, defaultUInt8}, 528fa7767c5Sopenharmony_ci {AnyValueType::INT32_T, defaultInt32}, 529fa7767c5Sopenharmony_ci {AnyValueType::UINT32_T, defaultUInt32}, 530fa7767c5Sopenharmony_ci {AnyValueType::INT64_T, defaultInt64}, 531fa7767c5Sopenharmony_ci {AnyValueType::UINT64_T, defaultUInt64}, 532fa7767c5Sopenharmony_ci {AnyValueType::FLOAT, defaultFloat}, 533fa7767c5Sopenharmony_ci {AnyValueType::DOUBLE, defaultDouble}, 534fa7767c5Sopenharmony_ci {AnyValueType::VECTOR_UINT8, defaultVectorUInt8}, 535fa7767c5Sopenharmony_ci {AnyValueType::VECTOR_UINT32, defaultVectorUInt32}, 536fa7767c5Sopenharmony_ci {AnyValueType::STRING, defaultString}, 537fa7767c5Sopenharmony_ci}; 538fa7767c5Sopenharmony_ci 539fa7767c5Sopenharmony_ciAny GetDefaultAnyValue(const TagType& tag) 540fa7767c5Sopenharmony_ci{ 541fa7767c5Sopenharmony_ci auto iter = g_metadataDefaultValueMap.find(tag); 542fa7767c5Sopenharmony_ci FALSE_RETURN_V(iter != g_metadataDefaultValueMap.end(), defaultString); 543fa7767c5Sopenharmony_ci return iter->second; 544fa7767c5Sopenharmony_ci} 545fa7767c5Sopenharmony_ci 546fa7767c5Sopenharmony_cistd::optional<Any> GetDefaultAnyValueOpt(const TagType &tag) 547fa7767c5Sopenharmony_ci{ 548fa7767c5Sopenharmony_ci auto iter = g_metadataDefaultValueMap.find(tag); 549fa7767c5Sopenharmony_ci if (iter == g_metadataDefaultValueMap.end()) { 550fa7767c5Sopenharmony_ci return std::nullopt; 551fa7767c5Sopenharmony_ci } 552fa7767c5Sopenharmony_ci return iter->second; 553fa7767c5Sopenharmony_ci} 554fa7767c5Sopenharmony_ci 555fa7767c5Sopenharmony_ciAny GetDefaultAnyValue(const TagType &tag, AnyValueType type) 556fa7767c5Sopenharmony_ci{ 557fa7767c5Sopenharmony_ci auto iter = g_metadataDefaultValueMap.find(tag); 558fa7767c5Sopenharmony_ci if (iter == g_metadataDefaultValueMap.end()) { 559fa7767c5Sopenharmony_ci auto typeIter = g_ValueTypeDefaultValueMap.find(type); 560fa7767c5Sopenharmony_ci if (typeIter != g_ValueTypeDefaultValueMap.end()) { 561fa7767c5Sopenharmony_ci return typeIter->second; 562fa7767c5Sopenharmony_ci } else { 563fa7767c5Sopenharmony_ci return defaultString; //Default String type 564fa7767c5Sopenharmony_ci } 565fa7767c5Sopenharmony_ci } 566fa7767c5Sopenharmony_ci return iter->second; 567fa7767c5Sopenharmony_ci} 568fa7767c5Sopenharmony_ci 569fa7767c5Sopenharmony_ciAnyValueType Meta::GetValueType(const TagType& key) const 570fa7767c5Sopenharmony_ci{ 571fa7767c5Sopenharmony_ci auto iter = map_.find(key); 572fa7767c5Sopenharmony_ci if (iter != map_.end()) { 573fa7767c5Sopenharmony_ci if (Any::IsSameTypeWith<int32_t>(iter->second)) { 574fa7767c5Sopenharmony_ci return AnyValueType::INT32_T; 575fa7767c5Sopenharmony_ci } else if (Any::IsSameTypeWith<bool>(iter->second)) { 576fa7767c5Sopenharmony_ci return AnyValueType::BOOL; 577fa7767c5Sopenharmony_ci } else if (Any::IsSameTypeWith<int64_t>(iter->second)) { 578fa7767c5Sopenharmony_ci return AnyValueType::INT64_T; 579fa7767c5Sopenharmony_ci } else if (Any::IsSameTypeWith<float>(iter->second)) { 580fa7767c5Sopenharmony_ci return AnyValueType::FLOAT; 581fa7767c5Sopenharmony_ci } else if (Any::IsSameTypeWith<double>(iter->second)) { 582fa7767c5Sopenharmony_ci return AnyValueType::DOUBLE; 583fa7767c5Sopenharmony_ci } else if (Any::IsSameTypeWith<std::vector<uint8_t>>(iter->second)) { 584fa7767c5Sopenharmony_ci return AnyValueType::VECTOR_UINT8; 585fa7767c5Sopenharmony_ci } else if (Any::IsSameTypeWith<std::string>(iter->second)) { 586fa7767c5Sopenharmony_ci return AnyValueType::STRING; 587fa7767c5Sopenharmony_ci } else { 588fa7767c5Sopenharmony_ci auto iter = g_metadataGetterSetterInt64Map.find(key); 589fa7767c5Sopenharmony_ci if (iter == g_metadataGetterSetterInt64Map.end()) { 590fa7767c5Sopenharmony_ci return AnyValueType::INT32_T; 591fa7767c5Sopenharmony_ci } else { 592fa7767c5Sopenharmony_ci return AnyValueType::INT64_T; 593fa7767c5Sopenharmony_ci } 594fa7767c5Sopenharmony_ci } 595fa7767c5Sopenharmony_ci } 596fa7767c5Sopenharmony_ci return AnyValueType::INVALID_TYPE; 597fa7767c5Sopenharmony_ci} 598fa7767c5Sopenharmony_ci 599fa7767c5Sopenharmony_cibool Meta::ToParcel(MessageParcel &parcel) const 600fa7767c5Sopenharmony_ci{ 601fa7767c5Sopenharmony_ci MessageParcel metaParcel; 602fa7767c5Sopenharmony_ci int32_t metaSize = 0; 603fa7767c5Sopenharmony_ci bool ret = true; 604fa7767c5Sopenharmony_ci for (auto iter = begin(); iter != end(); ++iter) { 605fa7767c5Sopenharmony_ci ++metaSize; 606fa7767c5Sopenharmony_ci ret &= metaParcel.WriteString(iter->first); 607fa7767c5Sopenharmony_ci ret &= metaParcel.WriteInt32(static_cast<int32_t>(GetValueType(iter->first))); 608fa7767c5Sopenharmony_ci ret &= iter->second.ToParcel(metaParcel); 609fa7767c5Sopenharmony_ci if (!ret) { 610fa7767c5Sopenharmony_ci MEDIA_LOG_E("fail to Marshalling Key: " PUBLIC_LOG_S, iter->first.c_str()); 611fa7767c5Sopenharmony_ci return false; 612fa7767c5Sopenharmony_ci } 613fa7767c5Sopenharmony_ci } 614fa7767c5Sopenharmony_ci if (ret) { 615fa7767c5Sopenharmony_ci ret = ret && parcel.WriteInt32(metaSize); 616fa7767c5Sopenharmony_ci if (metaSize != 0) { 617fa7767c5Sopenharmony_ci ret = ret && parcel.Append(metaParcel); 618fa7767c5Sopenharmony_ci } 619fa7767c5Sopenharmony_ci } 620fa7767c5Sopenharmony_ci return ret; 621fa7767c5Sopenharmony_ci} 622fa7767c5Sopenharmony_ci 623fa7767c5Sopenharmony_cibool Meta::FromParcel(MessageParcel &parcel) 624fa7767c5Sopenharmony_ci{ 625fa7767c5Sopenharmony_ci map_.clear(); 626fa7767c5Sopenharmony_ci int32_t size = parcel.ReadInt32(); 627fa7767c5Sopenharmony_ci if (size < 0 || static_cast<size_t>(size) > parcel.GetRawDataCapacity()) { 628fa7767c5Sopenharmony_ci MEDIA_LOG_E("fail to Unmarshalling size: %{public}d", size); 629fa7767c5Sopenharmony_ci return false; 630fa7767c5Sopenharmony_ci } 631fa7767c5Sopenharmony_ci 632fa7767c5Sopenharmony_ci for (int32_t index = 0; index < size; index++) { 633fa7767c5Sopenharmony_ci std::string key = parcel.ReadString(); 634fa7767c5Sopenharmony_ci AnyValueType type = static_cast<AnyValueType>(parcel.ReadInt32()); 635fa7767c5Sopenharmony_ci Any value = GetDefaultAnyValue(key, type); //Init Default Value 636fa7767c5Sopenharmony_ci if (value.FromParcel(parcel)) { 637fa7767c5Sopenharmony_ci map_[key] = value; 638fa7767c5Sopenharmony_ci } else { 639fa7767c5Sopenharmony_ci MEDIA_LOG_E("fail to Unmarshalling Key: %{public}s", key.c_str()); 640fa7767c5Sopenharmony_ci return false; 641fa7767c5Sopenharmony_ci } 642fa7767c5Sopenharmony_ci } 643fa7767c5Sopenharmony_ci return true; 644fa7767c5Sopenharmony_ci} 645fa7767c5Sopenharmony_ci} 646fa7767c5Sopenharmony_ci} // namespace OHOS