1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "build/build_config.h" 6 #include "media/base/audio_hardware_config.h" 7 #include "media/audio/audio_parameters.h" 8 #include "testing/gtest/include/gtest/gtest.h" 9 10 namespace media { 11 12 static const int kOutputBufferSize = 2048; 13 static const int kOutputSampleRate = 48000; 14 static const ChannelLayout kOutputChannelLayout = CHANNEL_LAYOUT_STEREO; 15 static const int kInputSampleRate = 44100; 16 static const ChannelLayout kInputChannelLayout = CHANNEL_LAYOUT_STEREO; 17 18 TEST(AudioHardwareConfig, Getters) { 19 AudioParameters input_params( 20 AudioParameters::AUDIO_PCM_LOW_LATENCY, 21 kInputChannelLayout, 22 kInputSampleRate, 23 16, 24 kOutputBufferSize); 25 26 AudioParameters output_params( 27 AudioParameters::AUDIO_PCM_LOW_LATENCY, 28 kOutputChannelLayout, 29 kOutputSampleRate, 30 16, 31 kOutputBufferSize); 32 33 AudioHardwareConfig fake_config(input_params, output_params); 34 35 EXPECT_EQ(kOutputBufferSize, fake_config.GetOutputBufferSize()); 36 EXPECT_EQ(kOutputSampleRate, fake_config.GetOutputSampleRate()); 37 EXPECT_EQ(kInputSampleRate, fake_config.GetInputSampleRate()); 38 EXPECT_EQ(kInputChannelLayout, fake_config.GetInputChannelLayout()); 39 } 40 41 TEST(AudioHardwareConfig, Setters) { 42 AudioParameters input_params( 43 AudioParameters::AUDIO_PCM_LOW_LATENCY, 44 kInputChannelLayout, 45 kInputSampleRate, 46 16, 47 kOutputBufferSize); 48 49 AudioParameters output_params( 50 AudioParameters::AUDIO_PCM_LOW_LATENCY, 51 kOutputChannelLayout, 52 kOutputSampleRate, 53 16, 54 kOutputBufferSize); 55 56 AudioHardwareConfig fake_config(input_params, output_params); 57 58 // Verify output parameters. 59 const int kNewOutputBufferSize = kOutputBufferSize * 2; 60 const int kNewOutputSampleRate = kOutputSampleRate * 2; 61 EXPECT_NE(kNewOutputBufferSize, fake_config.GetOutputBufferSize()); 62 EXPECT_NE(kNewOutputSampleRate, fake_config.GetOutputSampleRate()); 63 64 AudioParameters new_output_params( 65 AudioParameters::AUDIO_PCM_LOW_LATENCY, 66 kOutputChannelLayout, 67 kNewOutputSampleRate, 68 16, 69 kNewOutputBufferSize); 70 fake_config.UpdateOutputConfig(new_output_params); 71 EXPECT_EQ(kNewOutputBufferSize, fake_config.GetOutputBufferSize()); 72 EXPECT_EQ(kNewOutputSampleRate, fake_config.GetOutputSampleRate()); 73 74 // Verify input parameters. 75 const int kNewInputSampleRate = kInputSampleRate * 2; 76 const ChannelLayout kNewInputChannelLayout = CHANNEL_LAYOUT_MONO; 77 EXPECT_NE(kNewInputSampleRate, fake_config.GetInputSampleRate()); 78 EXPECT_NE(kNewInputChannelLayout, fake_config.GetInputChannelLayout()); 79 80 AudioParameters new_input_params( 81 AudioParameters::AUDIO_PCM_LOW_LATENCY, 82 kNewInputChannelLayout, 83 kNewInputSampleRate, 84 16, 85 kOutputBufferSize); 86 fake_config.UpdateInputConfig(new_input_params); 87 EXPECT_EQ(kNewInputSampleRate, fake_config.GetInputSampleRate()); 88 EXPECT_EQ(kNewInputChannelLayout, fake_config.GetInputChannelLayout()); 89 } 90 91 TEST(AudioHardwareConfig, HighLatencyBufferSizes) { 92 AudioParameters input_params(AudioParameters::AUDIO_PCM_LOW_LATENCY, 93 kInputChannelLayout, 94 kInputSampleRate, 95 16, 96 kOutputBufferSize); 97 AudioParameters output_params(AudioParameters::AUDIO_PCM_LOW_LATENCY, 98 kOutputChannelLayout, 99 3200, 100 16, 101 32); 102 AudioHardwareConfig fake_config(input_params, output_params); 103 104 #if defined(OS_WIN) 105 for (int i = 6400; i <= 204800; i *= 2) { 106 fake_config.UpdateOutputConfig( 107 AudioParameters(AudioParameters::AUDIO_PCM_LOW_LATENCY, 108 kOutputChannelLayout, 109 i, 110 16, 111 i / 100)); 112 EXPECT_EQ(2 * (i / 100), fake_config.GetHighLatencyBufferSize()); 113 } 114 #else 115 EXPECT_EQ(64, fake_config.GetHighLatencyBufferSize()); 116 117 for (int i = 6400; i <= 204800; i *= 2) { 118 fake_config.UpdateOutputConfig( 119 AudioParameters(AudioParameters::AUDIO_PCM_LOW_LATENCY, 120 kOutputChannelLayout, 121 i, 122 16, 123 32)); 124 EXPECT_EQ(2 * (i / 100), fake_config.GetHighLatencyBufferSize()); 125 } 126 #endif // defined(OS_WIN) 127 } 128 129 } // namespace content 130