1 /* 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 3 * 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 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef WEBRTC_MODULES_AUDIO_CODING_NETEQ_TOOLS_NETEQ_EXTERNAL_DECODER_TEST_H_ 12 #define WEBRTC_MODULES_AUDIO_CODING_NETEQ_TOOLS_NETEQ_EXTERNAL_DECODER_TEST_H_ 13 14 #include <string> 15 16 #include "webrtc/base/scoped_ptr.h" 17 #include "webrtc/modules/audio_coding/codecs/audio_decoder.h" 18 #include "webrtc/modules/audio_coding/neteq/include/neteq.h" 19 #include "webrtc/modules/include/module_common_types.h" 20 21 namespace webrtc { 22 namespace test { 23 // This test class provides a way run NetEQ with an external decoder. 24 class NetEqExternalDecoderTest { 25 protected: 26 static const uint8_t kPayloadType = 95; 27 static const int kOutputLengthMs = 10; 28 29 // The external decoder |decoder| is suppose to be of type |codec|. 30 NetEqExternalDecoderTest(NetEqDecoder codec, AudioDecoder* decoder); 31 ~NetEqExternalDecoderTest()32 virtual ~NetEqExternalDecoderTest() { } 33 34 // In Init(), we register the external decoder. 35 void Init(); 36 37 // Inserts a new packet with |rtp_header| and |payload| of 38 // |payload_size_bytes| bytes. The |receive_timestamp| is an indication 39 // of the time when the packet was received, and should be measured with 40 // the same tick rate as the RTP timestamp of the current payload. 41 virtual void InsertPacket(WebRtcRTPHeader rtp_header, 42 rtc::ArrayView<const uint8_t> payload, 43 uint32_t receive_timestamp); 44 45 // Get 10 ms of audio data. The data is written to |output|, which can hold 46 // (at least) |max_length| elements. Returns number of samples. 47 size_t GetOutputAudio(size_t max_length, int16_t* output, 48 NetEqOutputType* output_type); 49 neteq()50 NetEq* neteq() { return neteq_.get(); } 51 52 private: 53 NetEqDecoder codec_; 54 std::string name_ = "dummy name"; 55 AudioDecoder* decoder_; 56 int sample_rate_hz_; 57 size_t channels_; 58 rtc::scoped_ptr<NetEq> neteq_; 59 }; 60 61 } // namespace test 62 } // namespace webrtc 63 64 #endif // WEBRTC_MODULES_AUDIO_CODING_NETEQ_TOOLS_NETEQ_EXTERNAL_DECODER_TEST_H_ 65