Coverage Report

Created: 2025-07-11 07:39

/src/libultrahdr/lib/include/ultrahdr/jpegrutils.h
Line
Count
Source (jump to first uncovered line)
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 ULTRAHDR_JPEGRUTILS_H
18
#define ULTRAHDR_JPEGRUTILS_H
19
20
#include "ultrahdr/jpegr.h"
21
22
// TODO (dichenzhang): This is old version metadata, new version can be found in
23
// https://drive.google.com/file/d/1yUGmjGytRuBa2vpr9eM5Uu8CVhyyddjp/view?resourcekey=0-HGzFrzPQzu5FNYLRAJXQBA
24
// and in gainmapmetadata.h/.cpp
25
// This file is kept in order to keep the backward compatibility.
26
namespace ultrahdr {
27
28
115k
static constexpr uint32_t EndianSwap32(uint32_t value) {
29
115k
  return ((value & 0xFF) << 24) | ((value & 0xFF00) << 8) | ((value & 0xFF0000) >> 8) |
30
115k
         (value >> 24);
31
115k
}
Unexecuted instantiation: ultrahdr_api.cpp:ultrahdr::EndianSwap32(unsigned int)
Unexecuted instantiation: jpegr.cpp:ultrahdr::EndianSwap32(unsigned int)
Unexecuted instantiation: jpegrutils.cpp:ultrahdr::EndianSwap32(unsigned int)
Unexecuted instantiation: multipictureformat.cpp:ultrahdr::EndianSwap32(unsigned int)
icc.cpp:ultrahdr::EndianSwap32(unsigned int)
Line
Count
Source
28
115k
static constexpr uint32_t EndianSwap32(uint32_t value) {
29
115k
  return ((value & 0xFF) << 24) | ((value & 0xFF00) << 8) | ((value & 0xFF0000) >> 8) |
30
115k
         (value >> 24);
31
115k
}
32
0
static inline uint16_t EndianSwap16(uint16_t value) {
33
0
  return static_cast<uint16_t>((value >> 8) | ((value & 0xFF) << 8));
34
0
}
Unexecuted instantiation: ultrahdr_api.cpp:ultrahdr::EndianSwap16(unsigned short)
Unexecuted instantiation: jpegr.cpp:ultrahdr::EndianSwap16(unsigned short)
Unexecuted instantiation: jpegrutils.cpp:ultrahdr::EndianSwap16(unsigned short)
Unexecuted instantiation: multipictureformat.cpp:ultrahdr::EndianSwap16(unsigned short)
Unexecuted instantiation: icc.cpp:ultrahdr::EndianSwap16(unsigned short)
35
36
/*
37
 * Mutable data structure. Holds information for metadata.
38
 */
39
class DataStruct {
40
 private:
41
  void* data;
42
  size_t writePos;
43
  size_t length;
44
45
 public:
46
  DataStruct(size_t s);
47
  ~DataStruct();
48
49
  void* getData();
50
  size_t getLength();
51
  size_t getBytesWritten();
52
  bool write8(uint8_t value);
53
  bool write16(uint16_t value);
54
  bool write32(uint32_t value);
55
  bool write(const void* src, size_t size);
56
};
57
58
/*
59
 * Helper function used for writing data to destination.
60
 *
61
 * @param destination destination of the data to be written.
62
 * @param source source of data being written.
63
 * @param length length of the data to be written.
64
 * @param position cursor in desitination where the data is to be written.
65
 * @return success or error code.
66
 */
67
uhdr_error_info_t Write(uhdr_compressed_image_t* destination, const void* source, size_t length,
68
                        size_t& position);
69
70
/*
71
 * Parses XMP packet and fills metadata with data from XMP
72
 *
73
 * @param xmp_data pointer to XMP packet
74
 * @param xmp_size size of XMP packet
75
 * @param metadata place to store HDR metadata values
76
 * @return success or error code.
77
 */
78
uhdr_error_info_t getMetadataFromXMP(uint8_t* xmp_data, size_t xmp_size,
79
                                     uhdr_gainmap_metadata_ext_t* metadata);
80
81
/*
82
 * This method generates XMP metadata for the primary image.
83
 *
84
 * below is an example of the XMP metadata that this function generates where
85
 * secondary_image_length = 1000
86
 *
87
 * <x:xmpmeta
88
 *   xmlns:x="adobe:ns:meta/"
89
 *   x:xmptk="Adobe XMP Core 5.1.2">
90
 *   <rdf:RDF
91
 *     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
92
 *     <rdf:Description
93
 *       xmlns:Container="http://ns.google.com/photos/1.0/container/"
94
 *       xmlns:Item="http://ns.google.com/photos/1.0/container/item/"
95
 *       xmlns:hdrgm="http://ns.adobe.com/hdr-gain-map/1.0/"
96
 *       hdrgm:Version="1">
97
 *       <Container:Directory>
98
 *         <rdf:Seq>
99
 *           <rdf:li
100
 *             rdf:parseType="Resource">
101
 *             <Container:Item
102
 *               Item:Semantic="Primary"
103
 *               Item:Mime="image/jpeg"/>
104
 *           </rdf:li>
105
 *           <rdf:li
106
 *             rdf:parseType="Resource">
107
 *             <Container:Item
108
 *               Item:Semantic="GainMap"
109
 *               Item:Mime="image/jpeg"
110
 *               Item:Length="1000"/>
111
 *           </rdf:li>
112
 *         </rdf:Seq>
113
 *       </Container:Directory>
114
 *     </rdf:Description>
115
 *   </rdf:RDF>
116
 * </x:xmpmeta>
117
 *
118
 * @param secondary_image_length length of secondary image
119
 * @return XMP metadata in type of string
120
 */
121
std::string generateXmpForPrimaryImage(size_t secondary_image_length,
122
                                       uhdr_gainmap_metadata_ext_t& metadata);
123
124
/*
125
 * This method generates XMP metadata for the recovery map image.
126
 * Link: https://developer.android.com/media/platform/hdr-image-format#XMP-attributes
127
 *
128
 * below is an example of the XMP metadata that this function generates where
129
 * max_content_boost = 8.0
130
 * min_content_boost = 0.5
131
 *
132
 * <x:xmpmeta
133
 *   xmlns:x="adobe:ns:meta/"
134
 *   x:xmptk="Adobe XMP Core 5.1.2">
135
 *   <rdf:RDF
136
 *     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
137
 *     <rdf:Description
138
 *       xmlns:hdrgm="http://ns.adobe.com/hdr-gain-map/1.0/"
139
 *       hdrgm:Version="1"
140
 *       hdrgm:GainMapMin="-1"
141
 *       hdrgm:GainMapMax="3"
142
 *       hdrgm:Gamma="1"
143
 *       hdrgm:OffsetSDR="0"
144
 *       hdrgm:OffsetHDR="0"
145
 *       hdrgm:HDRCapacityMin="0"
146
 *       hdrgm:HDRCapacityMax="3"
147
 *       hdrgm:BaseRenditionIsHDR="False"/>
148
 *   </rdf:RDF>
149
 * </x:xmpmeta>
150
 *
151
 * @param metadata JPEG/R metadata to encode as XMP
152
 * @return XMP metadata in type of string
153
 */
154
std::string generateXmpForSecondaryImage(uhdr_gainmap_metadata_ext_t& metadata);
155
156
}  // namespace ultrahdr
157
158
#endif  // ULTRAHDR_JPEGRUTILS_H