blob: edbda66faa6c7929583a9edcb25d73417ea78f2a [file] [log] [blame]
henrike@webrtc.org28e20752013-07-10 00:45:36 +00001/*
kjellander1afca732016-02-07 20:46:45 -08002 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
henrike@webrtc.org28e20752013-07-10 00:45:36 +00003 *
kjellander1afca732016-02-07 20:46:45 -08004 * 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.
henrike@webrtc.org28e20752013-07-10 00:45:36 +00009 */
10
kjellander@webrtc.org5ad12972016-02-12 06:39:40 +010011#ifndef WEBRTC_MEDIA_ENGINE_WEBRTCMEDIAENGINE_H_
12#define WEBRTC_MEDIA_ENGINE_WEBRTCMEDIAENGINE_H_
henrike@webrtc.org28e20752013-07-10 00:45:36 +000013
solenberg7e4e01a2015-12-02 08:05:01 -080014#include <string>
15#include <vector>
16
ossuf515ab82016-12-07 04:52:58 -080017#include "webrtc/call/call.h"
solenberg7e4e01a2015-12-02 08:05:01 -080018#include "webrtc/config.h"
kjellandera96e2d72016-02-04 23:52:28 -080019#include "webrtc/media/base/mediaengine.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000020
21namespace webrtc {
ossuc54071d2016-08-17 02:45:41 -070022class AudioDecoderFactory;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000023class AudioDeviceModule;
gyzhou95aa9642016-12-13 14:06:26 -080024class AudioMixer;
peaha9cc40b2017-06-29 08:32:09 -070025class AudioProcessing;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000026}
27namespace cricket {
28class WebRtcVideoDecoderFactory;
29class WebRtcVideoEncoderFactory;
30}
31
buildbot@webrtc.org58e7c862014-06-20 00:26:50 +000032namespace cricket {
33
henrike@webrtc.org0481f152014-08-19 14:56:59 +000034class WebRtcMediaEngineFactory {
buildbot@webrtc.org58e7c862014-06-20 00:26:50 +000035 public:
deadbeefeb02c032017-06-15 08:29:25 -070036 // These Create methods may be called on any thread, though the engine is
37 // only expected to be used on one thread, internally called the "worker
38 // thread". This is the thread Init must be called on.
39
ossu111744e2016-06-15 02:22:32 -070040 // TODO(ossu): Backwards-compatible interface. Will be deprecated once the
41 // audio decoder factory is fully plumbed and used throughout WebRTC.
42 // See: crbug.com/webrtc/6000
43 static MediaEngineInterface* Create(
44 webrtc::AudioDeviceModule* adm,
45 WebRtcVideoEncoderFactory* video_encoder_factory,
46 WebRtcVideoDecoderFactory* video_decoder_factory);
47
deadbeef112b2e92017-02-10 20:13:37 -080048 // TODO(deadbeef): Change these to return an std::unique_ptr<>, to indicate
49 // that the caller owns the returned object.
henrike@webrtc.org0481f152014-08-19 14:56:59 +000050 static MediaEngineInterface* Create(
buildbot@webrtc.org58e7c862014-06-20 00:26:50 +000051 webrtc::AudioDeviceModule* adm,
ossu29b1a8d2016-06-13 07:34:51 -070052 const rtc::scoped_refptr<webrtc::AudioDecoderFactory>&
53 audio_decoder_factory,
54 WebRtcVideoEncoderFactory* video_encoder_factory,
gyzhou39ce11f2016-12-12 17:06:49 -080055 WebRtcVideoDecoderFactory* video_decoder_factory);
gyzhou95aa9642016-12-13 14:06:26 -080056
57 static MediaEngineInterface* Create(
58 webrtc::AudioDeviceModule* adm,
59 const rtc::scoped_refptr<webrtc::AudioDecoderFactory>&
60 audio_decoder_factory,
61 WebRtcVideoEncoderFactory* video_encoder_factory,
62 WebRtcVideoDecoderFactory* video_decoder_factory,
peaha9cc40b2017-06-29 08:32:09 -070063 rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer,
64 rtc::scoped_refptr<webrtc::AudioProcessing> apm);
ossueb1fde42017-05-02 06:46:30 -070065
66 static MediaEngineInterface* Create(
67 webrtc::AudioDeviceModule* adm,
68 const rtc::scoped_refptr<webrtc::AudioEncoderFactory>&
69 audio_encoder_factory,
70 const rtc::scoped_refptr<webrtc::AudioDecoderFactory>&
71 audio_decoder_factory,
72 WebRtcVideoEncoderFactory* video_encoder_factory,
73 WebRtcVideoDecoderFactory* video_decoder_factory);
74
75 static MediaEngineInterface* Create(
76 webrtc::AudioDeviceModule* adm,
77 const rtc::scoped_refptr<webrtc::AudioEncoderFactory>&
78 audio_encoder_factory,
79 const rtc::scoped_refptr<webrtc::AudioDecoderFactory>&
80 audio_decoder_factory,
81 WebRtcVideoEncoderFactory* video_encoder_factory,
82 WebRtcVideoDecoderFactory* video_decoder_factory,
peaha9cc40b2017-06-29 08:32:09 -070083 rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer,
84 rtc::scoped_refptr<webrtc::AudioProcessing> apm);
buildbot@webrtc.orgbb2d6582014-06-20 14:58:56 +000085};
86
solenberg7e4e01a2015-12-02 08:05:01 -080087// Verify that extension IDs are within 1-byte extension range and are not
88// overlapping.
isheriff6f8d6862016-05-26 11:24:55 -070089bool ValidateRtpExtensions(const std::vector<webrtc::RtpExtension>& extensions);
Stefan Holmerbbaf3632015-10-29 18:53:23 +010090
isheriff6f8d6862016-05-26 11:24:55 -070091// Discard any extensions not validated by the 'supported' predicate. Duplicate
solenberg7e4e01a2015-12-02 08:05:01 -080092// extensions are removed if 'filter_redundant_extensions' is set, and also any
isheriff6f8d6862016-05-26 11:24:55 -070093// mutually exclusive extensions (see implementation for details) are removed.
solenberg7e4e01a2015-12-02 08:05:01 -080094std::vector<webrtc::RtpExtension> FilterRtpExtensions(
isheriff6f8d6862016-05-26 11:24:55 -070095 const std::vector<webrtc::RtpExtension>& extensions,
solenberg7e4e01a2015-12-02 08:05:01 -080096 bool (*supported)(const std::string&),
97 bool filter_redundant_extensions);
Stefan Holmerbbaf3632015-10-29 18:53:23 +010098
stefan13f1a0a2016-11-30 07:22:58 -080099webrtc::Call::Config::BitrateConfig GetBitrateConfigForCodec(
100 const Codec& codec);
101
buildbot@webrtc.orgbb2d6582014-06-20 14:58:56 +0000102} // namespace cricket
103
kjellander@webrtc.org5ad12972016-02-12 06:39:40 +0100104#endif // WEBRTC_MEDIA_ENGINE_WEBRTCMEDIAENGINE_H_