| /* | 
 |  *  Copyright (c) 2018 The WebRTC project authors. All Rights Reserved. | 
 |  * | 
 |  *  Use of this source code is governed by a BSD-style license | 
 |  *  that can be found in the LICENSE file in the root of the source | 
 |  *  tree. An additional intellectual property rights grant can be found | 
 |  *  in the file PATENTS.  All contributing project authors may | 
 |  *  be found in the AUTHORS file in the root of the source tree. | 
 |  */ | 
 |  | 
 | #ifndef API_VIDEO_HDR_METADATA_H_ | 
 | #define API_VIDEO_HDR_METADATA_H_ | 
 |  | 
 | namespace webrtc { | 
 |  | 
 | // SMPTE ST 2086 mastering metadata, | 
 | // see https://ieeexplore.ieee.org/document/8353899. | 
 | struct HdrMasteringMetadata { | 
 |   struct Chromaticity { | 
 |     Chromaticity(); | 
 |  | 
 |     bool operator==(const Chromaticity& rhs) const { | 
 |       return x == rhs.x && y == rhs.y; | 
 |     } | 
 |  | 
 |     bool Validate() const { | 
 |       return x >= 0.0 && x <= 1.0 && y >= 0.0 && y <= 1.0; | 
 |     } | 
 |  | 
 |     // xy chromaticity coordinates must be calculated as specified in ISO | 
 |     // 11664-3:2012 Section 7, and must be specified with four decimal places. | 
 |     // The x coordinate should be in the range [0.0001, 0.7400] and the y | 
 |     // coordinate should be in the range [0.0001, 0.8400]. Valid range [0.0000, | 
 |     // 1.0000]. | 
 |     float x = 0.0f; | 
 |     float y = 0.0f; | 
 |   }; | 
 |  | 
 |   HdrMasteringMetadata(); | 
 |  | 
 |   bool operator==(const HdrMasteringMetadata& rhs) const { | 
 |     return ((primary_r == rhs.primary_r) && (primary_g == rhs.primary_g) && | 
 |             (primary_b == rhs.primary_b) && (white_point == rhs.white_point) && | 
 |             (luminance_max == rhs.luminance_max) && | 
 |             (luminance_min == rhs.luminance_min)); | 
 |   } | 
 |  | 
 |   bool Validate() const { | 
 |     return luminance_max >= 0.0 && luminance_max <= 20000.0 && | 
 |            luminance_min >= 0.0 && luminance_min <= 5.0 && | 
 |            primary_r.Validate() && primary_g.Validate() && | 
 |            primary_b.Validate() && white_point.Validate(); | 
 |   } | 
 |  | 
 |   // The nominal primaries of the mastering display. | 
 |   Chromaticity primary_r; | 
 |   Chromaticity primary_g; | 
 |   Chromaticity primary_b; | 
 |  | 
 |   // The nominal chromaticity of the white point of the mastering display. | 
 |   Chromaticity white_point; | 
 |  | 
 |   // The nominal maximum display luminance of the mastering display. Specified | 
 |   // in the unit candela/m2. The value should be in the range [5, 10000] with | 
 |   // zero decimal places. Valid range [0, 20000]. | 
 |   float luminance_max = 0.0f; | 
 |  | 
 |   // The nominal minimum display luminance of the mastering display. Specified | 
 |   // in the unit candela/m2. The value should be in the range [0.0001, 5.0000] | 
 |   // with four decimal places. Valid range [0.0000, 5.0000]. | 
 |   float luminance_min = 0.0f; | 
 | }; | 
 |  | 
 | // High dynamic range (HDR) metadata common for HDR10 and WebM/VP9-based HDR | 
 | // formats. This struct replicates the HDRMetadata struct defined in | 
 | // https://cs.chromium.org/chromium/src/media/base/hdr_metadata.h | 
 | struct HdrMetadata { | 
 |   HdrMetadata(); | 
 |  | 
 |   bool operator==(const HdrMetadata& rhs) const { | 
 |     return ( | 
 |         (max_content_light_level == rhs.max_content_light_level) && | 
 |         (max_frame_average_light_level == rhs.max_frame_average_light_level) && | 
 |         (mastering_metadata == rhs.mastering_metadata)); | 
 |   } | 
 |  | 
 |   bool Validate() const { | 
 |     return max_content_light_level >= 0 && max_content_light_level <= 20000 && | 
 |            max_frame_average_light_level >= 0 && | 
 |            max_frame_average_light_level <= 20000 && | 
 |            mastering_metadata.Validate(); | 
 |   } | 
 |  | 
 |   HdrMasteringMetadata mastering_metadata; | 
 |   // Max content light level (CLL), i.e. maximum brightness level present in the | 
 |   // stream, in nits. 1 nit = 1 candela/m2. Valid range [0, 20000]. | 
 |   int max_content_light_level = 0; | 
 |   // Max frame-average light level (FALL), i.e. maximum average brightness of | 
 |   // the brightest frame in the stream, in nits. Valid range [0, 20000]. | 
 |   int max_frame_average_light_level = 0; | 
 | }; | 
 |  | 
 | }  // namespace webrtc | 
 |  | 
 | #endif  // API_VIDEO_HDR_METADATA_H_ |