tor-browser

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

video_frame_metadata.h (4369B)


      1 /*
      2 *  Copyright 2020 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_VIDEO_FRAME_METADATA_H_
     12 #define API_VIDEO_VIDEO_FRAME_METADATA_H_
     13 
     14 #include <cstdint>
     15 #include <optional>
     16 #include <variant>
     17 #include <vector>
     18 
     19 #include "absl/container/inlined_vector.h"
     20 #include "api/array_view.h"
     21 #include "api/transport/rtp/dependency_descriptor.h"
     22 #include "api/video/video_codec_type.h"
     23 #include "api/video/video_content_type.h"
     24 #include "api/video/video_frame_type.h"
     25 #include "api/video/video_rotation.h"
     26 #include "modules/video_coding/codecs/h264/include/h264_globals.h"
     27 #include "modules/video_coding/codecs/vp8/include/vp8_globals.h"
     28 #include "modules/video_coding/codecs/vp9/include/vp9_globals.h"
     29 #include "rtc_base/system/rtc_export.h"
     30 
     31 namespace webrtc {
     32 
     33 using RTPVideoHeaderCodecSpecifics = std::variant<std::monostate,
     34                                                  RTPVideoHeaderVP8,
     35                                                  RTPVideoHeaderVP9,
     36                                                  RTPVideoHeaderH264>;
     37 
     38 // A subset of metadata from the RTP video header, exposed in insertable streams
     39 // API.
     40 class RTC_EXPORT VideoFrameMetadata {
     41 public:
     42  VideoFrameMetadata();
     43  VideoFrameMetadata(const VideoFrameMetadata&) = default;
     44  VideoFrameMetadata& operator=(const VideoFrameMetadata&) = default;
     45 
     46  VideoFrameType GetFrameType() const;
     47  void SetFrameType(VideoFrameType frame_type);
     48 
     49  uint16_t GetWidth() const;
     50  void SetWidth(uint16_t width);
     51 
     52  uint16_t GetHeight() const;
     53  void SetHeight(uint16_t height);
     54 
     55  VideoRotation GetRotation() const;
     56  void SetRotation(VideoRotation rotation);
     57 
     58  VideoContentType GetContentType() const;
     59  void SetContentType(VideoContentType content_type);
     60 
     61  std::optional<int64_t> GetFrameId() const;
     62  void SetFrameId(std::optional<int64_t> frame_id);
     63 
     64  int GetSpatialIndex() const;
     65  void SetSpatialIndex(int spatial_index);
     66 
     67  int GetTemporalIndex() const;
     68  void SetTemporalIndex(int temporal_index);
     69 
     70  ArrayView<const int64_t> GetFrameDependencies() const;
     71  void SetFrameDependencies(ArrayView<const int64_t> frame_dependencies);
     72 
     73  ArrayView<const DecodeTargetIndication> GetDecodeTargetIndications() const;
     74  void SetDecodeTargetIndications(
     75      ArrayView<const DecodeTargetIndication> decode_target_indications);
     76 
     77  bool GetIsLastFrameInPicture() const;
     78  void SetIsLastFrameInPicture(bool is_last_frame_in_picture);
     79 
     80  uint8_t GetSimulcastIdx() const;
     81  void SetSimulcastIdx(uint8_t simulcast_idx);
     82 
     83  VideoCodecType GetCodec() const;
     84  void SetCodec(VideoCodecType codec);
     85 
     86  // Which varient is used depends on the VideoCodecType from GetCodecs().
     87  const RTPVideoHeaderCodecSpecifics& GetRTPVideoHeaderCodecSpecifics() const;
     88  void SetRTPVideoHeaderCodecSpecifics(
     89      RTPVideoHeaderCodecSpecifics codec_specifics);
     90 
     91  uint32_t GetSsrc() const;
     92  void SetSsrc(uint32_t ssrc);
     93  std::vector<uint32_t> GetCsrcs() const;
     94  void SetCsrcs(std::vector<uint32_t> csrcs);
     95 
     96  friend bool operator==(const VideoFrameMetadata& lhs,
     97                         const VideoFrameMetadata& rhs);
     98  friend bool operator!=(const VideoFrameMetadata& lhs,
     99                         const VideoFrameMetadata& rhs);
    100 
    101 private:
    102  VideoFrameType frame_type_ = VideoFrameType::kEmptyFrame;
    103  int16_t width_ = 0;
    104  int16_t height_ = 0;
    105  VideoRotation rotation_ = VideoRotation::kVideoRotation_0;
    106  VideoContentType content_type_ = VideoContentType::UNSPECIFIED;
    107 
    108  // Corresponding to GenericDescriptorInfo.
    109  std::optional<int64_t> frame_id_;
    110  int spatial_index_ = 0;
    111  int temporal_index_ = 0;
    112  absl::InlinedVector<int64_t, 5> frame_dependencies_;
    113  absl::InlinedVector<DecodeTargetIndication, 10> decode_target_indications_;
    114 
    115  bool is_last_frame_in_picture_ = true;
    116  uint8_t simulcast_idx_ = 0;
    117  VideoCodecType codec_ = VideoCodecType::kVideoCodecGeneric;
    118  RTPVideoHeaderCodecSpecifics codec_specifics_;
    119 
    120  // RTP info.
    121  uint32_t ssrc_ = 0u;
    122  std::vector<uint32_t> csrcs_;
    123 };
    124 }  // namespace webrtc
    125 
    126 #endif  // API_VIDEO_VIDEO_FRAME_METADATA_H_