blob: b9713e985be61c08696e10a10b8c9e5c254a3498 [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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#ifndef MEDIA_ENGINE_WEBRTCMEDIAENGINE_H_
12#define 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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020017#include "call/call.h"
18#include "media/base/mediaengine.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000019
20namespace webrtc {
ossuc54071d2016-08-17 02:45:41 -070021class AudioDecoderFactory;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000022class AudioDeviceModule;
gyzhou95aa9642016-12-13 14:06:26 -080023class AudioMixer;
peaha9cc40b2017-06-29 08:32:09 -070024class AudioProcessing;
Magnus Jedvert58b03162017-09-15 19:02:47 +020025class VideoDecoderFactory;
26class VideoEncoderFactory;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000027}
28namespace cricket {
29class WebRtcVideoDecoderFactory;
30class WebRtcVideoEncoderFactory;
31}
32
buildbot@webrtc.org58e7c862014-06-20 00:26:50 +000033namespace cricket {
34
henrike@webrtc.org0481f152014-08-19 14:56:59 +000035class WebRtcMediaEngineFactory {
buildbot@webrtc.org58e7c862014-06-20 00:26:50 +000036 public:
deadbeefeb02c032017-06-15 08:29:25 -070037 // These Create methods may be called on any thread, though the engine is
38 // only expected to be used on one thread, internally called the "worker
39 // thread". This is the thread Init must be called on.
40
ossu111744e2016-06-15 02:22:32 -070041 // TODO(ossu): Backwards-compatible interface. Will be deprecated once the
42 // audio decoder factory is fully plumbed and used throughout WebRTC.
43 // See: crbug.com/webrtc/6000
44 static MediaEngineInterface* Create(
45 webrtc::AudioDeviceModule* adm,
46 WebRtcVideoEncoderFactory* video_encoder_factory,
47 WebRtcVideoDecoderFactory* video_decoder_factory);
48
deadbeef112b2e92017-02-10 20:13:37 -080049 // TODO(deadbeef): Change these to return an std::unique_ptr<>, to indicate
50 // that the caller owns the returned object.
henrike@webrtc.org0481f152014-08-19 14:56:59 +000051 static MediaEngineInterface* Create(
buildbot@webrtc.org58e7c862014-06-20 00:26:50 +000052 webrtc::AudioDeviceModule* adm,
ossu29b1a8d2016-06-13 07:34:51 -070053 const rtc::scoped_refptr<webrtc::AudioDecoderFactory>&
54 audio_decoder_factory,
55 WebRtcVideoEncoderFactory* video_encoder_factory,
gyzhou39ce11f2016-12-12 17:06:49 -080056 WebRtcVideoDecoderFactory* video_decoder_factory);
gyzhou95aa9642016-12-13 14:06:26 -080057
58 static MediaEngineInterface* Create(
59 webrtc::AudioDeviceModule* adm,
60 const rtc::scoped_refptr<webrtc::AudioDecoderFactory>&
61 audio_decoder_factory,
62 WebRtcVideoEncoderFactory* video_encoder_factory,
63 WebRtcVideoDecoderFactory* video_decoder_factory,
peaha9cc40b2017-06-29 08:32:09 -070064 rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer,
65 rtc::scoped_refptr<webrtc::AudioProcessing> apm);
ossueb1fde42017-05-02 06:46:30 -070066
67 static MediaEngineInterface* Create(
68 webrtc::AudioDeviceModule* adm,
69 const rtc::scoped_refptr<webrtc::AudioEncoderFactory>&
70 audio_encoder_factory,
71 const rtc::scoped_refptr<webrtc::AudioDecoderFactory>&
72 audio_decoder_factory,
73 WebRtcVideoEncoderFactory* video_encoder_factory,
74 WebRtcVideoDecoderFactory* video_decoder_factory);
75
76 static MediaEngineInterface* Create(
77 webrtc::AudioDeviceModule* adm,
78 const rtc::scoped_refptr<webrtc::AudioEncoderFactory>&
79 audio_encoder_factory,
80 const rtc::scoped_refptr<webrtc::AudioDecoderFactory>&
81 audio_decoder_factory,
82 WebRtcVideoEncoderFactory* video_encoder_factory,
83 WebRtcVideoDecoderFactory* video_decoder_factory,
peaha9cc40b2017-06-29 08:32:09 -070084 rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer,
85 rtc::scoped_refptr<webrtc::AudioProcessing> apm);
Magnus Jedvert58b03162017-09-15 19:02:47 +020086
87 // Create a MediaEngineInterface with optional video codec factories. These
88 // video factories represents all video codecs, i.e. no extra internal video
89 // codecs will be added.
90 static std::unique_ptr<MediaEngineInterface> Create(
91 rtc::scoped_refptr<webrtc::AudioDeviceModule> adm,
92 rtc::scoped_refptr<webrtc::AudioEncoderFactory> audio_encoder_factory,
93 rtc::scoped_refptr<webrtc::AudioDecoderFactory> audio_decoder_factory,
94 std::unique_ptr<webrtc::VideoEncoderFactory> video_encoder_factory,
95 std::unique_ptr<webrtc::VideoDecoderFactory> video_decoder_factory,
96 rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer,
97 rtc::scoped_refptr<webrtc::AudioProcessing> audio_processing);
buildbot@webrtc.orgbb2d6582014-06-20 14:58:56 +000098};
99
solenberg7e4e01a2015-12-02 08:05:01 -0800100// Verify that extension IDs are within 1-byte extension range and are not
101// overlapping.
isheriff6f8d6862016-05-26 11:24:55 -0700102bool ValidateRtpExtensions(const std::vector<webrtc::RtpExtension>& extensions);
Stefan Holmerbbaf3632015-10-29 18:53:23 +0100103
isheriff6f8d6862016-05-26 11:24:55 -0700104// Discard any extensions not validated by the 'supported' predicate. Duplicate
solenberg7e4e01a2015-12-02 08:05:01 -0800105// extensions are removed if 'filter_redundant_extensions' is set, and also any
isheriff6f8d6862016-05-26 11:24:55 -0700106// mutually exclusive extensions (see implementation for details) are removed.
solenberg7e4e01a2015-12-02 08:05:01 -0800107std::vector<webrtc::RtpExtension> FilterRtpExtensions(
isheriff6f8d6862016-05-26 11:24:55 -0700108 const std::vector<webrtc::RtpExtension>& extensions,
solenberg7e4e01a2015-12-02 08:05:01 -0800109 bool (*supported)(const std::string&),
110 bool filter_redundant_extensions);
Stefan Holmerbbaf3632015-10-29 18:53:23 +0100111
stefan13f1a0a2016-11-30 07:22:58 -0800112webrtc::Call::Config::BitrateConfig GetBitrateConfigForCodec(
113 const Codec& codec);
114
buildbot@webrtc.orgbb2d6582014-06-20 14:58:56 +0000115} // namespace cricket
116
Mirko Bonadei92ea95e2017-09-15 06:47:31 +0200117#endif // MEDIA_ENGINE_WEBRTCMEDIAENGINE_H_