This CL exposes the new type of video codec factories that represent all video codecs in the PeerConnectionFactory API, i.e. no extra internal SW video codecs will be added. Clients of the new functions will be responsible for adding all SW video codecs themselves, and also handling SW fallback and simulcast. BUG=webrtc:7925 R=deadbeef@webrtc.org Review-Url: https://codereview.webrtc.org/3004353002 . Cr-Commit-Position: refs/heads/master@{#19866}
174 lines
7.5 KiB
C++
174 lines
7.5 KiB
C++
/*
|
|
* Copyright 2017 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#include "api/audio_codecs/builtin_audio_decoder_factory.h"
|
|
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
|
|
#include "api/peerconnectioninterface.h"
|
|
#include "api/video_codecs/video_decoder_factory.h"
|
|
#include "api/video_codecs/video_encoder_factory.h"
|
|
#include "call/callfactoryinterface.h"
|
|
#include "logging/rtc_event_log/rtc_event_log_factory_interface.h"
|
|
#include "media/engine/webrtcmediaengine.h"
|
|
#include "modules/audio_device/include/audio_device.h"
|
|
#include "modules/audio_processing/include/audio_processing.h"
|
|
#include "rtc_base/bind.h"
|
|
#include "rtc_base/scoped_ref_ptr.h"
|
|
#include "rtc_base/thread.h"
|
|
|
|
namespace webrtc {
|
|
|
|
rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
|
|
rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
|
|
rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory) {
|
|
return CreatePeerConnectionFactoryWithAudioMixer(
|
|
nullptr /*network_thread*/, nullptr /*worker_thread*/,
|
|
nullptr /*signaling_thread*/, nullptr /*default_adm*/,
|
|
audio_encoder_factory, audio_decoder_factory,
|
|
nullptr /*video_encoder_factory*/, nullptr /*video_decoder_factory*/,
|
|
nullptr /*audio_mixer*/);
|
|
}
|
|
|
|
rtc::scoped_refptr<PeerConnectionFactoryInterface>
|
|
CreatePeerConnectionFactory() {
|
|
return CreatePeerConnectionFactory(CreateBuiltinAudioEncoderFactory(),
|
|
CreateBuiltinAudioDecoderFactory());
|
|
}
|
|
|
|
// Note: all the other CreatePeerConnectionFactory variants just end up calling
|
|
// this, ultimately.
|
|
rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
|
|
rtc::Thread* network_thread,
|
|
rtc::Thread* worker_thread,
|
|
rtc::Thread* signaling_thread,
|
|
AudioDeviceModule* default_adm,
|
|
rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
|
|
rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
|
|
cricket::WebRtcVideoEncoderFactory* video_encoder_factory,
|
|
cricket::WebRtcVideoDecoderFactory* video_decoder_factory,
|
|
rtc::scoped_refptr<AudioMixer> audio_mixer,
|
|
rtc::scoped_refptr<AudioProcessing> audio_processing) {
|
|
rtc::scoped_refptr<AudioProcessing> audio_processing_use = audio_processing;
|
|
if (!audio_processing_use) {
|
|
audio_processing_use = AudioProcessing::Create();
|
|
}
|
|
|
|
std::unique_ptr<cricket::MediaEngineInterface> media_engine(
|
|
cricket::WebRtcMediaEngineFactory::Create(
|
|
default_adm, audio_encoder_factory, audio_decoder_factory,
|
|
video_encoder_factory, video_decoder_factory, audio_mixer,
|
|
audio_processing_use));
|
|
|
|
std::unique_ptr<CallFactoryInterface> call_factory = CreateCallFactory();
|
|
|
|
std::unique_ptr<RtcEventLogFactoryInterface> event_log_factory =
|
|
CreateRtcEventLogFactory();
|
|
|
|
return CreateModularPeerConnectionFactory(
|
|
network_thread, worker_thread, signaling_thread, default_adm,
|
|
audio_encoder_factory, audio_decoder_factory, video_encoder_factory,
|
|
video_decoder_factory, audio_mixer, std::move(media_engine),
|
|
std::move(call_factory), std::move(event_log_factory));
|
|
}
|
|
|
|
rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
|
|
rtc::Thread* network_thread,
|
|
rtc::Thread* worker_thread,
|
|
rtc::Thread* signaling_thread,
|
|
rtc::scoped_refptr<AudioDeviceModule> default_adm,
|
|
rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
|
|
rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
|
|
std::unique_ptr<VideoEncoderFactory> video_encoder_factory,
|
|
std::unique_ptr<VideoDecoderFactory> video_decoder_factory,
|
|
rtc::scoped_refptr<AudioMixer> audio_mixer,
|
|
rtc::scoped_refptr<AudioProcessing> audio_processing) {
|
|
if (!audio_processing)
|
|
audio_processing = AudioProcessing::Create();
|
|
|
|
std::unique_ptr<cricket::MediaEngineInterface> media_engine =
|
|
cricket::WebRtcMediaEngineFactory::Create(
|
|
default_adm, audio_encoder_factory, audio_decoder_factory,
|
|
std::move(video_encoder_factory), std::move(video_decoder_factory),
|
|
audio_mixer, audio_processing);
|
|
|
|
std::unique_ptr<CallFactoryInterface> call_factory = CreateCallFactory();
|
|
|
|
std::unique_ptr<RtcEventLogFactoryInterface> event_log_factory =
|
|
CreateRtcEventLogFactory();
|
|
|
|
return CreateModularPeerConnectionFactory(
|
|
network_thread, worker_thread, signaling_thread, default_adm,
|
|
audio_encoder_factory, audio_decoder_factory,
|
|
nullptr /* external_video_encoder_factory */,
|
|
nullptr /* external_video_decoder_factory */, audio_mixer,
|
|
std::move(media_engine), std::move(call_factory),
|
|
std::move(event_log_factory));
|
|
}
|
|
|
|
rtc::scoped_refptr<PeerConnectionFactoryInterface>
|
|
CreatePeerConnectionFactoryWithAudioMixer(
|
|
rtc::Thread* network_thread,
|
|
rtc::Thread* worker_thread,
|
|
rtc::Thread* signaling_thread,
|
|
AudioDeviceModule* default_adm,
|
|
rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
|
|
rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
|
|
cricket::WebRtcVideoEncoderFactory* video_encoder_factory,
|
|
cricket::WebRtcVideoDecoderFactory* video_decoder_factory,
|
|
rtc::scoped_refptr<AudioMixer> audio_mixer) {
|
|
return CreatePeerConnectionFactory(
|
|
network_thread, worker_thread, signaling_thread, default_adm,
|
|
audio_encoder_factory, audio_decoder_factory, video_encoder_factory,
|
|
video_decoder_factory, audio_mixer, nullptr);
|
|
}
|
|
|
|
rtc::scoped_refptr<PeerConnectionFactoryInterface>
|
|
CreatePeerConnectionFactoryWithAudioMixer(
|
|
rtc::Thread* network_thread,
|
|
rtc::Thread* worker_thread,
|
|
rtc::Thread* signaling_thread,
|
|
AudioDeviceModule* default_adm,
|
|
cricket::WebRtcVideoEncoderFactory* encoder_factory,
|
|
cricket::WebRtcVideoDecoderFactory* decoder_factory,
|
|
rtc::scoped_refptr<AudioMixer> audio_mixer) {
|
|
return CreatePeerConnectionFactoryWithAudioMixer(
|
|
network_thread, worker_thread, signaling_thread, default_adm,
|
|
CreateBuiltinAudioEncoderFactory(), CreateBuiltinAudioDecoderFactory(),
|
|
encoder_factory, decoder_factory, audio_mixer);
|
|
}
|
|
|
|
rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
|
|
rtc::Thread* network_thread,
|
|
rtc::Thread* worker_thread,
|
|
rtc::Thread* signaling_thread,
|
|
AudioDeviceModule* default_adm,
|
|
cricket::WebRtcVideoEncoderFactory* encoder_factory,
|
|
cricket::WebRtcVideoDecoderFactory* decoder_factory) {
|
|
return CreatePeerConnectionFactoryWithAudioMixer(
|
|
network_thread, worker_thread, signaling_thread, default_adm,
|
|
encoder_factory, decoder_factory, nullptr);
|
|
}
|
|
|
|
rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
|
|
rtc::Thread* network_thread,
|
|
rtc::Thread* worker_thread,
|
|
rtc::Thread* signaling_thread,
|
|
AudioDeviceModule* default_adm,
|
|
rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
|
|
rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
|
|
cricket::WebRtcVideoEncoderFactory* video_encoder_factory,
|
|
cricket::WebRtcVideoDecoderFactory* video_decoder_factory) {
|
|
return CreatePeerConnectionFactoryWithAudioMixer(
|
|
network_thread, worker_thread, signaling_thread, default_adm,
|
|
audio_encoder_factory, audio_decoder_factory, video_encoder_factory,
|
|
video_decoder_factory, nullptr);
|
|
}
|
|
|
|
} // namespace webrtc
|