tor-browser

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

DefaultCodecPreferences.h (7491B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef DOM_MEDIA_WEBRTC_JSAPI_DEFAULTCODECPREFERENCES_H_
      8 #define DOM_MEDIA_WEBRTC_JSAPI_DEFAULTCODECPREFERENCES_H_
      9 
     10 #include "jsep/JsepCodecDescription.h"
     11 #include "mozilla/Preferences.h"
     12 
     13 namespace mozilla {
     14 
     15 enum class OverrideRtxPreference {
     16  NoOverride,
     17  OverrideWithEnabled,
     18  OverrideWithDisabled,
     19 };
     20 
     21 class DefaultCodecPreferences final : public JsepCodecPreferences {
     22 public:
     23  explicit DefaultCodecPreferences(
     24      const OverrideRtxPreference aOverrideRtxPreference)
     25      : mOverrideRtxEnabled(aOverrideRtxPreference) {}
     26 
     27  bool AV1Enabled() const override { return mAV1Enabled; }
     28  bool AV1Preferred() const override { return mAV1Preferred; }
     29  bool H264Enabled() const override { return mH264Enabled; }
     30 
     31  bool SoftwareH264Enabled() const override { return mSoftwareH264Enabled; }
     32  bool HardwareH264Enabled() const { return mHardwareH264Enabled; }
     33 
     34  bool SendingH264PacketizationModeZeroSupported() const override {
     35    return mSendingH264PacketizationModeZeroSupported;
     36  }
     37 
     38  bool H264BaselineDisabled() const override { return mH264BaselineDisabled; }
     39 
     40  int32_t H264Level() const override { return mH264Level; }
     41 
     42  int32_t H264MaxBr() const override { return mH264MaxBr; }
     43 
     44  int32_t H264MaxMbps() const override { return mH264MaxMbps; }
     45 
     46  bool VP9Enabled() const override { return mVP9Enabled; }
     47 
     48  bool VP9Preferred() const override { return mVP9Preferred; }
     49 
     50  int32_t VP8MaxFs() const override { return mVP8MaxFs; }
     51 
     52  int32_t VP8MaxFr() const override { return mVP8MaxFr; }
     53 
     54  bool UseTmmbr() const override { return mUseTmmbr; }
     55 
     56  bool UseRemb() const override { return mUseRemb; }
     57 
     58  bool UseRtx() const override {
     59    if (mOverrideRtxEnabled == OverrideRtxPreference::NoOverride) {
     60      return mUseRtx;
     61    }
     62    return mOverrideRtxEnabled == OverrideRtxPreference::OverrideWithEnabled;
     63  }
     64 
     65  bool UseTransportCC() const override { return mUseTransportCC; }
     66 
     67  bool UseAudioFec() const override { return mUseAudioFec; }
     68 
     69  bool RedUlpfecEnabled() const override { return mRedUlpfecEnabled; }
     70 
     71  static bool AV1EnabledStatic();
     72 
     73  static bool AV1PreferredStatic();
     74 
     75  static bool H264EnabledStatic();
     76 
     77  static bool SoftwareH264EnabledStatic();
     78 
     79  static bool HardwareH264EnabledStatic();
     80 
     81  static bool SendingH264PacketizationModeZeroSupportedStatic();
     82 
     83  static constexpr bool kDefaultH264BaselineDisabled = false;
     84  static bool H264BaselineDisabledStatic() {
     85    return Preferences::GetBool("media.navigator.video.disable_h264_baseline",
     86                                kDefaultH264BaselineDisabled);
     87  }
     88 
     89  // minimum suggested for WebRTC spec
     90  static constexpr int32_t kDefaultH264Level = 31;
     91  static int32_t H264LevelStatic() {
     92    auto value = Preferences::GetInt("media.navigator.video.h264.level",
     93                                     kDefaultH264Level);
     94    if (value < 0) {
     95      return kDefaultH264Level;
     96    }
     97    return value & 0xFF;
     98  }
     99 
    100  static constexpr int32_t kDefaultH264MaxBr = 0;  // Unlimited
    101  static int32_t H264MaxBrStatic() {
    102    const auto maxBr = Preferences::GetInt("media.navigator.video.h264.max_br",
    103                                           kDefaultH264MaxBr);
    104    if (maxBr < 0) {
    105      return kDefaultH264MaxBr;
    106    }
    107    return maxBr;
    108  }
    109 
    110  static constexpr int32_t kDefaultH264MaxMbps = 0;  // Unlimited
    111  static int32_t H264MaxMbpsStatic() {
    112    const auto maxMbps = Preferences::GetInt(
    113        "media.navigator.video.h264.max_mbps", kDefaultH264MaxMbps);
    114    if (maxMbps < 0) {
    115      return kDefaultH264MaxMbps;
    116    }
    117    return maxMbps;
    118  }
    119 
    120  static constexpr bool kDefaultVP9Enabled = true;
    121  static bool VP9EnabledStatic() {
    122    return Preferences::GetBool("media.peerconnection.video.vp9_enabled",
    123                                kDefaultVP9Enabled);
    124  }
    125 
    126  static constexpr bool kDefaultVP9Preferred = false;
    127  static bool VP9PreferredStatic() {
    128    return Preferences::GetBool("media.peerconnection.video.vp9_preferred",
    129                                kDefaultVP9Preferred);
    130  }
    131 
    132  static constexpr int32_t kDefaultVP8MaxFs = 12288;  // Enough for 2048x1536
    133  static int32_t VP8MaxFsStatic() {
    134    auto value =
    135        Preferences::GetInt("media.navigator.video.max_fs", kDefaultVP8MaxFs);
    136    if (value <= 0) {
    137      return kDefaultVP8MaxFs;
    138    }
    139    return value;
    140  }
    141 
    142  static constexpr int32_t kDefaultVP8MaxFr = 60;
    143  static int32_t VP8MaxFrStatic() {
    144    auto value =
    145        Preferences::GetInt("media.navigator.video.max_fr", kDefaultVP8MaxFr);
    146    if (value <= kDefaultVP8MaxFr) {
    147      return 60;
    148    }
    149    return value;
    150  }
    151 
    152  static constexpr bool kDefaultUseTmmbr = false;
    153  static bool UseTmmbrStatic() {
    154    return Preferences::GetBool("media.navigator.video.use_tmmbr",
    155                                kDefaultUseTmmbr);
    156  }
    157 
    158  static constexpr bool kDefaultUseRemb = true;
    159  static bool UseRembStatic() {
    160    return Preferences::GetBool("media.navigator.video.use_remb",
    161                                kDefaultUseRemb);
    162  }
    163 
    164  static constexpr bool kDefaultUseRtx = true;
    165  static bool UseRtxStatic() {
    166    return Preferences::GetBool("media.peerconnection.video.use_rtx",
    167                                kDefaultUseRtx);
    168  }
    169 
    170  static constexpr bool kDefaultUseTransportCC = true;
    171  static bool UseTransportCCStatic() {
    172    return Preferences::GetBool("media.navigator.video.use_transport_cc",
    173                                kDefaultUseTransportCC);
    174  }
    175 
    176  static constexpr bool kDefaultUseAudioFec = true;
    177  static bool UseAudioFecStatic() {
    178    return Preferences::GetBool("media.navigator.audio.use_fec",
    179                                kDefaultUseAudioFec);
    180  }
    181 
    182  static constexpr bool kDefaultRedUlpfecEnabled = true;
    183  static bool RedUlpfecEnabledStatic() {
    184    return Preferences::GetBool("media.navigator.video.red_ulpfec_enabled",
    185                                kDefaultRedUlpfecEnabled);
    186  }
    187 
    188  // This is to accommodate the behavior of
    189  // RTCRtpTransceiver::SetCodecPreferences
    190  const OverrideRtxPreference mOverrideRtxEnabled =
    191      OverrideRtxPreference::NoOverride;
    192 
    193  const bool mAV1Enabled = AV1EnabledStatic();
    194  const bool mAV1Preferred = AV1PreferredStatic();
    195  const bool mH264Enabled = H264EnabledStatic();
    196  const bool mSoftwareH264Enabled = SoftwareH264EnabledStatic();
    197  const bool mHardwareH264Enabled = HardwareH264EnabledStatic();
    198  const bool mSendingH264PacketizationModeZeroSupported =
    199      SendingH264PacketizationModeZeroSupportedStatic();
    200  const bool mH264BaselineDisabled = H264BaselineDisabledStatic();
    201  const int32_t mH264Level = H264LevelStatic();
    202  const int32_t mH264MaxBr = H264MaxBrStatic();
    203  const int32_t mH264MaxMbps = H264MaxMbpsStatic();
    204  const bool mVP9Enabled = VP9EnabledStatic();
    205  const bool mVP9Preferred = VP9PreferredStatic();
    206  const int32_t mVP8MaxFs = VP8MaxFsStatic();
    207  const int32_t mVP8MaxFr = VP8MaxFrStatic();
    208  const bool mUseTmmbr = UseTmmbrStatic();
    209  const bool mUseRemb = UseRembStatic();
    210  const bool mUseRtx = UseRtxStatic();
    211  const bool mUseTransportCC = UseTransportCCStatic();
    212  const bool mUseAudioFec = UseAudioFecStatic();
    213  const bool mRedUlpfecEnabled = RedUlpfecEnabledStatic();
    214 };
    215 }  // namespace mozilla
    216 #endif  // DOM_MEDIA_WEBRTC_JSAPI_DEFAULTCODECPREFERENCES_H_