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

Unified Diff: webrtc/media/engine/webrtcvoiceengine.cc

Issue 2051073002: Remove RED support from WebRtcVoiceEngine/MediaChannel (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rebase Created 4 years, 6 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
« no previous file with comments | « webrtc/media/engine/webrtcvoiceengine.h ('k') | webrtc/media/engine/webrtcvoiceengine_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/media/engine/webrtcvoiceengine.cc
diff --git a/webrtc/media/engine/webrtcvoiceengine.cc b/webrtc/media/engine/webrtcvoiceengine.cc
index 95b08e71587e2aa970834b9c60b9fe41d9907d66..64acebfe4d7f52326d49bcaf5e53a32d62b7b4dc 100644
--- a/webrtc/media/engine/webrtcvoiceengine.cc
+++ b/webrtc/media/engine/webrtcvoiceengine.cc
@@ -384,13 +384,10 @@ class WebRtcVoiceCodecs final {
static const AudioCodec* GetPreferredCodec(
const std::vector<AudioCodec>& codecs,
- webrtc::CodecInst* out,
- int* red_payload_type) {
+ webrtc::CodecInst* out) {
RTC_DCHECK(out);
- RTC_DCHECK(red_payload_type);
// Select the preferred send codec (the first non-telephone-event/CN codec).
for (const AudioCodec& codec : codecs) {
- *red_payload_type = -1;
if (IsCodec(codec, kDtmfCodecName) || IsCodec(codec, kCnCodecName)) {
// Skip telephone-event/CN codec, which will be handled later.
continue;
@@ -398,27 +395,15 @@ class WebRtcVoiceCodecs final {
// We'll use the first codec in the list to actually send audio data.
// Be sure to use the payload type requested by the remote side.
- // "red", for RED audio, is a special case where the actual codec to be
- // used is specified in params.
- const AudioCodec* found_codec = &codec;
- if (IsCodec(*found_codec, kRedCodecName)) {
- // Parse out the RED parameters. If we fail, just ignore RED;
- // we don't support all possible params/usage scenarios.
- *red_payload_type = codec.id;
- found_codec = GetRedSendCodec(*found_codec, codecs);
- if (!found_codec) {
- continue;
- }
- }
// Ignore codecs we don't know about. The negotiation step should prevent
// this, but double-check to be sure.
webrtc::CodecInst voe_codec = {0};
- if (!ToCodecInst(*found_codec, &voe_codec)) {
- LOG(LS_WARNING) << "Unknown codec " << ToString(*found_codec);
+ if (!ToCodecInst(codec, &voe_codec)) {
+ LOG(LS_WARNING) << "Unknown codec " << ToString(codec);
continue;
}
*out = voe_codec;
- return found_codec;
+ return &codec;
}
return nullptr;
}
@@ -435,7 +420,7 @@ class WebRtcVoiceCodecs final {
int max_bitrate_bps;
};
// Note: keep the supported packet sizes in ascending order.
- static const CodecPref kCodecPrefs[12];
+ static const CodecPref kCodecPrefs[11];
static int SelectPacketSize(const CodecPref& codec_pref, int ptime_ms) {
int selected_packet_size_ms = codec_pref.packet_sizes_ms[0];
@@ -458,47 +443,9 @@ class WebRtcVoiceCodecs final {
voe_codec->plfreq = new_plfreq;
}
}
-
- static const AudioCodec* GetRedSendCodec(
- const AudioCodec& red_codec,
- const std::vector<AudioCodec>& all_codecs) {
- // Get the RED encodings from the parameter with no name. This may
- // change based on what is discussed on the Jingle list.
- // The encoding parameter is of the form "a/b"; we only support where
- // a == b. Verify this and parse out the value into red_pt.
- // If the parameter value is absent (as it will be until we wire up the
- // signaling of this message), use the second codec specified (i.e. the
- // one after "red") as the encoding parameter.
- int red_pt = -1;
- std::string red_params;
- CodecParameterMap::const_iterator it = red_codec.params.find("");
- if (it != red_codec.params.end()) {
- red_params = it->second;
- std::vector<std::string> red_pts;
- if (rtc::split(red_params, '/', &red_pts) != 2 ||
- red_pts[0] != red_pts[1] || !rtc::FromString(red_pts[0], &red_pt)) {
- LOG(LS_WARNING) << "RED params " << red_params << " not supported.";
- return nullptr;
- }
- } else if (red_codec.params.empty()) {
- LOG(LS_WARNING) << "RED params not present, using defaults";
- if (all_codecs.size() > 1) {
- red_pt = all_codecs[1].id;
- }
- }
-
- // Try to find red_pt in |codecs|.
- for (const AudioCodec& codec : all_codecs) {
- if (codec.id == red_pt) {
- return &codec;
- }
- }
- LOG(LS_WARNING) << "RED params " << red_params << " are invalid.";
- return nullptr;
- }
};
-const WebRtcVoiceCodecs::CodecPref WebRtcVoiceCodecs::kCodecPrefs[12] = {
+const WebRtcVoiceCodecs::CodecPref WebRtcVoiceCodecs::kCodecPrefs[11] = {
{kOpusCodecName, 48000, 2, 111, true, {10, 20, 40, 60}, kOpusMaxBitrate},
{kIsacCodecName, 16000, 1, 103, true, {30, 60}, kIsacMaxBitrate},
{kIsacCodecName, 32000, 1, 104, true, {30}, kIsacMaxBitrate},
@@ -510,8 +457,7 @@ const WebRtcVoiceCodecs::CodecPref WebRtcVoiceCodecs::kCodecPrefs[12] = {
{kCnCodecName, 32000, 1, 106, false, {}},
{kCnCodecName, 16000, 1, 105, false, {}},
{kCnCodecName, 8000, 1, 13, false, {}},
- {kRedCodecName, 8000, 1, 127, false, {}},
- {kDtmfCodecName, 8000, 1, 126, false, {}},
+ {kDtmfCodecName, 8000, 1, 126, false, {}}
};
} // namespace {
@@ -1657,46 +1603,41 @@ bool WebRtcVoiceMediaChannel::SetSendCodecs(
}
// Scan through the list to figure out the codec to use for sending, along
- // with the proper configuration for VAD, CNG, RED, NACK and Opus-specific
+ // with the proper configuration for VAD, CNG, NACK and Opus-specific
// parameters.
+ // TODO(solenberg): Refactor this logic once we create AudioEncoders here.
{
SendCodecSpec send_codec_spec;
send_codec_spec.nack_enabled = send_codec_spec_.nack_enabled;
// Find send codec (the first non-telephone-event/CN codec).
const AudioCodec* codec = WebRtcVoiceCodecs::GetPreferredCodec(
- codecs, &send_codec_spec.codec_inst, &send_codec_spec.red_payload_type);
+ codecs, &send_codec_spec.codec_inst);
if (!codec) {
LOG(LS_WARNING) << "Received empty list of codecs.";
return false;
}
send_codec_spec.transport_cc_enabled = HasTransportCc(*codec);
-
- // This condition is apparently here because Opus does not support RED and
- // FEC simultaneously. However, DTX and max playback rate shouldn't have
- // such limitations.
- // TODO(solenberg): Refactor this logic once we create AudioEncoders here.
- if (send_codec_spec.red_payload_type == -1) {
- send_codec_spec.nack_enabled = HasNack(*codec);
- // For Opus as the send codec, we are to determine inband FEC, maximum
- // playback rate, and opus internal dtx.
- if (IsCodec(*codec, kOpusCodecName)) {
- GetOpusConfig(*codec, &send_codec_spec.codec_inst,
- &send_codec_spec.enable_codec_fec,
- &send_codec_spec.opus_max_playback_rate,
- &send_codec_spec.enable_opus_dtx);
- }
-
- // Set packet size if the AudioCodec param kCodecParamPTime is set.
- int ptime_ms = 0;
- if (codec->GetParam(kCodecParamPTime, &ptime_ms)) {
- if (!WebRtcVoiceCodecs::SetPTimeAsPacketSize(
- &send_codec_spec.codec_inst, ptime_ms)) {
- LOG(LS_WARNING) << "Failed to set packet size for codec "
- << send_codec_spec.codec_inst.plname;
- return false;
- }
+ send_codec_spec.nack_enabled = HasNack(*codec);
+
+ // For Opus as the send codec, we are to determine inband FEC, maximum
+ // playback rate, and opus internal dtx.
+ if (IsCodec(*codec, kOpusCodecName)) {
+ GetOpusConfig(*codec, &send_codec_spec.codec_inst,
+ &send_codec_spec.enable_codec_fec,
+ &send_codec_spec.opus_max_playback_rate,
+ &send_codec_spec.enable_opus_dtx);
+ }
+
+ // Set packet size if the AudioCodec param kCodecParamPTime is set.
+ int ptime_ms = 0;
+ if (codec->GetParam(kCodecParamPTime, &ptime_ms)) {
+ if (!WebRtcVoiceCodecs::SetPTimeAsPacketSize(
+ &send_codec_spec.codec_inst, ptime_ms)) {
+ LOG(LS_WARNING) << "Failed to set packet size for codec "
+ << send_codec_spec.codec_inst.plname;
+ return false;
}
}
@@ -1768,24 +1709,11 @@ bool WebRtcVoiceMediaChannel::SetSendCodecs(
bool WebRtcVoiceMediaChannel::SetSendCodecs(
int channel,
const webrtc::RtpParameters& rtp_parameters) {
- // Disable VAD, FEC, and RED unless we know the other side wants them.
+ // Disable VAD, NACK and FEC unless we know the other side wants them.
engine()->voe()->codec()->SetVADStatus(channel, false);
engine()->voe()->rtp()->SetNACKStatus(channel, false, 0);
- engine()->voe()->rtp()->SetREDStatus(channel, false);
engine()->voe()->codec()->SetFECStatus(channel, false);
- if (send_codec_spec_.red_payload_type != -1) {
- // Enable redundant encoding of the specified codec. Treat any
- // failure as a fatal internal error.
- LOG(LS_INFO) << "Enabling RED on channel " << channel;
- if (engine()->voe()->rtp()->SetREDStatus(channel, true,
- send_codec_spec_.red_payload_type) == -1) {
- LOG_RTCERR3(SetREDStatus, channel, true,
- send_codec_spec_.red_payload_type);
- return false;
- }
- }
-
SetNack(channel, send_codec_spec_.nack_enabled);
// Set the codec immediately, since SetVADStatus() depends on whether
« no previous file with comments | « webrtc/media/engine/webrtcvoiceengine.h ('k') | webrtc/media/engine/webrtcvoiceengine_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698