Index: webrtc/voice_engine/channel.cc |
diff --git a/webrtc/voice_engine/channel.cc b/webrtc/voice_engine/channel.cc |
index a6c0c8d050538c45774ddee0883e6dad4a72450e..89bc03d526848acc2625da1f05af6961749121f5 100644 |
--- a/webrtc/voice_engine/channel.cc |
+++ b/webrtc/voice_engine/channel.cc |
@@ -21,6 +21,7 @@ |
#include "webrtc/base/timeutils.h" |
#include "webrtc/common.h" |
#include "webrtc/config.h" |
+#include "webrtc/modules/audio_coding/codecs/builtin_audio_decoder_factory.h" |
#include "webrtc/modules/audio_device/include/audio_device.h" |
#include "webrtc/modules/audio_processing/include/audio_processing.h" |
#include "webrtc/modules/include/module_common_types.h" |
@@ -659,11 +660,23 @@ int32_t Channel::CreateChannel(Channel*& channel, |
uint32_t instanceId, |
RtcEventLog* const event_log, |
const Config& config) { |
+ return CreateChannel(channel, channelId, instanceId, event_log, config, |
+ CreateBuiltinAudioDecoderFactory()); |
+} |
+ |
+int32_t Channel::CreateChannel( |
+ Channel*& channel, |
+ int32_t channelId, |
+ uint32_t instanceId, |
+ RtcEventLog* const event_log, |
+ const Config& config, |
+ std::shared_ptr<AudioDecoderFactory> decoder_factory) { |
WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(instanceId, channelId), |
"Channel::CreateChannel(channelId=%d, instanceId=%d)", channelId, |
instanceId); |
- channel = new Channel(channelId, instanceId, event_log, config); |
+ channel = new Channel(channelId, instanceId, event_log, config, |
+ std::move(decoder_factory)); |
if (channel == NULL) { |
WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(instanceId, channelId), |
"Channel::CreateChannel() unable to allocate memory for" |
@@ -723,7 +736,8 @@ void Channel::RecordFileEnded(int32_t id) { |
Channel::Channel(int32_t channelId, |
uint32_t instanceId, |
RtcEventLog* const event_log, |
- const Config& config) |
+ const Config& config, |
+ std::shared_ptr<AudioDecoderFactory> decoder_factory) |
: _instanceId(instanceId), |
_channelId(channelId), |
event_log_(event_log), |
@@ -798,7 +812,8 @@ Channel::Channel(int32_t channelId, |
pacing_enabled_(config.Get<VoicePacing>().enabled), |
feedback_observer_proxy_(new TransportFeedbackProxy()), |
seq_num_allocator_proxy_(new TransportSequenceNumberProxy()), |
- rtp_packet_sender_proxy_(new RtpPacketSenderProxy()) { |
+ rtp_packet_sender_proxy_(new RtpPacketSenderProxy()), |
+ decoder_factory_(decoder_factory) { |
WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_instanceId, _channelId), |
"Channel::Channel() - ctor"); |
AudioCodingModule::Config acm_config; |
@@ -811,6 +826,7 @@ Channel::Channel(int32_t channelId, |
} |
acm_config.neteq_config.enable_fast_accelerate = |
config.Get<NetEqFastAccelerate>().enabled; |
+ acm_config.decoder_factory = std::move(decoder_factory); |
audio_coding_.reset(AudioCodingModule::Create(acm_config)); |
_outputAudioLevel.Clear(); |
@@ -1052,6 +1068,10 @@ void Channel::SetSink(std::unique_ptr<AudioSinkInterface> sink) { |
audio_sink_ = std::move(sink); |
} |
+const std::shared_ptr<AudioDecoderFactory>& |
+Channel::GetAudioDecoderFactory() const { |
+ return decoder_factory_; |
+} |
int32_t Channel::StartPlayout() { |
WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), |
"Channel::StartPlayout()"); |