1 /* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 #ifndef OHOS_AVCALL_META_DATA_H 16 #define OHOS_AVCALL_META_DATA_H 17 18 #include <bitset> 19 #include <memory> 20 #include <string> 21 #include <map> 22 23 #include "parcel.h" 24 #include "avsession_pixel_map.h" 25 26 #ifndef WINDOWS_PLATFORM 27 #ifndef MAC_PLATFORM 28 #ifndef IOS_PLATFORM 29 #include <malloc.h> 30 #endif 31 #endif 32 #endif 33 34 namespace OHOS::AVSession { 35 class AVCallMetaData : public Parcelable { 36 public: 37 enum { 38 AVCALL_META_KEY_NAME = 0, 39 AVCALL_META_KEY_PHONE_NUMBER = 1, 40 AVCALL_META_KEY_MEDIA_IMAGE = 2, 41 AVCALL_META_KEY_MEDIA_IMAGE_URI = 3, 42 AVCALL_META_KEY_MAX = 4 43 }; 44 45 using AVCallMetaMaskType = std::bitset<AVCALL_META_KEY_MAX>; 46 47 AVCallMetaData() = default; 48 ~AVCallMetaData() = default; 49 50 static AVCallMetaData* Unmarshalling(Parcel& data); 51 bool Marshalling(Parcel& parcel) const override; 52 53 void SetName(const std::string& assetId); 54 std::string GetName() const; 55 56 void SetPhoneNumber(const std::string& title); 57 std::string GetPhoneNumber() const; 58 59 void SetMediaImage(const std::shared_ptr<AVSessionPixelMap>& mediaImage); 60 std::shared_ptr<AVSessionPixelMap> GetMediaImage() const; 61 62 void SetMediaImageUri(const std::string& mediaImageUri); 63 std::string GetMediaImageUri() const; 64 65 void Reset(); 66 67 AVCallMetaMaskType GetAVCallMetaMask() const; 68 69 bool CopyToByMask(AVCallMetaMaskType& mask, AVCallMetaData& metaOut) const; 70 bool CopyFrom(const AVCallMetaData& metaIn); 71 72 bool IsValid() const; 73 74 const static inline std::vector<int32_t> localCapability { 75 AVCALL_META_KEY_NAME, 76 AVCALL_META_KEY_PHONE_NUMBER, 77 AVCALL_META_KEY_MEDIA_IMAGE, 78 AVCALL_META_KEY_MEDIA_IMAGE_URI 79 }; 80 81 private: 82 AVCallMetaMaskType callMetaMask_; 83 84 std::string name_ = ""; 85 std::string phoneNumber_ = ""; 86 std::shared_ptr<AVSessionPixelMap> mediaImage_ = nullptr; 87 std::string mediaImageUri_ = ""; 88 89 static void CloneName(const AVCallMetaData& from, AVCallMetaData& to); 90 static void ClonePhoneNumber(const AVCallMetaData& from, AVCallMetaData& to); 91 static void CloneMediaImage(const AVCallMetaData& from, AVCallMetaData& to); 92 static void CloneMediaImageUri(const AVCallMetaData& from, AVCallMetaData& to); 93 94 using CloneActionType = void(*)(const AVCallMetaData& from, AVCallMetaData& to); 95 static inline CloneActionType cloneActions[AVCALL_META_KEY_MAX] = { 96 &AVCallMetaData::CloneName, 97 &AVCallMetaData::ClonePhoneNumber, 98 &AVCallMetaData::CloneMediaImage, 99 &AVCallMetaData::CloneMediaImageUri 100 }; 101 }; 102 } // namespace OHOS::AVSession 103 #endif // OHOS_AVCALL_META_DATA_H 104