160730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org/* 260730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 360730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org * 460730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org * Use of this source code is governed by a BSD-style license 560730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 660730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 760730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org * in the file PATENTS. All contributing project authors may 860730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 960730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org */ 1060730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org 1160730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org#include "webrtc/modules/audio_processing/audio_processing_impl.h" 1260730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org 1360730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org#include "testing/gmock/include/gmock/gmock.h" 1460730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org#include "testing/gtest/include/gtest/gtest.h" 1512acd6ea8c5dcec953061144b82002d984967807andrew@webrtc.org#include "webrtc/config.h" 1660730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org#include "webrtc/modules/audio_processing/test/test_utils.h" 17ff761fba8274d93bd73e76c8b8a1f2d0776dd840Henrik Kjellander#include "webrtc/modules/include/module_common_types.h" 1860730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org 1960730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.orgusing ::testing::Invoke; 2060730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.orgusing ::testing::Return; 2160730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org 2260730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.orgnamespace webrtc { 2360730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org 2460730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.orgclass MockInitialize : public AudioProcessingImpl { 2560730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org public: 26e84978f3d8612e7e482791552b94e0847967d3baandrew@webrtc.org explicit MockInitialize(const Config& config) : AudioProcessingImpl(config) { 27e84978f3d8612e7e482791552b94e0847967d3baandrew@webrtc.org } 2860730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org 29e84978f3d8612e7e482791552b94e0847967d3baandrew@webrtc.org MOCK_METHOD0(InitializeLocked, int()); 30788acd17adf6b3d605b5ea66cf394eb81fc086a9pbos@webrtc.org int RealInitializeLocked() NO_THREAD_SAFETY_ANALYSIS { 31788acd17adf6b3d605b5ea66cf394eb81fc086a9pbos@webrtc.org return AudioProcessingImpl::InitializeLocked(); 32788acd17adf6b3d605b5ea66cf394eb81fc086a9pbos@webrtc.org } 3360730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org}; 3460730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org 3560730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.orgTEST(AudioProcessingImplTest, AudioParameterChangeTriggersInit) { 36e84978f3d8612e7e482791552b94e0847967d3baandrew@webrtc.org Config config; 37e84978f3d8612e7e482791552b94e0847967d3baandrew@webrtc.org MockInitialize mock(config); 3860730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org ON_CALL(mock, InitializeLocked()) 3960730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org .WillByDefault(Invoke(&mock, &MockInitialize::RealInitializeLocked)); 4060730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org 4160730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org EXPECT_CALL(mock, InitializeLocked()).Times(1); 4260730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org mock.Initialize(); 4360730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org 4460730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org AudioFrame frame; 4560730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org // Call with the default parameters; there should be no init. 4660730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org frame.num_channels_ = 1; 4760730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org SetFrameSampleRate(&frame, 16000); 4860730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org EXPECT_CALL(mock, InitializeLocked()) 4960730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org .Times(0); 50a8b97373d5d3154357cc6589ff949ee9f6f99d8dandrew@webrtc.org EXPECT_NOERR(mock.ProcessStream(&frame)); 51a8b97373d5d3154357cc6589ff949ee9f6f99d8dandrew@webrtc.org EXPECT_NOERR(mock.AnalyzeReverseStream(&frame)); 5260730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org 5360730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org // New sample rate. (Only impacts ProcessStream). 5460730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org SetFrameSampleRate(&frame, 32000); 5560730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org EXPECT_CALL(mock, InitializeLocked()) 5660730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org .Times(1); 57a8b97373d5d3154357cc6589ff949ee9f6f99d8dandrew@webrtc.org EXPECT_NOERR(mock.ProcessStream(&frame)); 5860730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org 5960730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org // New number of channels. 6060730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org frame.num_channels_ = 2; 6160730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org EXPECT_CALL(mock, InitializeLocked()) 6260730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org .Times(2); 63a8b97373d5d3154357cc6589ff949ee9f6f99d8dandrew@webrtc.org EXPECT_NOERR(mock.ProcessStream(&frame)); 6460730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org // ProcessStream sets num_channels_ == num_output_channels. 6560730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org frame.num_channels_ = 2; 66a8b97373d5d3154357cc6589ff949ee9f6f99d8dandrew@webrtc.org EXPECT_NOERR(mock.AnalyzeReverseStream(&frame)); 6760730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org 6860730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org // A new sample rate passed to AnalyzeReverseStream should be an error and 6960730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org // not cause an init. 7060730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org SetFrameSampleRate(&frame, 16000); 7160730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org EXPECT_CALL(mock, InitializeLocked()) 7260730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org .Times(0); 7360730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org EXPECT_EQ(mock.kBadSampleRateError, mock.AnalyzeReverseStream(&frame)); 7460730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org} 7560730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org 7660730cfe3ce80e4023cd678373456cb703f000a4andrew@webrtc.org} // namespace webrtc 77