1 /*
2 * Copyright (c) 2025 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
16 #include "tlv_utils.h"
17
18 #include "pasteboard_hilog.h"
19
20 namespace OHOS::MiscServices {
Parcelable2Raw(const Parcelable * value)21 RawMem TLVUtils::Parcelable2Raw(const Parcelable *value)
22 {
23 RawMem rawMem{};
24 if (value == nullptr) {
25 return rawMem;
26 }
27
28 rawMem.parcel = std::make_shared<Parcel>(nullptr);
29 bool ret = value->Marshalling(*rawMem.parcel);
30 PASTEBOARD_CHECK_AND_RETURN_RET_LOGE(ret, rawMem, PASTEBOARD_MODULE_COMMON, "Marshalling failed");
31
32 rawMem.buffer = rawMem.parcel->GetData();
33 rawMem.bufferLen = rawMem.parcel->GetDataSize();
34 return rawMem;
35 }
36
Raw2Parcel(const RawMem & rawMem,Parcel & parcel)37 bool TLVUtils::Raw2Parcel(const RawMem &rawMem, Parcel &parcel)
38 {
39 if (rawMem.buffer == 0 || rawMem.bufferLen == 0) {
40 return false;
41 }
42 auto *temp = malloc(rawMem.bufferLen); // free by Parcel!
43 if (temp == nullptr) {
44 return false;
45 }
46 auto err = memcpy_s(temp, rawMem.bufferLen, reinterpret_cast<const void *>(rawMem.buffer), rawMem.bufferLen);
47 if (err != EOK) {
48 free(temp);
49 return false;
50 }
51 bool ret = parcel.ParseFrom(reinterpret_cast<uintptr_t>(temp), rawMem.bufferLen);
52 if (!ret) {
53 free(temp);
54 return false;
55 }
56 return true;
57 }
58
Vector2PixelMap(std::vector<std::uint8_t> & value)59 std::shared_ptr<Media::PixelMap> TLVUtils::Vector2PixelMap(std::vector<std::uint8_t> &value)
60 {
61 return value.empty() ? nullptr : std::shared_ptr<Media::PixelMap>(Media::PixelMap::DecodeTlv(value));
62 }
63
PixelMap2Vector(std::shared_ptr<Media::PixelMap> pixelMap)64 std::vector<std::uint8_t> TLVUtils::PixelMap2Vector(std::shared_ptr<Media::PixelMap> pixelMap)
65 {
66 if (pixelMap == nullptr) {
67 return {};
68 }
69
70 std::vector<std::uint8_t> value;
71 bool ret = pixelMap->EncodeTlv(value);
72 PASTEBOARD_CHECK_AND_RETURN_RET_LOGE(ret, {}, PASTEBOARD_MODULE_COMMON, "EncodeTlv failed");
73
74 return value;
75 }
76 } // namespace OHOS::MiscServices
77