blob: 0aa1ed4d4aef194f62e0054e77ed5677bd7ba7cc [file] [log] [blame]
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/gfx/hdr_metadata.h"
#include "skia/ext/skcolorspace_primaries.h"
#include <iomanip>
#include <sstream>
namespace gfx {
ColorVolumeMetadata::ColorVolumeMetadata() = default;
ColorVolumeMetadata::ColorVolumeMetadata(const ColorVolumeMetadata& rhs) =
default;
ColorVolumeMetadata& ColorVolumeMetadata::operator=(
const ColorVolumeMetadata& rhs) = default;
ColorVolumeMetadata::ColorVolumeMetadata(const SkColorSpacePrimaries& primaries,
float luminance_max,
float luminance_min)
: primaries(primaries),
luminance_max(luminance_max),
luminance_min(luminance_min) {}
std::string ColorVolumeMetadata::ToString() const {
std::stringstream ss;
ss << std::fixed << std::setprecision(4);
ss << "{";
ss << "red:[" << primaries.fRX << ", " << primaries.fRY << "], ";
ss << "green:[" << primaries.fGX << ", " << primaries.fGY << "], ";
ss << "blue:[" << primaries.fBX << ", " << primaries.fBY << "], ";
ss << "whitePoint:[" << primaries.fWX << ", " << primaries.fWY << "], ";
ss << "minLum:" << luminance_min << ", "
<< "maxLum:" << luminance_max;
ss << "}";
return ss.str();
}
HDRMetadata::HDRMetadata() = default;
HDRMetadata::HDRMetadata(const ColorVolumeMetadata& color_volume_metadata,
unsigned max_content_light_level,
unsigned max_frame_average_light_level)
: color_volume_metadata(color_volume_metadata),
max_content_light_level(max_content_light_level),
max_frame_average_light_level(max_frame_average_light_level) {}
HDRMetadata::HDRMetadata(const HDRMetadata& rhs) = default;
HDRMetadata& HDRMetadata::operator=(const HDRMetadata& rhs) = default;
// static
HDRMetadata HDRMetadata::PopulateUnspecifiedWithDefaults(
const absl::optional<gfx::HDRMetadata>& hdr_metadata) {
const HDRMetadata defaults(
ColorVolumeMetadata(SkNamedPrimariesExt::kRec2020, 10000.f, 0.f), 0, 0);
if (!hdr_metadata)
return defaults;
HDRMetadata result = *hdr_metadata;
// If the gamut is unspecified, replace it with the default Rec2020.
if (result.color_volume_metadata.primaries == SkNamedPrimariesExt::kInvalid) {
result.color_volume_metadata.primaries =
defaults.color_volume_metadata.primaries;
}
// If the max luminance is unspecified, replace it with the default 10,000
// nits.
if (result.color_volume_metadata.luminance_max == 0.f) {
result.color_volume_metadata.luminance_max =
defaults.color_volume_metadata.luminance_max;
}
return result;
}
std::string HDRMetadata::ToString() const {
std::stringstream ss;
ss << "{";
ss << "smpteSt2086:" << color_volume_metadata.ToString() << ", ";
ss << "maxCLL:" << max_content_light_level << ", ";
ss << "maxFALL:" << max_frame_average_light_level;
if (extended_range_brightness) {
ss << "cur_ratio: " << extended_range_brightness->current_buffer_ratio;
ss << "desired_ratio: " << extended_range_brightness->desired_ratio;
}
ss << "}";
return ss.str();
}
} // namespace gfx