tor-browser

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

builtin_audio_encoder_factory.cc (2424B)


      1 /*
      2 *  Copyright (c) 2017 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 #include "api/audio_codecs/builtin_audio_encoder_factory.h"
     12 
     13 #include <memory>
     14 #include <optional>
     15 #include <vector>
     16 
     17 #include "api/audio_codecs/L16/audio_encoder_L16.h"
     18 #include "api/audio_codecs/audio_codec_pair_id.h"
     19 #include "api/audio_codecs/audio_encoder.h"
     20 #include "api/audio_codecs/audio_encoder_factory.h"
     21 #include "api/audio_codecs/audio_encoder_factory_template.h"
     22 #include "api/audio_codecs/audio_format.h"
     23 #include "api/audio_codecs/g711/audio_encoder_g711.h"
     24 #include "api/audio_codecs/g722/audio_encoder_g722.h"
     25 #include "api/field_trials_view.h"
     26 #include "api/scoped_refptr.h"
     27 #if WEBRTC_USE_BUILTIN_OPUS
     28 #include "api/audio_codecs/opus/audio_encoder_multi_channel_opus.h"
     29 #include "api/audio_codecs/opus/audio_encoder_opus.h"  // nogncheck
     30 #endif
     31 
     32 namespace webrtc {
     33 
     34 namespace {
     35 
     36 // Modify an audio encoder to not advertise support for anything.
     37 template <typename T>
     38 struct NotAdvertised {
     39  using Config = typename T::Config;
     40  static std::optional<Config> SdpToConfig(const SdpAudioFormat& audio_format) {
     41    return T::SdpToConfig(audio_format);
     42  }
     43  static void AppendSupportedEncoders(
     44      std::vector<AudioCodecSpec>* /* specs */) {
     45    // Don't advertise support for anything.
     46  }
     47  static AudioCodecInfo QueryAudioEncoder(const Config& config) {
     48    return T::QueryAudioEncoder(config);
     49  }
     50  static std::unique_ptr<AudioEncoder> MakeAudioEncoder(
     51      const Config& config,
     52      int payload_type,
     53      std::optional<AudioCodecPairId> codec_pair_id = std::nullopt,
     54      const FieldTrialsView* field_trials = nullptr) {
     55    return T::MakeAudioEncoder(config, payload_type, codec_pair_id,
     56                               field_trials);
     57  }
     58 };
     59 
     60 }  // namespace
     61 
     62 scoped_refptr<AudioEncoderFactory> CreateBuiltinAudioEncoderFactory() {
     63  return CreateAudioEncoderFactory<
     64 
     65 #if WEBRTC_USE_BUILTIN_OPUS
     66      AudioEncoderOpus, NotAdvertised<AudioEncoderMultiChannelOpus>,
     67 #endif
     68 
     69      AudioEncoderG722, AudioEncoderG711, NotAdvertised<AudioEncoderL16>>();
     70 }
     71 
     72 }  // namespace webrtc