OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
47 // This function is called when inserting a packet list into the mock packet | 47 // This function is called when inserting a packet list into the mock packet |
48 // buffer. The purpose is to delete all inserted packets properly, to avoid | 48 // buffer. The purpose is to delete all inserted packets properly, to avoid |
49 // memory leaks in the test. | 49 // memory leaks in the test. |
50 int DeletePacketsAndReturnOk(PacketList* packet_list) { | 50 int DeletePacketsAndReturnOk(PacketList* packet_list) { |
51 PacketBuffer::DeleteAllPackets(packet_list); | 51 PacketBuffer::DeleteAllPackets(packet_list); |
52 return PacketBuffer::kOK; | 52 return PacketBuffer::kOK; |
53 } | 53 } |
54 | 54 |
55 class NetEqImplTest : public ::testing::Test { | 55 class NetEqImplTest : public ::testing::Test { |
56 protected: | 56 protected: |
57 NetEqImplTest() | 57 NetEqImplTest() : config_() { config_.sample_rate_hz = 8000; } |
kwiberg-webrtc
2016/04/26 13:00:04
"config_()" is unnecessary; a call to the default
hlundin-webrtc
2016/04/26 13:20:38
Done.
| |
58 : neteq_(NULL), | |
59 config_(), | |
60 tick_timer_(new TickTimer), | |
61 mock_buffer_level_filter_(NULL), | |
62 buffer_level_filter_(NULL), | |
63 use_mock_buffer_level_filter_(true), | |
64 mock_decoder_database_(NULL), | |
65 decoder_database_(NULL), | |
66 use_mock_decoder_database_(true), | |
67 mock_delay_peak_detector_(NULL), | |
68 delay_peak_detector_(NULL), | |
69 use_mock_delay_peak_detector_(true), | |
70 mock_delay_manager_(NULL), | |
71 delay_manager_(NULL), | |
72 use_mock_delay_manager_(true), | |
73 mock_dtmf_buffer_(NULL), | |
74 dtmf_buffer_(NULL), | |
75 use_mock_dtmf_buffer_(true), | |
76 mock_dtmf_tone_generator_(NULL), | |
77 dtmf_tone_generator_(NULL), | |
78 use_mock_dtmf_tone_generator_(true), | |
79 mock_packet_buffer_(NULL), | |
80 packet_buffer_(NULL), | |
81 use_mock_packet_buffer_(true), | |
82 mock_payload_splitter_(NULL), | |
83 payload_splitter_(NULL), | |
84 use_mock_payload_splitter_(true), | |
85 timestamp_scaler_(NULL) { | |
86 config_.sample_rate_hz = 8000; | |
87 } | |
88 | 58 |
89 void CreateInstance() { | 59 void CreateInstance() { |
60 NetEqImpl::Dependencies deps(config_); | |
61 | |
62 // Get a local pointer to NetEq's TickTimer object. | |
63 tick_timer_ = deps.tick_timer.get(); | |
64 | |
90 if (use_mock_buffer_level_filter_) { | 65 if (use_mock_buffer_level_filter_) { |
91 mock_buffer_level_filter_ = new MockBufferLevelFilter; | 66 std::unique_ptr<MockBufferLevelFilter> mock(new MockBufferLevelFilter); |
92 buffer_level_filter_ = mock_buffer_level_filter_; | 67 mock_buffer_level_filter_ = mock.get(); |
93 } else { | 68 deps.buffer_level_filter = std::move(mock); |
94 buffer_level_filter_ = new BufferLevelFilter; | |
95 } | 69 } |
70 buffer_level_filter_ = deps.buffer_level_filter.get(); | |
71 | |
96 if (use_mock_decoder_database_) { | 72 if (use_mock_decoder_database_) { |
97 mock_decoder_database_ = new MockDecoderDatabase; | 73 std::unique_ptr<MockDecoderDatabase> mock(new MockDecoderDatabase); |
74 mock_decoder_database_ = mock.get(); | |
98 EXPECT_CALL(*mock_decoder_database_, GetActiveCngDecoder()) | 75 EXPECT_CALL(*mock_decoder_database_, GetActiveCngDecoder()) |
99 .WillOnce(ReturnNull()); | 76 .WillOnce(ReturnNull()); |
100 decoder_database_ = mock_decoder_database_; | 77 deps.decoder_database = std::move(mock); |
101 } else { | |
102 decoder_database_ = new DecoderDatabase; | |
103 } | 78 } |
79 decoder_database_ = deps.decoder_database.get(); | |
80 | |
104 if (use_mock_delay_peak_detector_) { | 81 if (use_mock_delay_peak_detector_) { |
105 mock_delay_peak_detector_ = new MockDelayPeakDetector; | 82 std::unique_ptr<MockDelayPeakDetector> mock(new MockDelayPeakDetector); |
83 mock_delay_peak_detector_ = mock.get(); | |
106 EXPECT_CALL(*mock_delay_peak_detector_, Reset()).Times(1); | 84 EXPECT_CALL(*mock_delay_peak_detector_, Reset()).Times(1); |
107 delay_peak_detector_ = mock_delay_peak_detector_; | 85 deps.delay_peak_detector = std::move(mock); |
108 } else { | |
109 delay_peak_detector_ = new DelayPeakDetector; | |
110 } | 86 } |
87 delay_peak_detector_ = deps.delay_peak_detector.get(); | |
88 | |
111 if (use_mock_delay_manager_) { | 89 if (use_mock_delay_manager_) { |
112 mock_delay_manager_ = new MockDelayManager(config_.max_packets_in_buffer, | 90 std::unique_ptr<MockDelayManager> mock(new MockDelayManager( |
113 delay_peak_detector_); | 91 config_.max_packets_in_buffer, delay_peak_detector_)); |
92 mock_delay_manager_ = mock.get(); | |
114 EXPECT_CALL(*mock_delay_manager_, set_streaming_mode(false)).Times(1); | 93 EXPECT_CALL(*mock_delay_manager_, set_streaming_mode(false)).Times(1); |
115 delay_manager_ = mock_delay_manager_; | 94 deps.delay_manager = std::move(mock); |
116 } else { | |
117 delay_manager_ = | |
118 new DelayManager(config_.max_packets_in_buffer, delay_peak_detector_); | |
119 } | 95 } |
96 delay_manager_ = deps.delay_manager.get(); | |
97 | |
120 if (use_mock_dtmf_buffer_) { | 98 if (use_mock_dtmf_buffer_) { |
121 mock_dtmf_buffer_ = new MockDtmfBuffer(config_.sample_rate_hz); | 99 std::unique_ptr<MockDtmfBuffer> mock( |
122 dtmf_buffer_ = mock_dtmf_buffer_; | 100 new MockDtmfBuffer(config_.sample_rate_hz)); |
123 } else { | 101 mock_dtmf_buffer_ = mock.get(); |
124 dtmf_buffer_ = new DtmfBuffer(config_.sample_rate_hz); | 102 deps.dtmf_buffer = std::move(mock); |
125 } | 103 } |
104 dtmf_buffer_ = deps.dtmf_buffer.get(); | |
105 | |
126 if (use_mock_dtmf_tone_generator_) { | 106 if (use_mock_dtmf_tone_generator_) { |
127 mock_dtmf_tone_generator_ = new MockDtmfToneGenerator; | 107 std::unique_ptr<MockDtmfToneGenerator> mock(new MockDtmfToneGenerator); |
128 dtmf_tone_generator_ = mock_dtmf_tone_generator_; | 108 mock_dtmf_tone_generator_ = mock.get(); |
129 } else { | 109 deps.dtmf_tone_generator = std::move(mock); |
130 dtmf_tone_generator_ = new DtmfToneGenerator; | |
131 } | 110 } |
111 dtmf_tone_generator_ = deps.dtmf_tone_generator.get(); | |
112 | |
132 if (use_mock_packet_buffer_) { | 113 if (use_mock_packet_buffer_) { |
133 mock_packet_buffer_ = new MockPacketBuffer(config_.max_packets_in_buffer); | 114 std::unique_ptr<MockPacketBuffer> mock( |
134 packet_buffer_ = mock_packet_buffer_; | 115 new MockPacketBuffer(config_.max_packets_in_buffer)); |
135 } else { | 116 mock_packet_buffer_ = mock.get(); |
136 packet_buffer_ = new PacketBuffer(config_.max_packets_in_buffer); | 117 deps.packet_buffer = std::move(mock); |
137 } | 118 } |
119 packet_buffer_ = deps.packet_buffer.get(); | |
120 | |
138 if (use_mock_payload_splitter_) { | 121 if (use_mock_payload_splitter_) { |
139 mock_payload_splitter_ = new MockPayloadSplitter; | 122 std::unique_ptr<MockPayloadSplitter> mock(new MockPayloadSplitter); |
140 payload_splitter_ = mock_payload_splitter_; | 123 mock_payload_splitter_ = mock.get(); |
141 } else { | 124 deps.payload_splitter = std::move(mock); |
142 payload_splitter_ = new PayloadSplitter; | |
143 } | 125 } |
144 timestamp_scaler_ = new TimestampScaler(*decoder_database_); | 126 payload_splitter_ = deps.payload_splitter.get(); |
145 AccelerateFactory* accelerate_factory = new AccelerateFactory; | |
146 ExpandFactory* expand_factory = new ExpandFactory; | |
147 PreemptiveExpandFactory* preemptive_expand_factory = | |
148 new PreemptiveExpandFactory; | |
149 | 127 |
150 neteq_ = new NetEqImpl( | 128 deps.timestamp_scaler = std::unique_ptr<TimestampScaler>( |
151 config_, std::unique_ptr<TickTimer>(tick_timer_), buffer_level_filter_, | 129 new TimestampScaler(*deps.decoder_database.get())); |
152 decoder_database_, delay_manager_, delay_peak_detector_, dtmf_buffer_, | 130 |
153 dtmf_tone_generator_, packet_buffer_, payload_splitter_, | 131 neteq_.reset(new NetEqImpl(config_, std::move(deps))); |
154 timestamp_scaler_, accelerate_factory, expand_factory, | |
155 preemptive_expand_factory); | |
156 ASSERT_TRUE(neteq_ != NULL); | 132 ASSERT_TRUE(neteq_ != NULL); |
157 } | 133 } |
158 | 134 |
159 void UseNoMocks() { | 135 void UseNoMocks() { |
160 ASSERT_TRUE(neteq_ == NULL) << "Must call UseNoMocks before CreateInstance"; | 136 ASSERT_TRUE(neteq_ == NULL) << "Must call UseNoMocks before CreateInstance"; |
161 use_mock_buffer_level_filter_ = false; | 137 use_mock_buffer_level_filter_ = false; |
162 use_mock_decoder_database_ = false; | 138 use_mock_decoder_database_ = false; |
163 use_mock_delay_peak_detector_ = false; | 139 use_mock_delay_peak_detector_ = false; |
164 use_mock_delay_manager_ = false; | 140 use_mock_delay_manager_ = false; |
165 use_mock_dtmf_buffer_ = false; | 141 use_mock_dtmf_buffer_ = false; |
(...skipping 17 matching lines...) Expand all Loading... | |
183 } | 159 } |
184 if (use_mock_dtmf_buffer_) { | 160 if (use_mock_dtmf_buffer_) { |
185 EXPECT_CALL(*mock_dtmf_buffer_, Die()).Times(1); | 161 EXPECT_CALL(*mock_dtmf_buffer_, Die()).Times(1); |
186 } | 162 } |
187 if (use_mock_dtmf_tone_generator_) { | 163 if (use_mock_dtmf_tone_generator_) { |
188 EXPECT_CALL(*mock_dtmf_tone_generator_, Die()).Times(1); | 164 EXPECT_CALL(*mock_dtmf_tone_generator_, Die()).Times(1); |
189 } | 165 } |
190 if (use_mock_packet_buffer_) { | 166 if (use_mock_packet_buffer_) { |
191 EXPECT_CALL(*mock_packet_buffer_, Die()).Times(1); | 167 EXPECT_CALL(*mock_packet_buffer_, Die()).Times(1); |
192 } | 168 } |
193 delete neteq_; | |
194 } | 169 } |
195 | 170 |
196 NetEqImpl* neteq_; | 171 std::unique_ptr<NetEqImpl> neteq_; |
197 NetEq::Config config_; | 172 NetEq::Config config_; |
198 TickTimer* tick_timer_; | 173 TickTimer* tick_timer_ = nullptr; |
199 MockBufferLevelFilter* mock_buffer_level_filter_; | 174 MockBufferLevelFilter* mock_buffer_level_filter_ = nullptr; |
200 BufferLevelFilter* buffer_level_filter_; | 175 BufferLevelFilter* buffer_level_filter_ = nullptr; |
201 bool use_mock_buffer_level_filter_; | 176 bool use_mock_buffer_level_filter_ = true; |
202 MockDecoderDatabase* mock_decoder_database_; | 177 MockDecoderDatabase* mock_decoder_database_ = nullptr; |
203 DecoderDatabase* decoder_database_; | 178 DecoderDatabase* decoder_database_ = nullptr; |
204 bool use_mock_decoder_database_; | 179 bool use_mock_decoder_database_ = true; |
205 MockDelayPeakDetector* mock_delay_peak_detector_; | 180 MockDelayPeakDetector* mock_delay_peak_detector_ = nullptr; |
206 DelayPeakDetector* delay_peak_detector_; | 181 DelayPeakDetector* delay_peak_detector_ = nullptr; |
207 bool use_mock_delay_peak_detector_; | 182 bool use_mock_delay_peak_detector_ = true; |
208 MockDelayManager* mock_delay_manager_; | 183 MockDelayManager* mock_delay_manager_ = nullptr; |
209 DelayManager* delay_manager_; | 184 DelayManager* delay_manager_ = nullptr; |
210 bool use_mock_delay_manager_; | 185 bool use_mock_delay_manager_ = true; |
211 MockDtmfBuffer* mock_dtmf_buffer_; | 186 MockDtmfBuffer* mock_dtmf_buffer_ = nullptr; |
212 DtmfBuffer* dtmf_buffer_; | 187 DtmfBuffer* dtmf_buffer_ = nullptr; |
213 bool use_mock_dtmf_buffer_; | 188 bool use_mock_dtmf_buffer_ = true; |
214 MockDtmfToneGenerator* mock_dtmf_tone_generator_; | 189 MockDtmfToneGenerator* mock_dtmf_tone_generator_ = nullptr; |
215 DtmfToneGenerator* dtmf_tone_generator_; | 190 DtmfToneGenerator* dtmf_tone_generator_ = nullptr; |
216 bool use_mock_dtmf_tone_generator_; | 191 bool use_mock_dtmf_tone_generator_ = true; |
217 MockPacketBuffer* mock_packet_buffer_; | 192 MockPacketBuffer* mock_packet_buffer_ = nullptr; |
218 PacketBuffer* packet_buffer_; | 193 PacketBuffer* packet_buffer_ = nullptr; |
219 bool use_mock_packet_buffer_; | 194 bool use_mock_packet_buffer_ = true; |
220 MockPayloadSplitter* mock_payload_splitter_; | 195 MockPayloadSplitter* mock_payload_splitter_ = nullptr; |
221 PayloadSplitter* payload_splitter_; | 196 PayloadSplitter* payload_splitter_ = nullptr; |
222 bool use_mock_payload_splitter_; | 197 bool use_mock_payload_splitter_ = true; |
223 TimestampScaler* timestamp_scaler_; | |
224 }; | 198 }; |
225 | 199 |
226 | 200 |
227 // This tests the interface class NetEq. | 201 // This tests the interface class NetEq. |
228 // TODO(hlundin): Move to separate file? | 202 // TODO(hlundin): Move to separate file? |
229 TEST(NetEq, CreateAndDestroy) { | 203 TEST(NetEq, CreateAndDestroy) { |
230 NetEq::Config config; | 204 NetEq::Config config; |
231 NetEq* neteq = NetEq::Create(config); | 205 NetEq* neteq = NetEq::Create(config); |
232 delete neteq; | 206 delete neteq; |
233 } | 207 } |
(...skipping 963 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1197 UseNoMocks(); | 1171 UseNoMocks(); |
1198 CreateInstance(); | 1172 CreateInstance(); |
1199 ASSERT_TRUE(tick_timer_); | 1173 ASSERT_TRUE(tick_timer_); |
1200 EXPECT_EQ(0u, tick_timer_->ticks()); | 1174 EXPECT_EQ(0u, tick_timer_->ticks()); |
1201 AudioFrame output; | 1175 AudioFrame output; |
1202 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); | 1176 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); |
1203 EXPECT_EQ(1u, tick_timer_->ticks()); | 1177 EXPECT_EQ(1u, tick_timer_->ticks()); |
1204 } | 1178 } |
1205 | 1179 |
1206 }// namespace webrtc | 1180 }// namespace webrtc |
OLD | NEW |