diff --git a/webrtc/modules/audio_coding/neteq4/neteq_impl.cc b/webrtc/modules/audio_coding/neteq4/neteq_impl.cc index d6fce18cc..4ffe3e79e 100644 --- a/webrtc/modules/audio_coding/neteq4/neteq_impl.cc +++ b/webrtc/modules/audio_coding/neteq4/neteq_impl.cc @@ -833,10 +833,10 @@ int NetEqImpl::GetAudioInternal(size_t max_length, int16_t* output, sync_buffer_->set_dtmf_index(sync_buffer_->Size()); } - if ((last_mode_ != kModeExpand) && (last_mode_ != kModeRfc3389Cng)) { - // If last operation was neither expand, nor comfort noise, calculate the - // |playout_timestamp_| from the |sync_buffer_|. However, do not update the - // |playout_timestamp_| if it would be moved "backwards". + if (last_mode_ != kModeExpand) { + // If last operation was not expand, calculate the |playout_timestamp_| from + // the |sync_buffer_|. However, do not update the |playout_timestamp_| if it + // would be moved "backwards". uint32_t temp_timestamp = sync_buffer_->end_timestamp() - static_cast<uint32_t>(sync_buffer_->FutureLength()); if (static_cast<int32_t>(temp_timestamp - playout_timestamp_) > 0) { diff --git a/webrtc/modules/audio_coding/neteq4/neteq_unittest.cc b/webrtc/modules/audio_coding/neteq4/neteq_unittest.cc index 47e9e855e..b3372766b 100644 --- a/webrtc/modules/audio_coding/neteq4/neteq_unittest.cc +++ b/webrtc/modules/audio_coding/neteq4/neteq_unittest.cc @@ -788,15 +788,14 @@ void NetEqDecodingTest::LongCngWithClockDrift(double drift_factor) { EXPECT_GE(delay_after, delay_before - 20 * 16); } -TEST_F(NetEqDecodingTest, DISABLED_ON_ANDROID(LongCngWithClockNegativeDrift)) { +TEST_F(NetEqDecodingTest, DISABLED_ON_ANDROID(LongCngWithNegativeClockDrift)) { // Apply a clock drift of -25 ms / s (sender faster than receiver). const double kDriftFactor = 1000.0 / (1000.0 + 25.0); LongCngWithClockDrift(kDriftFactor); } // TODO(hlundin): Re-enable this test and fix the issues to make it pass. -TEST_F(NetEqDecodingTest, - DISABLED_ON_ANDROID(DISABLED_LongCngWithClockPositiveDrift)) { +TEST_F(NetEqDecodingTest, DISABLED_ON_ANDROID(LongCngWithPositiveClockDrift)) { // Apply a clock drift of +25 ms / s (sender slower than receiver). const double kDriftFactor = 1000.0 / (1000.0 - 25.0); LongCngWithClockDrift(kDriftFactor); diff --git a/webrtc/video/call_perf_tests.cc b/webrtc/video/call_perf_tests.cc index e4de87775..59f119a85 100644 --- a/webrtc/video/call_perf_tests.cc +++ b/webrtc/video/call_perf_tests.cc @@ -16,6 +16,8 @@ #include "testing/gtest/include/gtest/gtest.h" #include "webrtc/call.h" +#include "webrtc/common.h" +#include "webrtc/modules/audio_coding/main/interface/audio_coding_module.h" #include "webrtc/modules/remote_bitrate_estimator/include/rtp_to_ntp.h" #include "webrtc/modules/rtp_rtcp/interface/rtp_header_parser.h" #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" @@ -151,14 +153,16 @@ class VideoRtcpAndSyncObserver : public SyncRtcpObserver, public VideoRenderer { VideoRtcpAndSyncObserver(Clock* clock, int voe_channel, VoEVideoSync* voe_sync, - SyncRtcpObserver* audio_observer) + SyncRtcpObserver* audio_observer, + bool using_new_acm) : SyncRtcpObserver(FakeNetworkPipe::Config()), clock_(clock), voe_channel_(voe_channel), voe_sync_(voe_sync), audio_observer_(audio_observer), creation_time_ms_(clock_->TimeInMilliseconds()), - first_time_in_sync_(-1) {} + first_time_in_sync_(-1), + using_new_acm_(using_new_acm) {} virtual void RenderFrame(const I420VideoFrame& video_frame, int time_to_render_ms) OVERRIDE { @@ -177,8 +181,16 @@ class VideoRtcpAndSyncObserver : public SyncRtcpObserver, public VideoRenderer { int64_t stream_offset = latest_audio_ntp - latest_video_ntp; std::stringstream ss; ss << stream_offset; - webrtc::test::PrintResult( - "stream_offset", "", "synchronization", ss.str(), "ms", false); + std::stringstream acm_type; + if (using_new_acm_) { + acm_type << "_acm2"; + } + webrtc::test::PrintResult("stream_offset", + acm_type.str(), + "synchronization", + ss.str(), + "ms", + false); int64_t time_since_creation = now_ms - creation_time_ms_; // During the first couple of seconds audio and video can falsely be // estimated as being synchronized. We don't want to trigger on those. @@ -188,7 +200,7 @@ class VideoRtcpAndSyncObserver : public SyncRtcpObserver, public VideoRenderer { if (first_time_in_sync_ == -1) { first_time_in_sync_ = now_ms; webrtc::test::PrintResult("sync_convergence_time", - "", + acm_type.str(), "synchronization", time_since_creation, "ms", @@ -206,9 +218,19 @@ class VideoRtcpAndSyncObserver : public SyncRtcpObserver, public VideoRenderer { SyncRtcpObserver* audio_observer_; int64_t creation_time_ms_; int64_t first_time_in_sync_; + bool using_new_acm_; }; -TEST_F(CallPerfTest, PlaysOutAudioAndVideoInSync) { +class ParamCallPerfTest : public CallPerfTest, + public ::testing::WithParamInterface<bool> { + public: + ParamCallPerfTest() : CallPerfTest(), use_new_acm_(GetParam()) {} + + protected: + bool use_new_acm_; +}; + +TEST_P(ParamCallPerfTest, PlaysOutAudioAndVideoInSync) { VoiceEngine* voice_engine = VoiceEngine::Create(); VoEBase* voe_base = VoEBase::GetInterface(voice_engine); VoECodec* voe_codec = VoECodec::GetInterface(voice_engine); @@ -220,13 +242,24 @@ TEST_F(CallPerfTest, PlaysOutAudioAndVideoInSync) { test::FakeAudioDevice fake_audio_device(Clock::GetRealTimeClock(), audio_filename); EXPECT_EQ(0, voe_base->Init(&fake_audio_device, NULL)); - int channel = voe_base->CreateChannel(); + Config config; + if (use_new_acm_) { + config.Set<webrtc::AudioCodingModuleFactory>( + new webrtc::NewAudioCodingModuleFactory()); + } else { + config.Set<webrtc::AudioCodingModuleFactory>( + new webrtc::AudioCodingModuleFactory()); + } + int channel = voe_base->CreateChannel(config); FakeNetworkPipe::Config net_config; net_config.queue_delay_ms = 500; SyncRtcpObserver audio_observer(net_config); - VideoRtcpAndSyncObserver observer( - Clock::GetRealTimeClock(), channel, voe_sync, &audio_observer); + VideoRtcpAndSyncObserver observer(Clock::GetRealTimeClock(), + channel, + voe_sync, + &audio_observer, + use_new_acm_); Call::Config receiver_config(observer.ReceiveTransport()); receiver_config.voice_engine = voice_engine; @@ -329,6 +362,9 @@ TEST_F(CallPerfTest, PlaysOutAudioAndVideoInSync) { VoiceEngine::Delete(voice_engine); } +// Test with both ACM1 and ACM2. +INSTANTIATE_TEST_CASE_P(SwitchAcm, ParamCallPerfTest, ::testing::Bool()); + TEST_F(CallPerfTest, RegisterCpuOveruseObserver) { // Verifies that either a normal or overuse callback is triggered. class OveruseCallbackObserver : public test::RtpRtcpObserver,