OrtcFactoryInterface::Create(): Require caller to supply audio codec factories
So that we don't have to be capable of creating one ourselves, which requires a dependency on the audio codecs. BUG=webrtc:8396 Change-Id: I5600da5e17f613b0e61a9fb0fbdb373fe42f855c Reviewed-on: https://webrtc-review.googlesource.com/20220 Reviewed-by: Peter Thatcher <pthatcher@webrtc.org> Commit-Queue: Karl Wiberg <kwiberg@webrtc.org> Cr-Commit-Position: refs/heads/master@{#20641}
This commit is contained in:
parent
1a87a8f871
commit
3e9e5b39d1
@ -76,21 +76,29 @@ class OrtcFactoryInterface {
|
||||
// be injected; otherwise a platform-specific module will be used that will
|
||||
// use the default audio input.
|
||||
//
|
||||
// |audio_encoder_factory| and |audio_decoder_factory| are used to
|
||||
// instantiate audio codecs; they determine what codecs are supported.
|
||||
//
|
||||
// Note that the OrtcFactoryInterface does not take ownership of any of the
|
||||
// objects passed in, and as previously stated, these objects can't be
|
||||
// destroyed before the factory is.
|
||||
// objects passed in by raw pointer, and as previously stated, these objects
|
||||
// can't be destroyed before the factory is.
|
||||
static RTCErrorOr<std::unique_ptr<OrtcFactoryInterface>> Create(
|
||||
rtc::Thread* network_thread,
|
||||
rtc::Thread* signaling_thread,
|
||||
rtc::NetworkManager* network_manager,
|
||||
rtc::PacketSocketFactory* socket_factory,
|
||||
AudioDeviceModule* adm);
|
||||
AudioDeviceModule* adm,
|
||||
rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
|
||||
rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory);
|
||||
|
||||
// Constructor for convenience which uses default implementations of
|
||||
// everything (though does still require that the current thread runs a
|
||||
// message loop; see above).
|
||||
static RTCErrorOr<std::unique_ptr<OrtcFactoryInterface>> Create() {
|
||||
return Create(nullptr, nullptr, nullptr, nullptr, nullptr);
|
||||
// Constructor for convenience which uses default implementations where
|
||||
// possible (though does still require that the current thread runs a message
|
||||
// loop; see above).
|
||||
static RTCErrorOr<std::unique_ptr<OrtcFactoryInterface>> Create(
|
||||
rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
|
||||
rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory) {
|
||||
return Create(nullptr, nullptr, nullptr, nullptr, nullptr,
|
||||
audio_encoder_factory, audio_decoder_factory);
|
||||
}
|
||||
|
||||
virtual ~OrtcFactoryInterface() {}
|
||||
|
||||
@ -34,8 +34,6 @@ rtc_static_library("ortc") {
|
||||
# libjingle_peerconnection.
|
||||
deps = [
|
||||
"../api:optional",
|
||||
"../api/audio_codecs:builtin_audio_decoder_factory",
|
||||
"../api/audio_codecs:builtin_audio_encoder_factory",
|
||||
"../call:call_interfaces",
|
||||
"../call:rtp_sender",
|
||||
"../logging:rtc_event_log_api",
|
||||
@ -78,6 +76,8 @@ if (rtc_include_tests) {
|
||||
|
||||
deps = [
|
||||
":ortc",
|
||||
"../api/audio_codecs:builtin_audio_decoder_factory",
|
||||
"../api/audio_codecs:builtin_audio_encoder_factory",
|
||||
"../media:rtc_media_tests_utils",
|
||||
"../p2p:p2p_test_utils",
|
||||
"../p2p:rtc_p2p",
|
||||
|
||||
@ -14,8 +14,6 @@
|
||||
#include <utility> // For std::move.
|
||||
#include <vector>
|
||||
|
||||
#include "api/audio_codecs/builtin_audio_decoder_factory.h"
|
||||
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
|
||||
#include "api/mediastreamtrackproxy.h"
|
||||
#include "api/proxy.h"
|
||||
#include "api/rtcerror.h"
|
||||
@ -137,7 +135,9 @@ RTCErrorOr<std::unique_ptr<OrtcFactoryInterface>> OrtcFactory::Create(
|
||||
rtc::NetworkManager* network_manager,
|
||||
rtc::PacketSocketFactory* socket_factory,
|
||||
AudioDeviceModule* adm,
|
||||
std::unique_ptr<cricket::MediaEngineInterface> media_engine) {
|
||||
std::unique_ptr<cricket::MediaEngineInterface> media_engine,
|
||||
rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
|
||||
rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory) {
|
||||
// Hop to signaling thread if needed.
|
||||
if (signaling_thread && !signaling_thread->IsCurrent()) {
|
||||
return signaling_thread
|
||||
@ -145,10 +145,12 @@ RTCErrorOr<std::unique_ptr<OrtcFactoryInterface>> OrtcFactory::Create(
|
||||
RTC_FROM_HERE,
|
||||
rtc::Bind(&OrtcFactory::Create_s, network_thread, signaling_thread,
|
||||
network_manager, socket_factory, adm,
|
||||
media_engine.release()));
|
||||
media_engine.release(), audio_encoder_factory,
|
||||
audio_decoder_factory));
|
||||
}
|
||||
return Create_s(network_thread, signaling_thread, network_manager,
|
||||
socket_factory, adm, media_engine.release());
|
||||
socket_factory, adm, media_engine.release(),
|
||||
audio_encoder_factory, audio_decoder_factory);
|
||||
}
|
||||
|
||||
RTCErrorOr<std::unique_ptr<OrtcFactoryInterface>> OrtcFactoryInterface::Create(
|
||||
@ -156,24 +158,30 @@ RTCErrorOr<std::unique_ptr<OrtcFactoryInterface>> OrtcFactoryInterface::Create(
|
||||
rtc::Thread* signaling_thread,
|
||||
rtc::NetworkManager* network_manager,
|
||||
rtc::PacketSocketFactory* socket_factory,
|
||||
AudioDeviceModule* adm) {
|
||||
AudioDeviceModule* adm,
|
||||
rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
|
||||
rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory) {
|
||||
return OrtcFactory::Create(network_thread, signaling_thread, network_manager,
|
||||
socket_factory, adm, nullptr);
|
||||
socket_factory, adm, nullptr,
|
||||
audio_encoder_factory, audio_decoder_factory);
|
||||
}
|
||||
|
||||
OrtcFactory::OrtcFactory(rtc::Thread* network_thread,
|
||||
rtc::Thread* signaling_thread,
|
||||
rtc::NetworkManager* network_manager,
|
||||
rtc::PacketSocketFactory* socket_factory,
|
||||
AudioDeviceModule* adm)
|
||||
OrtcFactory::OrtcFactory(
|
||||
rtc::Thread* network_thread,
|
||||
rtc::Thread* signaling_thread,
|
||||
rtc::NetworkManager* network_manager,
|
||||
rtc::PacketSocketFactory* socket_factory,
|
||||
AudioDeviceModule* adm,
|
||||
rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
|
||||
rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory)
|
||||
: network_thread_(network_thread),
|
||||
signaling_thread_(signaling_thread),
|
||||
network_manager_(network_manager),
|
||||
socket_factory_(socket_factory),
|
||||
adm_(adm),
|
||||
null_event_log_(RtcEventLog::CreateNull()),
|
||||
audio_encoder_factory_(CreateBuiltinAudioEncoderFactory()),
|
||||
audio_decoder_factory_(CreateBuiltinAudioDecoderFactory()) {
|
||||
audio_encoder_factory_(audio_encoder_factory),
|
||||
audio_decoder_factory_(audio_decoder_factory) {
|
||||
if (!rtc::CreateRandomString(kDefaultRtcpCnameLength, &default_cname_)) {
|
||||
RTC_LOG(LS_ERROR) << "Failed to generate CNAME?";
|
||||
RTC_NOTREACHED();
|
||||
@ -502,12 +510,15 @@ RTCErrorOr<std::unique_ptr<OrtcFactoryInterface>> OrtcFactory::Create_s(
|
||||
rtc::NetworkManager* network_manager,
|
||||
rtc::PacketSocketFactory* socket_factory,
|
||||
AudioDeviceModule* adm,
|
||||
cricket::MediaEngineInterface* media_engine) {
|
||||
cricket::MediaEngineInterface* media_engine,
|
||||
rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
|
||||
rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory) {
|
||||
// Add the unique_ptr wrapper back.
|
||||
std::unique_ptr<cricket::MediaEngineInterface> owned_media_engine(
|
||||
media_engine);
|
||||
std::unique_ptr<OrtcFactory> new_factory(new OrtcFactory(
|
||||
network_thread, signaling_thread, network_manager, socket_factory, adm));
|
||||
network_thread, signaling_thread, network_manager, socket_factory, adm,
|
||||
audio_encoder_factory, audio_decoder_factory));
|
||||
RTCError err = new_factory->Initialize(std::move(owned_media_engine));
|
||||
if (!err.ok()) {
|
||||
return std::move(err);
|
||||
|
||||
@ -38,7 +38,9 @@ class OrtcFactory : public OrtcFactoryInterface {
|
||||
rtc::NetworkManager* network_manager,
|
||||
rtc::PacketSocketFactory* socket_factory,
|
||||
AudioDeviceModule* adm,
|
||||
std::unique_ptr<cricket::MediaEngineInterface> media_engine);
|
||||
std::unique_ptr<cricket::MediaEngineInterface> media_engine,
|
||||
rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
|
||||
rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory);
|
||||
|
||||
RTCErrorOr<std::unique_ptr<RtpTransportControllerInterface>>
|
||||
CreateRtpTransportController() override;
|
||||
@ -101,7 +103,9 @@ class OrtcFactory : public OrtcFactoryInterface {
|
||||
rtc::Thread* signaling_thread,
|
||||
rtc::NetworkManager* network_manager,
|
||||
rtc::PacketSocketFactory* socket_factory,
|
||||
AudioDeviceModule* adm);
|
||||
AudioDeviceModule* adm,
|
||||
rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
|
||||
rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory);
|
||||
|
||||
RTCErrorOr<std::unique_ptr<RtpTransportControllerInterface>>
|
||||
CreateRtpTransportController(const RtpTransportParameters& parameters);
|
||||
@ -114,7 +118,9 @@ class OrtcFactory : public OrtcFactoryInterface {
|
||||
rtc::NetworkManager* network_manager,
|
||||
rtc::PacketSocketFactory* socket_factory,
|
||||
AudioDeviceModule* adm,
|
||||
cricket::MediaEngineInterface* media_engine);
|
||||
cricket::MediaEngineInterface* media_engine,
|
||||
rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
|
||||
rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory);
|
||||
|
||||
// Performs initialization that can fail. Called by factory method after
|
||||
// construction, and if it fails, no object is returned.
|
||||
|
||||
@ -11,6 +11,8 @@
|
||||
#include <memory>
|
||||
#include <utility> // For std::pair, std::move.
|
||||
|
||||
#include "api/audio_codecs/builtin_audio_decoder_factory.h"
|
||||
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
|
||||
#include "api/ortc/ortcfactoryinterface.h"
|
||||
#include "ortc/testrtpparameters.h"
|
||||
#include "p2p/base/udptransport.h"
|
||||
@ -77,14 +79,18 @@ class OrtcFactoryIntegrationTest : public testing::Test {
|
||||
virtual_socket_server_.SetDefaultRoute(kIPv4LocalHostAddress);
|
||||
network_thread_.Start();
|
||||
// Need to create after network thread is started.
|
||||
ortc_factory1_ = OrtcFactoryInterface::Create(
|
||||
&network_thread_, nullptr, &fake_network_manager_,
|
||||
nullptr, fake_audio_capture_module1_)
|
||||
.MoveValue();
|
||||
ortc_factory2_ = OrtcFactoryInterface::Create(
|
||||
&network_thread_, nullptr, &fake_network_manager_,
|
||||
nullptr, fake_audio_capture_module2_)
|
||||
.MoveValue();
|
||||
ortc_factory1_ =
|
||||
OrtcFactoryInterface::Create(
|
||||
&network_thread_, nullptr, &fake_network_manager_, nullptr,
|
||||
fake_audio_capture_module1_, CreateBuiltinAudioEncoderFactory(),
|
||||
CreateBuiltinAudioDecoderFactory())
|
||||
.MoveValue();
|
||||
ortc_factory2_ =
|
||||
OrtcFactoryInterface::Create(
|
||||
&network_thread_, nullptr, &fake_network_manager_, nullptr,
|
||||
fake_audio_capture_module2_, CreateBuiltinAudioEncoderFactory(),
|
||||
CreateBuiltinAudioDecoderFactory())
|
||||
.MoveValue();
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
@ -10,6 +10,8 @@
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "api/audio_codecs/builtin_audio_decoder_factory.h"
|
||||
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
|
||||
#include "media/base/fakemediaengine.h"
|
||||
#include "ortc/ortcfactory.h"
|
||||
#include "ortc/testrtpparameters.h"
|
||||
@ -32,7 +34,9 @@ class OrtcFactoryTest : public testing::Test {
|
||||
OrtcFactory::Create(&thread_, nullptr, &fake_network_manager_, nullptr,
|
||||
nullptr,
|
||||
std::unique_ptr<cricket::MediaEngineInterface>(
|
||||
new cricket::FakeMediaEngine()))
|
||||
new cricket::FakeMediaEngine()),
|
||||
CreateBuiltinAudioEncoderFactory(),
|
||||
CreateBuiltinAudioDecoderFactory())
|
||||
.MoveValue();
|
||||
}
|
||||
|
||||
|
||||
@ -10,6 +10,8 @@
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "api/audio_codecs/builtin_audio_decoder_factory.h"
|
||||
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
|
||||
#include "media/base/fakemediaengine.h"
|
||||
#include "ortc/ortcfactory.h"
|
||||
#include "ortc/testrtpparameters.h"
|
||||
@ -34,7 +36,8 @@ class OrtcRtpReceiverTest : public testing::Test {
|
||||
// use FakePacketTransport.
|
||||
auto ortc_factory_result = OrtcFactory::Create(
|
||||
nullptr, nullptr, nullptr, nullptr, nullptr,
|
||||
std::unique_ptr<cricket::MediaEngineInterface>(fake_media_engine_));
|
||||
std::unique_ptr<cricket::MediaEngineInterface>(fake_media_engine_),
|
||||
CreateBuiltinAudioEncoderFactory(), CreateBuiltinAudioDecoderFactory());
|
||||
ortc_factory_ = ortc_factory_result.MoveValue();
|
||||
RtpTransportParameters parameters;
|
||||
parameters.rtcp.mux = true;
|
||||
|
||||
@ -10,6 +10,8 @@
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "api/audio_codecs/builtin_audio_decoder_factory.h"
|
||||
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
|
||||
#include "media/base/fakemediaengine.h"
|
||||
#include "ortc/ortcfactory.h"
|
||||
#include "ortc/testrtpparameters.h"
|
||||
@ -38,7 +40,8 @@ class OrtcRtpSenderTest : public testing::Test {
|
||||
// use FakePacketTransport.
|
||||
auto ortc_factory_result = OrtcFactory::Create(
|
||||
nullptr, nullptr, nullptr, nullptr, nullptr,
|
||||
std::unique_ptr<cricket::MediaEngineInterface>(fake_media_engine_));
|
||||
std::unique_ptr<cricket::MediaEngineInterface>(fake_media_engine_),
|
||||
CreateBuiltinAudioEncoderFactory(), CreateBuiltinAudioDecoderFactory());
|
||||
ortc_factory_ = ortc_factory_result.MoveValue();
|
||||
RtpTransportParameters parameters;
|
||||
parameters.rtcp.mux = true;
|
||||
|
||||
@ -10,6 +10,8 @@
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "api/audio_codecs/builtin_audio_decoder_factory.h"
|
||||
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
|
||||
#include "media/base/fakemediaengine.h"
|
||||
#include "ortc/ortcfactory.h"
|
||||
#include "ortc/testrtpparameters.h"
|
||||
@ -29,7 +31,8 @@ class RtpTransportTest : public testing::Test {
|
||||
// FakePacketTransports.
|
||||
auto result = OrtcFactory::Create(
|
||||
nullptr, nullptr, nullptr, nullptr, nullptr,
|
||||
std::unique_ptr<cricket::MediaEngineInterface>(fake_media_engine_));
|
||||
std::unique_ptr<cricket::MediaEngineInterface>(fake_media_engine_),
|
||||
CreateBuiltinAudioEncoderFactory(), CreateBuiltinAudioDecoderFactory());
|
||||
ortc_factory_ = result.MoveValue();
|
||||
}
|
||||
|
||||
|
||||
@ -10,6 +10,8 @@
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "api/audio_codecs/builtin_audio_decoder_factory.h"
|
||||
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
|
||||
#include "media/base/fakemediaengine.h"
|
||||
#include "ortc/ortcfactory.h"
|
||||
#include "ortc/testrtpparameters.h"
|
||||
@ -31,10 +33,11 @@ class RtpTransportControllerTest : public testing::Test {
|
||||
RtpTransportControllerTest() {
|
||||
// Note: This doesn't need to use fake network classes, since it uses
|
||||
// FakePacketTransports.
|
||||
auto result =
|
||||
OrtcFactory::Create(nullptr, nullptr, nullptr, nullptr, nullptr,
|
||||
std::unique_ptr<cricket::MediaEngineInterface>(
|
||||
new cricket::FakeMediaEngine()));
|
||||
auto result = OrtcFactory::Create(
|
||||
nullptr, nullptr, nullptr, nullptr, nullptr,
|
||||
std::unique_ptr<cricket::MediaEngineInterface>(
|
||||
new cricket::FakeMediaEngine()),
|
||||
CreateBuiltinAudioEncoderFactory(), CreateBuiltinAudioDecoderFactory());
|
||||
ortc_factory_ = result.MoveValue();
|
||||
rtp_transport_controller_ =
|
||||
ortc_factory_->CreateRtpTransportController().MoveValue();
|
||||
|
||||
@ -10,6 +10,8 @@
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "api/audio_codecs/builtin_audio_decoder_factory.h"
|
||||
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
|
||||
#include "media/base/fakemediaengine.h"
|
||||
#include "ortc/ortcfactory.h"
|
||||
#include "ortc/testrtpparameters.h"
|
||||
@ -51,7 +53,8 @@ class SrtpTransportTest : public testing::Test {
|
||||
// FakePacketTransports.
|
||||
auto result = OrtcFactory::Create(
|
||||
nullptr, nullptr, nullptr, nullptr, nullptr,
|
||||
std::unique_ptr<cricket::MediaEngineInterface>(fake_media_engine_));
|
||||
std::unique_ptr<cricket::MediaEngineInterface>(fake_media_engine_),
|
||||
CreateBuiltinAudioEncoderFactory(), CreateBuiltinAudioDecoderFactory());
|
||||
ortc_factory_ = result.MoveValue();
|
||||
rtp_transport_controller_ =
|
||||
ortc_factory_->CreateRtpTransportController().MoveValue();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user