Index: webrtc/modules/audio_coding/neteq/timestamp_scaler.cc |
diff --git a/webrtc/modules/audio_coding/neteq/timestamp_scaler.cc b/webrtc/modules/audio_coding/neteq/timestamp_scaler.cc |
index b228e017b2a30ffbcd70364d9d48d97e2b8d29f6..1f28639e435efcd9a94fb1813a5f3687f050e353 100644 |
--- a/webrtc/modules/audio_coding/neteq/timestamp_scaler.cc |
+++ b/webrtc/modules/audio_coding/neteq/timestamp_scaler.cc |
@@ -11,7 +11,6 @@ |
#include "webrtc/modules/audio_coding/neteq/timestamp_scaler.h" |
#include "webrtc/modules/audio_coding/neteq/decoder_database.h" |
-#include "webrtc/modules/audio_coding/neteq/defines.h" |
#include "webrtc/system_wrappers/include/logging.h" |
namespace webrtc { |
@@ -43,39 +42,25 @@ uint32_t TimestampScaler::ToInternal(uint32_t external_timestamp, |
// Payload type is unknown. Do not scale. |
return external_timestamp; |
} |
- switch (info->codec_type) { |
- case NetEqDecoder::kDecoderG722: |
- case NetEqDecoder::kDecoderG722_2ch: { |
- // Use timestamp scaling with factor 2 (two output samples per RTP |
- // timestamp). |
- numerator_ = 2; |
- denominator_ = 1; |
- break; |
- } |
- case NetEqDecoder::kDecoderAVT: |
- case NetEqDecoder::kDecoderCNGnb: |
- case NetEqDecoder::kDecoderCNGwb: |
- case NetEqDecoder::kDecoderCNGswb32kHz: |
- case NetEqDecoder::kDecoderCNGswb48kHz: { |
- // Do not change the timestamp scaling settings for DTMF or CNG. |
- break; |
- } |
- default: { |
- // Do not use timestamp scaling for any other codec. |
- numerator_ = 1; |
- denominator_ = 1; |
- break; |
+ if (!(info->IsComfortNoise() || info->IsDtmf())) { |
+ // Do not change the timestamp scaling settings for DTMF or CNG. |
+ numerator_ = info->SampleRateHz(); |
+ if (info->codec_type == NetEqDecoder::kDecoderArbitrary) { |
+ // We have no format mapping for "arbitrary" external codecs, so we cannot |
+ // support timestamp scaling of them. |
+ denominator_ = numerator_; |
+ } else { |
+ denominator_ = info->GetFormat().clockrate_hz; |
} |
} |
- |
- if (!(numerator_ == 1 && denominator_ == 1)) { |
+ if (numerator_ != denominator_) { |
// We have a scale factor != 1. |
if (!first_packet_received_) { |
external_ref_ = external_timestamp; |
internal_ref_ = external_timestamp; |
first_packet_received_ = true; |
} |
- int64_t external_diff = external_timestamp - external_ref_; |
+ const int64_t external_diff = int64_t{external_timestamp} - external_ref_; |
assert(denominator_ > 0); // Should not be possible. |
external_ref_ = external_timestamp; |
internal_ref_ += (external_diff * numerator_) / denominator_; |
@@ -88,11 +73,11 @@ uint32_t TimestampScaler::ToInternal(uint32_t external_timestamp, |
uint32_t TimestampScaler::ToExternal(uint32_t internal_timestamp) const { |
- if (!first_packet_received_ || (numerator_ == 1 && denominator_ == 1)) { |
+ if (!first_packet_received_ || (numerator_ == denominator_)) { |
// Not initialized, or scale factor is 1. |
return internal_timestamp; |
} else { |
- int64_t internal_diff = internal_timestamp - internal_ref_; |
+ const int64_t internal_diff = int64_t{internal_timestamp} - internal_ref_; |
assert(numerator_ > 0); // Should not be possible. |
// Do not update references in this method. |
// Switch |denominator_| and |numerator_| to convert the other way. |