Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(87)

Unified Diff: webrtc/audio/audio_send_stream.cc

Issue 2705093002: Injectable audio encoders: WebRtcVoiceEngine and company (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/audio/audio_send_stream.cc
diff --git a/webrtc/audio/audio_send_stream.cc b/webrtc/audio/audio_send_stream.cc
index ec18125427282d4624543bc45b274d2b1a42692e..f6f5e4a8af9cc55c0c641141efb7fa2d3f0795e5 100644
--- a/webrtc/audio/audio_send_stream.cc
+++ b/webrtc/audio/audio_send_stream.cc
@@ -30,15 +30,6 @@
namespace webrtc {
-namespace {
-
-constexpr char kOpusCodecName[] = "opus";
-
-bool IsCodec(const webrtc::CodecInst& codec, const char* ref_name) {
- return (STR_CASE_CMP(codec.plname, ref_name) == 0);
-}
-} // namespace
-
namespace internal {
AudioSendStream::AudioSendStream(
const webrtc::AudioSendStream::Config& config,
@@ -285,58 +276,20 @@ bool AudioSendStream::SetupSendCodec() {
channel_proxy_->DisableAudioNetworkAdaptor();
const auto& send_codec_spec = config_.send_codec_spec;
-
- // We set the codec first, since the below extra configuration is only applied
- // to the "current" codec.
-
- // If codec is already configured, we do not it again.
- // TODO(minyue): check if this check is really needed, or can we move it into
- // |codec->SetSendCodec|.
- webrtc::CodecInst current_codec = {0};
- if (!channel_proxy_->GetSendCodec(&current_codec) ||
- (send_codec_spec.codec_inst != current_codec)) {
- if (!channel_proxy_->SetSendCodec(send_codec_spec.codec_inst)) {
- LOG(LS_WARNING) << "SetSendCodec() failed.";
- return false;
- }
- }
-
- // Codec internal FEC. Treat any failure as fatal internal error.
- if (send_codec_spec.enable_codec_fec) {
- if (!channel_proxy_->SetCodecFECStatus(true)) {
- LOG(LS_WARNING) << "SetCodecFECStatus() failed.";
- return false;
- }
+ channel_proxy_->SetSendFormat(send_codec_spec.payload_type,
+ send_codec_spec.format.format,
+ config_.encoder_factory.get());
+ // TODO(ossu): Formalize bandwidth parameters and send along to encoder
ossu 2017/02/21 11:04:14 This is one of the open questions: cricket::AudioC
kwiberg-webrtc 2017/02/21 23:35:03 It'd be good if we could do that. But that's only
+ // constructor.
+ if (send_codec_spec.target_bitrate_bps) {
+ channel_proxy_->SetBitrate(*send_codec_spec.target_bitrate_bps, 0);
}
-
- // DTX and maxplaybackrate are only set if current codec is Opus.
- if (IsCodec(send_codec_spec.codec_inst, kOpusCodecName)) {
- if (!channel_proxy_->SetOpusDtx(send_codec_spec.enable_opus_dtx)) {
- LOG(LS_WARNING) << "SetOpusDtx() failed.";
- return false;
- }
-
- // If opus_max_playback_rate <= 0, the default maximum playback rate
- // (48 kHz) will be used.
- if (send_codec_spec.opus_max_playback_rate > 0) {
- if (!channel_proxy_->SetOpusMaxPlaybackRate(
- send_codec_spec.opus_max_playback_rate)) {
- LOG(LS_WARNING) << "SetOpusMaxPlaybackRate() failed.";
- return false;
- }
- }
-
- if (config_.audio_network_adaptor_config) {
- // Audio network adaptor is only allowed for Opus currently.
- // |SetReceiverFrameLengthRange| needs to be called before
- // |EnableAudioNetworkAdaptor|.
- channel_proxy_->SetReceiverFrameLengthRange(send_codec_spec.min_ptime_ms,
- send_codec_spec.max_ptime_ms);
- channel_proxy_->EnableAudioNetworkAdaptor(
- *config_.audio_network_adaptor_config);
- LOG(LS_INFO) << "Audio network adaptor enabled on SSRC "
- << config_.rtp.ssrc;
- }
+ if (config_.audio_network_adaptor_config) {
+ // Audio network adaptor is only allowed for Opus currently.
+ channel_proxy_->EnableAudioNetworkAdaptor(
+ *config_.audio_network_adaptor_config);
+ LOG(LS_INFO) << "Audio network adaptor enabled on SSRC "
+ << config_.rtp.ssrc;
}
// Set the CN payloadtype and the VAD status.
@@ -371,8 +324,9 @@ bool AudioSendStream::SetupSendCodec() {
// Only turn on VAD if we have a CN payload type that matches the
// clockrate for the codec we are going to use.
- if (send_codec_spec.cng_plfreq == send_codec_spec.codec_inst.plfreq &&
- send_codec_spec.codec_inst.channels == 1) {
+ if (send_codec_spec.cng_plfreq ==
+ send_codec_spec.format.format.clockrate_hz &&
+ send_codec_spec.format.info.num_channels == 1) {
// TODO(minyue): If CN frequency == 48000 Hz is allowed, consider the
// interaction between VAD and Opus FEC.
if (!channel_proxy_->SetVADStatus(true)) {

Powered by Google App Engine
This is Rietveld 408576698