• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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