![]() |
Flutter Engine
The Flutter Engine
|
#include <SkGainmapInfo.h>
Public Types | |
enum class | BaseImageType { kSDR , kHDR } |
enum class | Type { kDefault , kApple } |
Public Member Functions | |
bool | isUltraHDRv1Compatible () const |
sk_sp< SkData > | serialize () const |
bool | operator== (const SkGainmapInfo &other) const |
bool | operator!= (const SkGainmapInfo &other) const |
Static Public Member Functions | |
static bool | ParseVersion (const SkData *data) |
static bool | Parse (const SkData *data, SkGainmapInfo &info) |
static sk_sp< SkData > | SerializeVersion () |
Public Attributes | |
SkColor4f | fGainmapRatioMin = {1.f, 1.f, 1.f, 1.0} |
SkColor4f | fGainmapRatioMax = {2.f, 2.f, 2.f, 1.0} |
SkColor4f | fGainmapGamma = {1.f, 1.f, 1.f, 1.f} |
SkColor4f | fEpsilonSdr = {0.f, 0.f, 0.f, 1.0} |
SkColor4f | fEpsilonHdr = {0.f, 0.f, 0.f, 1.0} |
float | fDisplayRatioSdr = 1.f |
float | fDisplayRatioHdr = 2.f |
BaseImageType | fBaseImageType = BaseImageType::kSDR |
Type | fType = Type::kDefault |
sk_sp< SkColorSpace > | fGainmapMathColorSpace = nullptr |
Gainmap rendering parameters. Suppose our display has HDR to SDR ratio of H and we wish to display an image with gainmap on this display. Let B be the pixel value from the base image in a color space that has the primaries of the base image and a linear transfer function. Let G be the pixel value from the gainmap. Let D be the output pixel in the same color space as B. The value of D is computed as follows:
First, let W be a weight parameter determing how much the gainmap will be applied. W = clamp((log(H) - log(fDisplayRatioSdr)) / (log(fDisplayRatioHdr) - log(fDisplayRatioSdr), 0, 1)
Next, let L be the gainmap value in log space. We compute this from the value G that was sampled from the texture as follows: L = mix(log(fGainmapRatioMin), log(fGainmapRatioMax), pow(G, fGainmapGamma))
Finally, apply the gainmap to compute D, the displayed pixel. If the base image is SDR then compute: D = (B + fEpsilonSdr) * exp(L * W) - fEpsilonHdr If the base image is HDR then compute: D = (B + fEpsilonHdr) * exp(L * (W - 1)) - fEpsilonSdr
In the above math, log() is a natural logarithm and exp() is natural exponentiation. Note, however, that the base used for the log() and exp() functions does not affect the results of the computation (it cancels out, as long as the same base is used throughout).
This product includes Gain Map technology under license by Adobe.
Definition at line 43 of file SkGainmapInfo.h.
|
strong |
Whether the base image is the SDR image or the HDR image.
Enumerator | |
---|---|
kSDR | |
kHDR |
Definition at line 71 of file SkGainmapInfo.h.
|
strong |
The type of the gainmap image. If the type is kApple, then the gainmap image was originally encoded according to the specification at [0], and can be converted to the kDefault type by applying the transformation described at [1]. [0] https://developer.apple.com/documentation/appkit/images_and_pdf/ applying_apple_hdr_effect_to_your_photos [1] https://docs.google.com/document/d/1iUpYAThVV_FuDdeiO3t0vnlfoA1ryq0WfGS9FuydwKc
Enumerator | |
---|---|
kDefault | |
kApple |
Definition at line 85 of file SkGainmapInfo.h.
bool SkGainmapInfo::isUltraHDRv1Compatible | ( | ) | const |
Return true if this can be encoded as an UltraHDR v1 image.
Definition at line 208 of file SkGainmapInfo.cpp.
|
inline |
Definition at line 137 of file SkGainmapInfo.h.
|
inline |
Definition at line 127 of file SkGainmapInfo.h.
|
static |
If |data| constains ISO 21496-1 metadata then parse that metadata then use it to populate |info| and return true, otherwise return false. If |data| indicates that that the base image color space primaries should be used for gainmap application then set |fGainmapMathColorSpace| to nullptr, otherwise set |fGainmapMathColorSpace| to sRGB (the default, to be overwritten by the image decoder).
Definition at line 229 of file SkGainmapInfo.cpp.
|
static |
If |data| contains an ISO 21496-1 version that is supported, return true. Otherwise return false.
Definition at line 221 of file SkGainmapInfo.cpp.
Serialize an ISO 21496-1 version 0 blob containing this' gainmap parameters.
Definition at line 246 of file SkGainmapInfo.cpp.
Serialize an ISO 21496-1 version 0 blob containing only the version structure.
Definition at line 237 of file SkGainmapInfo.cpp.
BaseImageType SkGainmapInfo::fBaseImageType = BaseImageType::kSDR |
Definition at line 75 of file SkGainmapInfo.h.
float SkGainmapInfo::fDisplayRatioHdr = 2.f |
Definition at line 66 of file SkGainmapInfo.h.
float SkGainmapInfo::fDisplayRatioSdr = 1.f |
If the output display's HDR to SDR ratio is less or equal than fDisplayRatioSdr then the SDR rendition is displayed. If the output display's HDR to SDR ratio is greater or equal than fDisplayRatioHdr then the HDR rendition is displayed. If the output display's HDR to SDR ratio is between these values then an interpolation between the two is displayed using the math above.
Definition at line 65 of file SkGainmapInfo.h.
SkColor4f SkGainmapInfo::fEpsilonHdr = {0.f, 0.f, 0.f, 1.0} |
Definition at line 56 of file SkGainmapInfo.h.
SkColor4f SkGainmapInfo::fEpsilonSdr = {0.f, 0.f, 0.f, 1.0} |
Parameters sometimes used in gainmap computation to avoid numerical instability.
Definition at line 55 of file SkGainmapInfo.h.
SkColor4f SkGainmapInfo::fGainmapGamma = {1.f, 1.f, 1.f, 1.f} |
Definition at line 50 of file SkGainmapInfo.h.
sk_sp<SkColorSpace> SkGainmapInfo::fGainmapMathColorSpace = nullptr |
If specified, color space to apply the gainmap in, otherwise the base image's color space is used. Only the color primaries are used, the transfer function is irrelevant.
Definition at line 95 of file SkGainmapInfo.h.
SkColor4f SkGainmapInfo::fGainmapRatioMax = {2.f, 2.f, 2.f, 1.0} |
Definition at line 49 of file SkGainmapInfo.h.
SkColor4f SkGainmapInfo::fGainmapRatioMin = {1.f, 1.f, 1.f, 1.0} |
Parameters for converting the gainmap from its image encoding to log space. These are specified per color channel. The alpha value is unused.
Definition at line 48 of file SkGainmapInfo.h.
Type SkGainmapInfo::fType = Type::kDefault |
Definition at line 89 of file SkGainmapInfo.h.