/* * Copyright 2023 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkJpegXmp_codec_DEFINED #define SkJpegXmp_codec_DEFINED #include "include/core/SkRefCnt.h" #include "src/xml/SkDOM.h" class SkData; struct SkGainmapInfo; #include #include /* * A structure to manage JPEG XMP metadata. */ class SkJpegXmp { public: // Find and parse all XMP metadata, given a list of all APP1 segment parameters. static std::unique_ptr Make(const std::vector>& decoderApp1Params); // Extract HDRGM gainmap parameters. bool getGainmapInfoHDRGM(SkGainmapInfo* info) const; // Extract HDRGainMap gainmap parameters. bool getGainmapInfoHDRGainMap(SkGainmapInfo* info) const; // If this includes GContainer metadata and the GContainer contains an item with semantic // GainMap and Mime of image/jpeg, then return true, and populate |offset| and |size| with // that item's offset (from the end of the primary JPEG image's EndOfImage), and the size of // the gainmap. bool getContainerGainmapLocation(size_t* offset, size_t* size) const; private: SkJpegXmp(); // Find an XMP node that assigns namespaces to the specified URIs. The XMP that this will search // for is as follows. URIi is the input parameters in |uris|, and NAMESPACEi is the output // written to |outNamespaces|. The output NAMESPACEi strings will always start with the prefix // "xmlns:". // // // // // // // // This function will sequentially search the standard XMP, followed by the extended XMP (which // is not correct behavior -- it should merge the two XMP trees and search the merged tree). bool findUriNamespaces(size_t count, const char* uris[], const char* outNamespaces[], const SkDOM** outDom, const SkDOM::Node** outNode) const; // The DOM for the standard XMP. SkDOM fStandardDOM; // The DOM for the extended XMP. This may be invalid if there is no extended XMP, or the // extended XMP failed to parse. SkDOM fExtendedDOM; }; #endif