blob: 2bda3f5ded1e7611db5fb01da7e68c5d1d9ff27b [file] [log] [blame]
#ifndef IMAGE_IO_JPEG_JPEG_XMP_INFO_H_ // NOLINT
#define IMAGE_IO_JPEG_JPEG_XMP_INFO_H_ // NOLINT
#include <string>
#include <vector>
#include "image_io/base/data_range.h"
namespace photos_editing_formats {
namespace image_io {
const size_t kXmpGuidSize = 32;
const char kXmpId[] = "http://ns.adobe.com/xap/1.0/";
const char kXmpExtendedId[] = "http://ns.adobe.com/xmp/extension/";
const size_t kXmpExtendedHeaderSize =
sizeof(kXmpExtendedId) + kXmpGuidSize + 2 * sizeof(std::uint32_t);
/// Constants used to find and process information in APP1/XMP type segments.
const char kXmpAppleDepthId[] = "http://ns.apple.com/depthData/1.0";
const char kXmpAppleMatteId[] = "http://ns.apple.com/portraitEffectsMatte/1.0/";
const char kXmpGDepthV1Id[] = "http://ns.google.com/photos/1.0/depthmap/";
const char kXmpGImageV1Id[] = "http://ns.google.com/photos/1.0/image/";
const char kXmpHasExtendedId[] = "xmpNote:HasExtendedXMP";
/// JpegXmpInfo maintains information about the data in an Xmp property, such as
/// are used to store the GDepth and GImage data.
class JpegXmpInfo {
public:
/// The possible types of Xmp information.
enum Type {
/// GDepth:Data type information.
kGDepthInfoType,
/// GImage:Data type information.
kGImageInfoType,
};
/// Initializes a vector of JpegXmpinfo instances, indexed by their type.
/// @param xmp_info_vector The vector to initialize.
static void InitializeVector(std::vector<JpegXmpInfo>* xmp_info_vector);
/// @param xmp_info_type The type to get the identifier of.
/// @return The identfier that appears at the start of the Xmp segment.
static std::string GetIdentifier(Type jpeg_xmp_info_type);
/// @param xmp_info_type The type to get the data property name of.
/// @return The name of the data property that appears in the Xmp segment.
static std::string GetDataPropertyName(Type jpeg_xmp_info_type);
/// @param xmp_info_type The type to get the mime property name of.
/// @return The name of the mime property that appears in the primary
/// Xmp segment.
static std::string GetMimePropertyName(Type jpeg_xmp_info_type);
explicit JpegXmpInfo(Type type) : type_(type) {}
JpegXmpInfo(const JpegXmpInfo&) = default;
JpegXmpInfo& operator=(const JpegXmpInfo&) = default;
/// @return The type of the Xmp property information.
Type GetType() const { return type_; }
/// @return The mime type of the Xmp data.
std::string GetMimeType() const { return mime_type_; }
/// @param mime_type The mime type to assign to this instance.
void SetMimeType(const std::string& mime_type) { mime_type_ = mime_type; }
/// @return The segment's data ranges where this Xmp data occurs.
const std::vector<DataRange>& GetSegmentDataRanges() const {
return segment_data_ranges_;
}
/// @param The segment data ranges to assign to this instance.
void SetSegmentDataRanges(const std::vector<DataRange>& segment_data_ranges) {
segment_data_ranges_ = segment_data_ranges;
}
private:
/// The type of the Xmp information.
Type type_;
/// The mime type of the Xmp data.
std::string mime_type_;
/// The segment data ranges that contain the Xmp data.
std::vector<DataRange> segment_data_ranges_;
};
} // namespace image_io
} // namespace photos_editing_formats
#endif // IMAGE_IO_JPEG_JPEG_XMP_INFO_H_ // NOLINT