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

Side by Side Diff: webrtc/voice_engine/channel.cc

Issue 2355483003: Voe::Channel: Turned GetPlayoutFrequency into GetRtpTimestampRateHz. (Closed)
Patch Set: Handle zero clockrate, make better comments, fix bad spel Created 4 years, 2 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 unified diff | Download patch
« no previous file with comments | « webrtc/voice_engine/channel.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 } 667 }
668 668
669 if (capture_start_rtp_time_stamp_ >= 0) { 669 if (capture_start_rtp_time_stamp_ >= 0) {
670 // audioFrame.timestamp_ should be valid from now on. 670 // audioFrame.timestamp_ should be valid from now on.
671 671
672 // Compute elapsed time. 672 // Compute elapsed time.
673 int64_t unwrap_timestamp = 673 int64_t unwrap_timestamp =
674 rtp_ts_wraparound_handler_->Unwrap(audioFrame->timestamp_); 674 rtp_ts_wraparound_handler_->Unwrap(audioFrame->timestamp_);
675 audioFrame->elapsed_time_ms_ = 675 audioFrame->elapsed_time_ms_ =
676 (unwrap_timestamp - capture_start_rtp_time_stamp_) / 676 (unwrap_timestamp - capture_start_rtp_time_stamp_) /
677 (GetPlayoutFrequency() / 1000); 677 (GetRtpTimestampRateHz() / 1000);
678 678
679 { 679 {
680 rtc::CritScope lock(&ts_stats_lock_); 680 rtc::CritScope lock(&ts_stats_lock_);
681 // Compute ntp time. 681 // Compute ntp time.
682 audioFrame->ntp_time_ms_ = 682 audioFrame->ntp_time_ms_ =
683 ntp_estimator_.Estimate(audioFrame->timestamp_); 683 ntp_estimator_.Estimate(audioFrame->timestamp_);
684 // |ntp_time_ms_| won't be valid until at least 2 RTCP SRs are received. 684 // |ntp_time_ms_| won't be valid until at least 2 RTCP SRs are received.
685 if (audioFrame->ntp_time_ms_ > 0) { 685 if (audioFrame->ntp_time_ms_ > 0) {
686 // Compute |capture_start_ntp_time_ms_| so that 686 // Compute |capture_start_ntp_time_ms_| so that
687 // |capture_start_ntp_time_ms_| + |elapsed_time_ms_| == |ntp_time_ms_| 687 // |capture_start_ntp_time_ms_| + |elapsed_time_ms_| == |ntp_time_ms_|
(...skipping 2385 matching lines...) Expand 10 before | Expand all | Expand 10 after
3073 _engineStatisticsPtr->SetLastError( 3073 _engineStatisticsPtr->SetLastError(
3074 VE_CANNOT_RETRIEVE_VALUE, kTraceError, 3074 VE_CANNOT_RETRIEVE_VALUE, kTraceError,
3075 "UpdatePlayoutTimestamp() failed to retrieve playout delay"); 3075 "UpdatePlayoutTimestamp() failed to retrieve playout delay");
3076 return; 3076 return;
3077 } 3077 }
3078 3078
3079 RTC_DCHECK(jitter_buffer_playout_timestamp_); 3079 RTC_DCHECK(jitter_buffer_playout_timestamp_);
3080 uint32_t playout_timestamp = *jitter_buffer_playout_timestamp_; 3080 uint32_t playout_timestamp = *jitter_buffer_playout_timestamp_;
3081 3081
3082 // Remove the playout delay. 3082 // Remove the playout delay.
3083 playout_timestamp -= (delay_ms * (GetPlayoutFrequency() / 1000)); 3083 playout_timestamp -= (delay_ms * (GetRtpTimestampRateHz() / 1000));
3084 3084
3085 WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId, _channelId), 3085 WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId, _channelId),
3086 "Channel::UpdatePlayoutTimestamp() => playoutTimestamp = %lu", 3086 "Channel::UpdatePlayoutTimestamp() => playoutTimestamp = %lu",
3087 playout_timestamp); 3087 playout_timestamp);
3088 3088
3089 { 3089 {
3090 rtc::CritScope lock(&video_sync_lock_); 3090 rtc::CritScope lock(&video_sync_lock_);
3091 if (rtcp) { 3091 if (rtcp) {
3092 playout_timestamp_rtcp_ = playout_timestamp; 3092 playout_timestamp_rtcp_ = playout_timestamp;
3093 } else { 3093 } else {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
3133 RTPExtensionType type, 3133 RTPExtensionType type,
3134 unsigned char id) { 3134 unsigned char id) {
3135 int error = 0; 3135 int error = 0;
3136 _rtpRtcpModule->DeregisterSendRtpHeaderExtension(type); 3136 _rtpRtcpModule->DeregisterSendRtpHeaderExtension(type);
3137 if (enable) { 3137 if (enable) {
3138 error = _rtpRtcpModule->RegisterSendRtpHeaderExtension(type, id); 3138 error = _rtpRtcpModule->RegisterSendRtpHeaderExtension(type, id);
3139 } 3139 }
3140 return error; 3140 return error;
3141 } 3141 }
3142 3142
3143 int32_t Channel::GetPlayoutFrequency() const { 3143 int Channel::GetRtpTimestampRateHz() const {
3144 int32_t playout_frequency = audio_coding_->PlayoutFrequency(); 3144 const auto format = audio_coding_->ReceiveFormat();
3145 CodecInst current_recive_codec; 3145 // Default to the playout frequency if we've not gotten any packets yet.
3146 if (audio_coding_->ReceiveCodec(&current_recive_codec) == 0) { 3146 // TODO(ossu): Zero clockrate can only happen if we've added an external
3147 if (STR_CASE_CMP("G722", current_recive_codec.plname) == 0) { 3147 // decoder for a format we don't support internally. Remove once that way of
3148 // Even though the actual sampling rate for G.722 audio is 3148 // adding decoders is gone!
3149 // 16,000 Hz, the RTP clock rate for the G722 payload format is 3149 return (format && format->clockrate_hz != 0)
3150 // 8,000 Hz because that value was erroneously assigned in 3150 ? format->clockrate_hz
3151 // RFC 1890 and must remain unchanged for backward compatibility. 3151 : audio_coding_->PlayoutFrequency();
3152 playout_frequency = 8000;
3153 } else if (STR_CASE_CMP("opus", current_recive_codec.plname) == 0) {
3154 // We are resampling Opus internally to 32,000 Hz until all our
3155 // DSP routines can operate at 48,000 Hz, but the RTP clock
3156 // rate for the Opus payload format is standardized to 48,000 Hz,
3157 // because that is the maximum supported decoding sampling rate.
3158 playout_frequency = 48000;
3159 }
3160 }
3161 return playout_frequency;
3162 } 3152 }
3163 3153
3164 int64_t Channel::GetRTT(bool allow_associate_channel) const { 3154 int64_t Channel::GetRTT(bool allow_associate_channel) const {
3165 RtcpMode method = _rtpRtcpModule->RTCP(); 3155 RtcpMode method = _rtpRtcpModule->RTCP();
3166 if (method == RtcpMode::kOff) { 3156 if (method == RtcpMode::kOff) {
3167 return 0; 3157 return 0;
3168 } 3158 }
3169 std::vector<RTCPReportBlock> report_blocks; 3159 std::vector<RTCPReportBlock> report_blocks;
3170 _rtpRtcpModule->RemoteRTCPStat(&report_blocks); 3160 _rtpRtcpModule->RemoteRTCPStat(&report_blocks);
3171 3161
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
3205 int64_t min_rtt = 0; 3195 int64_t min_rtt = 0;
3206 if (_rtpRtcpModule->RTT(remoteSSRC, &rtt, &avg_rtt, &min_rtt, &max_rtt) != 3196 if (_rtpRtcpModule->RTT(remoteSSRC, &rtt, &avg_rtt, &min_rtt, &max_rtt) !=
3207 0) { 3197 0) {
3208 return 0; 3198 return 0;
3209 } 3199 }
3210 return rtt; 3200 return rtt;
3211 } 3201 }
3212 3202
3213 } // namespace voe 3203 } // namespace voe
3214 } // namespace webrtc 3204 } // namespace webrtc
OLDNEW
« 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