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