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

Unified Diff: webrtc/voice_engine/channel.cc

Issue 2924363004: Fix Channel::GetSendCodec when used together with SetEncoder. (Closed)
Patch Set: Update comments. Created 3 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/voice_engine/channel.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/voice_engine/channel.cc
diff --git a/webrtc/voice_engine/channel.cc b/webrtc/voice_engine/channel.cc
index b0bae4e4ceb0e05cd1ca421efdbc5943cf640e19..0a9e9fce34b8a3a3217eef8dbc4bac09b17182b3 100644
--- a/webrtc/voice_engine/channel.cc
+++ b/webrtc/voice_engine/channel.cc
@@ -1278,23 +1278,34 @@ bool Channel::SetEncoder(int payload_type,
std::unique_ptr<AudioEncoder> encoder) {
RTC_DCHECK_GE(payload_type, 0);
RTC_DCHECK_LE(payload_type, 127);
- // TODO(ossu): Make a CodecInst up for now. It seems like very little of this
- // information is actually used, possibly only payload type and clock rate.
- CodecInst lies;
- lies.pltype = payload_type;
- strncpy(lies.plname, "audio", sizeof(lies.plname));
- lies.plname[sizeof(lies.plname) - 1] = 0;
+ // TODO(ossu): Make CodecInsts up, for now: one for the RTP/RTCP module and
+ // one for for us to keep track of sample rate and number of channels, etc.
+
+ // The RTP/RTCP module needs to know the RTP timestamp rate (i.e. clockrate)
+ // as well as some other things, so we collect this info and send it along.
+ CodecInst rtp_codec;
+ rtp_codec.pltype = payload_type;
+ strncpy(rtp_codec.plname, "audio", sizeof(rtp_codec.plname));
+ rtp_codec.plname[sizeof(rtp_codec.plname) - 1] = 0;
// Seems unclear if it should be clock rate or sample rate. CodecInst
// supposedly carries the sample rate, but only clock rate seems sensible to
// send to the RTP/RTCP module.
- lies.plfreq = encoder->RtpTimestampRateHz();
- lies.pacsize = 0;
- lies.channels = encoder->NumChannels();
- lies.rate = 0;
-
- if (_rtpRtcpModule->RegisterSendPayload(lies) != 0) {
+ rtp_codec.plfreq = encoder->RtpTimestampRateHz();
+ rtp_codec.pacsize = rtc::CheckedDivExact(
+ static_cast<int>(encoder->Max10MsFramesInAPacket() * rtp_codec.plfreq),
+ 100);
+ rtp_codec.channels = encoder->NumChannels();
+ rtp_codec.rate = 0;
+
+ // For audio encoding we need, instead, the actual sample rate of the codec.
+ // The rest of the information should be the same.
+ CodecInst send_codec = rtp_codec;
+ send_codec.plfreq = encoder->SampleRateHz();
+ cached_send_codec_.emplace(send_codec);
the sun 2017/06/13 09:25:07 Though this may work in practice - won't the TSAN
ossu 2017/06/13 09:39:15 I was a bit worried about that as well, but having
+
+ if (_rtpRtcpModule->RegisterSendPayload(rtp_codec) != 0) {
_rtpRtcpModule->DeRegisterSendPayload(payload_type);
- if (_rtpRtcpModule->RegisterSendPayload(lies) != 0) {
+ if (_rtpRtcpModule->RegisterSendPayload(rtp_codec) != 0) {
WEBRTC_TRACE(
kTraceError, kTraceVoice, VoEId(_instanceId, _channelId),
"SetEncoder() failed to register codec to RTP/RTCP module");
@@ -1343,18 +1354,16 @@ int32_t Channel::DeRegisterVoiceEngineObserver() {
}
int32_t Channel::GetSendCodec(CodecInst& codec) {
- {
+ if (cached_send_codec_) {
+ codec = *cached_send_codec_;
+ return 0;
+ } else {
const CodecInst* send_codec = codec_manager_.GetCodecInst();
if (send_codec) {
codec = *send_codec;
return 0;
}
}
- rtc::Optional<CodecInst> acm_send_codec = audio_coding_->SendCodec();
- if (acm_send_codec) {
- codec = *acm_send_codec;
- return 0;
- }
return -1;
}
@@ -1383,6 +1392,8 @@ int32_t Channel::SetSendCodec(const CodecInst& codec) {
}
}
+ cached_send_codec_.reset();
+
return 0;
}
« no previous file with comments | « webrtc/voice_engine/channel.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698