OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 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 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
91 receive_timestamp = NowInTimestamp(ci->plfreq); | 91 receive_timestamp = NowInTimestamp(ci->plfreq); |
92 | 92 |
93 if (STR_CASE_CMP(ci->plname, "cn") == 0) { | 93 if (STR_CASE_CMP(ci->plname, "cn") == 0) { |
94 if (last_audio_decoder_ && last_audio_decoder_->channels > 1) { | 94 if (last_audio_decoder_ && last_audio_decoder_->channels > 1) { |
95 // This is a CNG and the audio codec is not mono, so skip pushing in | 95 // This is a CNG and the audio codec is not mono, so skip pushing in |
96 // packets into NetEq. | 96 // packets into NetEq. |
97 return 0; | 97 return 0; |
98 } | 98 } |
99 } else { | 99 } else { |
100 last_audio_decoder_ = ci; | 100 last_audio_decoder_ = ci; |
| 101 last_audio_format_ = neteq_->GetDecoderFormat(ci->pltype); |
| 102 RTC_DCHECK(last_audio_format_); |
101 last_packet_sample_rate_hz_ = rtc::Optional<int>(ci->plfreq); | 103 last_packet_sample_rate_hz_ = rtc::Optional<int>(ci->plfreq); |
102 } | 104 } |
103 | 105 |
104 } // |crit_sect_| is released. | 106 } // |crit_sect_| is released. |
105 | 107 |
106 if (neteq_->InsertPacket(rtp_header, incoming_payload, receive_timestamp) < | 108 if (neteq_->InsertPacket(rtp_header, incoming_payload, receive_timestamp) < |
107 0) { | 109 0) { |
108 LOG(LERROR) << "AcmReceiver::InsertPacket " | 110 LOG(LERROR) << "AcmReceiver::InsertPacket " |
109 << static_cast<int>(header->payloadType) | 111 << static_cast<int>(header->payloadType) |
110 << " Failed to insert packet"; | 112 << " Failed to insert packet"; |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 } | 233 } |
232 | 234 |
233 void AcmReceiver::FlushBuffers() { | 235 void AcmReceiver::FlushBuffers() { |
234 neteq_->FlushBuffers(); | 236 neteq_->FlushBuffers(); |
235 } | 237 } |
236 | 238 |
237 void AcmReceiver::RemoveAllCodecs() { | 239 void AcmReceiver::RemoveAllCodecs() { |
238 rtc::CritScope lock(&crit_sect_); | 240 rtc::CritScope lock(&crit_sect_); |
239 neteq_->RemoveAllPayloadTypes(); | 241 neteq_->RemoveAllPayloadTypes(); |
240 last_audio_decoder_ = rtc::Optional<CodecInst>(); | 242 last_audio_decoder_ = rtc::Optional<CodecInst>(); |
| 243 last_audio_format_ = rtc::Optional<SdpAudioFormat>(); |
241 last_packet_sample_rate_hz_ = rtc::Optional<int>(); | 244 last_packet_sample_rate_hz_ = rtc::Optional<int>(); |
242 } | 245 } |
243 | 246 |
244 int AcmReceiver::RemoveCodec(uint8_t payload_type) { | 247 int AcmReceiver::RemoveCodec(uint8_t payload_type) { |
245 rtc::CritScope lock(&crit_sect_); | 248 rtc::CritScope lock(&crit_sect_); |
246 if (neteq_->RemovePayloadType(payload_type) != NetEq::kOK && | 249 if (neteq_->RemovePayloadType(payload_type) != NetEq::kOK && |
247 neteq_->LastError() != NetEq::kDecoderNotFound) { | 250 neteq_->LastError() != NetEq::kDecoderNotFound) { |
248 LOG(LERROR) << "AcmReceiver::RemoveCodec" << static_cast<int>(payload_type); | 251 LOG(LERROR) << "AcmReceiver::RemoveCodec" << static_cast<int>(payload_type); |
249 return -1; | 252 return -1; |
250 } | 253 } |
251 if (last_audio_decoder_ && payload_type == last_audio_decoder_->pltype) { | 254 if (last_audio_decoder_ && payload_type == last_audio_decoder_->pltype) { |
252 last_audio_decoder_ = rtc::Optional<CodecInst>(); | 255 last_audio_decoder_ = rtc::Optional<CodecInst>(); |
| 256 last_audio_format_ = rtc::Optional<SdpAudioFormat>(); |
253 last_packet_sample_rate_hz_ = rtc::Optional<int>(); | 257 last_packet_sample_rate_hz_ = rtc::Optional<int>(); |
254 } | 258 } |
255 return 0; | 259 return 0; |
256 } | 260 } |
257 | 261 |
258 rtc::Optional<uint32_t> AcmReceiver::GetPlayoutTimestamp() { | 262 rtc::Optional<uint32_t> AcmReceiver::GetPlayoutTimestamp() { |
259 return neteq_->GetPlayoutTimestamp(); | 263 return neteq_->GetPlayoutTimestamp(); |
260 } | 264 } |
261 | 265 |
262 int AcmReceiver::FilteredCurrentDelayMs() const { | 266 int AcmReceiver::FilteredCurrentDelayMs() const { |
263 return neteq_->FilteredCurrentDelayMs(); | 267 return neteq_->FilteredCurrentDelayMs(); |
264 } | 268 } |
265 | 269 |
266 int AcmReceiver::LastAudioCodec(CodecInst* codec) const { | 270 int AcmReceiver::LastAudioCodec(CodecInst* codec) const { |
267 rtc::CritScope lock(&crit_sect_); | 271 rtc::CritScope lock(&crit_sect_); |
268 if (!last_audio_decoder_) { | 272 if (!last_audio_decoder_) { |
269 return -1; | 273 return -1; |
270 } | 274 } |
271 *codec = *last_audio_decoder_; | 275 *codec = *last_audio_decoder_; |
272 return 0; | 276 return 0; |
273 } | 277 } |
274 | 278 |
| 279 rtc::Optional<SdpAudioFormat> AcmReceiver::LastAudioFormat() const { |
| 280 rtc::CritScope lock(&crit_sect_); |
| 281 return last_audio_format_; |
| 282 } |
| 283 |
275 void AcmReceiver::GetNetworkStatistics(NetworkStatistics* acm_stat) { | 284 void AcmReceiver::GetNetworkStatistics(NetworkStatistics* acm_stat) { |
276 NetEqNetworkStatistics neteq_stat; | 285 NetEqNetworkStatistics neteq_stat; |
277 // NetEq function always returns zero, so we don't check the return value. | 286 // NetEq function always returns zero, so we don't check the return value. |
278 neteq_->NetworkStatistics(&neteq_stat); | 287 neteq_->NetworkStatistics(&neteq_stat); |
279 | 288 |
280 acm_stat->currentBufferSize = neteq_stat.current_buffer_size_ms; | 289 acm_stat->currentBufferSize = neteq_stat.current_buffer_size_ms; |
281 acm_stat->preferredBufferSize = neteq_stat.preferred_buffer_size_ms; | 290 acm_stat->preferredBufferSize = neteq_stat.preferred_buffer_size_ms; |
282 acm_stat->jitterPeaksFound = neteq_stat.jitter_peaks_found ? true : false; | 291 acm_stat->jitterPeaksFound = neteq_stat.jitter_peaks_found ? true : false; |
283 acm_stat->currentPacketLossRate = neteq_stat.packet_loss_rate; | 292 acm_stat->currentPacketLossRate = neteq_stat.packet_loss_rate; |
284 acm_stat->currentDiscardRate = neteq_stat.packet_discard_rate; | 293 acm_stat->currentDiscardRate = neteq_stat.packet_discard_rate; |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 | 363 |
355 void AcmReceiver::GetDecodingCallStatistics( | 364 void AcmReceiver::GetDecodingCallStatistics( |
356 AudioDecodingCallStats* stats) const { | 365 AudioDecodingCallStats* stats) const { |
357 rtc::CritScope lock(&crit_sect_); | 366 rtc::CritScope lock(&crit_sect_); |
358 *stats = call_stats_.GetDecodingStatistics(); | 367 *stats = call_stats_.GetDecodingStatistics(); |
359 } | 368 } |
360 | 369 |
361 } // namespace acm2 | 370 } // namespace acm2 |
362 | 371 |
363 } // namespace webrtc | 372 } // namespace webrtc |
OLD | NEW |