1 /* 2 * Copyright 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef ANDROID_ULTRAHDR_MULTIPICTUREFORMAT_H 18 #define ANDROID_ULTRAHDR_MULTIPICTUREFORMAT_H 19 20 #include <ultrahdr/jpegrutils.h> 21 22 #ifdef USE_BIG_ENDIAN 23 #undef USE_BIG_ENDIAN 24 #define USE_BIG_ENDIAN true 25 #endif 26 27 namespace android::ultrahdr { 28 29 constexpr size_t kNumPictures = 2; 30 constexpr size_t kMpEndianSize = 4; 31 constexpr uint16_t kTagSerializedCount = 3; 32 constexpr uint32_t kTagSize = 12; 33 34 constexpr uint16_t kTypeLong = 0x4; 35 constexpr uint16_t kTypeUndefined = 0x7; 36 37 static constexpr uint8_t kMpfSig[] = {'M', 'P', 'F', '\0'}; 38 constexpr uint8_t kMpLittleEndian[kMpEndianSize] = {0x49, 0x49, 0x2A, 0x00}; 39 constexpr uint8_t kMpBigEndian[kMpEndianSize] = {0x4D, 0x4D, 0x00, 0x2A}; 40 41 constexpr uint16_t kVersionTag = 0xB000; 42 constexpr uint16_t kVersionType = kTypeUndefined; 43 constexpr uint32_t kVersionCount = 4; 44 constexpr size_t kVersionSize = 4; 45 constexpr uint8_t kVersionExpected[kVersionSize] = {'0', '1', '0', '0'}; 46 47 constexpr uint16_t kNumberOfImagesTag = 0xB001; 48 constexpr uint16_t kNumberOfImagesType = kTypeLong; 49 constexpr uint32_t kNumberOfImagesCount = 1; 50 51 constexpr uint16_t kMPEntryTag = 0xB002; 52 constexpr uint16_t kMPEntryType = kTypeUndefined; 53 constexpr uint32_t kMPEntrySize = 16; 54 55 constexpr uint32_t kMPEntryAttributeFormatJpeg = 0x0000000; 56 constexpr uint32_t kMPEntryAttributeTypePrimary = 0x030000; 57 58 size_t calculateMpfSize(); 59 sp<DataStruct> generateMpf(int primary_image_size, int primary_image_offset, 60 int secondary_image_size, int secondary_image_offset); 61 62 } // namespace android::ultrahdr 63 64 #endif //ANDROID_ULTRAHDR_MULTIPICTUREFORMAT_H 65