tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

hdr_metadata.h (3840B)


      1 /*
      2 *  Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
      3 *
      4 *  Use of this source code is governed by a BSD-style license
      5 *  that can be found in the LICENSE file in the root of the source
      6 *  tree. An additional intellectual property rights grant can be found
      7 *  in the file PATENTS.  All contributing project authors may
      8 *  be found in the AUTHORS file in the root of the source tree.
      9 */
     10 
     11 #ifndef API_VIDEO_HDR_METADATA_H_
     12 #define API_VIDEO_HDR_METADATA_H_
     13 
     14 namespace webrtc {
     15 
     16 // SMPTE ST 2086 mastering metadata,
     17 // see https://ieeexplore.ieee.org/document/8353899.
     18 struct HdrMasteringMetadata {
     19  struct Chromaticity {
     20    Chromaticity();
     21 
     22    bool operator==(const Chromaticity& rhs) const {
     23      return x == rhs.x && y == rhs.y;
     24    }
     25 
     26    bool Validate() const {
     27      return x >= 0.0 && x <= 1.0 && y >= 0.0 && y <= 1.0;
     28    }
     29 
     30    // xy chromaticity coordinates must be calculated as specified in ISO
     31    // 11664-3:2012 Section 7, and must be specified with four decimal places.
     32    // The x coordinate should be in the range [0.0001, 0.7400] and the y
     33    // coordinate should be in the range [0.0001, 0.8400]. Valid range [0.0000,
     34    // 1.0000].
     35    float x = 0.0f;
     36    float y = 0.0f;
     37  };
     38 
     39  HdrMasteringMetadata();
     40 
     41  bool operator==(const HdrMasteringMetadata& rhs) const {
     42    return ((primary_r == rhs.primary_r) && (primary_g == rhs.primary_g) &&
     43            (primary_b == rhs.primary_b) && (white_point == rhs.white_point) &&
     44            (luminance_max == rhs.luminance_max) &&
     45            (luminance_min == rhs.luminance_min));
     46  }
     47 
     48  bool Validate() const {
     49    return luminance_max >= 0.0 && luminance_max <= 20000.0 &&
     50           luminance_min >= 0.0 && luminance_min <= 5.0 &&
     51           primary_r.Validate() && primary_g.Validate() &&
     52           primary_b.Validate() && white_point.Validate();
     53  }
     54 
     55  // The nominal primaries of the mastering display.
     56  Chromaticity primary_r;
     57  Chromaticity primary_g;
     58  Chromaticity primary_b;
     59 
     60  // The nominal chromaticity of the white point of the mastering display.
     61  Chromaticity white_point;
     62 
     63  // The nominal maximum display luminance of the mastering display. Specified
     64  // in the unit candela/m2. The value should be in the range [5, 10000] with
     65  // zero decimal places. Valid range [0, 20000].
     66  float luminance_max = 0.0f;
     67 
     68  // The nominal minimum display luminance of the mastering display. Specified
     69  // in the unit candela/m2. The value should be in the range [0.0001, 5.0000]
     70  // with four decimal places. Valid range [0.0000, 5.0000].
     71  float luminance_min = 0.0f;
     72 };
     73 
     74 // High dynamic range (HDR) metadata common for HDR10 and WebM/VP9-based HDR
     75 // formats. This struct replicates the HDRMetadata struct defined in
     76 // https://cs.chromium.org/chromium/src/media/base/hdr_metadata.h
     77 struct HdrMetadata {
     78  HdrMetadata();
     79 
     80  bool operator==(const HdrMetadata& rhs) const {
     81    return (
     82        (max_content_light_level == rhs.max_content_light_level) &&
     83        (max_frame_average_light_level == rhs.max_frame_average_light_level) &&
     84        (mastering_metadata == rhs.mastering_metadata));
     85  }
     86 
     87  bool Validate() const {
     88    return max_content_light_level >= 0 && max_content_light_level <= 20000 &&
     89           max_frame_average_light_level >= 0 &&
     90           max_frame_average_light_level <= 20000 &&
     91           mastering_metadata.Validate();
     92  }
     93 
     94  HdrMasteringMetadata mastering_metadata;
     95  // Max content light level (CLL), i.e. maximum brightness level present in the
     96  // stream, in nits. 1 nit = 1 candela/m2. Valid range [0, 20000].
     97  int max_content_light_level = 0;
     98  // Max frame-average light level (FALL), i.e. maximum average brightness of
     99  // the brightest frame in the stream, in nits. Valid range [0, 20000].
    100  int max_frame_average_light_level = 0;
    101 };
    102 
    103 }  // namespace webrtc
    104 
    105 #endif  // API_VIDEO_HDR_METADATA_H_