Chromium Code Reviews| Index: webrtc/modules/audio_coding/neteq/tools/neteq_test.h |
| diff --git a/webrtc/modules/audio_coding/neteq/tools/neteq_test.h b/webrtc/modules/audio_coding/neteq/tools/neteq_test.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..ca19f78dc25126081a58ec1daa03b50824ed8801 |
| --- /dev/null |
| +++ b/webrtc/modules/audio_coding/neteq/tools/neteq_test.h |
| @@ -0,0 +1,86 @@ |
| +/* |
| + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. |
| + * |
| + * Use of this source code is governed by a BSD-style license |
| + * that can be found in the LICENSE file in the root of the source |
| + * tree. An additional intellectual property rights grant can be found |
| + * in the file PATENTS. All contributing project authors may |
| + * be found in the AUTHORS file in the root of the source tree. |
| + */ |
| + |
| +#ifndef WEBRTC_MODULES_AUDIO_CODING_NETEQ_TOOLS_NETEQ_TEST_H_ |
| +#define WEBRTC_MODULES_AUDIO_CODING_NETEQ_TOOLS_NETEQ_TEST_H_ |
| + |
| +#include <memory> |
| +#include <map> |
|
ivoc
2016/06/14 16:39:57
Wrong order.
hlundin-webrtc
2016/06/17 10:30:09
Done.
|
| +#include <string> |
| +#include <utility> |
| + |
| +#include "webrtc/modules/audio_coding/neteq/include/neteq.h" |
| +#include "webrtc/modules/audio_coding/neteq/tools/audio_sink.h" |
| +#include "webrtc/modules/audio_coding/neteq/tools/neteq_input.h" |
| + |
| +namespace webrtc { |
| +namespace test { |
| + |
| +class NetEqTestErrorCallback { |
| + public: |
| + virtual ~NetEqTestErrorCallback() = default; |
|
ivoc
2016/06/14 16:39:57
Is this needed?
hlundin-webrtc
2016/06/17 10:30:09
Compiler says yes. If I omit the explicit dtor, th
|
| + virtual void OnInsertPacketError(int error_code, |
| + const NetEqInput::PacketData& packet) {} |
| + virtual void OnGetAudioError(int error_code) {} |
| +}; |
| + |
| +class DefaultNetEqTestErrorCallback : public NetEqTestErrorCallback { |
| + void OnInsertPacketError(int error_code, |
| + const NetEqInput::PacketData& packet) override; |
| + void OnGetAudioError(int error_code) override; |
| +}; |
| + |
| +// Class that provides an input--output test for NetEq. The input (both packets |
| +// and output events) is provided by a NetEqInput object, while the output is |
| +// directed to an AudioSink object. |
| +class NetEqTest { |
| + public: |
| + using DecoderMap = std::map<int, std::pair<NetEqDecoder, std::string> >; |
| + |
| + struct ExternalDecoderInfo { |
| + AudioDecoder* decoder; |
| + NetEqDecoder codec; |
| + std::string codec_name; |
| + int sample_rate_hz; |
| + }; |
| + |
| + using ExtDecoderMap = std::map<int, ExternalDecoderInfo>; |
| + |
| + // Sets up the test with given configuration, codec mappings, input, ouput, |
| + // and callback objects for error reporting. |
| + NetEqTest(const NetEq::Config& config, |
| + const DecoderMap& codecs, |
| + const ExtDecoderMap& ext_codecs, |
| + std::unique_ptr<NetEqInput> input, |
| + std::unique_ptr<AudioSink> output, |
| + NetEqTestErrorCallback* error_callback); |
| + |
| + ~NetEqTest() = default; |
| + |
| + // Runs the test. Returns the duration of the produced audio in ms. |
| + int64_t Run(); |
| + |
| + // Returns the statistics from NetEq. |
| + NetEqNetworkStatistics SimulationStats(); |
| + |
| + private: |
| + void RegisterDecoders(const DecoderMap& codecs); |
| + void RegisterExternalDecoders(const ExtDecoderMap& codecs); |
| + |
| + std::unique_ptr<NetEq> neteq_; |
| + std::unique_ptr<NetEqInput> input_; |
| + std::unique_ptr<AudioSink> output_; |
| + NetEqTestErrorCallback* error_callback_ = nullptr; |
| + int sample_rate_hz_; |
| +}; |
| + |
| +} // namespace test |
| +} // namespace webrtc |
| +#endif // WEBRTC_MODULES_AUDIO_CODING_NETEQ_TOOLS_NETEQ_TEST_H_ |