1 /* 2 * Copyright (C) 2024 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 "box/basic_box.h" 17 18 namespace OHOS { 19 namespace ImagePlugin { ParseContent(HeifStreamReader & reader)20heif_error HeifFtypBox::ParseContent(HeifStreamReader &reader) 21 { 22 majorBrand_ = reader.Read32(); 23 minorVersion_ = reader.Read32(); 24 25 // (box size - headersize - majorbrand bytes - minorversion bytes) / (compatibleBrand bytes) 26 uint64_t compatibleBrandNum = 27 (GetBoxSize() - GetHeaderSize() - UINT32_BYTES_NUM - UINT32_BYTES_NUM) / UINT32_BYTES_NUM; 28 for (uint64_t i = 0; i < compatibleBrandNum && !reader.HasError(); i++) { 29 compatibleBrands_.push_back(reader.Read32()); 30 } 31 return reader.GetError(); 32 } 33 Write(HeifStreamWriter & writer) const34heif_error HeifFtypBox::Write(HeifStreamWriter &writer) const 35 { 36 size_t boxStart = ReserveHeader(writer); 37 38 writer.Write32(majorBrand_); 39 writer.Write32(minorVersion_); 40 for (uint32_t b: compatibleBrands_) { 41 writer.Write32(b); 42 } 43 44 WriteCalculatedHeader(writer, boxStart); 45 return heif_error_ok; 46 } 47 ParseContent(HeifStreamReader & reader)48heif_error HeifMetaBox::ParseContent(HeifStreamReader &reader) 49 { 50 ParseFullHeader(reader); 51 return ReadChildren(reader); 52 } 53 ParseContent(HeifStreamReader & reader)54heif_error HeifHdlrBox::ParseContent(HeifStreamReader &reader) 55 { 56 ParseFullHeader(reader); 57 isPreDefined_ = reader.Read32(); 58 handlerType_ = reader.Read32(); 59 for (int i = 0; i < HDLR_BOX_RESERVED_SIZE; i++) { 60 reserved_[i] = reader.Read32(); 61 } 62 name_ = reader.ReadString(); 63 return reader.GetError(); 64 } 65 Write(HeifStreamWriter & writer) const66heif_error HeifHdlrBox::Write(HeifStreamWriter &writer) const 67 { 68 size_t boxStart = ReserveHeader(writer); 69 70 writer.Write32(isPreDefined_); 71 writer.Write32(handlerType_); 72 for (uint32_t reservedValue : reserved_) { 73 writer.Write32(reservedValue); 74 } 75 writer.Write(name_); 76 77 WriteCalculatedHeader(writer, boxStart); 78 return heif_error_ok; 79 } 80 } // namespace ImagePlugin 81 } // namespace OHOS 82