blob: 0bd2ad5ac278ec70f5cd77a3f28b3b8d97fb31b1 [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
Steve Anton10542f22019-01-11 09:11:00 -080011#ifndef MEDIA_ENGINE_WEBRTC_MEDIA_ENGINE_H_
12#define MEDIA_ENGINE_WEBRTC_MEDIA_ENGINE_H_
henrike@webrtc.org28e20752013-07-10 00:45:36 +000013
Steve Antone78bcb92017-10-31 09:53:08 -070014#include <memory>
solenberg7e4e01a2015-12-02 08:05:01 -080015#include <string>
16#include <vector>
17
Danil Chapovalov85b8ce22019-05-31 15:51:04 +020018#include "api/audio/audio_mixer.h"
19#include "api/audio_codecs/audio_decoder_factory.h"
20#include "api/audio_codecs/audio_encoder_factory.h"
Danil Chapovalov85b8ce22019-05-31 15:51:04 +020021#include "api/rtp_parameters.h"
Danil Chapovalov4844c5f2019-04-10 14:10:10 +020022#include "api/task_queue/task_queue_factory.h"
Mirko Bonadei738bfa72019-09-17 14:47:38 +020023#include "api/transport/bitrate_settings.h"
Danil Chapovalov85b8ce22019-05-31 15:51:04 +020024#include "api/video_codecs/video_decoder_factory.h"
25#include "api/video_codecs/video_encoder_factory.h"
26#include "media/base/codec.h"
Steve Anton10542f22019-01-11 09:11:00 -080027#include "media/base/media_engine.h"
Fredrik Solenberg8f5787a2018-01-11 13:52:30 +010028#include "modules/audio_device/include/audio_device.h"
Danil Chapovalov85b8ce22019-05-31 15:51:04 +020029#include "modules/audio_processing/include/audio_processing.h"
Mirko Bonadei35214fc2019-09-23 14:54:28 +020030#include "rtc_base/system/rtc_export.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000031
buildbot@webrtc.org58e7c862014-06-20 00:26:50 +000032namespace cricket {
33
Danil Chapovalov4844c5f2019-04-10 14:10:10 +020034struct MediaEngineDependencies {
35 MediaEngineDependencies() = default;
36 MediaEngineDependencies(const MediaEngineDependencies&) = delete;
37 MediaEngineDependencies(MediaEngineDependencies&&) = default;
38 MediaEngineDependencies& operator=(const MediaEngineDependencies&) = delete;
39 MediaEngineDependencies& operator=(MediaEngineDependencies&&) = default;
40 ~MediaEngineDependencies() = default;
41
42 webrtc::TaskQueueFactory* task_queue_factory = nullptr;
43 rtc::scoped_refptr<webrtc::AudioDeviceModule> adm;
44 rtc::scoped_refptr<webrtc::AudioEncoderFactory> audio_encoder_factory;
45 rtc::scoped_refptr<webrtc::AudioDecoderFactory> audio_decoder_factory;
46 rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer;
47 rtc::scoped_refptr<webrtc::AudioProcessing> audio_processing;
48
49 std::unique_ptr<webrtc::VideoEncoderFactory> video_encoder_factory;
50 std::unique_ptr<webrtc::VideoDecoderFactory> video_decoder_factory;
Danil Chapovalov4844c5f2019-04-10 14:10:10 +020051};
52
Danil Chapovalov495a1ae2019-07-08 18:19:58 +020053// CreateMediaEngine may be called on any thread, though the engine is
54// only expected to be used on one thread, internally called the "worker
55// thread". This is the thread Init must be called on.
Mirko Bonadei35214fc2019-09-23 14:54:28 +020056RTC_EXPORT std::unique_ptr<MediaEngineInterface> CreateMediaEngine(
Danil Chapovalov4844c5f2019-04-10 14:10:10 +020057 MediaEngineDependencies dependencies);
58
solenberg7e4e01a2015-12-02 08:05:01 -080059// Verify that extension IDs are within 1-byte extension range and are not
60// overlapping.
isheriff6f8d6862016-05-26 11:24:55 -070061bool ValidateRtpExtensions(const std::vector<webrtc::RtpExtension>& extensions);
Stefan Holmerbbaf3632015-10-29 18:53:23 +010062
isheriff6f8d6862016-05-26 11:24:55 -070063// Discard any extensions not validated by the 'supported' predicate. Duplicate
solenberg7e4e01a2015-12-02 08:05:01 -080064// extensions are removed if 'filter_redundant_extensions' is set, and also any
isheriff6f8d6862016-05-26 11:24:55 -070065// mutually exclusive extensions (see implementation for details) are removed.
solenberg7e4e01a2015-12-02 08:05:01 -080066std::vector<webrtc::RtpExtension> FilterRtpExtensions(
isheriff6f8d6862016-05-26 11:24:55 -070067 const std::vector<webrtc::RtpExtension>& extensions,
solenberg7e4e01a2015-12-02 08:05:01 -080068 bool (*supported)(const std::string&),
69 bool filter_redundant_extensions);
Stefan Holmerbbaf3632015-10-29 18:53:23 +010070
Sebastian Janssonfc8d26b2018-02-21 09:52:06 +010071webrtc::BitrateConstraints GetBitrateConfigForCodec(const Codec& codec);
stefan13f1a0a2016-11-30 07:22:58 -080072
buildbot@webrtc.orgbb2d6582014-06-20 14:58:56 +000073} // namespace cricket
74
Steve Anton10542f22019-01-11 09:11:00 -080075#endif // MEDIA_ENGINE_WEBRTC_MEDIA_ENGINE_H_