Chromium Code Reviews| Index: webrtc/modules/audio_coding/acm2/audio_coding_module.cc |
| diff --git a/webrtc/modules/audio_coding/acm2/audio_coding_module.cc b/webrtc/modules/audio_coding/acm2/audio_coding_module.cc |
| index 6170d187bab14ab53b62fe9795c6c56332040c0a..b394c591567926b151b00a62c861f7f7bc35bbd1 100644 |
| --- a/webrtc/modules/audio_coding/acm2/audio_coding_module.cc |
| +++ b/webrtc/modules/audio_coding/acm2/audio_coding_module.cc |
| @@ -472,6 +472,11 @@ int32_t AudioCodingModuleImpl::Encode(const InputData& input_data) { |
| if (!HaveValidEncoder("Process")) |
| return -1; |
| + if(!first_frame_) { |
| + RTC_DCHECK_GT(input_data.input_timestamp, last_timestamp_) |
| + << "Time should not move backwards"; |
| + } |
| + |
| // Scale the timestamp to the codec's RTP timestamp rate. |
| uint32_t rtp_timestamp = |
| first_frame_ ? input_data.input_timestamp |
|
ossu
2016/07/06 08:38:56
Here is where the output timestamp gets adjusted i
|
| @@ -752,7 +757,8 @@ int AudioCodingModuleImpl::PreprocessToAddData(const AudioFrame& in_frame, |
| expected_codec_ts_ = in_frame.timestamp_; |
| first_10ms_data_ = true; |
| } else if (in_frame.timestamp_ != expected_in_ts_) { |
| - // TODO(turajs): Do we need a warning here. |
|
ossu
2016/07/05 16:39:04
Probably.
|
| + LOG(LS_WARNING) << "Unexpected input timestamp: " << in_frame.timestamp_ |
| + << ", expected: " << expected_in_ts_; |
|
tlegrand-webrtc
2016/07/06 08:25:44
Will we only end up here once in the case the code
ossu
2016/07/06 08:38:56
This shouldn't happen when the codec changes. In f
|
| expected_codec_ts_ += |
| (in_frame.timestamp_ - expected_in_ts_) * |
| static_cast<uint32_t>( |
| @@ -764,9 +770,19 @@ int AudioCodingModuleImpl::PreprocessToAddData(const AudioFrame& in_frame, |
| if (!down_mix && !resample) { |
| // No pre-processing is required. |
| + if (expected_in_ts_ == expected_codec_ts_) { |
| + // If we've never resampled, we can use the input frame as-is |
| + *ptr_out = &in_frame; |
| + } else { |
| + // Otherwise we'll need to alter the timestamp. Since in_frame is const, |
| + // we'll have to make a copy of it. |
| + preprocess_frame_.CopyFrom(in_frame); |
| + preprocess_frame_.timestamp_ = expected_codec_ts_; |
| + *ptr_out = &preprocess_frame_; |
| + } |
| + |
| expected_in_ts_ += static_cast<uint32_t>(in_frame.samples_per_channel_); |
| expected_codec_ts_ += static_cast<uint32_t>(in_frame.samples_per_channel_); |
| - *ptr_out = &in_frame; |
| return 0; |
| } |